Files
OWASP-Cryptography/src/db/schema.ts

65 lines
2.2 KiB
TypeScript

import { relations } from "drizzle-orm"
import { int, sqliteTable, text, primaryKey } from "drizzle-orm/sqlite-core"
export const usersTable = sqliteTable("users", {
id: int("id").primaryKey({ autoIncrement: true }),
name: text("name").notNull(),
password: text("hash_password").notNull(),
email: text("email").notNull().unique()
})
export const rolesTable = sqliteTable("roles", {
id: int("id").primaryKey({ autoIncrement: true }),
name: text("name").notNull()
})
export const permissionsTable = sqliteTable("permissions", {
id: int("id").primaryKey({ autoIncrement: true }),
name: text("name").notNull()
})
export const usersRolesTable = sqliteTable('users_roles', {
userId: int("user_id").notNull().references(() => usersTable.id),
roleId: int("role_id").notNull().references(() => rolesTable.id)
}, (t) => [ primaryKey({ columns: [ t.userId, t.roleId ] }) ])
export const rolesPermissionsTable = sqliteTable('roles_permissions', {
roleId: int("role_id").notNull().references(() => rolesTable.id),
permissionId: int("permission_id").notNull().references(() => permissionsTable.id)
}, (t) => [primaryKey({columns: [t.roleId, t.permissionId]})])
export const usersRelations = relations(usersTable, ({ many }) => ({
usersToRoles: many(usersRolesTable),
}))
export const rolesRelations = relations(rolesTable, ({ many }) => ({
usersToRoles: many(usersRolesTable),
rolesToPermissions: many(rolesPermissionsTable)
}))
export const permissionsRelations = relations(permissionsTable, ({ many }) => ({
rolesToPermissions: many(rolesPermissionsTable)
}))
export const usersToRolesRelations = relations(usersRolesTable, ({ one }) => ({
user: one(usersTable, {
fields: [usersRolesTable.userId],
references: [usersTable.id]
}),
role: one(rolesTable, {
fields: [usersRolesTable.roleId],
references: [rolesTable.id]
})
}))
export const rolesToPermissionsRelations = relations(rolesPermissionsTable, ({one}) => ({
role: one(rolesTable, {
fields: [rolesPermissionsTable.roleId],
references: [rolesTable.id]
}),
permission: one(permissionsTable, {
fields: [rolesPermissionsTable.permissionId],
references: [permissionsTable.id]
})
}))