updates MODELS and SCHEMAS
This commit is contained in:
parent
ce51888070
commit
9c4d3a7197
37
MODELS.md
37
MODELS.md
|
@ -21,6 +21,9 @@ struct Person {
|
||||||
name: String,
|
name: String,
|
||||||
handle: Option<String>,
|
handle: Option<String>,
|
||||||
email: Option<Vec<String>>,
|
email: Option<Vec<String>>,
|
||||||
|
avatar: Option<String>,
|
||||||
|
cover: Option<String>,
|
||||||
|
bio: Option<String>,
|
||||||
is_active: bool,
|
is_active: bool,
|
||||||
is_blocked: bool,
|
is_blocked: bool,
|
||||||
created_at: chrono::DateTime,
|
created_at: chrono::DateTime,
|
||||||
|
@ -240,8 +243,8 @@ struct PlaylistId {
|
||||||
struct Playlist {
|
struct Playlist {
|
||||||
id: PlaylistId,
|
id: PlaylistId,
|
||||||
title: String,
|
title: String,
|
||||||
description: String,
|
description: Option<String>,
|
||||||
created_by: String,
|
created_by: PersonId,
|
||||||
created_at: chrono::DateTime,
|
created_at: chrono::DateTime,
|
||||||
modified_at: chrono::DateTime,
|
modified_at: chrono::DateTime,
|
||||||
deleted_at: Option<chrono::DateTime>
|
deleted_at: Option<chrono::DateTime>
|
||||||
|
@ -313,14 +316,40 @@ struct Comment {
|
||||||
target_id: CommentTargetId,
|
target_id: CommentTargetId,
|
||||||
created_by: PersonId,
|
created_by: PersonId,
|
||||||
created_at: chrono::DateTime,
|
created_at: chrono::DateTime,
|
||||||
modified_at: chrono::DateTime,
|
modified_by: Option<PersonId>,
|
||||||
deleted_at: Option<chrono::DateTime>
|
modified_at: Option<chrono::DateTime>,
|
||||||
|
deleted_by: Option<PersonId>,
|
||||||
|
deleted_at: Option<chrono::DateTime>,
|
||||||
is_public: bool,
|
is_public: bool,
|
||||||
is_approved: bool,
|
is_approved: bool,
|
||||||
in_reply_to: Option<CommentId>,
|
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
|
# 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 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 */
|
remote_id TEXT, /* field to store an arbitrary remote identifier for this Person if they are not local */
|
||||||
name TEXT, /* "real" name */
|
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) */
|
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_active INTEGER DEFAULT (1), /* bool, default true */
|
||||||
is_blocked INTEGER DEFAULT (0), /* bool, default false */
|
is_blocked INTEGER DEFAULT (0), /* bool, default false */
|
||||||
created_at INTEGER, /* timestamp */
|
created_at INTEGER, /* timestamp */
|
||||||
|
@ -330,23 +333,248 @@ CREATE INDEX Albums_deleted_at_IDX ON Albums (deleted_at);
|
||||||
```
|
```
|
||||||
|
|
||||||
# AlbumArtists
|
# 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
|
# 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
|
# 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
|
# 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
|
# 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
|
# 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
|
# 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
|
# 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
|
# 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
|
# 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
|
# 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