From 7001082fb25f223c52d09f8a01e4cf675981ccfe Mon Sep 17 00:00:00 2001 From: Mathis HERRIOT <197931332+0x485254@users.noreply.github.com> Date: Mon, 5 Jan 2026 14:15:13 +0100 Subject: [PATCH] feat: add sessions schema with Drizzle ORM integration --- backend/src/database/schemas/sessions.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 backend/src/database/schemas/sessions.ts diff --git a/backend/src/database/schemas/sessions.ts b/backend/src/database/schemas/sessions.ts new file mode 100644 index 0000000..5163cde --- /dev/null +++ b/backend/src/database/schemas/sessions.ts @@ -0,0 +1,18 @@ +import { pgTable, varchar, timestamp, uuid, index, boolean } from 'drizzle-orm/pg-core'; +import { users } from './users'; + +export const sessions = pgTable('sessions', { + id: uuid('id').primaryKey().defaultRandom(), + userId: uuid('user_id').notNull().references(() => users.uuid, { onDelete: 'cascade' }), + refreshToken: varchar('refresh_token', { length: 512 }).notNull().unique(), + userAgent: varchar('user_agent', { length: 255 }), + ipHash: varchar('ip_hash', { length: 64 }), // IP hachée pour la protection de la vie privée (RGPD) + isValid: boolean('is_valid').notNull().default(true), + expiresAt: timestamp('expires_at', { withTimezone: true }).notNull(), + createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(), + updatedAt: timestamp('updated_at', { withTimezone: true }).notNull().defaultNow(), +}, (table) => ({ + userIdIdx: index('sessions_user_id_idx').on(table.userId), + refreshTokenIdx: index('sessions_refresh_token_idx').on(table.refreshToken), + expiresAtIdx: index('sessions_expires_at_idx').on(table.expiresAt), +}));