import { Schema, model } from 'mongoose'; export type UserIDType = number; export type validOAuthType = 'KAKAO' | 'NONE'; const validOAuthTypeList: validOAuthType[] = ['KAKAO', 'NONE']; interface IUser { _id: UserIDType; oauthID?: bigint; id: string; email: string; oauthType: validOAuthType; oauthInfo?: object; tokenValidUntil?: Date; userSalt: string; hashedPassword: string; allowThirdPartyUse: boolean; userName: string; allowServerAction?: Map; penalty?: Map; picture?: string; useImgSvr?: boolean; regDate: Date; deleteAfter?: Date; } export const User = new Schema({ _id: { type: Number, required: true }, oauthID: { type: BigInt, required: false }, id: { type: String, required: true }, email: { type: String, required: true }, oauthType: { type: String, required: true, enum: validOAuthTypeList }, oauthInfo: { type: Object, required: false }, tokenValidUntil: { type: Date, required: false }, userSalt: { type: String, required: true }, hashedPassword: { type: String, required: true }, allowThirdPartyUse: { type: Boolean, required: true }, userName: { type: String, required: true }, allowServerAction: { type: Map, required: false, of: Number }, penalty: { type: Map, required: false, of: Date }, picture: { type: String, required: false }, useImgSvr: { type: Boolean, required: false }, regDate: { type: Date, required: true }, deleteAfter: { type: Date, required: false }, }) .index({ id: 1 }, { unique: true }) .index({ email: 1 }, { unique: true }) .index({ oauthID: 1 }, { unique: true, sparse: true }) .index({ deleteAfter: 1 }) ; export default model('User', User);