You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

65 lines
1.8 KiB

import { Sequelize, DataTypes, Optional, Model } from "sequelize"
interface UserAttributes {
id: number
username: string
password: string
created_at?: Date
updated_at?: Date
deleted_at?: Date
}
export interface UserInput extends Optional<UserAttributes, "id"> { }
export interface UserOutput extends Required<UserAttributes> { }
export type TUserModel = ReturnType<typeof UserModel>
type DT = typeof DataTypes
export default function UserModel(sequelize: Sequelize, DataTypes: DT) {
class User extends Model<UserAttributes, UserInput> implements UserAttributes {
public id!: number
public username!: string
public password!: string
// timestamps!
public readonly created_at!: Date
public readonly updated_at!: Date
public readonly deleted_at!: Date
}
User.init(
{
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
},
username: {
type: DataTypes.STRING,
allowNull: false,
},
password: {
type: DataTypes.STRING,
allowNull: false,
},
},
{
modelName: "user",
sequelize,
underscored: true,
deletedAt: true,
timestamps: true,
paranoid: true, // 对模型施加了一个软删除
},
)
// 覆盖User的toJSON方法
User.prototype.toJSON = function () {
const values = Object.assign({}, this.get()) as UserAttributes
delete values.password
delete values.deleted_at
return values
}
User.associate = function (models) {
User.hasOne(models["user_info"])
}
return User
}