aboutsummaryrefslogtreecommitdiff
path: root/src/lib/models/ModLog.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/models/ModLog.ts')
-rw-r--r--src/lib/models/ModLog.ts85
1 files changed, 85 insertions, 0 deletions
diff --git a/src/lib/models/ModLog.ts b/src/lib/models/ModLog.ts
new file mode 100644
index 0000000..94c464d
--- /dev/null
+++ b/src/lib/models/ModLog.ts
@@ -0,0 +1,85 @@
+import { DataTypes, Sequelize } from 'sequelize';
+import { v4 as uuidv4 } from 'uuid';
+import { BaseModel } from './BaseModel';
+
+export enum ModLogType {
+ BAN = 'BAN',
+ TEMP_BAN = 'TEMP_BAN',
+ KICK = 'KICK',
+ MUTE = 'MUTE',
+ TEMP_MUTE = 'TEMP_MUTE',
+ WARN = 'WARN',
+ PUNISHMENT_ROLE = 'PUNISHMENT_ROLE',
+ TEMP_PUNISHMENT_ROLE = 'TEMP_PUNISHMENT_ROLE'
+}
+
+export interface ModLogModel {
+ id: string;
+ type: ModLogType;
+ user: string;
+ moderator: string;
+ reason: string;
+ duration: number;
+ guild: string;
+}
+
+export interface ModLogModelCreationAttributes {
+ id?: string;
+ type: ModLogType;
+ user: string;
+ moderator: string;
+ reason?: string;
+ duration?: number;
+ guild: string;
+}
+
+export class ModLog extends BaseModel<ModLogModel, ModLogModelCreationAttributes> implements ModLogModel {
+ id: string;
+ type: ModLogType;
+ user: string;
+ moderator: string;
+ guild: string;
+ reason: string | null;
+ duration: number | null;
+
+ static initModel(sequelize: Sequelize): void {
+ ModLog.init(
+ {
+ id: {
+ type: DataTypes.STRING,
+ primaryKey: true,
+ allowNull: false,
+ defaultValue: uuidv4
+ },
+ type: {
+ type: DataTypes.STRING, //# This is not an enum because of a sequelize issue: https://github.com/sequelize/sequelize/issues/2554
+ allowNull: false
+ },
+ user: {
+ type: DataTypes.STRING,
+ allowNull: false
+ },
+ moderator: {
+ type: DataTypes.STRING,
+ allowNull: false
+ },
+ duration: {
+ type: DataTypes.STRING,
+ allowNull: true
+ },
+ reason: {
+ type: DataTypes.STRING,
+ allowNull: true
+ },
+ guild: {
+ type: DataTypes.STRING,
+ references: {
+ model: 'Guilds',
+ key: 'id'
+ }
+ }
+ },
+ { sequelize: sequelize }
+ );
+ }
+}