123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225 |
- import { Model, Schema, SchemaTypes, Types } from "mongoose";
- import { BaseSchema } from "@/types/Schemas";
- import config from "./config";
- import { UserRole } from "./UserRole";
- import { UserAvatarType } from "./UserAvatarType";
- import { UserAvatarColor } from "./UserAvatarColor";
- export interface UserSchema extends BaseSchema {
- username: string;
- role: UserRole;
- email: {
- address: string;
- verified: boolean;
- verificationToken?: string;
- };
- avatar: {
- type: UserAvatarType;
- url?: string;
- color?: UserAvatarColor;
- };
- services: {
- password?: {
- password: string;
- reset: {
- code: string;
- expires: number;
- };
- set: {
- code: string;
- expires: number;
- };
- };
- github?: {
- id: number;
- access_token: string;
- };
- };
- statistics: {
- songsRequested: number;
- };
- likedSongsPlaylist: Types.ObjectId;
- dislikedSongsPlaylist: Types.ObjectId;
- favoriteStations: Types.ObjectId[];
- name: string;
- location?: string;
- bio?: string;
- preferences: {
- orderOfPlaylists: Types.ObjectId[];
- nightmode: boolean;
- autoSkipDisliked: boolean;
- activityLogPublic: boolean;
- anonymousSongRequests: boolean;
- activityWatch: boolean;
- };
- }
- export type UserModel = Model<UserSchema>;
- export const schema = new Schema<UserSchema, UserModel>(
- {
- username: {
- type: SchemaTypes.String,
- required: true
- },
- role: {
- type: SchemaTypes.String,
- enum: Object.values(UserRole),
- required: true
- },
- email: {
- address: {
- type: SchemaTypes.String,
- required: true
- },
- verified: {
- type: SchemaTypes.Boolean,
- default: false,
- required: true
- },
- verificationToken: {
- type: SchemaTypes.String,
- required: false,
- select: false
- }
- },
- avatar: {
- type: {
- type: SchemaTypes.String,
- enum: Object.values(UserAvatarType),
- required: true
- },
- url: {
- type: SchemaTypes.String,
- required: false
- },
- color: {
- type: SchemaTypes.String,
- enum: Object.values(UserAvatarColor),
- required: false
- }
- },
- services: {
- type: {
- password: {
- type: {
- password: {
- type: SchemaTypes.String,
- required: true,
- select: false
- },
- reset: {
- code: {
- type: SchemaTypes.String,
- minLength: 8,
- maxLength: 8,
- required: false,
- select: false
- },
- expires: {
- type: SchemaTypes.Date,
- required: false,
- select: false
- }
- },
- set: {
- code: {
- type: SchemaTypes.String,
- minLength: 8,
- maxLength: 8,
- required: false,
- select: false
- },
- expires: {
- type: SchemaTypes.Date,
- required: false,
- select: false
- }
- }
- },
- required: false
- },
- github: {
- type: {
- id: {
- type: SchemaTypes.Number,
- required: true,
- select: false
- },
- access_token: {
- type: SchemaTypes.String,
- required: true,
- select: false
- }
- },
- required: false
- }
- },
- required: true
- },
- statistics: {
- songsRequested: {
- type: SchemaTypes.Number,
- default: 0,
- required: true
- }
- },
- likedSongsPlaylist: {
- type: SchemaTypes.ObjectId,
- required: true
- },
- dislikedSongsPlaylist: {
- type: SchemaTypes.ObjectId,
- required: true
- },
- favoriteStations: [
- {
- type: SchemaTypes.ObjectId,
- ref: "stations"
- }
- ],
- name: {
- type: SchemaTypes.String,
- required: true
- },
- location: {
- type: SchemaTypes.String,
- required: false
- },
- bio: {
- type: SchemaTypes.String,
- required: false
- },
- preferences: {
- orderOfPlaylists: [SchemaTypes.ObjectId],
- nightmode: {
- type: SchemaTypes.Boolean,
- default: false,
- required: true
- },
- autoSkipDisliked: {
- type: SchemaTypes.Boolean,
- default: true,
- required: true
- },
- activityLogPublic: {
- type: SchemaTypes.Boolean,
- default: false,
- required: true
- },
- anonymousSongRequests: {
- type: SchemaTypes.Boolean,
- default: false,
- required: true
- },
- activityWatch: {
- type: SchemaTypes.Boolean,
- default: false,
- required: true
- }
- }
- },
- config
- );
- export type UserSchemaType = typeof schema;
|