From a468f3db6891e12370ff1a0d761e0997d696f1b4 Mon Sep 17 00:00:00 2001 From: vergiLgood1 Date: Mon, 7 Apr 2025 20:50:57 +0700 Subject: [PATCH] init model rbac --- .../(admin)/_components/app-sidebar.tsx | 2 +- .../_components/navigations/nav-user.tsx | 2 +- .../(admin)/_components/profile-form.tsx | 2 +- .../_components/settings/profile-settings.tsx | 2 +- .../_components/settings/setting-dialog.tsx | 2 +- .../_components/dialogs/ban-user-dialog.tsx | 2 +- .../_handlers/actions/use-ban-user.ts | 2 +- .../_handlers/use-create-user-column.ts | 2 +- .../_handlers/use-detail-sheet.ts | 2 +- .../_handlers/use-profile-form.ts | 4 +- .../user-management/_queries/mutations.ts | 2 +- .../_handlers/use-sign-in-passwordless.ts | 2 +- .../_handlers/use-sign-in-with-password.ts | 2 +- .../sign-in-with-password-form.tsx | 2 +- sigap-website/app/(pages)/layout.tsx | 2 +- .../{_utils => _lib}/react-query-provider.tsx | 0 .../{_utils => _lib}/zustand/stores/user.ts | 0 sigap-website/app/_utils/authz.ts | 4 +- sigap-website/app/_utils/common.ts | 2 +- .../app/{_lib => _utils}/const/numbers.ts | 0 .../app/{_lib => _utils}/const/regex.ts | 0 .../app/{_lib => _utils}/const/routes.ts | 0 .../app/{_lib => _utils}/const/texts.ts | 0 .../{_lib => _utils}/types/ban-duration.ts | 0 .../types/date-format.interface.ts | 0 .../types/error-server-action.interface.ts | 0 sigap-website/app/_utils/validation.ts | 4 +- sigap-website/prisma/schema.prisma | 47 ++++++++++++++++--- sigap-website/src/entities/errors/common.ts | 2 +- .../entities/models/users/ban-user.model.ts | 4 +- .../models/users/create-user.model.ts | 4 +- .../users/upload-avatar.controller.ts | 4 +- 32 files changed, 68 insertions(+), 35 deletions(-) rename sigap-website/app/{_utils => _lib}/react-query-provider.tsx (100%) rename sigap-website/app/{_utils => _lib}/zustand/stores/user.ts (100%) rename sigap-website/app/{_lib => _utils}/const/numbers.ts (100%) rename sigap-website/app/{_lib => _utils}/const/regex.ts (100%) rename sigap-website/app/{_lib => _utils}/const/routes.ts (100%) rename sigap-website/app/{_lib => _utils}/const/texts.ts (100%) rename sigap-website/app/{_lib => _utils}/types/ban-duration.ts (100%) rename sigap-website/app/{_lib => _utils}/types/date-format.interface.ts (100%) rename sigap-website/app/{_lib => _utils}/types/error-server-action.interface.ts (100%) diff --git a/sigap-website/app/(pages)/(admin)/_components/app-sidebar.tsx b/sigap-website/app/(pages)/(admin)/_components/app-sidebar.tsx index 9bd9570..a06ceb3 100644 --- a/sigap-website/app/(pages)/(admin)/_components/app-sidebar.tsx +++ b/sigap-website/app/(pages)/(admin)/_components/app-sidebar.tsx @@ -17,7 +17,7 @@ import { NavPreMain } from "./navigations/nav-pre-main"; import { navData } from "@/prisma/data/nav"; import { TeamSwitcher } from "../../../_components/team-switcher"; import { useGetCurrentUserQuery } from "../dashboard/user-management/_queries/queries"; -import { useUserStore } from "@/app/_utils/zustand/stores/user"; +import { useUserStore } from "@/app/_lib/zustand/stores/user"; import { useUserActionsHandler } from "../dashboard/user-management/_handlers/actions/use-user-actions"; diff --git a/sigap-website/app/(pages)/(admin)/_components/navigations/nav-user.tsx b/sigap-website/app/(pages)/(admin)/_components/navigations/nav-user.tsx index 0842792..bb99d70 100644 --- a/sigap-website/app/(pages)/(admin)/_components/navigations/nav-user.tsx +++ b/sigap-website/app/(pages)/(admin)/_components/navigations/nav-user.tsx @@ -30,7 +30,7 @@ import { SettingsDialog } from "../settings/setting-dialog"; import { AlertDialog, AlertDialogTrigger, AlertDialogContent, AlertDialogHeader, AlertDialogFooter, AlertDialogTitle, AlertDialogDescription, AlertDialogCancel, AlertDialogAction } from "@/app/_components/ui/alert-dialog"; import { useSignOutHandler } from "@/app/(pages)/(auth)/_handlers/use-sign-out"; import { useGetCurrentUserQuery } from "../../dashboard/user-management/_queries/queries"; -import { useUserStore } from "@/app/_utils/zustand/stores/user"; +import { useUserStore } from "@/app/_lib/zustand/stores/user"; interface NavUserProps { user: IUserSchema | null; diff --git a/sigap-website/app/(pages)/(admin)/_components/profile-form.tsx b/sigap-website/app/(pages)/(admin)/_components/profile-form.tsx index 63a1cd2..f7592e9 100644 --- a/sigap-website/app/(pages)/(admin)/_components/profile-form.tsx +++ b/sigap-website/app/(pages)/(admin)/_components/profile-form.tsx @@ -30,7 +30,7 @@ import { ImageIcon, Loader2 } from "lucide-react"; import { createClient } from "@/app/_utils/supabase/client"; import { getFullName, getInitials } from "@/app/_utils/common"; import { useProfileFormHandlers } from "../dashboard/user-management/_handlers/use-profile-form"; -import { CTexts } from "@/app/_lib/const/texts"; +import { CTexts } from "@/app/_utils/const/texts"; // Profile update form schema const profileFormSchema = z.object({ diff --git a/sigap-website/app/(pages)/(admin)/_components/settings/profile-settings.tsx b/sigap-website/app/(pages)/(admin)/_components/settings/profile-settings.tsx index 588ebc7..a604673 100644 --- a/sigap-website/app/(pages)/(admin)/_components/settings/profile-settings.tsx +++ b/sigap-website/app/(pages)/(admin)/_components/settings/profile-settings.tsx @@ -32,7 +32,7 @@ import { updateUser, } from "@/app/(pages)/(admin)/dashboard/user-management/action"; import { useProfileFormHandlers } from "../../dashboard/user-management/_handlers/use-profile-form"; -import { CTexts } from "@/app/_lib/const/texts"; +import { CTexts } from "@/app/_utils/const/texts"; const profileFormSchema = z.object({ username: z.string().nullable().optional(), diff --git a/sigap-website/app/(pages)/(admin)/_components/settings/setting-dialog.tsx b/sigap-website/app/(pages)/(admin)/_components/settings/setting-dialog.tsx index e3b80ac..34231bb 100644 --- a/sigap-website/app/(pages)/(admin)/_components/settings/setting-dialog.tsx +++ b/sigap-website/app/(pages)/(admin)/_components/settings/setting-dialog.tsx @@ -36,7 +36,7 @@ import NotificationsSetting from "./notification-settings"; import PreferencesSettings from "./preference-settings"; import ImportData from "./import-data"; import { IUserSchema } from "@/src/entities/models/users/users.model"; -import { useUserStore } from "@/app/_utils/zustand/stores/user"; +import { useUserStore } from "@/app/_lib/zustand/stores/user"; interface SettingsDialogProps { trigger: React.ReactNode; diff --git a/sigap-website/app/(pages)/(admin)/dashboard/user-management/_components/dialogs/ban-user-dialog.tsx b/sigap-website/app/(pages)/(admin)/dashboard/user-management/_components/dialogs/ban-user-dialog.tsx index 52fe8c1..a8f2e14 100644 --- a/sigap-website/app/(pages)/(admin)/dashboard/user-management/_components/dialogs/ban-user-dialog.tsx +++ b/sigap-website/app/(pages)/(admin)/dashboard/user-management/_components/dialogs/ban-user-dialog.tsx @@ -13,7 +13,7 @@ import { RadioGroup, RadioGroupItem } from "@/app/_components/ui/radio-group" import { Label } from "@/app/_components/ui/label" import { Input } from "@/app/_components/ui/input" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/app/_components/ui/select" -import { ValidBanDuration } from "@/app/_lib/types/ban-duration" +import { ValidBanDuration } from "@/app/_utils/types/ban-duration" import { toast } from "sonner" interface BanUserDialogProps { diff --git a/sigap-website/app/(pages)/(admin)/dashboard/user-management/_handlers/actions/use-ban-user.ts b/sigap-website/app/(pages)/(admin)/dashboard/user-management/_handlers/actions/use-ban-user.ts index db695d9..6b54a57 100644 --- a/sigap-website/app/(pages)/(admin)/dashboard/user-management/_handlers/actions/use-ban-user.ts +++ b/sigap-website/app/(pages)/(admin)/dashboard/user-management/_handlers/actions/use-ban-user.ts @@ -2,7 +2,7 @@ import { useState } from "react" import { useBanUserMutation } from "../../_queries/mutations" -import type { ValidBanDuration } from "@/app/_lib/types/ban-duration" +import type { ValidBanDuration } from "@/app/_utils/types/ban-duration" import { toast } from "sonner" import { useUserActionsHandler } from "./use-user-actions" diff --git a/sigap-website/app/(pages)/(admin)/dashboard/user-management/_handlers/use-create-user-column.ts b/sigap-website/app/(pages)/(admin)/dashboard/user-management/_handlers/use-create-user-column.ts index 1cce219..611dba5 100644 --- a/sigap-website/app/(pages)/(admin)/dashboard/user-management/_handlers/use-create-user-column.ts +++ b/sigap-website/app/(pages)/(admin)/dashboard/user-management/_handlers/use-create-user-column.ts @@ -1,6 +1,6 @@ import { useState } from "react" import { useBanUserMutation, useDeleteUserMutation, useUnbanUserMutation } from "../_queries/mutations" -import { ValidBanDuration } from "@/app/_lib/types/ban-duration" +import { ValidBanDuration } from "@/app/_utils/types/ban-duration" import { useQueryClient } from "@tanstack/react-query" import { toast } from "sonner" import { useForm } from "react-hook-form" diff --git a/sigap-website/app/(pages)/(admin)/dashboard/user-management/_handlers/use-detail-sheet.ts b/sigap-website/app/(pages)/(admin)/dashboard/user-management/_handlers/use-detail-sheet.ts index 205f5fe..bd3aa65 100644 --- a/sigap-website/app/(pages)/(admin)/dashboard/user-management/_handlers/use-detail-sheet.ts +++ b/sigap-website/app/(pages)/(admin)/dashboard/user-management/_handlers/use-detail-sheet.ts @@ -2,7 +2,7 @@ import { IUserSchema } from "@/src/entities/models/users/users.model"; import { toast } from "sonner"; import { useBanUserMutation, useDeleteUserMutation, useUnbanUserMutation } from "../_queries/mutations"; import { useSendMagicLinkMutation, useSendPasswordRecoveryMutation } from "@/app/(pages)/(auth)/_queries/mutations"; -import { ValidBanDuration } from "@/app/_lib/types/ban-duration"; +import { ValidBanDuration } from "@/app/_utils/types/ban-duration"; import { copyItem } from "@/app/_utils/common"; import { useQueryClient } from "@tanstack/react-query"; import { useUserActionsHandler } from "./actions/use-user-actions"; diff --git a/sigap-website/app/(pages)/(admin)/dashboard/user-management/_handlers/use-profile-form.ts b/sigap-website/app/(pages)/(admin)/dashboard/user-management/_handlers/use-profile-form.ts index 0fefa1b..a7093bd 100644 --- a/sigap-website/app/(pages)/(admin)/dashboard/user-management/_handlers/use-profile-form.ts +++ b/sigap-website/app/(pages)/(admin)/dashboard/user-management/_handlers/use-profile-form.ts @@ -11,8 +11,8 @@ import { z } from "zod" import { useUnbanUserMutation, useUpdateUserMutation, useUploadAvatarMutation } from "../_queries/mutations" import { useQueryClient } from "@tanstack/react-query" import { toast } from "sonner" -import { CNumbers } from "@/app/_lib/const/numbers" -import { CTexts } from "@/app/_lib/const/texts" +import { CNumbers } from "@/app/_utils/const/numbers" +import { CTexts } from "@/app/_utils/const/texts" import { useUserActionsHandler } from "./actions/use-user-actions" // Profile update form schema diff --git a/sigap-website/app/(pages)/(admin)/dashboard/user-management/_queries/mutations.ts b/sigap-website/app/(pages)/(admin)/dashboard/user-management/_queries/mutations.ts index 6d75f96..c2baf82 100644 --- a/sigap-website/app/(pages)/(admin)/dashboard/user-management/_queries/mutations.ts +++ b/sigap-website/app/(pages)/(admin)/dashboard/user-management/_queries/mutations.ts @@ -5,7 +5,7 @@ import { IUpdateUserSchema } from "@/src/entities/models/users/update-user.model import { ICredentialsInviteUserSchema } from "@/src/entities/models/users/invite-user.model"; import { IBanUserSchema, ICredentialsBanUserSchema } from "@/src/entities/models/users/ban-user.model"; import { ICredentialsUnbanUserSchema } from "@/src/entities/models/users/unban-user.model"; -import { ValidBanDuration } from "@/app/_lib/types/ban-duration"; +import { ValidBanDuration } from "@/app/_utils/types/ban-duration"; export const useCreateUserMutation = () => { return useMutation({ diff --git a/sigap-website/app/(pages)/(auth)/_handlers/use-sign-in-passwordless.ts b/sigap-website/app/(pages)/(auth)/_handlers/use-sign-in-passwordless.ts index 758f531..b266cc2 100644 --- a/sigap-website/app/(pages)/(auth)/_handlers/use-sign-in-passwordless.ts +++ b/sigap-website/app/(pages)/(auth)/_handlers/use-sign-in-passwordless.ts @@ -6,7 +6,7 @@ import { useForm } from "react-hook-form"; import { ISignInPasswordlessSchema, SignInPasswordlessSchema } from "@/src/entities/models/auth/sign-in.model"; import { zodResolver } from "@hookform/resolvers/zod"; import { createRoute } from "@/app/_utils/common"; -import { ROUTES } from "@/app/_lib/const/routes"; +import { ROUTES } from "@/app/_utils/const/routes"; export function useSignInPasswordlessHandler() { const { mutateAsync: signIn, isPending, error: queryError } = useSignInPasswordlessMutation(); diff --git a/sigap-website/app/(pages)/(auth)/_handlers/use-sign-in-with-password.ts b/sigap-website/app/(pages)/(auth)/_handlers/use-sign-in-with-password.ts index dc570f2..f89bdd4 100644 --- a/sigap-website/app/(pages)/(auth)/_handlers/use-sign-in-with-password.ts +++ b/sigap-website/app/(pages)/(auth)/_handlers/use-sign-in-with-password.ts @@ -6,7 +6,7 @@ import { ISignInWithPasswordSchema, SignInWithPasswordSchema } from "@/src/entit import { zodResolver } from "@hookform/resolvers/zod"; import { toast } from "sonner"; import { createRoute } from "@/app/_utils/common"; -import { ROUTES } from "@/app/_lib/const/routes"; +import { ROUTES } from "@/app/_utils/const/routes"; export const useSignInWithPasswordHandler = () => { const { mutateAsync: signInWithPassword, isPending, error: queryError } = useSignInWithPasswordMutation(); diff --git a/sigap-website/app/(pages)/(auth)/sign-in/_components/sign-in-with-password-form.tsx b/sigap-website/app/(pages)/(auth)/sign-in/_components/sign-in-with-password-form.tsx index 2f068d6..27eb860 100644 --- a/sigap-website/app/(pages)/(auth)/sign-in/_components/sign-in-with-password-form.tsx +++ b/sigap-website/app/(pages)/(auth)/sign-in/_components/sign-in-with-password-form.tsx @@ -10,7 +10,7 @@ import { useSignInPasswordlessHandler } from "../../_handlers/use-sign-in-passwo import { useSignInWithPasswordHandler } from "../../_handlers/use-sign-in-with-password"; import { useNavigations } from "@/app/_hooks/use-navigations"; import { createRoute } from "@/app/_utils/common"; -import { ROUTES } from "@/app/_lib/const/routes"; +import { ROUTES } from "@/app/_utils/const/routes"; export function SignInWithPasswordForm({ className, diff --git a/sigap-website/app/(pages)/layout.tsx b/sigap-website/app/(pages)/layout.tsx index e11864a..effd8c5 100644 --- a/sigap-website/app/(pages)/layout.tsx +++ b/sigap-website/app/(pages)/layout.tsx @@ -1,7 +1,7 @@ import { Geist } from "next/font/google"; import { ThemeProvider } from "next-themes"; import "@/app/_styles/globals.css"; -import ReactQueryProvider from "@/app/_utils/react-query-provider"; +import ReactQueryProvider from "@/app/_lib/react-query-provider"; import { Toaster } from "@/app/_components/ui/sonner"; const defaultUrl = process.env.VERCEL_URL diff --git a/sigap-website/app/_utils/react-query-provider.tsx b/sigap-website/app/_lib/react-query-provider.tsx similarity index 100% rename from sigap-website/app/_utils/react-query-provider.tsx rename to sigap-website/app/_lib/react-query-provider.tsx diff --git a/sigap-website/app/_utils/zustand/stores/user.ts b/sigap-website/app/_lib/zustand/stores/user.ts similarity index 100% rename from sigap-website/app/_utils/zustand/stores/user.ts rename to sigap-website/app/_lib/zustand/stores/user.ts diff --git a/sigap-website/app/_utils/authz.ts b/sigap-website/app/_utils/authz.ts index 5719068..d2d1889 100644 --- a/sigap-website/app/_utils/authz.ts +++ b/sigap-website/app/_utils/authz.ts @@ -1,10 +1,10 @@ import { IUserSchema } from "@/src/entities/models/users/users.model" -type Role = "viewer" | "editor" | "admin"; +type Role = "viewer" | "staff" | "admin"; const PERMISSIONS: Record = { viewer: ["view:post"], - editor: ["view:post", "edit:post"], + staff: ["view:post", "edit:post"], admin: ["view:post", "create:post", "edit:post", "delete:post"], }; export const CheckPermission = (user: IUserSchema, action: string, resource: string) => { diff --git a/sigap-website/app/_utils/common.ts b/sigap-website/app/_utils/common.ts index 2c25233..7456ff1 100644 --- a/sigap-website/app/_utils/common.ts +++ b/sigap-website/app/_utils/common.ts @@ -1,6 +1,6 @@ import { format } from "date-fns"; import { redirect } from "next/navigation"; -import { DateFormatOptions, DateFormatPattern } from "../_lib/types/date-format.interface"; +import { DateFormatOptions, DateFormatPattern } from "./types/date-format.interface"; import { toast } from "sonner"; import { IUserSchema } from "@/src/entities/models/users/users.model"; diff --git a/sigap-website/app/_lib/const/numbers.ts b/sigap-website/app/_utils/const/numbers.ts similarity index 100% rename from sigap-website/app/_lib/const/numbers.ts rename to sigap-website/app/_utils/const/numbers.ts diff --git a/sigap-website/app/_lib/const/regex.ts b/sigap-website/app/_utils/const/regex.ts similarity index 100% rename from sigap-website/app/_lib/const/regex.ts rename to sigap-website/app/_utils/const/regex.ts diff --git a/sigap-website/app/_lib/const/routes.ts b/sigap-website/app/_utils/const/routes.ts similarity index 100% rename from sigap-website/app/_lib/const/routes.ts rename to sigap-website/app/_utils/const/routes.ts diff --git a/sigap-website/app/_lib/const/texts.ts b/sigap-website/app/_utils/const/texts.ts similarity index 100% rename from sigap-website/app/_lib/const/texts.ts rename to sigap-website/app/_utils/const/texts.ts diff --git a/sigap-website/app/_lib/types/ban-duration.ts b/sigap-website/app/_utils/types/ban-duration.ts similarity index 100% rename from sigap-website/app/_lib/types/ban-duration.ts rename to sigap-website/app/_utils/types/ban-duration.ts diff --git a/sigap-website/app/_lib/types/date-format.interface.ts b/sigap-website/app/_utils/types/date-format.interface.ts similarity index 100% rename from sigap-website/app/_lib/types/date-format.interface.ts rename to sigap-website/app/_utils/types/date-format.interface.ts diff --git a/sigap-website/app/_lib/types/error-server-action.interface.ts b/sigap-website/app/_utils/types/error-server-action.interface.ts similarity index 100% rename from sigap-website/app/_lib/types/error-server-action.interface.ts rename to sigap-website/app/_utils/types/error-server-action.interface.ts diff --git a/sigap-website/app/_utils/validation.ts b/sigap-website/app/_utils/validation.ts index f5a13d2..07e8c58 100644 --- a/sigap-website/app/_utils/validation.ts +++ b/sigap-website/app/_utils/validation.ts @@ -1,5 +1,5 @@ -import { CTexts } from "../_lib/const/texts"; -import { CRegex } from "../_lib/const/regex"; +import { CTexts } from "./const/texts"; +import { CRegex } from "./const/regex"; /** * Validates if a given phone number starts with any of the predefined prefixes. diff --git a/sigap-website/prisma/schema.prisma b/sigap-website/prisma/schema.prisma index dd76f40..a80fb25 100644 --- a/sigap-website/prisma/schema.prisma +++ b/sigap-website/prisma/schema.prisma @@ -147,7 +147,7 @@ model profiles { model users { id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid - role roles @default(user) + roles_id String @db.Uuid email String @unique @db.VarChar(255) phone String? @unique @db.VarChar(20) encrypted_password String? @db.VarChar(255) @@ -163,11 +163,44 @@ model users { banned_until DateTime? @db.Timestamptz(6) is_anonymous Boolean @default(false) profile profiles? + role roles @relation(fields: [roles_id], references: [id]) @@index([is_anonymous]) @@index([created_at]) @@index([updated_at]) - @@index([role]) +} + +model roles { + id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid + name String @unique @db.VarChar(255) + description String? + permissions permissions[] + users users[] + created_at DateTime @default(now()) @db.Timestamptz(6) + updated_at DateTime @default(now()) @db.Timestamptz(6) +} + +model resources { + id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid + name String @unique @db.VarChar(255) + description String? + instance_role String? + relations String? + attributes Json? + permissions permissions[] + created_at DateTime @default(now()) @db.Timestamptz(6) + updated_at DateTime @default(now()) @db.Timestamptz(6) +} + +model permissions { + id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid + action String + resource_id String + role_id String + resource resources @relation(fields: [resource_id], references: [id]) + role roles @relation(fields: [role_id], references: [id]) + created_at DateTime @default(now()) @db.Timestamptz(6) + updated_at DateTime @updatedAt @db.Timestamptz(6) } enum crime_rates { @@ -182,11 +215,11 @@ enum crime_status { resolved } -enum roles { - admin - staff - user -} +// enum roles { +// admin +// staff +// user +// } enum status_contact_messages { new diff --git a/sigap-website/src/entities/errors/common.ts b/sigap-website/src/entities/errors/common.ts index d07308d..799eb86 100644 --- a/sigap-website/src/entities/errors/common.ts +++ b/sigap-website/src/entities/errors/common.ts @@ -1,4 +1,4 @@ -import { ServerActionErrorParams } from "@/app/_lib/types/error-server-action.interface"; +import { ServerActionErrorParams } from "@/app/_utils/types/error-server-action.interface"; export class DatabaseOperationError extends Error { constructor(message: string, options?: ErrorOptions) { diff --git a/sigap-website/src/entities/models/users/ban-user.model.ts b/sigap-website/src/entities/models/users/ban-user.model.ts index 4a3522d..c2773ac 100644 --- a/sigap-website/src/entities/models/users/ban-user.model.ts +++ b/sigap-website/src/entities/models/users/ban-user.model.ts @@ -1,6 +1,6 @@ // Schema Zod untuk validasi runtime -import { CRegex } from "@/app/_lib/const/regex"; -import { ValidBanDuration } from "@/app/_lib/types/ban-duration"; +import { CRegex } from "@/app/_utils/const/regex"; +import { ValidBanDuration } from "@/app/_utils/types/ban-duration"; import { z } from "zod"; export const BanDurationSchema = z.custom( diff --git a/sigap-website/src/entities/models/users/create-user.model.ts b/sigap-website/src/entities/models/users/create-user.model.ts index 26a00af..bc49f3f 100644 --- a/sigap-website/src/entities/models/users/create-user.model.ts +++ b/sigap-website/src/entities/models/users/create-user.model.ts @@ -1,5 +1,5 @@ -import { CNumbers } from "@/app/_lib/const/numbers"; -import { CTexts } from "@/app/_lib/const/texts"; +import { CNumbers } from "@/app/_utils/const/numbers"; +import { CTexts } from "@/app/_utils/const/texts"; import { phonePrefixValidation, phoneRegexValidation } from "@/app/_utils/validation"; import { z } from "zod"; diff --git a/sigap-website/src/interface-adapters/controllers/users/upload-avatar.controller.ts b/sigap-website/src/interface-adapters/controllers/users/upload-avatar.controller.ts index 2cc75e5..51aab6e 100644 --- a/sigap-website/src/interface-adapters/controllers/users/upload-avatar.controller.ts +++ b/sigap-website/src/interface-adapters/controllers/users/upload-avatar.controller.ts @@ -1,5 +1,5 @@ -import { CNumbers } from "@/app/_lib/const/numbers"; -import { CTexts } from "@/app/_lib/const/texts"; +import { CNumbers } from "@/app/_utils/const/numbers"; +import { CTexts } from "@/app/_utils/const/texts"; import { IInstrumentationService } from "@/src/application/services/instrumentation.service.interface"; import { IUploadAvatarUseCase } from "@/src/application/use-cases/users/upload-avatar.use-case"; import { z } from "zod";