Advertisement
AdzeB

role.repository

Mar 9th, 2025
14
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.91 KB | None | 0 0
  1. import { User, Role } from "../schema";
  2. import dbClient from "../db";
  3. import { eq } from "drizzle-orm";
  4. import type { BaseRepository } from "./base.repository";
  5.  
  6. export class RoleCreationError extends Error {
  7. constructor(message: string) {
  8. super(message);
  9. this.name = "RoleCreationError";
  10. }
  11. }
  12.  
  13. export class RoleRepository
  14. implements BaseRepository<typeof Role.$inferSelect>
  15. {
  16. private db: Awaited<ReturnType<typeof dbClient>>;
  17.  
  18. constructor(dbInstance: Awaited<ReturnType<typeof dbClient>>) {
  19. this.db = dbInstance;
  20. }
  21.  
  22. async findById(id: string) {
  23. const [role] = await this.db.select().from(Role).where(eq(Role.id, id));
  24. return role;
  25. }
  26.  
  27. async findByName(name: string) {
  28. const [role] = await this.db.select().from(Role).where(eq(Role.name, name));
  29. return role;
  30. }
  31.  
  32. async create(data: typeof Role.$inferInsert) {
  33. try {
  34. const [role] = await this.db
  35. .insert(Role)
  36. .values(data)
  37. .onConflictDoUpdate({
  38. target: [Role.logto_id],
  39. set: data,
  40. })
  41. .returning();
  42.  
  43. if (!role) {
  44. throw new RoleCreationError("Failed to create or update role");
  45. }
  46.  
  47. return role;
  48. } catch (error) {
  49. // Handle specific database errors
  50. if (error instanceof Error) {
  51. // You can check for specific error types/codes here
  52. throw new RoleCreationError(`Failed to create role: ${error.message}`);
  53. }
  54.  
  55. // Handle unknown errors
  56. throw new RoleCreationError(
  57. "An unexpected error occurred while creating the role"
  58. );
  59. }
  60. }
  61. async update(id: string, data: Partial<typeof Role.$inferInsert>) {
  62. const [role] = await this.db
  63. .update(Role)
  64. .set(data)
  65. .where(eq(Role.id, id))
  66. .returning();
  67. return role;
  68. }
  69.  
  70. async delete(id: string) {
  71. await this.db.delete(Role).where(eq(Role.id, id));
  72. }
  73. }
  74.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement