From 4d7f60236f9ccf123fe28d6afd0b6d7281ada0fc Mon Sep 17 00:00:00 2001
From: Fabio Manganiello <fabio@manganiello.tech>
Date: Sun, 9 Mar 2025 10:57:16 +0100
Subject: [PATCH] Added unique constraints to db schema.

---
 src/db/migrations/000_initial.ts | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/src/db/migrations/000_initial.ts b/src/db/migrations/000_initial.ts
index 5bbbc8d..7b65a68 100644
--- a/src/db/migrations/000_initial.ts
+++ b/src/db/migrations/000_initial.ts
@@ -156,6 +156,12 @@ async function createUsersRolesTable(query: { context: any }) {
       defaultValue: () => new Date(),
     },
   });
+
+  // <userId, roleId> must be unique
+  await query.context.addConstraint($db.tableName('users_roles'), {
+    fields: ['userId', 'roleId'],
+    type: 'unique',
+  });
 }
 
 async function createUserSessionsTable(query: { context: any }) {
@@ -190,6 +196,12 @@ async function createUserSessionsTable(query: { context: any }) {
       defaultValue: () => new Date(),
     },
   });
+
+  // <userId, name> must be unique
+  await query.context.addConstraint($db.tableName('user_sessions'), {
+    fields: ['userId', 'name'],
+    type: 'unique',
+  });
 }
 
 async function createUserDevicesTable(query: { context: any }) {
@@ -219,6 +231,12 @@ async function createUserDevicesTable(query: { context: any }) {
       defaultValue: () => new Date(),
     },
   });
+
+  // <userId, name> must be unique
+  await query.context.addConstraint($db.tableName('user_devices'), {
+    fields: ['userId', 'name'],
+    type: 'unique',
+  });
 }
 
 async function up(query: { context: any }) {