updates MODELS and SCHEMAS
This commit is contained in:
parent
adc8160941
commit
5b5df18f4b
37
MODELS.md
37
MODELS.md
|
@ -21,6 +21,9 @@ struct Person {
|
|||
name: String,
|
||||
handle: Option<String>,
|
||||
email: Option<Vec<String>>,
|
||||
avatar: Option<String>,
|
||||
cover: Option<String>,
|
||||
bio: Option<String>,
|
||||
is_active: bool,
|
||||
is_blocked: bool,
|
||||
created_at: chrono::DateTime,
|
||||
|
@ -240,8 +243,8 @@ struct PlaylistId {
|
|||
struct Playlist {
|
||||
id: PlaylistId,
|
||||
title: String,
|
||||
description: String,
|
||||
created_by: String,
|
||||
description: Option<String>,
|
||||
created_by: PersonId,
|
||||
created_at: chrono::DateTime,
|
||||
modified_at: chrono::DateTime,
|
||||
deleted_at: Option<chrono::DateTime>
|
||||
|
@ -313,14 +316,40 @@ struct Comment {
|
|||
target_id: CommentTargetId,
|
||||
created_by: PersonId,
|
||||
created_at: chrono::DateTime,
|
||||
modified_at: chrono::DateTime,
|
||||
deleted_at: Option<chrono::DateTime>
|
||||
modified_by: Option<PersonId>,
|
||||
modified_at: Option<chrono::DateTime>,
|
||||
deleted_by: Option<PersonId>,
|
||||
deleted_at: Option<chrono::DateTime>,
|
||||
is_public: bool,
|
||||
is_approved: bool,
|
||||
in_reply_to: Option<CommentId>,
|
||||
}
|
||||
```
|
||||
|
||||
# Image
|
||||
|
||||
An Image represents an image file that a Person wants to reference from a Label, an Artist, an Album, a Track, a Playlist, or an Article.
|
||||
|
||||
``` rust
|
||||
struct ImageId {
|
||||
id: String,
|
||||
}
|
||||
struct Image {
|
||||
id: ImageId,
|
||||
path: String,
|
||||
width: usize,
|
||||
height: usize,
|
||||
alt_text: String,
|
||||
is_public: bool,
|
||||
created_by: PersonId,
|
||||
created_at: chrono::DateTime,
|
||||
modified_by: PersonId,
|
||||
modified_at: chrono::DateTime,
|
||||
deleted_by: Option<PersonId>,
|
||||
deleted_at: Option<chrono::DateTime>,
|
||||
}
|
||||
```
|
||||
|
||||
# Collection
|
||||
|
||||
A Collection represents one or more Albums and/or Tracks that are offered together as a package for Purchase
|
||||
|
|
228
SCHEMA.md
228
SCHEMA.md
|
@ -13,6 +13,9 @@ CREATE TABLE Persons (
|
|||
remote_id TEXT, /* field to store an arbitrary remote identifier for this Person if they are not local */
|
||||
name TEXT, /* "real" name */
|
||||
handle TEXT, /* also commonly refered to as 'display_name' or 'screen_name', optional (if missing, name will be used as handle) */
|
||||
avatar TEXT, /* optional URL to Person's avatar image / profile pic */
|
||||
cover TEXT, /* optional URL to Person's cover image / header image */
|
||||
bio TEXT, /* optional biographical text provided by Person */
|
||||
is_active INTEGER DEFAULT (1), /* bool, default true */
|
||||
is_blocked INTEGER DEFAULT (0), /* bool, default false */
|
||||
created_at INTEGER, /* timestamp */
|
||||
|
@ -330,23 +333,248 @@ CREATE INDEX Albums_deleted_at_IDX ON Albums (deleted_at);
|
|||
```
|
||||
|
||||
# AlbumArtists
|
||||
The AlbumArtists table will be a one-to-many lookup table mapping Artists to a particular Album.
|
||||
|
||||
``` sql
|
||||
CREATE TABLE AlbumArtists (
|
||||
album_id TEXT(36),
|
||||
artist_id TEXT(36),
|
||||
is_primary INTEGER DEFAULT (0),
|
||||
CONSTRAINT AlbumArtists_PK PRIMARY KEY (album_id,artist_id),
|
||||
CONSTRAINT AlbumArtists_FK FOREIGN KEY (album_id) REFERENCES Albums(id) ON DELETE CASCADE,
|
||||
CONSTRAINT AlbumArtists_FK_1 FOREIGN KEY (artist_id) REFERENCES Artists(id) ON DELETE CASCADE
|
||||
);
|
||||
CREATE INDEX AlbumArtists_is_primary_IDX ON AlbumArtists (is_primary);
|
||||
CREATE INDEX AlbumArtists_album_id_IDX ON AlbumArtists (album_id);
|
||||
CREATE INDEX AlbumArtists_artist_id_IDX ON AlbumArtists (artist_id);
|
||||
```
|
||||
|
||||
# AlbumTags
|
||||
The AlbumTags table will contain Tags that have been assigned to an Album.
|
||||
|
||||
``` sql
|
||||
CREATE TABLE AlbumTags (
|
||||
album_id TEXT(36),
|
||||
tag_id TEXT(36),
|
||||
is_approved INTEGER DEFAULT (0),
|
||||
CONSTRAINT AlbumTags_PK PRIMARY KEY (album_id,tag_id),
|
||||
CONSTRAINT AlbumTags_FK FOREIGN KEY (album_id) REFERENCES Albums(id) ON DELETE CASCADE,
|
||||
CONSTRAINT AlbumTags_FK_1 FOREIGN KEY (tag_id) REFERENCES Tags(id) ON DELETE CASCADE
|
||||
);
|
||||
CREATE INDEX AlbumTags_is_approved_IDX ON AlbumTags (is_approved);
|
||||
CREATE INDEX AlbumTags_album_id_IDX ON AlbumTags (album_id);
|
||||
CREATE INDEX AlbumTags_tag_id_IDX ON AlbumTags (tag_id);
|
||||
```
|
||||
|
||||
# AlbumTracks
|
||||
The AlbumTracks table will be a many-to-many lookup table mapping Tracks to Albums
|
||||
|
||||
``` sql
|
||||
CREATE TABLE AlbumTracks (
|
||||
album_id TEXT(36),
|
||||
track_id TEXT(36),
|
||||
track_number INTEGER,
|
||||
CONSTRAINT AlbumTracks_PK PRIMARY KEY (album_id,track_id),
|
||||
CONSTRAINT AlbumTracks_FK FOREIGN KEY (album_id) REFERENCES Albums(id) ON DELETE CASCADE,
|
||||
CONSTRAINT AlbumTracks_FK_1 FOREIGN KEY (track_id) REFERENCES Tracks(id) ON DELETE CASCADE
|
||||
);
|
||||
CREATE INDEX AlbumTracks_track_number_IDX ON AlbumTracks (track_number);
|
||||
CREATE INDEX AlbumTracks_album_id_IDX ON AlbumTracks (album_id);
|
||||
CREATE INDEX AlbumTracks_track_id_IDX ON AlbumTracks (track_id);
|
||||
```
|
||||
|
||||
# Playlists
|
||||
The Playlists table will contain Playlists!
|
||||
|
||||
``` sql
|
||||
CREATE TABLE Playlists (
|
||||
id TEXT(36),
|
||||
title TEXT,
|
||||
description TEXT,
|
||||
created_by TEXT(36),
|
||||
created_at INTEGER,
|
||||
modified_at INTEGER,
|
||||
deleted_at INTEGER,
|
||||
is_public INTEGER DEFAULT (1),
|
||||
CONSTRAINT Playlists_PK PRIMARY KEY (id),
|
||||
CONSTRAINT Playlists_FK FOREIGN KEY (created_by) REFERENCES Persons(id)
|
||||
);
|
||||
CREATE INDEX Playlists_title_IDX ON Playlists (title);
|
||||
CREATE INDEX Playlists_description_IDX ON Playlists (description);
|
||||
CREATE INDEX Playlists_created_by_IDX ON Playlists (created_by);
|
||||
CREATE INDEX Playlists_created_at_IDX ON Playlists (created_at);
|
||||
CREATE INDEX Playlists_modified_at_IDX ON Playlists (modified_at);
|
||||
CREATE INDEX Playlists_deleted_at_IDX ON Playlists (deleted_at);
|
||||
CREATE INDEX Playlists_is_public_IDX ON Playlists (is_public);
|
||||
```
|
||||
|
||||
# PlaylistTracks
|
||||
The PlaylistTracks table will be a many-to-many lookup table mapping Tracks to Playlists
|
||||
|
||||
``` sql
|
||||
CREATE TABLE PlaylistTracks (
|
||||
playlist_track_id TEXT(36),
|
||||
playlist_id TEXT(36),
|
||||
track_id TEXT,
|
||||
track_number INTEGER,
|
||||
CONSTRAINT PlaylistTracks_PK PRIMARY KEY (playlist_track_id),
|
||||
CONSTRAINT PlaylistTracks_FK FOREIGN KEY (playlist_id) REFERENCES Playlists(id) ON DELETE CASCADE,
|
||||
CONSTRAINT PlaylistTracks_FK_1 FOREIGN KEY (track_id) REFERENCES Tracks(id) ON DELETE CASCADE
|
||||
);
|
||||
CREATE INDEX PlaylistTracks_track_number_IDX ON PlaylistTracks (track_number);
|
||||
CREATE INDEX PlaylistTracks_playlist_id_IDX ON PlaylistTracks (playlist_id);
|
||||
CREATE INDEX PlaylistTracks_track_id_IDX ON PlaylistTracks (track_id);
|
||||
```
|
||||
|
||||
# PlaylistTags
|
||||
The PlaylistTags table will contain Tags that have been assigned to a Playlist.
|
||||
|
||||
``` sql
|
||||
CREATE TABLE PlaylistTags (
|
||||
playlist_id TEXT(36),
|
||||
tag_id TEXT(36),
|
||||
is_approved INTEGER DEFAULT (0),
|
||||
CONSTRAINT PlaylistTags_PK PRIMARY KEY (playlist_id,tag_id),
|
||||
CONSTRAINT PlaylistTags_FK FOREIGN KEY (playlist_id) REFERENCES Playlists(id) ON DELETE CASCADE,
|
||||
CONSTRAINT PlaylistTags_FK_1 FOREIGN KEY (tag_id) REFERENCES Tags(id) ON DELETE CASCADE
|
||||
);
|
||||
CREATE INDEX PlaylistTags_is_approved_IDX ON PlaylistTags (is_approved);
|
||||
CREATE INDEX PlaylistTags_playlist_id_IDX ON PlaylistTags (playlist_id);
|
||||
CREATE INDEX PlaylistTags_tag_id_IDX ON PlaylistTags (tag_id);
|
||||
```
|
||||
|
||||
# Comments
|
||||
The Comments table will contain Comments!
|
||||
|
||||
``` sql
|
||||
CREATE TABLE Comments (
|
||||
id TEXT(36),
|
||||
body 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 (1),
|
||||
is_approved INTEGER DEFAULT (0),
|
||||
in_reply_to TEXT(36),
|
||||
CONSTRAINT Comments_PK PRIMARY KEY (id),
|
||||
CONSTRAINT Comments_FK FOREIGN KEY (created_by) REFERENCES Persons(id),
|
||||
CONSTRAINT Comments_FK_1 FOREIGN KEY (modified_by) REFERENCES Persons(id),
|
||||
CONSTRAINT Comments_FK_2 FOREIGN KEY (deleted_by) REFERENCES Persons(id)
|
||||
);
|
||||
CREATE INDEX Comments_body_IDX ON Comments (body);
|
||||
CREATE INDEX Comments_created_at_IDX ON Comments (created_at);
|
||||
CREATE INDEX Comments_modified_at_IDX ON Comments (modified_at);
|
||||
CREATE INDEX Comments_deleted_at_IDX ON Comments (deleted_at);
|
||||
CREATE INDEX Comments_is_public_IDX ON Comments (is_public);
|
||||
CREATE INDEX Comments_is_approved_IDX ON Comments (is_approved);
|
||||
CREATE INDEX Comments_in_reply_to_IDX ON Comments (in_reply_to);
|
||||
```
|
||||
|
||||
# LabelComments
|
||||
The LabelComments table will relate Comments to the Label they are about, if pertinent.
|
||||
|
||||
``` sql
|
||||
CREATE TABLE LabelComments (
|
||||
label_id TEXT(36),
|
||||
comment_id TEXT(36),
|
||||
CONSTRAINT LabelComments_PK PRIMARY KEY (label_id,comment_id),
|
||||
CONSTRAINT LabelComments_FK FOREIGN KEY (label_id) REFERENCES Labels(id) ON DELETE CASCADE,
|
||||
CONSTRAINT LabelComments_FK_1 FOREIGN KEY (comment_id) REFERENCES Comments(id) ON DELETE CASCADE
|
||||
);
|
||||
CREATE INDEX LabelComments_label_id_IDX ON LabelComments (label_id);
|
||||
CREATE INDEX LabelComments_comment_id_IDX ON LabelComments (comment_id);
|
||||
```
|
||||
|
||||
# ArtistComments
|
||||
The ArtistComments table will relate Comments to the Artist they are about, if pertinent.
|
||||
|
||||
``` sql
|
||||
CREATE TABLE ArtistComments (
|
||||
artist_id TEXT(36),
|
||||
comment_id TEXT(36),
|
||||
CONSTRAINT ArtistComments_PK PRIMARY KEY (artist_id,comment_id),
|
||||
CONSTRAINT ArtistComments_FK FOREIGN KEY (artist_id) REFERENCES Artists(id) ON DELETE CASCADE,
|
||||
CONSTRAINT ArtistComments_FK_1 FOREIGN KEY (comment_id) REFERENCES Comments(id) ON DELETE CASCADE
|
||||
);
|
||||
CREATE INDEX ArtistComments_artist_id_IDX ON ArtistComments (artist_id);
|
||||
CREATE INDEX ArtistComments_comment_id_IDX ON ArtistComments (comment_id);
|
||||
```
|
||||
|
||||
# TrackComments
|
||||
The TrackComments table will relate Comments to the Track they are about, if pertinent.
|
||||
|
||||
``` sql
|
||||
CREATE TABLE TrackComments (
|
||||
track_id TEXT(36),
|
||||
comment_id TEXT(36),
|
||||
CONSTRAINT TrackComments_PK PRIMARY KEY (track_id,comment_id),
|
||||
CONSTRAINT TrackComments_FK FOREIGN KEY (track_id) REFERENCES Tracks(id) ON DELETE CASCADE,
|
||||
CONSTRAINT TrackComments_FK_1 FOREIGN KEY (comment_id) REFERENCES Comments(id) ON DELETE CASCADE
|
||||
);
|
||||
CREATE INDEX TrackComments_track_id_IDX ON TrackComments (track_id);
|
||||
CREATE INDEX TrackComments_comment_id_IDX ON TrackComments (comment_id);
|
||||
```
|
||||
|
||||
# AlbumComments
|
||||
The AlbumComments table will relate Comments to the Album they are about, if pertinent.
|
||||
|
||||
``` sql
|
||||
CREATE TABLE AlbumComments (
|
||||
album_id TEXT(36),
|
||||
comment_id TEXT(36),
|
||||
CONSTRAINT AlbumComments_PK PRIMARY KEY (album_id,comment_id),
|
||||
CONSTRAINT AlbumComments_FK FOREIGN KEY (album_id) REFERENCES Albums(id) ON DELETE CASCADE,
|
||||
CONSTRAINT AlbumComments_FK_1 FOREIGN KEY (comment_id) REFERENCES Comments(id) ON DELETE CASCADE
|
||||
);
|
||||
CREATE INDEX AlbumComments_album_id_IDX ON AlbumComments (album_id);
|
||||
CREATE INDEX AlbumComments_comment_id_IDX ON AlbumComments (comment_id);
|
||||
```
|
||||
|
||||
# PlaylistComments
|
||||
The PlaylistComments table will relate Comments to the Playlist they are about, if pertinent.
|
||||
|
||||
``` sql
|
||||
CREATE TABLE PlaylistComments (
|
||||
playlist_id TEXT(36),
|
||||
comment_id TEXT(36),
|
||||
CONSTRAINT PlaylistComments_PK PRIMARY KEY (playlist_id,comment_id),
|
||||
CONSTRAINT PlaylistComments_FK FOREIGN KEY (playlist_id) REFERENCES Playlists(id) ON DELETE CASCADE,
|
||||
CONSTRAINT PlaylistComments_FK_1 FOREIGN KEY (comment_id) REFERENCES Comments(id) ON DELETE CASCADE
|
||||
);
|
||||
CREATE INDEX PlaylistComments_playlist_id_IDX ON PlaylistComments (playlist_id);
|
||||
CREATE INDEX PlaylistComments_comment_id_IDX ON PlaylistComments (comment_id);
|
||||
```
|
||||
|
||||
# LabelImages
|
||||
|
||||
# ArtistImages
|
||||
|
||||
# TrackImages
|
||||
|
||||
# AlbumImages
|
||||
|
||||
# PlaylistImages
|
||||
|
||||
# LabelVideos
|
||||
|
||||
# ArtistVideos
|
||||
|
||||
# TrackVideos
|
||||
|
||||
# AlbumVideos
|
||||
|
||||
# ArtistContacts
|
||||
|
||||
# Articles
|
||||
|
||||
# ArticleTags
|
||||
|
||||
# ArticleImages
|
||||
|
||||
# ArticleVideos
|
||||
|
||||
# ArticleComments
|
||||
|
||||
|
|
Loading…
Reference in New Issue