경로 이동
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
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<string, number>;
|
||||
penalty?: Map<string, Date>;
|
||||
|
||||
picture?: string;
|
||||
useImgSvr?: boolean;
|
||||
|
||||
regDate: Date;
|
||||
deleteAfter?: Date;
|
||||
}
|
||||
|
||||
export const User = new Schema<IUser>({
|
||||
_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<IUser>('User', User);
|
||||
@@ -0,0 +1,30 @@
|
||||
import { Schema, model, } from 'mongoose';
|
||||
import { type UserIDType } from './User.js';
|
||||
|
||||
export type LogType = 'register'
|
||||
| 'login_pw' | 'login_token' | 'login_oauth' | 'logout'
|
||||
| 'change_pw' | 'reset_pw';
|
||||
const LogTypeList: LogType[] = [
|
||||
'register',
|
||||
'login_pw', 'login_token', 'login_oauth', 'logout',
|
||||
'change_pw', 'reset_pw',
|
||||
];
|
||||
|
||||
interface IUserLog {
|
||||
userID: UserIDType;
|
||||
logDate: Date;
|
||||
logType: LogType;
|
||||
action: object;
|
||||
}
|
||||
|
||||
export const UserLog = new Schema<IUserLog>({
|
||||
userID: { type: Number, required: true },
|
||||
logDate: { type: Date, required: true },
|
||||
logType: { type: String, required: true, enum: LogTypeList },
|
||||
action: { type: Object, required: true },
|
||||
})
|
||||
.index({ userID: 1, logDate: 1 })
|
||||
.index({ logDate: 1 })
|
||||
;
|
||||
|
||||
export default model<IUserLog>('UserLog', UserLog);
|
||||
Reference in New Issue
Block a user