db/models/userAccess.jsjavascript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.AccessRole = void 0;
const sequelize_1 = require("sequelize");
const db_1 = __importDefault(require("../db"));
var AccessRole;
(function (AccessRole) {
    AccessRole["COACH"] = "coach";
    AccessRole["ASSISTANT"] = "assistant";
    AccessRole["ATHLETE"] = "athlete";
})(AccessRole || (exports.AccessRole = AccessRole = {}));
/**
 * @openapi
 * components:
 *  schemas:
 *    UserAccess:
 *      type: object
 *      required:
 *      - id
 *      - ownerUserId
 *      - childUserId
 *      - role
 *      properties:
 *        id:
 *          type: string
 *          format: uuid
 *        ownerUserId:
 *          type: string
 *          format: uuid
 *        childUserId:
 *          type: string
 *          format: uuid
 *        role:
 *          type: string
 *          enum:
 *          - coach
 *          - assistant
 *          - athlete
 *        accepted:
 *          type: boolean
 *          default: false
 *        enabled:
 *          type: boolean
 *          default: true
 */
/**
 * @typedef UserAccess
 * @property {UUID} id
 * @property {UUID} ownerUserId
 * @property {UUID} childUserId
 * @property {AccessRole} role
 * @property {boolean} enabled
 * @property {Date} createdAt
 * @property {Date} updatedAt
 * @memberof module:Models
 */
class UserAccess extends sequelize_1.Model {
}
UserAccess.init({
    id: {
        type: sequelize_1.DataTypes.UUID,
        defaultValue: sequelize_1.DataTypes.UUIDV4,
        primaryKey: true,
    },
    role: {
        type: sequelize_1.DataTypes.ENUM(...Object.values(AccessRole)),
        allowNull: false,
        defaultValue: AccessRole.ATHLETE,
        validate: {
            isValidAccessRole(value) {
                if (!Object.values(AccessRole).includes(value)) {
                    throw new Error("Invalid access role");
                }
            },
        },
    },
    accepted: {
        type: sequelize_1.DataTypes.BOOLEAN,
        allowNull: false,
        defaultValue: false,
    },
    enabled: {
        type: sequelize_1.DataTypes.BOOLEAN,
        allowNull: false,
        defaultValue: true,
    },
    createdAt: sequelize_1.DataTypes.DATE,
    updatedAt: sequelize_1.DataTypes.DATE,
}, {
    sequelize: db_1.default,
    indexes: [
        {
            unique: true,
            fields: ["ownerUserId", "childUserId"],
        },
    ],
});
exports.default = UserAccess;