Browse Source

unique index on oauth

dev-oauth
Bernd Storath 7 days ago
parent
commit
2876e45ce6
  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
ALTER TABLE `__new_users_table` RENAME TO `users_table`;--> 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",
"dialect": "sqlite",
"id": "8cfd2b7c-5483-4b98-b95e-f9c741f32821",
"id": "d41b21e2-3977-4e94-8250-d26a26678703",
"prevId": "0f072f91-cd10-4702-ae7b-245255d69d1e",
"tables": {
"clients_table": {
@ -832,6 +832,14 @@
"username"
],
"isUnique": true
},
"oauth_provider_id_unique": {
"name": "oauth_provider_id_unique",
"columns": [
"oauth_provider",
"oauth_id"
],
"isUnique": true
}
},
"foreignKeys": {},

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

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

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

@ -1,29 +1,38 @@
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';
export const user = sqliteTable('users_table', {
id: int().primaryKey({ autoIncrement: true }),
username: text().notNull().unique(),
/** `password == null` means password login disabled */
password: text(),
email: text(),
name: text().notNull(),
role: int().$type<Role>().notNull(),
totpKey: text('totp_key'),
totpVerified: int('totp_verified', { mode: 'boolean' }).notNull(),
enabled: int({ mode: 'boolean' }).notNull(),
oauthProvider: text('oauth_provider').$type<OAUTH_PROVIDER>(),
oauthId: text('oauth_id'),
createdAt: text('created_at')
.notNull()
.default(sql`(CURRENT_TIMESTAMP)`),
updatedAt: text('updated_at')
.notNull()
.default(sql`(CURRENT_TIMESTAMP)`)
.$onUpdate(() => sql`(CURRENT_TIMESTAMP)`),
});
export const user = sqliteTable(
'users_table',
{
id: int().primaryKey({ autoIncrement: true }),
username: text().notNull().unique(),
/** `password == null` means password login disabled */
password: text(),
email: text(),
name: text().notNull(),
role: int().$type<Role>().notNull(),
totpKey: text('totp_key'),
totpVerified: int('totp_verified', { mode: 'boolean' }).notNull(),
enabled: int({ mode: 'boolean' }).notNull(),
oauthProvider: text('oauth_provider').$type<OAUTH_PROVIDER>(),
oauthId: text('oauth_id'),
createdAt: text('created_at')
.notNull()
.default(sql`(CURRENT_TIMESTAMP)`),
updatedAt: text('updated_at')
.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 }) => ({
clients: many(client),

Loading…
Cancel
Save