Browse Source

improve schema

pull/1619/head
Bernd Storath 3 months ago
parent
commit
48d5f3aa49
  1. 19
      src/services/database/schema/clients.ts
  2. 1
      src/services/database/schema/hooks.ts
  3. 21
      src/services/database/schema/interface.ts
  4. 1
      src/services/database/schema/metrics.ts
  5. 14
      src/services/database/schema/oneTimeLinks.ts
  6. 7
      src/services/database/schema/userConfig.ts

19
src/services/database/schema/clients.ts

@ -1,5 +1,6 @@
import { sql } from 'drizzle-orm';
import { sql, relations } from 'drizzle-orm';
import { int, sqliteTable, text } from 'drizzle-orm/sqlite-core';
import { oneTimeLinks } from './oneTimeLinks';
export const clients = sqliteTable('clients_table', {
@ -11,12 +12,13 @@ export const clients = sqliteTable('clients_table', {
publicKey: text('public_key').notNull(),
preSharedKey: text('pre_shared_key').notNull(),
expiresAt: text('expires_at'),
allowedIps: text('allowed_ips', { mode: 'json' }).notNull(),
serverAllowedIps: text('server_allowed_ips', { mode: 'json' }).notNull(),
oneTimeLink: int('one_time_link').references(() => oneTimeLinks.id),
allowedIps: text('allowed_ips', { mode: 'json' }).$type<string[]>().notNull(),
serverAllowedIps: text('server_allowed_ips', { mode: 'json' })
.$type<string[]>()
.notNull(),
persistentKeepalive: int('persistent_keepalive').notNull(),
mtu: int().notNull(),
dns: text({ mode: 'json' }).notNull(),
dns: text({ mode: 'json' }).$type<string[]>().notNull(),
enabled: int({ mode: 'boolean' }).notNull(),
createdAt: text('created_at')
.notNull()
@ -26,3 +28,10 @@ export const clients = sqliteTable('clients_table', {
.default(sql`(CURRENT_TIMESTAMP)`)
.$onUpdate(() => sql`(CURRENT_TIMESTAMP)`),
});
export const clientsRelations = relations(clients, ({ one }) => ({
oneTimeLink: one(oneTimeLinks, {
fields: [clients.id],
references: [oneTimeLinks.clientId],
}),
}));

1
src/services/database/schema/hooks.ts

@ -1,5 +1,6 @@
import { sql } from 'drizzle-orm';
import { int, sqliteTable, text } from 'drizzle-orm/sqlite-core';
import { wgInterface } from './interface';
export const hooks = sqliteTable('hooks_table', {

21
src/services/database/schema/interface.ts

@ -1,6 +1,10 @@
import { sql } from 'drizzle-orm';
import { sql, relations } from 'drizzle-orm';
import { int, sqliteTable, text } from 'drizzle-orm/sqlite-core';
import { userConfig } from './userConfig';
import { hooks } from './hooks';
import { prometheus } from './metrics';
// maybe support multiple interfaces in the future
export const wgInterface = sqliteTable('interface_table', {
id: int().primaryKey({ autoIncrement: true }),
@ -20,3 +24,18 @@ export const wgInterface = sqliteTable('interface_table', {
.default(sql`(CURRENT_TIMESTAMP)`)
.$onUpdate(() => sql`(CURRENT_TIMESTAMP)`),
});
export const wgInterfaceRelations = relations(wgInterface, ({ one }) => ({
hooks: one(hooks, {
fields: [wgInterface.id],
references: [hooks.id],
}),
prometheus: one(prometheus, {
fields: [wgInterface.id],
references: [prometheus.id],
}),
userConfig: one(userConfig, {
fields: [wgInterface.id],
references: [userConfig.id],
}),
}));

1
src/services/database/schema/metrics.ts

@ -1,5 +1,6 @@
import { sql } from 'drizzle-orm';
import { int, sqliteTable, text } from 'drizzle-orm/sqlite-core';
import { wgInterface } from './interface';
export const prometheus = sqliteTable('prometheus_table', {

14
src/services/database/schema/oneTimeLinks.ts

@ -1,10 +1,15 @@
import { sql } from 'drizzle-orm';
import { sql, relations } from 'drizzle-orm';
import { int, sqliteTable, text } from 'drizzle-orm/sqlite-core';
import { clients } from './clients';
export const oneTimeLinks = sqliteTable('one_time_links_table', {
id: int().primaryKey({ autoIncrement: true }),
oneTimeLink: text('one_time_link').notNull(),
expiresAt: text('expires_at').notNull(),
clientId: int()
.notNull()
.references(() => clients.id),
createdAt: text('created_at')
.notNull()
.default(sql`(CURRENT_TIMESTAMP)`),
@ -13,3 +18,10 @@ export const oneTimeLinks = sqliteTable('one_time_links_table', {
.default(sql`(CURRENT_TIMESTAMP)`)
.$onUpdate(() => sql`(CURRENT_TIMESTAMP)`),
});
export const oneTimeLinksRelations = relations(oneTimeLinks, ({ one }) => ({
client: one(clients, {
fields: [oneTimeLinks.clientId],
references: [clients.id],
}),
}));

7
src/services/database/schema/userConfig.ts

@ -1,5 +1,6 @@
import { sql } from 'drizzle-orm';
import { int, sqliteTable, text } from 'drizzle-orm/sqlite-core';
import { wgInterface } from './interface';
// default* means clients store it themselves
@ -9,8 +10,10 @@ export const userConfig = sqliteTable('user_config_table', {
.references(() => wgInterface.id),
defaultMtu: int('default_mtu').notNull(),
defaultPersistentKeepalive: int('default_persistent_keepalive').notNull(),
defaultDns: text('default_dns', { mode: 'json' }).notNull(),
defaultAllowedIps: text('default_allowed_ips', { mode: 'json' }).notNull(),
defaultDns: text('default_dns', { mode: 'json' }).$type<string[]>().notNull(),
defaultAllowedIps: text('default_allowed_ips', { mode: 'json' })
.$type<string[]>()
.notNull(),
host: text().notNull(),
port: int().notNull(),
createdAt: text('created_at')

Loading…
Cancel
Save