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 { } export interface UserOutput extends Required { } export type TUserModel = ReturnType export default function UserModel(sequelize: Sequelize) { interface UserInstance extends Model, UserAttributes { } const User = sequelize.define("user", { 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, }, }, { underscored: true, deletedAt: true, paranoid: true, timestamps: true, }); User.prototype.toJSON = function () { const values = { ...this.get() } as UserAttributes; delete values.password; delete values.deletedAt; return values; }; User.associate = function (models) { // Define associations here }; return User; }