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.
71 lines
1.7 KiB
71 lines
1.7 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>
|
|
|
|
export default function UserModel(sequelize: Sequelize) {
|
|
interface UserInstance
|
|
extends Model<UserAttributes, UserInput>,
|
|
UserAttributes { }
|
|
|
|
const User = sequelize.define<UserInstance>("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;
|
|
}
|
|
|