import { boolean } from 'drizzle-orm/singlestore-core'; import { Status } from '../../index.ts'; import { sqliteTable, integer, text } from 'drizzle-orm/sqlite-core'; export const user = sqliteTable('user', { id: text('id').primaryKey(), username: text('username').notNull().unique(), email: text('email').notNull().unique(), passwordHash: text('password_hash').notNull(), statusOverwrite: integer('status_overwrite').default(Status.ONLINE).notNull(), friends: text('friends', { mode: 'json' }).default([]).notNull(), servers: text('servers', { mode: 'json' }).default([]).notNull(), // string[] of ServerIDs groups: text('groups', { mode: 'json' }).default([]).notNull() // string[] of GroupIDs }); export const session = sqliteTable('session', { id: text('id').primaryKey(), userId: text('user_id') .notNull() .references(() => user.id), expiresAt: integer('expires_at', { mode: 'timestamp' }).notNull() }); export const server = sqliteTable('server', { id: text('id').primaryKey(), name: text('name').notNull(), owner: text('owner') .notNull() .references(() => user.id), members: text('members', { mode: 'json' }).default([]).notNull(), channels: text('channels', { mode: 'json' }).default([]).notNull() // string[] of ChannelIDs }); export const group = sqliteTable('group', { id: text('id').primaryKey(), name: text('name').notNull(), owner: text('owner') .notNull() .references(() => user.id), changeTitle: integer('change_title').default(1).notNull(), addMembers: integer('add_members').default(1).notNull(), removeMembers: integer('remove_members').default(0).notNull(), members: text('members', { mode: 'json' }).default([]).notNull(), messages: text('messages', { mode: 'json' }).default([]).notNull() }); export const channel = sqliteTable('channel', { id: text('id').primaryKey(), name: text('name').notNull(), serverId: text('server_id') .notNull() .references(() => server.id), messages: text('messages', { mode: 'json' }).default([]).notNull() }); export const directMessage = sqliteTable('directMessage', { id: text('id').primaryKey(), firstMember: text('first_member') .notNull() .references(() => user.id), secondMember: text('second_member') .notNull() .references(() => user.id), messages: text('messages', { mode: 'json' }).default([]).notNull() }); export const friendRequest = sqliteTable('friendRequest', { id: text('id').primaryKey(), fromUser: text('from_user') .notNull() .references(() => user.id), fromUsername: text('from_username') .notNull() .references(() => user.id), toUsername: text('to_username') .notNull() .references(() => user.id), toUser: text('to_user') .notNull() .references(() => user.id) }); export const invite = sqliteTable('invite', { id: text('id').primaryKey(), serverId: text('server_id') .notNull() .references(() => server.id), code: text('code').notNull() }); export type Session = typeof session.$inferSelect; export type User = typeof user.$inferSelect; export type Group = typeof group.$inferSelect; export type Server = typeof server.$inferSelect;