adds OtherProducts and Collections data structures
This commit is contained in:
parent
abe545397b
commit
4bba521103
16
MODELS.md
16
MODELS.md
|
@ -372,9 +372,14 @@ struct Video {
|
||||||
|
|
||||||
# Collection
|
# Collection
|
||||||
|
|
||||||
A Collection represents one or more Albums and/or Tracks that are offered together as a package for Purchase
|
A Collection represents one or more Albums, Tracks, and/or OtherProducts that are offered together as a package for Purchase
|
||||||
|
|
||||||
``` rust
|
``` rust
|
||||||
|
enum CollectionItem {
|
||||||
|
Album(AlbumId),
|
||||||
|
Track(TrackId),
|
||||||
|
OtherProduct(OtherProductId),
|
||||||
|
}
|
||||||
struct CollectionId {
|
struct CollectionId {
|
||||||
id: String,
|
id: String,
|
||||||
}
|
}
|
||||||
|
@ -390,9 +395,7 @@ struct Collection {
|
||||||
is_available: bool,
|
is_available: bool,
|
||||||
deleted_by: Option<PersonId>,
|
deleted_by: Option<PersonId>,
|
||||||
deleted_at: Option<chrono::DateTime>,
|
deleted_at: Option<chrono::DateTime>,
|
||||||
albums: Option<Vec<Album>>,
|
collection_items: Option<Vec<CollectionMember>>,
|
||||||
tracks: Option<Vec<Track>>,
|
|
||||||
other_products: Option<Vec<OtherProduct>>,
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -422,7 +425,7 @@ struct OtherProduct {
|
||||||
|
|
||||||
# Purchase
|
# Purchase
|
||||||
|
|
||||||
A Purchase represents one or more Tracks or Albums that a Person purchases from an Artist or Label through the server.
|
A Purchase represents one or more Tracks, Albums, Collections, and/or OtherProducts that a Person purchases from an Artist or Label through the server.
|
||||||
|
|
||||||
``` rust
|
``` rust
|
||||||
enum PurchaseItemType {
|
enum PurchaseItemType {
|
||||||
|
@ -444,6 +447,7 @@ struct Sku {
|
||||||
description: Option<String>,
|
description: Option<String>,
|
||||||
price: Option<rusty_money::Money>,
|
price: Option<rusty_money::Money>,
|
||||||
requires_shipping: bool,
|
requires_shipping: bool,
|
||||||
|
shipping_charge: Option<rusty_money::Money>,
|
||||||
}
|
}
|
||||||
struct PurchaseItem {
|
struct PurchaseItem {
|
||||||
id: PurchaseItemId,
|
id: PurchaseItemId,
|
||||||
|
@ -467,6 +471,8 @@ struct Purchase {
|
||||||
purchased_at: Option<chrono::DateTime>,
|
purchased_at: Option<chrono::DateTime>,
|
||||||
fulfilled_by: Option<Person>,
|
fulfilled_by: Option<Person>,
|
||||||
fulfilled_at: Option<chrono::DateTime>,
|
fulfilled_at: Option<chrono::DateTime>,
|
||||||
|
coupons_applied: Option<Vec<CouponCodeId>>,
|
||||||
|
total_charge: rusty_money::Money,
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
117
SCHEMA.md
117
SCHEMA.md
|
@ -705,26 +705,115 @@ CREATE INDEX ArticleComments_article_id_IDX ON ArticleComments (article_id);
|
||||||
CREATE INDEX ArticleComments_comment_id_IDX ON ArticleComments (comment_id);
|
CREATE INDEX ArticleComments_comment_id_IDX ON ArticleComments (comment_id);
|
||||||
```
|
```
|
||||||
|
|
||||||
# LabelImages
|
# OtherProducts
|
||||||
|
The OtherProducts table will contain products for sale that are not Albums nor Tracks nor Collections.
|
||||||
|
|
||||||
# LabelVideos
|
``` sql
|
||||||
|
CREATE TABLE OtherProducts (
|
||||||
|
id TEXT(36),
|
||||||
|
name TEXT,
|
||||||
|
description TEXT,
|
||||||
|
created_by TEXT(36),
|
||||||
|
created_at INTEGER,
|
||||||
|
modified_by TEXT(36),
|
||||||
|
modified_at INTEGER,
|
||||||
|
deleted_by TEXT(36),
|
||||||
|
deleted_at INTEGER,
|
||||||
|
is_public INTEGER DEFAULT (0),
|
||||||
|
is_available INTEGER DEFAULT (0),
|
||||||
|
requires_shipping INTEGER DEFAULT (0),
|
||||||
|
CONSTRAINT OtherProducts_PK PRIMARY KEY (id),
|
||||||
|
CONSTRAINT OtherProducts_FK FOREIGN KEY (created_by) REFERENCES Persons(id),
|
||||||
|
CONSTRAINT OtherProducts_FK_1 FOREIGN KEY (modified_by) REFERENCES Persons(id),
|
||||||
|
CONSTRAINT OtherProducts_FK_2 FOREIGN KEY (deleted_by) REFERENCES Persons(id)
|
||||||
|
);
|
||||||
|
CREATE INDEX OtherProducts_name_IDX ON OtherProducts (name);
|
||||||
|
CREATE INDEX OtherProducts_description_IDX ON OtherProducts (description);
|
||||||
|
CREATE INDEX OtherProducts_created_by_IDX ON OtherProducts (created_by);
|
||||||
|
CREATE INDEX OtherProducts_created_at_IDX ON OtherProducts (created_at);
|
||||||
|
CREATE INDEX OtherProducts_modified_by_IDX ON OtherProducts (modified_by);
|
||||||
|
CREATE INDEX OtherProducts_modified_at_IDX ON OtherProducts (modified_at);
|
||||||
|
CREATE INDEX OtherProducts_deleted_by_IDX ON OtherProducts (deleted_by);
|
||||||
|
CREATE INDEX OtherProducts_deleted_at_IDX ON OtherProducts (deleted_at);
|
||||||
|
CREATE INDEX OtherProducts_is_public_IDX ON OtherProducts (is_public);
|
||||||
|
CREATE INDEX OtherProducts_is_available_IDX ON OtherProducts (is_available);
|
||||||
|
CREATE INDEX OtherProducts_requires_shipping_IDX ON OtherProducts (requires_shipping);
|
||||||
|
```
|
||||||
|
|
||||||
# ArtistImages
|
# Collections
|
||||||
|
The Collections table will contain Collections where each Collection is comprised of one or more Tracks, Albums, and/or OtherProducts packaged together for sale.
|
||||||
|
|
||||||
# ArtistVideos
|
``` sql
|
||||||
|
CREATE TABLE Collections (
|
||||||
|
id TEXT(36),
|
||||||
|
name TEXT,
|
||||||
|
description TEXT,
|
||||||
|
created_by TEXT(36),
|
||||||
|
created_at INTEGER,
|
||||||
|
modified_by TEXT(36),
|
||||||
|
modified_at INTEGER,
|
||||||
|
deleted_by TEXT(36),
|
||||||
|
deleted_at INTEGER,
|
||||||
|
is_public INTEGER DEFAULT (0),
|
||||||
|
is_available INTEGER DEFAULT (0),
|
||||||
|
CONSTRAINT Collections_PK PRIMARY KEY (id),
|
||||||
|
CONSTRAINT Collections_FK FOREIGN KEY (created_by) REFERENCES Persons(id),
|
||||||
|
CONSTRAINT Collections_FK_1 FOREIGN KEY (modified_by) REFERENCES Persons(id),
|
||||||
|
CONSTRAINT Collections_FK_2 FOREIGN KEY (deleted_by) REFERENCES Persons(id)
|
||||||
|
);
|
||||||
|
CREATE INDEX Collections_name_IDX ON Collections (name);
|
||||||
|
CREATE INDEX Collections_description_IDX ON Collections (description);
|
||||||
|
CREATE INDEX Collections_created_by_IDX ON Collections (created_by);
|
||||||
|
CREATE INDEX Collections_created_at_IDX ON Collections (created_at);
|
||||||
|
CREATE INDEX Collections_modified_by_IDX ON Collections (modified_by);
|
||||||
|
CREATE INDEX Collections_modified_at_IDX ON Collections (modified_at);
|
||||||
|
CREATE INDEX Collections_deleted_by_IDX ON Collections (deleted_by);
|
||||||
|
CREATE INDEX Collections_deleted_at_IDX ON Collections (deleted_at);
|
||||||
|
CREATE INDEX Collections_is_public_IDX ON Collections (is_public);
|
||||||
|
CREATE INDEX Collections_is_available_IDX ON Collections (is_available);
|
||||||
|
```
|
||||||
|
|
||||||
# AlbumImages
|
# CollectionAlbums
|
||||||
|
The CollectionAlbums table will relate a Collection to the Album(s) it contains.
|
||||||
|
|
||||||
# AlbumVideos
|
``` sql
|
||||||
|
CREATE TABLE CollectionAlbums (
|
||||||
|
collection_id TEXT(36),
|
||||||
|
album_id TEXT(36),
|
||||||
|
CONSTRAINT CollectionAlbums_PK PRIMARY KEY (collection_id,album_id),
|
||||||
|
CONSTRAINT CollectionAlbums_FK FOREIGN KEY (collection_id) REFERENCES Collections(id) ON DELETE CASCADE,
|
||||||
|
CONSTRAINT CollectionAlbums_FK_1 FOREIGN KEY (album_id) REFERENCES Albums(id) ON DELETE CASCADE
|
||||||
|
);
|
||||||
|
CREATE INDEX CollectionAlbums_collection_id_IDX ON CollectionAlbums (collection_id);
|
||||||
|
CREATE INDEX CollectionAlbums_album_id_IDX ON CollectionAlbums (album_id);
|
||||||
|
```
|
||||||
|
|
||||||
# TrackImages
|
# CollectionTracks
|
||||||
|
The CollectionTracks table will relate a Collection to the Track(s) it contains.
|
||||||
|
|
||||||
# TrackVideos
|
``` sql
|
||||||
|
CREATE TABLE CollectionTracks (
|
||||||
|
collection_id TEXT(36),
|
||||||
|
track_id TEXT(36),
|
||||||
|
CONSTRAINT CollectionTracks_PK PRIMARY KEY (collection_id,track_id),
|
||||||
|
CONSTRAINT CollectionTracks_FK FOREIGN KEY (collection_id) REFERENCES Collections(id) ON DELETE CASCADE,
|
||||||
|
CONSTRAINT CollectionTracks_FK_1 FOREIGN KEY (track_id) REFERENCES Tracks(id) ON DELETE CASCADE
|
||||||
|
);
|
||||||
|
CREATE INDEX CollectionTracks_collection_id_IDX ON CollectionTracks (collection_id);
|
||||||
|
CREATE INDEX CollectionTracks_track_id_IDX ON CollectionTracks (track_id);
|
||||||
|
```
|
||||||
|
|
||||||
# PlaylistImages
|
# CollectionOtherProducts
|
||||||
|
The CollectionOtherProducts table will relate a Collection to the OtherProduct(s) it contains.
|
||||||
|
|
||||||
# PlaylistVideos
|
``` sql
|
||||||
|
CREATE TABLE CollectionOtherProducts (
|
||||||
# ArticleImages
|
collection_id TEXT(36),
|
||||||
|
other_product_id TEXT(36),
|
||||||
# ArticleVideos
|
CONSTRAINT CollectionOtherProducts_PK PRIMARY KEY (collection_id,other_product_id),
|
||||||
|
CONSTRAINT CollectionOtherProducts_FK FOREIGN KEY (collection_id) REFERENCES Collections(id) ON DELETE CASCADE,
|
||||||
|
CONSTRAINT CollectionOtherProducts_FK_1 FOREIGN KEY (other_product_id) REFERENCES OtherProducts(id) ON DELETE CASCADE
|
||||||
|
);
|
||||||
|
CREATE INDEX CollectionOtherProducts_collection_id_IDX ON CollectionOtherProducts (collection_id);
|
||||||
|
CREATE INDEX CollectionOtherProducts_other_product_id_IDX ON CollectionOtherProducts (other_product_id);
|
||||||
|
```
|
||||||
|
|
Loading…
Reference in New Issue