import type { InferAttributes, InferCreationAttributes } from "sequelize"; import { BelongsTo, ForeignKey, Column, Table, DataType, Scopes, } from "sequelize-typescript"; import { GroupPermission } from "@shared/types"; import Group from "./Group"; import User from "./User"; import Model from "./base/Model"; import Fix from "./decorators/Fix"; @Scopes(() => ({ withGroup: { include: [ { association: "group", }, ], }, withUser: { include: [ { association: "user", }, ], }, })) @Table({ tableName: "group_users", modelName: "group_user" }) @Fix class GroupUser extends Model< InferAttributes, Partial> > { static eventNamespace = "groups"; @BelongsTo(() => User, "userId") user: User; @ForeignKey(() => User) @Column(DataType.UUID) userId: string; @BelongsTo(() => Group, "groupId") group: Group; @ForeignKey(() => Group) @Column(DataType.UUID) groupId: string; @BelongsTo(() => User, "createdById") createdBy: User; @ForeignKey(() => User) @Column(DataType.UUID) createdById: string; @Column(DataType.ENUM(...Object.values(GroupPermission))) permission: GroupPermission; get modelId() { return this.groupId; } } export default GroupUser;