db/models/admin.jsjavascript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const sequelize_1 = require("sequelize");
const db_1 = __importDefault(require("../db"));
const bcrypt = require("bcrypt");
/**
* @openapi
* components:
* schemas:
* Admin:
* type: object
* required:
* - id
* - username
* - password
* properties:
* id:
* type: string
* format: uuid
* username:
* type: string
* password:
* type: string
* format: password
*/
/**
* @typedef Admin
* @property {UUID} id
* @property {string} username
* @memberof module:Models
*/
class Admin extends sequelize_1.Model {
}
Admin.init({
id: {
type: sequelize_1.DataTypes.UUID,
defaultValue: sequelize_1.DataTypes.UUIDV4,
primaryKey: true,
},
username: {
type: sequelize_1.DataTypes.STRING,
allowNull: false,
unique: true,
validate: {
len: {
args: [6, 999],
msg: "Username has to be at least 6 characters",
},
},
},
password: {
type: sequelize_1.DataTypes.STRING,
allowNull: false,
set(value) {
const salt = bcrypt.genSaltSync(10, "a");
this.setDataValue("password", bcrypt.hashSync(value, salt));
},
},
// technically, `createdAt` & `updatedAt` are added by Sequelize and don't need to be configured in Model.init
// but the typings of Model.init do not know this. Add the following to mute the typing error:
createdAt: sequelize_1.DataTypes.DATE,
updatedAt: sequelize_1.DataTypes.DATE,
deletedAt: sequelize_1.DataTypes.DATE,
}, {
sequelize: db_1.default,
defaultScope: {
attributes: {
exclude: ["password"],
},
},
scopes: {
withPasswordHash: {
attributes: {
exclude: [],
},
},
},
paranoid: true,
});
exports.default = Admin;