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.
 
 
 
 
 

86 lines
2.3 KiB

import { Sequelize, DataTypes, Optional, Model } from "sequelize"
interface UserAttributes {
id: number
username: string
password: string
nickname: string
email: string
avatar: string
tel: string
createdAt?: Date
updatedAt?: Date
deletedAt?: 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
public nickname: string
public email: string
public avatar: string
public tel: string
// timestamps!
public readonly createdAt!: Date
public readonly updatedAt!: Date
public readonly deletedAt!: Date
}
User.init(
{
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
},
username: {
type: DataTypes.STRING,
allowNull: false,
},
password: {
type: DataTypes.STRING,
allowNull: false,
},
nickname: {
type: DataTypes.STRING,
allowNull: false,
},
email: {
type: DataTypes.STRING,
},
avatar: {
type: DataTypes.STRING,
},
tel: {
type: DataTypes.STRING,
},
},
{
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.deletedAt
return values
}
User.associate = function (models) {
}
return User
}