roleping-bot/src/shared/database/schema.ts
devilreef 1eb2200fbe feat: config management
fuck it we're vibecoding now
2025-11-28 13:41:13 +06:00

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()),
})