95 lines
3.1 KiB
TypeScript
95 lines
3.1 KiB
TypeScript
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;
|