53 lines
1.8 KiB
TypeScript
53 lines
1.8 KiB
TypeScript
import { bigint, pgEnum, pgTable, timestamp, uuid, varchar } from 'drizzle-orm/pg-core'
|
|
|
|
// Enums for permission levels
|
|
export const roleManagePermissionEnum = pgEnum('role_manage_permission', [
|
|
'everyone',
|
|
'all_admins',
|
|
'admin_can_promote_members',
|
|
'admin_can_change_info',
|
|
'admin_can_manage_chat',
|
|
'only_owner',
|
|
])
|
|
|
|
export const roleMentionPermissionEnum = pgEnum('role_mention_permission', [
|
|
'everyone',
|
|
'all_admins',
|
|
'only_owner',
|
|
])
|
|
|
|
export const roleSchema = pgTable('roles', {
|
|
id: uuid('id').primaryKey().defaultRandom(),
|
|
slug: varchar('slug', { length: 32 }).notNull(),
|
|
aliases: varchar('aliases', { length: 32 }).array().notNull().default([]),
|
|
chatId: bigint('chat_id', { mode: 'number' }).notNull(),
|
|
|
|
createdAt: timestamp('created_at').notNull().defaultNow(),
|
|
updatedAt: timestamp('updated_at').notNull().defaultNow().$onUpdate(() => new Date()),
|
|
})
|
|
|
|
export const roleMembersSchema = pgTable('role_members', {
|
|
id: uuid('id').primaryKey().defaultRandom(),
|
|
roleId: uuid('role_id').references(() => roleSchema.id),
|
|
userId: bigint('user_id', { mode: 'number' }).notNull(),
|
|
|
|
createdAt: timestamp('created_at').notNull().defaultNow(),
|
|
})
|
|
|
|
export const chatConfigSchema = pgTable('chat_configs', {
|
|
id: uuid('id').primaryKey().defaultRandom(),
|
|
chatId: bigint('chat_id', { mode: 'number' }).notNull().unique(),
|
|
|
|
// Who can manage roles (add/delete)
|
|
roleManagePermission: roleManagePermissionEnum('role_manage_permission')
|
|
.notNull()
|
|
.default('all_admins'),
|
|
|
|
// Who can mention roles (@role or /role commands)
|
|
roleMentionPermission: roleMentionPermissionEnum('role_mention_permission')
|
|
.notNull()
|
|
.default('everyone'),
|
|
|
|
createdAt: timestamp('created_at').notNull().defaultNow(),
|
|
updatedAt: timestamp('updated_at').notNull().defaultNow().$onUpdate(() => new Date()),
|
|
})
|