diff --git a/src/schema.ts b/src/schema.ts index b7ea0d6..6b38590 100644 --- a/src/schema.ts +++ b/src/schema.ts @@ -1,39 +1,111 @@ +/* eslint-disable no-unused-vars */ import * as mongoose from 'mongoose'; const Schema = mongoose.Schema; +export enum SMVersion { + OPENITG, + FUCKEXE, + NOTITG_V1, + NOTITG_V2, + NOTITG_V3, + NOTITG_V3_1, + NOTITG_V4, + NOTITG_V4_0_1, + STEPMANIA_3_95, + STEPMANIA_5_0, + STEPMANIA_5_1, + STEPMANIA_5_2, + STEPMANIA_5_3, +} + const Sample = new Schema({ start: {type: Number, default: 0}, length: {type: Number, default: 0} }); +const UserRating = new Schema({ + rating: {type: Number, default: 0}, + createdAt: Date, + user: {type: String, default: '00000000-0000-4000-a000-000000000000'} +}); + const Chart = new Schema({ type: {type: String, default: 'dance-single'}, name: {type: String, default: ''}, difficulty: {type: String, default: 'Challenge'}, + radarvalues: [Number], + rating: {type: Number, default: 0}, - radarvalues: [Number] + ratingsVote: {type: [UserRating], default: []}, + + spoilered: {type: Boolean, default: false}, + hidden: {type: Boolean, default: false} +}); + +const Comment = new Schema({ + author: {type: String, default: '00000000-0000-4000-a000-000000000000'}, + createdAt: Date, + content: {type: String, default: ''} }); const FileSchema = new Schema({ + id: {type: Number, default: 0}, + title: {type: String, default: 'unknown'}, titleTranslit: String, artist: {type: String, default: 'unknown'}, artistTranslit: String, subtitle: String, subtitleTranslit: String, + credit: String, uploader: {type: String, default: '00000000-0000-4000-a000-000000000000'}, + sample: Sample, bpms: {type: Object, default: {'0': 0}}, - charts: [Chart] + + charts: {type: [Chart], default: []}, + + description: {type: String, default: ''}, + createdAt: Date, + smVersion: {type: Number, default: 0}, // see SMVersion enum + ytLink: String, + customLink: String, + hidden: {type: Boolean, default: false}, + + comments: {type: [Comment], default: []}, }); export const File = mongoose.model('File', FileSchema); const UserSchema = new Schema({ // this is pretty much just a discord user lol - id: String, // cus longass number - approved: Boolean + id: String, // discord id, cus longass number + createdAt: Number, + + // caching + username: {type: String, default: 'User'}, + discriminator: {type: String, default: '0000'}, + avatar: String, + + // used internally + uuid: {type: String, default: '00000000-0000-4000-a000-000000000000'}, + + approvedUpload: {type: Boolean, default: false}, + approvedRate: {type: Boolean, default: false}, + approvedComment: {type: Boolean, default: false}, }); -export const User = mongoose.model('User', UserSchema); \ No newline at end of file +export const User = mongoose.model('User', UserSchema); + +const PackSchema = new Schema({ + author: {type: String, default: '00000000-0000-4000-a000-000000000000'}, + files: {type: [Number], default: []}, // ids + name: {type: String, default: 'Pack'}, + description: {type: String, default: ''}, + createdAt: Date, + + hidden: {type: Boolean, default: false}, +}); + +export const Pack = mongoose.model('Pack', PackSchema); \ No newline at end of file