Browse Source

unique index on oauth

Bernd Storath 1 month ago
parent
commit
8daaea9e8c
  1. 3
      src/server/database/migrations/0005_clumsy_korg.sql
  2. 10
      src/server/database/migrations/meta/0005_snapshot.json
  3. 4
      src/server/database/migrations/meta/_journal.json
  4. 53
      src/server/database/repositories/user/schema.ts

3
src/server/database/migrations/0005_lean_the_executioner.sql → src/server/database/migrations/0005_clumsy_korg.sql

@ -19,4 +19,5 @@ INSERT INTO `__new_users_table`("id", "username", "password", "email", "name", "
DROP TABLE `users_table`;--> statement-breakpoint DROP TABLE `users_table`;--> statement-breakpoint
ALTER TABLE `__new_users_table` RENAME TO `users_table`;--> statement-breakpoint ALTER TABLE `__new_users_table` RENAME TO `users_table`;--> statement-breakpoint
PRAGMA foreign_keys=ON;--> statement-breakpoint PRAGMA foreign_keys=ON;--> statement-breakpoint
CREATE UNIQUE INDEX `users_table_username_unique` ON `users_table` (`username`); CREATE UNIQUE INDEX `users_table_username_unique` ON `users_table` (`username`);--> statement-breakpoint
CREATE UNIQUE INDEX `oauth_provider_id_unique` ON `users_table` (`oauth_provider`,`oauth_id`);

10
src/server/database/migrations/meta/0005_snapshot.json

@ -1,7 +1,7 @@
{ {
"version": "6", "version": "6",
"dialect": "sqlite", "dialect": "sqlite",
"id": "8cfd2b7c-5483-4b98-b95e-f9c741f32821", "id": "d41b21e2-3977-4e94-8250-d26a26678703",
"prevId": "0f072f91-cd10-4702-ae7b-245255d69d1e", "prevId": "0f072f91-cd10-4702-ae7b-245255d69d1e",
"tables": { "tables": {
"clients_table": { "clients_table": {
@ -832,6 +832,14 @@
"username" "username"
], ],
"isUnique": true "isUnique": true
},
"oauth_provider_id_unique": {
"name": "oauth_provider_id_unique",
"columns": [
"oauth_provider",
"oauth_id"
],
"isUnique": true
} }
}, },
"foreignKeys": {}, "foreignKeys": {},

4
src/server/database/migrations/meta/_journal.json

@ -40,8 +40,8 @@
{ {
"idx": 5, "idx": 5,
"version": "6", "version": "6",
"when": 1779865249257, "when": 1780035570366,
"tag": "0005_lean_the_executioner", "tag": "0005_clumsy_korg",
"breakpoints": true "breakpoints": true
} }
] ]

53
src/server/database/repositories/user/schema.ts

@ -1,29 +1,38 @@
import { sql, relations } from 'drizzle-orm'; import { sql, relations } from 'drizzle-orm';
import { int, sqliteTable, text } from 'drizzle-orm/sqlite-core'; import { int, sqliteTable, text, uniqueIndex } from 'drizzle-orm/sqlite-core';
import { client } from '../../schema'; import { client } from '../../schema';
export const user = sqliteTable('users_table', { export const user = sqliteTable(
id: int().primaryKey({ autoIncrement: true }), 'users_table',
username: text().notNull().unique(), {
/** `password == null` means password login disabled */ id: int().primaryKey({ autoIncrement: true }),
password: text(), username: text().notNull().unique(),
email: text(), /** `password == null` means password login disabled */
name: text().notNull(), password: text(),
role: int().$type<Role>().notNull(), email: text(),
totpKey: text('totp_key'), name: text().notNull(),
totpVerified: int('totp_verified', { mode: 'boolean' }).notNull(), role: int().$type<Role>().notNull(),
enabled: int({ mode: 'boolean' }).notNull(), totpKey: text('totp_key'),
oauthProvider: text('oauth_provider').$type<OAUTH_PROVIDER>(), totpVerified: int('totp_verified', { mode: 'boolean' }).notNull(),
oauthId: text('oauth_id'), enabled: int({ mode: 'boolean' }).notNull(),
createdAt: text('created_at') oauthProvider: text('oauth_provider').$type<OAUTH_PROVIDER>(),
.notNull() oauthId: text('oauth_id'),
.default(sql`(CURRENT_TIMESTAMP)`), createdAt: text('created_at')
updatedAt: text('updated_at') .notNull()
.notNull() .default(sql`(CURRENT_TIMESTAMP)`),
.default(sql`(CURRENT_TIMESTAMP)`) updatedAt: text('updated_at')
.$onUpdate(() => sql`(CURRENT_TIMESTAMP)`), .notNull()
}); .default(sql`(CURRENT_TIMESTAMP)`)
.$onUpdate(() => sql`(CURRENT_TIMESTAMP)`),
},
(table) => [
uniqueIndex('oauth_provider_id_unique').on(
table.oauthProvider,
table.oauthId
),
]
);
export const usersRelations = relations(user, ({ many }) => ({ export const usersRelations = relations(user, ({ many }) => ({
clients: many(client), clients: many(client),

Loading…
Cancel
Save