From 70702950d4f57b862197c6fa9c8a37400f5aa913 Mon Sep 17 00:00:00 2001 From: percyfikri Date: Fri, 9 Aug 2024 10:26:06 +0700 Subject: [PATCH 01/24] Create : API for management-aspect --- apps/backend/src/index.ts | 2 + .../src/routes/managementAspect/route.ts | 418 ++++++++++++++++++ 2 files changed, 420 insertions(+) create mode 100644 apps/backend/src/routes/managementAspect/route.ts diff --git a/apps/backend/src/index.ts b/apps/backend/src/index.ts index c0fbe56..252a875 100644 --- a/apps/backend/src/index.ts +++ b/apps/backend/src/index.ts @@ -3,6 +3,7 @@ import { configDotenv } from "dotenv"; import { Hono } from "hono"; import authRoutes from "./routes/auth/route"; import usersRoute from "./routes/users/route"; +import aspectsRoute from "./routes/managementAspect/route"; import { verifyAccessToken } from "./utils/authUtils"; import permissionRoutes from "./routes/permissions/route"; import { cors } from "hono/cors"; @@ -78,6 +79,7 @@ const routes = app .route("/dashboard", dashboardRoutes) .route("/roles", rolesRoute) .route("/dev", devRoutes) + .route("/management-aspect", aspectsRoute) .onError((err, c) => { if (err instanceof DashboardError) { return c.json( diff --git a/apps/backend/src/routes/managementAspect/route.ts b/apps/backend/src/routes/managementAspect/route.ts new file mode 100644 index 0000000..80cf70e --- /dev/null +++ b/apps/backend/src/routes/managementAspect/route.ts @@ -0,0 +1,418 @@ +import { and, eq, ilike, isNull, or, sql } from "drizzle-orm"; +import { Hono } from "hono"; + +import { z } from "zod"; +import { HTTPException } from "hono/http-exception"; +import db from "../../drizzle"; +import { aspects } from "../../drizzle/schema/aspects"; +import { subAspects } from "../../drizzle/schema/subAspects"; +import HonoEnv from "../../types/HonoEnv"; +import requestValidator from "../../utils/requestValidator"; +import authInfo from "../../middlewares/authInfo"; +import checkPermission from "../../middlewares/checkPermission"; + +// Schema for creating and updating aspects +export const aspectFormSchema = z.object({ + name: z.string().min(1).max(50), + subAspects: z + .string() + .refine( + (data) => { + try { + const parsed = JSON.parse(data); + return Array.isArray(parsed); + } catch { + return false; + } + }, + { + message: "Sub Aspects must be an array", + } + ) + .optional(), +}); + +export const aspectUpdateSchema = aspectFormSchema.extend({ + subAspects: z.string().optional().or(z.literal("")), +}); + +// Schema for creating and updating subAspects +export const subAspectFormSchema = z.object({ + name: z.string().min(1).max(50), + aspectId: z.string().uuid(), +}); + +export const subAspectUpdateSchema = subAspectFormSchema.extend({}); + +const managementAspectRoute = new Hono() + .use(authInfo) + /** + * Get All Aspects (With Metadata) + * + * Query params: + * - includeTrashed: boolean (default: false) + * - withMetadata: boolean + */ + // Get all aspects + .get( + "/", + requestValidator( + "query", + z.object({ + includeTrashed: z + .string() + .optional() + .transform((v) => v?.toLowerCase() === "true"), + withMetadata: z + .string() + .optional() + .transform((v) => v?.toLowerCase() === "true"), + page: z.coerce.number().int().min(0).default(0), + limit: z.coerce.number().int().min(1).max(1000).default(10), + q: z.string().default(""), + }) + ), + async (c) => { + const { includeTrashed, page, limit, q } = c.req.valid("query"); + + const totalCountQuery = includeTrashed + ? sql`(SELECT count(*) FROM ${aspects})` + : sql`(SELECT count(*) FROM ${aspects} WHERE ${aspects.deletedAt} IS NULL)`; + + const result = await db + .select({ + id: aspects.id, + name: aspects.name, + createdAt: aspects.createdAt, + updatedAt: aspects.updatedAt, + ...(includeTrashed ? { deletedAt: aspects.deletedAt } : {}), + fullCount: totalCountQuery, + }) + .from(aspects) + .where( + and( + includeTrashed ? undefined : isNull(aspects.deletedAt), + q ? or(ilike(aspects.name, q), eq(aspects.id, q)) : undefined + ) + ) + .offset(page * limit) + .limit(limit); + + return c.json({ + data: result.map((d) => ({ ...d, fullCount: undefined })), + _metadata: { + currentPage: page, + totalPages: Math.ceil((Number(result[0]?.fullCount) ?? 0) / limit), + totalItems: Number(result[0]?.fullCount) ?? 0, + perPage: limit, + }, + }); + } + ) + // Get aspect by id + .get( + "/:id", + requestValidator( + "query", + z.object({ + includeTrashed: z.string().default("false"), + }) + ), + async (c) => { + const aspectId = c.req.param("id"); + + if (!aspectId) throw new HTTPException(400, { message: "Missing id" }); + + const includeTrashed = + c.req.query("includeTrashed")?.toLowerCase() === "true"; + + const queryResult = await db + .select({ + id: aspects.id, + name: aspects.name, + createdAt: aspects.createdAt, + updatedAt: aspects.updatedAt, + ...(includeTrashed ? { deletedAt: aspects.deletedAt } : {}), + subAspect: { + name: subAspects.name, + id: subAspects.id, + }, + }) + .from(aspects) + .leftJoin(subAspects, eq(aspects.id, subAspects.aspectId)) + .where( + and( + eq(aspects.id, aspectId), + !includeTrashed ? isNull(aspects.deletedAt) : undefined + ) + ); + + if (!queryResult.length) + throw new HTTPException(404, { + message: "The aspect does not exist", + }); + + const subAspectsList = queryResult.reduce((prev, curr) => { + if (!curr.subAspect) return prev; + prev.set(curr.subAspect.id, curr.subAspect.name); + return prev; + }, new Map()); // Map + + const aspectData = { + ...queryResult[0], + subAspect: undefined, + subAspects: Array.from(subAspectsList, ([id, name]) => ({ id, name })), + }; + + return c.json(aspectData); + } + ) + // Create aspect + .post( + "/", + requestValidator("json", aspectFormSchema), + async (c) => { + const aspectData = c.req.valid("json"); + + const aspect = await db + .insert(aspects) + .values({ + name: aspectData.name, + }) + .returning(); + + if (aspectData.subAspects) { + const subAspectsArray = JSON.parse(aspectData.subAspects) as string[]; + + if (subAspectsArray.length) { + await db.insert(subAspects).values( + subAspectsArray.map((subAspect) => ({ + aspectId: aspect[0].id, + name: subAspect, + })) + ); + } + } + + return c.json( + { + message: "Aspect created successfully", + }, + 201 + ); + } + ) + // Update aspect + .patch( + "/:id", + requestValidator("json", aspectUpdateSchema), + async (c) => { + const aspectId = c.req.param("id"); + const aspectData = c.req.valid("json"); + + const aspect = await db + .select() + .from(aspects) + .where(and(eq(aspects.id, aspectId), isNull(aspects.deletedAt))); + + if (!aspect[0]) return c.notFound(); + + await db + .update(aspects) + .set({ + ...aspectData, + updatedAt: new Date(), + }) + .where(eq(aspects.id, aspectId)); + + if (aspectData.subAspects) { + const subAspectsArray = JSON.parse(aspectData.subAspects) as string[]; + + await db.delete(subAspects).where(eq(subAspects.aspectId, aspectId)); + + if (subAspectsArray.length) { + await db.insert(subAspects).values( + subAspectsArray.map((subAspect) => ({ + aspectId: aspectId, + name: subAspect, + })) + ); + } + } + + return c.json({ + message: "Aspect updated successfully", + }); + } + ) + // Delete aspect + .delete( + "/:id", + requestValidator( + "form", + z.object({ + skipTrash: z.string().default("false"), + }) + ), + async (c) => { + const aspectId = c.req.param("id"); + + const skipTrash = c.req.valid("form").skipTrash.toLowerCase() === "true"; + + const aspect = await db + .select() + .from(aspects) + .where(and(eq(aspects.id, aspectId), skipTrash ? undefined : isNull(aspects.deletedAt))); + + if (!aspect[0]) + throw new HTTPException(404, { + message: "The aspect is not found", + }); + + if (skipTrash) { + await db.delete(aspects).where(eq(aspects.id, aspectId)); + } else { + await db + .update(aspects) + .set({ + deletedAt: new Date(), + }) + .where(and(eq(aspects.id, aspectId), isNull(aspects.deletedAt))); + } + return c.json({ + message: "Aspect deleted successfully", + }); + } + ) + // Undo delete + .patch( + "/restore/:id", + async (c) => { + const aspectId = c.req.param("id"); + + const aspect = (await db.select().from(aspects).where(eq(aspects.id, aspectId)))[0]; + + if (!aspect) return c.notFound(); + + if (!aspect.deletedAt) { + throw new HTTPException(400, { + message: "The aspect is not deleted", + }); + } + + await db.update(aspects).set({ deletedAt: null }).where(eq(aspects.id, aspectId)); + + return c.json({ + message: "Aspect restored successfully", + }); + } + ) + // Create sub aspect + .post( + "/subAspect", + requestValidator("json", subAspectFormSchema), + async (c) => { + const subAspectData = c.req.valid("json"); + + const aspect = await db + .select() + .from(aspects) + .where(and(eq(aspects.id, subAspectData.aspectId), isNull(aspects.deletedAt))); + + if (!aspect[0]) + throw new HTTPException(404, { + message: "The aspect is not found", + }); + + await db.insert(subAspects).values(subAspectData); + + return c.json( + { + message: "Sub aspect created successfully", + }, + 201 + ); + } + ) + // Update sub aspect + .patch( + "/subAspect/:id", + requestValidator("json", subAspectUpdateSchema), + async (c) => { + const subAspectId = c.req.param("id"); + const subAspectData = c.req.valid("json"); + + const subAspect = await db + .select() + .from(subAspects) + .where(eq(subAspects.id, subAspectId)); + + if (!subAspect[0]) + throw new HTTPException(404, { + message: "The sub aspect is not found", + }); + + await db + .update(subAspects) + .set({ + ...subAspectData, + updatedAt: new Date(), + }) + .where(eq(subAspects.id, subAspectId)); + + return c.json({ + message: "Sub aspect updated successfully", + }); + } + ) + // Delete sub aspect + .delete( + "/subAspect/:id", + async (c) => { + const subAspectId = c.req.param("id"); + + const subAspect = await db + .select() + .from(subAspects) + .where(eq(subAspects.id, subAspectId)); + + if (!subAspect[0]) + throw new HTTPException(404, { + message: "The sub aspect is not found", + }); + + await db.delete(subAspects).where(eq(subAspects.id, subAspectId)); + + return c.json({ + message: "Sub aspect deleted successfully", + }); + } + ) + // Get sub aspects by aspect ID + .get( + "/subAspects/:aspectId", + async (c) => { + const aspectId = c.req.param("aspectId"); + + const aspect = await db + .select() + .from(aspects) + .where(and(eq(aspects.id, aspectId), isNull(aspects.deletedAt))); + + if (!aspect[0]) + throw new HTTPException(404, { + message: "The aspect is not found", + }); + + const subAspectsData = await db + .select() + .from(subAspects) + .where(eq(subAspects.aspectId, aspectId)); + + return c.json({ + subAspects: subAspectsData, + }); + } + ); + +export default managementAspectRoute; From 94cf958318f62c07b67cb8e653a69f00a0810cfa Mon Sep 17 00:00:00 2001 From: percyfikri Date: Mon, 12 Aug 2024 11:33:56 +0700 Subject: [PATCH 02/24] update : add checkpermission and added api merge for aspects and subAspects --- apps/backend/src/data/permissions.ts | 15 + apps/backend/src/index.ts | 4 +- .../src/routes/managementAspect/route.ts | 827 ++++++++++-------- 3 files changed, 469 insertions(+), 377 deletions(-) diff --git a/apps/backend/src/data/permissions.ts b/apps/backend/src/data/permissions.ts index 1e91356..9c18eca 100644 --- a/apps/backend/src/data/permissions.ts +++ b/apps/backend/src/data/permissions.ts @@ -32,6 +32,21 @@ const permissionsData = [ { code: "roles.delete", }, + { + code: "managementAspect.readAll", + }, + { + code: "managementAspect.create", + }, + { + code: "managementAspect.update", + }, + { + code: "managementAspect.delete", + }, + { + code: "managementAspect.restore", + }, ] as const; export type SpecificPermissionCode = (typeof permissionsData)[number]["code"]; diff --git a/apps/backend/src/index.ts b/apps/backend/src/index.ts index 252a875..4b863c8 100644 --- a/apps/backend/src/index.ts +++ b/apps/backend/src/index.ts @@ -3,7 +3,7 @@ import { configDotenv } from "dotenv"; import { Hono } from "hono"; import authRoutes from "./routes/auth/route"; import usersRoute from "./routes/users/route"; -import aspectsRoute from "./routes/managementAspect/route"; +import managementAspectsRoute from "./routes/managementAspect/route"; import { verifyAccessToken } from "./utils/authUtils"; import permissionRoutes from "./routes/permissions/route"; import { cors } from "hono/cors"; @@ -79,7 +79,7 @@ const routes = app .route("/dashboard", dashboardRoutes) .route("/roles", rolesRoute) .route("/dev", devRoutes) - .route("/management-aspect", aspectsRoute) + .route("/management-aspect", managementAspectsRoute) .onError((err, c) => { if (err instanceof DashboardError) { return c.json( diff --git a/apps/backend/src/routes/managementAspect/route.ts b/apps/backend/src/routes/managementAspect/route.ts index 80cf70e..8f0074a 100644 --- a/apps/backend/src/routes/managementAspect/route.ts +++ b/apps/backend/src/routes/managementAspect/route.ts @@ -1,418 +1,495 @@ -import { and, eq, ilike, isNull, or, sql } from "drizzle-orm"; -import { Hono } from "hono"; + import { and, eq, ilike, isNull, or, sql } from "drizzle-orm"; + import { Hono } from "hono"; -import { z } from "zod"; -import { HTTPException } from "hono/http-exception"; -import db from "../../drizzle"; -import { aspects } from "../../drizzle/schema/aspects"; -import { subAspects } from "../../drizzle/schema/subAspects"; -import HonoEnv from "../../types/HonoEnv"; -import requestValidator from "../../utils/requestValidator"; -import authInfo from "../../middlewares/authInfo"; -import checkPermission from "../../middlewares/checkPermission"; + import { z } from "zod"; + import { HTTPException } from "hono/http-exception"; + import db from "../../drizzle"; + import { aspects } from "../../drizzle/schema/aspects"; + import { subAspects } from "../../drizzle/schema/subAspects"; + import HonoEnv from "../../types/HonoEnv"; + import requestValidator from "../../utils/requestValidator"; + import authInfo from "../../middlewares/authInfo"; + import checkPermission from "../../middlewares/checkPermission"; -// Schema for creating and updating aspects -export const aspectFormSchema = z.object({ - name: z.string().min(1).max(50), - subAspects: z - .string() - .refine( - (data) => { - try { - const parsed = JSON.parse(data); - return Array.isArray(parsed); - } catch { - return false; + // Schema for creating and updating aspects + export const aspectFormSchema = z.object({ + name: z.string().min(1).max(50), + subAspects: z + .string() + .refine( + (data) => { + try { + const parsed = JSON.parse(data); + return Array.isArray(parsed); + } catch { + return false; + } + }, + { + message: "Sub Aspects must be an array", } - }, - { - message: "Sub Aspects must be an array", + ) + .optional(), + }); + + export const aspectUpdateSchema = aspectFormSchema.extend({ + subAspects: z.string().optional().or(z.literal("")), + }); + + // Schema for creating and updating subAspects + export const subAspectFormSchema = z.object({ + name: z.string().min(1).max(50), + aspectId: z.string().uuid(), + }); + + export const subAspectUpdateSchema = subAspectFormSchema.extend({}); + + const managementAspectRoute = new Hono() + .use(authInfo) + /** + * Get All Aspects (With Metadata) + * + * Query params: + * - includeTrashed: boolean (default: false) + * - withMetadata: boolean + */ + // Get all aspects + .get( + "/", + checkPermission("managementAspect.readAll"), + requestValidator( + "query", + z.object({ + includeTrashed: z + .string() + .optional() + .transform((v) => v?.toLowerCase() === "true"), + withMetadata: z + .string() + .optional() + .transform((v) => v?.toLowerCase() === "true"), + page: z.coerce.number().int().min(0).default(0), + limit: z.coerce.number().int().min(1).max(1000).default(10), + q: z.string().default(""), + }) + ), + async (c) => { + const { includeTrashed, page, limit, q } = c.req.valid("query"); + + const totalCountQuery = includeTrashed + ? sql`(SELECT count(*) FROM ${aspects})` + : sql`(SELECT count(*) FROM ${aspects} WHERE ${aspects.deletedAt} IS NULL)`; + + const result = await db + .select({ + id: aspects.id, + name: aspects.name, + createdAt: aspects.createdAt, + updatedAt: aspects.updatedAt, + ...(includeTrashed ? { deletedAt: aspects.deletedAt } : {}), + fullCount: totalCountQuery, + }) + .from(aspects) + .where( + and( + includeTrashed ? undefined : isNull(aspects.deletedAt), + q ? or(ilike(aspects.name, q), eq(aspects.id, q)) : undefined + ) + ) + .offset(page * limit) + .limit(limit); + + return c.json({ + data: result.map((d) => ({ ...d, fullCount: undefined })), + _metadata: { + currentPage: page, + totalPages: Math.ceil((Number(result[0]?.fullCount) ?? 0) / limit), + totalItems: Number(result[0]?.fullCount) ?? 0, + perPage: limit, + }, + }); } ) - .optional(), -}); - -export const aspectUpdateSchema = aspectFormSchema.extend({ - subAspects: z.string().optional().or(z.literal("")), -}); - -// Schema for creating and updating subAspects -export const subAspectFormSchema = z.object({ - name: z.string().min(1).max(50), - aspectId: z.string().uuid(), -}); - -export const subAspectUpdateSchema = subAspectFormSchema.extend({}); - -const managementAspectRoute = new Hono() - .use(authInfo) - /** - * Get All Aspects (With Metadata) - * - * Query params: - * - includeTrashed: boolean (default: false) - * - withMetadata: boolean - */ - // Get all aspects - .get( - "/", - requestValidator( - "query", - z.object({ - includeTrashed: z - .string() - .optional() - .transform((v) => v?.toLowerCase() === "true"), - withMetadata: z - .string() - .optional() - .transform((v) => v?.toLowerCase() === "true"), - page: z.coerce.number().int().min(0).default(0), - limit: z.coerce.number().int().min(1).max(1000).default(10), - q: z.string().default(""), - }) - ), - async (c) => { - const { includeTrashed, page, limit, q } = c.req.valid("query"); - - const totalCountQuery = includeTrashed - ? sql`(SELECT count(*) FROM ${aspects})` - : sql`(SELECT count(*) FROM ${aspects} WHERE ${aspects.deletedAt} IS NULL)`; - - const result = await db - .select({ - id: aspects.id, - name: aspects.name, - createdAt: aspects.createdAt, - updatedAt: aspects.updatedAt, - ...(includeTrashed ? { deletedAt: aspects.deletedAt } : {}), - fullCount: totalCountQuery, + + // Get aspect by id + .get( + "/:id", + checkPermission("managementAspect.readAll"), + requestValidator( + "query", + z.object({ + includeTrashed: z.string().default("false"), }) - .from(aspects) - .where( - and( - includeTrashed ? undefined : isNull(aspects.deletedAt), - q ? or(ilike(aspects.name, q), eq(aspects.id, q)) : undefined - ) - ) - .offset(page * limit) - .limit(limit); + ), + async (c) => { + const aspectId = c.req.param("id"); - return c.json({ - data: result.map((d) => ({ ...d, fullCount: undefined })), - _metadata: { - currentPage: page, - totalPages: Math.ceil((Number(result[0]?.fullCount) ?? 0) / limit), - totalItems: Number(result[0]?.fullCount) ?? 0, - perPage: limit, - }, - }); - } - ) - // Get aspect by id - .get( - "/:id", - requestValidator( - "query", - z.object({ - includeTrashed: z.string().default("false"), - }) - ), - async (c) => { - const aspectId = c.req.param("id"); + if (!aspectId) throw new HTTPException(400, { message: "Missing id" }); - if (!aspectId) throw new HTTPException(400, { message: "Missing id" }); + const includeTrashed = + c.req.query("includeTrashed")?.toLowerCase() === "true"; - const includeTrashed = - c.req.query("includeTrashed")?.toLowerCase() === "true"; + const queryResult = await db + .select({ + id: aspects.id, + name: aspects.name, + createdAt: aspects.createdAt, + updatedAt: aspects.updatedAt, + ...(includeTrashed ? { deletedAt: aspects.deletedAt } : {}), + subAspect: { + name: subAspects.name, + id: subAspects.id, + }, + }) + .from(aspects) + .leftJoin(subAspects, eq(aspects.id, subAspects.aspectId)) + .where( + and( + eq(aspects.id, aspectId), + !includeTrashed ? isNull(aspects.deletedAt) : undefined + ) + ); - const queryResult = await db - .select({ - id: aspects.id, - name: aspects.name, - createdAt: aspects.createdAt, - updatedAt: aspects.updatedAt, - ...(includeTrashed ? { deletedAt: aspects.deletedAt } : {}), - subAspect: { - name: subAspects.name, - id: subAspects.id, + if (!queryResult.length) + throw new HTTPException(404, { + message: "The aspect does not exist", + }); + + const subAspectsList = queryResult.reduce((prev, curr) => { + if (!curr.subAspect) return prev; + prev.set(curr.subAspect.id, curr.subAspect.name); + return prev; + }, new Map()); // Map + + const aspectData = { + ...queryResult[0], + subAspect: undefined, + subAspects: Array.from(subAspectsList, ([id, name]) => ({ id, name })), + }; + + return c.json(aspectData); + } + ) + + // Create aspect + .post( + "/", + checkPermission("managementAspect.create"), + requestValidator("json", aspectFormSchema), + async (c) => { + const aspectData = c.req.valid("json"); + + // Validasi untuk mengecek apakah nama aspek sudah ada + const existingAspect = await db + .select() + .from(aspects) + .where(ilike(aspects.name, aspectData.name)); + + if (existingAspect.length > 0) { + throw new HTTPException(400, { message: "Aspect name already existss" }); + } + + const aspect = await db + .insert(aspects) + .values({ + name: aspectData.name, + }) + .returning(); + + if (aspectData.subAspects) { + const subAspectsArray = JSON.parse(aspectData.subAspects) as string[]; + + if (subAspectsArray.length) { + await db.insert(subAspects).values( + subAspectsArray.map((subAspect) => ({ + aspectId: aspect[0].id, + name: subAspect, + })) + ); + } + } + + return c.json( + { + message: "Aspect created successfully", }, - }) - .from(aspects) - .leftJoin(subAspects, eq(aspects.id, subAspects.aspectId)) - .where( - and( - eq(aspects.id, aspectId), - !includeTrashed ? isNull(aspects.deletedAt) : undefined - ) + 201 ); - - if (!queryResult.length) - throw new HTTPException(404, { - message: "The aspect does not exist", - }); - - const subAspectsList = queryResult.reduce((prev, curr) => { - if (!curr.subAspect) return prev; - prev.set(curr.subAspect.id, curr.subAspect.name); - return prev; - }, new Map()); // Map - - const aspectData = { - ...queryResult[0], - subAspect: undefined, - subAspects: Array.from(subAspectsList, ([id, name]) => ({ id, name })), - }; - - return c.json(aspectData); - } - ) - // Create aspect - .post( - "/", - requestValidator("json", aspectFormSchema), - async (c) => { - const aspectData = c.req.valid("json"); - - const aspect = await db - .insert(aspects) - .values({ - name: aspectData.name, - }) - .returning(); - - if (aspectData.subAspects) { - const subAspectsArray = JSON.parse(aspectData.subAspects) as string[]; - - if (subAspectsArray.length) { - await db.insert(subAspects).values( - subAspectsArray.map((subAspect) => ({ - aspectId: aspect[0].id, - name: subAspect, - })) - ); - } } + ) - return c.json( - { - message: "Aspect created successfully", - }, - 201 - ); - } - ) - // Update aspect - .patch( - "/:id", - requestValidator("json", aspectUpdateSchema), - async (c) => { - const aspectId = c.req.param("id"); - const aspectData = c.req.valid("json"); + // Update aspect + .patch( + "/:id", + checkPermission("managementAspect.update"), + requestValidator("json", aspectUpdateSchema), + async (c) => { + const aspectId = c.req.param("id"); + const aspectData = c.req.valid("json"); - const aspect = await db - .select() - .from(aspects) - .where(and(eq(aspects.id, aspectId), isNull(aspects.deletedAt))); - - if (!aspect[0]) return c.notFound(); - - await db - .update(aspects) - .set({ - ...aspectData, - updatedAt: new Date(), - }) - .where(eq(aspects.id, aspectId)); - - if (aspectData.subAspects) { - const subAspectsArray = JSON.parse(aspectData.subAspects) as string[]; - - await db.delete(subAspects).where(eq(subAspects.aspectId, aspectId)); - - if (subAspectsArray.length) { - await db.insert(subAspects).values( - subAspectsArray.map((subAspect) => ({ - aspectId: aspectId, - name: subAspect, - })) + // Validasi untuk mengecek apakah nama aspek baru sudah ada + const existingAspect = await db + .select() + .from(aspects) + .where( + and( + ilike(aspects.name, aspectData.name), + isNull(aspects.deletedAt), + sql`${aspects.id} <> ${aspectId}` + ) ); + + if (existingAspect.length > 0) { + throw new HTTPException(400, { message: "Aspect name already exists" }); } - } - return c.json({ - message: "Aspect updated successfully", - }); - } - ) - // Delete aspect - .delete( - "/:id", - requestValidator( - "form", - z.object({ - skipTrash: z.string().default("false"), - }) - ), - async (c) => { - const aspectId = c.req.param("id"); + const aspect = await db + .select() + .from(aspects) + .where(and(eq(aspects.id, aspectId), isNull(aspects.deletedAt))); - const skipTrash = c.req.valid("form").skipTrash.toLowerCase() === "true"; + if (!aspect[0]) return c.notFound(); - const aspect = await db - .select() - .from(aspects) - .where(and(eq(aspects.id, aspectId), skipTrash ? undefined : isNull(aspects.deletedAt))); - - if (!aspect[0]) - throw new HTTPException(404, { - message: "The aspect is not found", - }); - - if (skipTrash) { - await db.delete(aspects).where(eq(aspects.id, aspectId)); - } else { await db .update(aspects) .set({ - deletedAt: new Date(), + ...aspectData, + updatedAt: new Date(), }) - .where(and(eq(aspects.id, aspectId), isNull(aspects.deletedAt))); - } - return c.json({ - message: "Aspect deleted successfully", - }); - } - ) - // Undo delete - .patch( - "/restore/:id", - async (c) => { - const aspectId = c.req.param("id"); + .where(eq(aspects.id, aspectId)); - const aspect = (await db.select().from(aspects).where(eq(aspects.id, aspectId)))[0]; + if (aspectData.subAspects) { + const subAspectsArray = JSON.parse(aspectData.subAspects) as string[]; - if (!aspect) return c.notFound(); + await db.delete(subAspects).where(eq(subAspects.aspectId, aspectId)); - if (!aspect.deletedAt) { - throw new HTTPException(400, { - message: "The aspect is not deleted", + if (subAspectsArray.length) { + await db.insert(subAspects).values( + subAspectsArray.map((subAspect) => ({ + aspectId: aspectId, + name: subAspect, + })) + ); + } + } + + return c.json({ + message: "Aspect updated successfully", }); } + ) - await db.update(aspects).set({ deletedAt: null }).where(eq(aspects.id, aspectId)); - - return c.json({ - message: "Aspect restored successfully", - }); - } - ) - // Create sub aspect - .post( - "/subAspect", - requestValidator("json", subAspectFormSchema), - async (c) => { - const subAspectData = c.req.valid("json"); - - const aspect = await db - .select() - .from(aspects) - .where(and(eq(aspects.id, subAspectData.aspectId), isNull(aspects.deletedAt))); - - if (!aspect[0]) - throw new HTTPException(404, { - message: "The aspect is not found", - }); - - await db.insert(subAspects).values(subAspectData); - - return c.json( - { - message: "Sub aspect created successfully", - }, - 201 - ); - } - ) - // Update sub aspect - .patch( - "/subAspect/:id", - requestValidator("json", subAspectUpdateSchema), - async (c) => { - const subAspectId = c.req.param("id"); - const subAspectData = c.req.valid("json"); - - const subAspect = await db - .select() - .from(subAspects) - .where(eq(subAspects.id, subAspectId)); - - if (!subAspect[0]) - throw new HTTPException(404, { - message: "The sub aspect is not found", - }); - - await db - .update(subAspects) - .set({ - ...subAspectData, - updatedAt: new Date(), + // Delete aspect + .delete( + "/:id", + checkPermission("managementAspect.delete"), + requestValidator( + "form", + z.object({ + skipTrash: z.string().default("false"), }) - .where(eq(subAspects.id, subAspectId)); + ), + async (c) => { + const aspectId = c.req.param("id"); - return c.json({ - message: "Sub aspect updated successfully", - }); - } - ) - // Delete sub aspect - .delete( - "/subAspect/:id", - async (c) => { - const subAspectId = c.req.param("id"); + const skipTrash = c.req.valid("form").skipTrash.toLowerCase() === "true"; - const subAspect = await db - .select() - .from(subAspects) - .where(eq(subAspects.id, subAspectId)); + const aspect = await db + .select() + .from(aspects) + .where(and(eq(aspects.id, aspectId), skipTrash ? undefined : isNull(aspects.deletedAt))); - if (!subAspect[0]) - throw new HTTPException(404, { - message: "The sub aspect is not found", + if (!aspect[0]) + throw new HTTPException(404, { + message: "The aspect is not found", + }); + + if (skipTrash) { + await db.delete(aspects).where(eq(aspects.id, aspectId)); + } else { + await db + .update(aspects) + .set({ + deletedAt: new Date(), + }) + .where(and(eq(aspects.id, aspectId), isNull(aspects.deletedAt))); + } + return c.json({ + message: "Aspect deleted successfully", }); + } + ) - await db.delete(subAspects).where(eq(subAspects.id, subAspectId)); + // Undo delete + .patch( + "/restore/:id", + checkPermission("managementAspect.restore"), + async (c) => { + const aspectId = c.req.param("id"); - return c.json({ - message: "Sub aspect deleted successfully", - }); - } - ) - // Get sub aspects by aspect ID - .get( - "/subAspects/:aspectId", - async (c) => { - const aspectId = c.req.param("aspectId"); + const aspect = (await db.select().from(aspects).where(eq(aspects.id, aspectId)))[0]; - const aspect = await db - .select() - .from(aspects) - .where(and(eq(aspects.id, aspectId), isNull(aspects.deletedAt))); + if (!aspect) return c.notFound(); - if (!aspect[0]) - throw new HTTPException(404, { - message: "The aspect is not found", + if (!aspect.deletedAt) { + throw new HTTPException(400, { + message: "The aspect is not deleted", + }); + } + + await db.update(aspects).set({ deletedAt: null }).where(eq(aspects.id, aspectId)); + + return c.json({ + message: "Aspect restored successfully", }); + } + ) - const subAspectsData = await db - .select() - .from(subAspects) - .where(eq(subAspects.aspectId, aspectId)); + // Get sub aspects by aspect ID + .get( + "/subAspects/:aspectId", + checkPermission("managementAspect.readAll"), + async (c) => { + const aspectId = c.req.param("aspectId"); - return c.json({ - subAspects: subAspectsData, - }); - } - ); + const aspect = await db + .select() + .from(aspects) + .where(and(eq(aspects.id, aspectId), isNull(aspects.deletedAt))); + + if (!aspect[0]) + throw new HTTPException(404, { + message: "The aspect is not found", + }); + + const subAspectsData = await db + .select() + .from(subAspects) + .where(eq(subAspects.aspectId, aspectId)); + + return c.json({ + subAspects: subAspectsData, + }); + } + ) + + // Create sub aspect + .post( + "/subAspect", + checkPermission("managementAspect.create"), + requestValidator("json", subAspectFormSchema), + async (c) => { + const subAspectData = c.req.valid("json"); + + // Validasi untuk mengecek apakah nama sub aspek sudah ada + const existingSubAspect = await db + .select() + .from(subAspects) + .where( + and( + ilike(subAspects.name, subAspectData.name), + eq(subAspects.aspectId, subAspectData.aspectId) + ) + ); + + if (existingSubAspect.length > 0) { + throw new HTTPException(400, { message: "Nama Sub Aspek sudah tersedia!" }); + } + + const aspect = await db + .select() + .from(aspects) + .where(and(eq(aspects.id, subAspectData.aspectId), isNull(aspects.deletedAt))); + + if (!aspect[0]) + throw new HTTPException(404, { + message: "The aspect is not found", + }); + + await db.insert(subAspects).values(subAspectData); + + return c.json( + { + message: "Sub aspect created successfully", + }, + 201 + ); + } + ) + + // Update sub aspect + .patch( + "/subAspect/:id", + checkPermission("managementAspect.update"), + requestValidator("json", subAspectUpdateSchema), + async (c) => { + const subAspectId = c.req.param("id"); + const subAspectData = c.req.valid("json"); + + // Validasi untuk mengecek apakah nama sub aspek baru sudah ada + const existingSubAspect = await db + .select() + .from(subAspects) + .where( + and( + ilike(subAspects.name, subAspectData.name), + eq(subAspects.aspectId, subAspectData.aspectId), + sql`${subAspects.id} <> ${subAspectId}` + ) + ); + + if (existingSubAspect.length > 0) { + throw new HTTPException(400, { message: "Name Sub Aspect already exists" }); + } + + const subAspect = await db + .select() + .from(subAspects) + .where(eq(subAspects.id, subAspectId)); + + if (!subAspect[0]) + throw new HTTPException(404, { + message: "The sub aspect is not found", + }); + + await db + .update(subAspects) + .set({ + ...subAspectData, + updatedAt: new Date(), + }) + .where(eq(subAspects.id, subAspectId)); + + return c.json({ + message: "Sub aspect updated successfully", + }); + } + ) + + // Delete sub aspect + .delete( + "/subAspect/:id", + checkPermission("managementAspect.delete"), + async (c) => { + const subAspectId = c.req.param("id"); + + const subAspect = await db + .select() + .from(subAspects) + .where(eq(subAspects.id, subAspectId)); + + if (!subAspect[0]) + throw new HTTPException(404, { + message: "The sub aspect is not found", + }); + + await db.delete(subAspects).where(eq(subAspects.id, subAspectId)); + + return c.json({ + message: "Sub aspect deleted successfully", + }); + } + ); + + export default managementAspectRoute; -export default managementAspectRoute; From 625420417e295de6d5485dafdffc43f6f3ed3385 Mon Sep 17 00:00:00 2001 From: percyfikri Date: Wed, 14 Aug 2024 14:22:58 +0700 Subject: [PATCH 03/24] update : Revision after first pull request on management-aspect --- .../src/routes/managementAspect/route.ts | 363 +++++++++--------- 1 file changed, 180 insertions(+), 183 deletions(-) diff --git a/apps/backend/src/routes/managementAspect/route.ts b/apps/backend/src/routes/managementAspect/route.ts index 8f0074a..dbbf1fb 100644 --- a/apps/backend/src/routes/managementAspect/route.ts +++ b/apps/backend/src/routes/managementAspect/route.ts @@ -1,51 +1,52 @@ - import { and, eq, ilike, isNull, or, sql } from "drizzle-orm"; - import { Hono } from "hono"; +import { and, eq, ilike, isNull, or, sql } from "drizzle-orm"; +import { Hono } from "hono"; - import { z } from "zod"; - import { HTTPException } from "hono/http-exception"; - import db from "../../drizzle"; - import { aspects } from "../../drizzle/schema/aspects"; - import { subAspects } from "../../drizzle/schema/subAspects"; - import HonoEnv from "../../types/HonoEnv"; - import requestValidator from "../../utils/requestValidator"; - import authInfo from "../../middlewares/authInfo"; - import checkPermission from "../../middlewares/checkPermission"; +import { z } from "zod"; +import db from "../../drizzle"; +import { aspects } from "../../drizzle/schema/aspects"; +import { subAspects } from "../../drizzle/schema/subAspects"; +import HonoEnv from "../../types/HonoEnv"; +import requestValidator from "../../utils/requestValidator"; +import authInfo from "../../middlewares/authInfo"; +import checkPermission from "../../middlewares/checkPermission"; +import { forbidden } from "../../errors/DashboardError"; +import { notFound } from "../../errors/DashboardError"; - // Schema for creating and updating aspects - export const aspectFormSchema = z.object({ - name: z.string().min(1).max(50), - subAspects: z - .string() - .refine( - (data) => { - try { - const parsed = JSON.parse(data); - return Array.isArray(parsed); - } catch { - return false; - } - }, - { - message: "Sub Aspects must be an array", +// Schema for creating and updating aspects +export const aspectFormSchema = z.object({ + name: z.string().min(1).max(50), + subAspects: z + .string() + .refine( + (data) => { + try { + const parsed = JSON.parse(data); + return Array.isArray(parsed); + } catch { + return false; } - ) - .optional(), - }); + }, + { + message: "Sub Aspects must be an array", + } + ) + .optional(), +}); - export const aspectUpdateSchema = aspectFormSchema.extend({ - subAspects: z.string().optional().or(z.literal("")), - }); +export const aspectUpdateSchema = aspectFormSchema.extend({ + subAspects: z.string().optional().or(z.literal("")), +}); - // Schema for creating and updating subAspects - export const subAspectFormSchema = z.object({ - name: z.string().min(1).max(50), - aspectId: z.string().uuid(), - }); +// Schema for creating and updating subAspects +export const subAspectFormSchema = z.object({ + name: z.string().min(1).max(50), + aspectId: z.string().uuid(), +}); - export const subAspectUpdateSchema = subAspectFormSchema.extend({}); +export const subAspectUpdateSchema = subAspectFormSchema.extend({}); - const managementAspectRoute = new Hono() - .use(authInfo) +const managementAspectRoute = new Hono() + .use(authInfo) /** * Get All Aspects (With Metadata) * @@ -53,6 +54,7 @@ * - includeTrashed: boolean (default: false) * - withMetadata: boolean */ + // Get all aspects .get( "/", @@ -76,8 +78,8 @@ async (c) => { const { includeTrashed, page, limit, q } = c.req.valid("query"); - const totalCountQuery = includeTrashed - ? sql`(SELECT count(*) FROM ${aspects})` + const totalCountQuery = includeTrashed + ? sql`(SELECT count(*) FROM ${aspects})` : sql`(SELECT count(*) FROM ${aspects} WHERE ${aspects.deletedAt} IS NULL)`; const result = await db @@ -110,7 +112,7 @@ }); } ) - + // Get aspect by id .get( "/:id", @@ -124,10 +126,12 @@ async (c) => { const aspectId = c.req.param("id"); - if (!aspectId) throw new HTTPException(400, { message: "Missing id" }); + if (!aspectId) + throw notFound({ + message: "Missing id", + }); - const includeTrashed = - c.req.query("includeTrashed")?.toLowerCase() === "true"; + const includeTrashed = c.req.query("includeTrashed")?.toLowerCase() === "true"; const queryResult = await db .select({ @@ -143,15 +147,10 @@ }) .from(aspects) .leftJoin(subAspects, eq(aspects.id, subAspects.aspectId)) - .where( - and( - eq(aspects.id, aspectId), - !includeTrashed ? isNull(aspects.deletedAt) : undefined - ) - ); + .where(and(eq(aspects.id, aspectId), !includeTrashed ? isNull(aspects.deletedAt) : undefined)); if (!queryResult.length) - throw new HTTPException(404, { + throw forbidden({ message: "The aspect does not exist", }); @@ -172,42 +171,44 @@ ) // Create aspect - .post( - "/", - checkPermission("managementAspect.create"), - requestValidator("json", aspectFormSchema), + .post("/", + checkPermission("managementAspect.create"), + requestValidator("json", aspectFormSchema), async (c) => { const aspectData = c.req.valid("json"); - // Validasi untuk mengecek apakah nama aspek sudah ada - const existingAspect = await db - .select() - .from(aspects) - .where(ilike(aspects.name, aspectData.name)); + // Validation to check if the aspect name already exists + const existingAspect = await db + .select() + .from(aspects) + .where(eq(aspects.name, aspectData.name)); - if (existingAspect.length > 0) { - throw new HTTPException(400, { message: "Aspect name already existss" }); - } - - const aspect = await db - .insert(aspects) - .values({ - name: aspectData.name, - }) - .returning(); - - if (aspectData.subAspects) { - const subAspectsArray = JSON.parse(aspectData.subAspects) as string[]; - - if (subAspectsArray.length) { - await db.insert(subAspects).values( - subAspectsArray.map((subAspect) => ({ - aspectId: aspect[0].id, - name: subAspect, - })) - ); - } + if (existingAspect.length > 0) { + throw forbidden({ + message: "Aspect name already exists", + }); + } + + const aspect = await db + .insert(aspects) + .values({ + name: aspectData.name, + }) + .returning(); + + // if sub-aspects are available, parse them into a string array + if (aspectData.subAspects) { + const subAspectsArray = JSON.parse(aspectData.subAspects) as string[]; + // if there are sub-aspects, insert them into the database + if (subAspectsArray.length) { + await db.insert(subAspects).values( + subAspectsArray.map((subAspect) => ({ + aspectId: aspect[0].id, + name: subAspect, + })) + ); } + } return c.json( { @@ -220,58 +221,61 @@ // Update aspect .patch( - "/:id", - checkPermission("managementAspect.update"), - requestValidator("json", aspectUpdateSchema), + "/:id", + checkPermission("managementAspect.update"), + requestValidator("json", aspectUpdateSchema), async (c) => { const aspectId = c.req.param("id"); const aspectData = c.req.valid("json"); - // Validasi untuk mengecek apakah nama aspek baru sudah ada - const existingAspect = await db - .select() - .from(aspects) - .where( - and( - ilike(aspects.name, aspectData.name), - isNull(aspects.deletedAt), - sql`${aspects.id} <> ${aspectId}` - ) - ); + // Validation to check if the new aspect name already exists + const existingAspect = await db + .select() + .from(aspects) + .where( + and( + eq(aspects.name, aspectData.name), + isNull(aspects.deletedAt), + sql`${aspects.id} <> ${aspectId}` + ) + ); - if (existingAspect.length > 0) { - throw new HTTPException(400, { message: "Aspect name already exists" }); - } + if (existingAspect.length > 0) { + throw forbidden({ + message: "Aspect name already exists", + }); + } - const aspect = await db - .select() - .from(aspects) - .where(and(eq(aspects.id, aspectId), isNull(aspects.deletedAt))); + const aspect = await db + .select() + .from(aspects) + .where(and(eq(aspects.id, aspectId), isNull(aspects.deletedAt))); - if (!aspect[0]) return c.notFound(); + if (!aspect[0]) throw notFound(); - await db - .update(aspects) - .set({ - ...aspectData, - updatedAt: new Date(), - }) - .where(eq(aspects.id, aspectId)); + await db + .update(aspects) + .set({ + ...aspectData, + updatedAt: new Date(), + }) + .where(eq(aspects.id, aspectId)); - if (aspectData.subAspects) { - const subAspectsArray = JSON.parse(aspectData.subAspects) as string[]; + //Update for Sub-Aspects + // if (aspectData.subAspects) { + // const subAspectsArray = JSON.parse(aspectData.subAspects) as string[]; - await db.delete(subAspects).where(eq(subAspects.aspectId, aspectId)); + // await db.delete(subAspects).where(eq(subAspects.aspectId, aspectId)); - if (subAspectsArray.length) { - await db.insert(subAspects).values( - subAspectsArray.map((subAspect) => ({ - aspectId: aspectId, - name: subAspect, - })) - ); - } - } + // if (subAspectsArray.length) { + // await db.insert(subAspects).values( + // subAspectsArray.map((subAspect) => ({ + // aspectId: aspectId, + // name: subAspect, + // })) + // ); + // } + // } return c.json({ message: "Aspect updated successfully", @@ -286,34 +290,31 @@ requestValidator( "form", z.object({ - skipTrash: z.string().default("false"), + // skipTrash: z.string().default("false"), }) ), async (c) => { const aspectId = c.req.param("id"); - const skipTrash = c.req.valid("form").skipTrash.toLowerCase() === "true"; + // const skipTrash = c.req.valid("form").skipTrash.toLowerCase() === "true"; const aspect = await db .select() .from(aspects) - .where(and(eq(aspects.id, aspectId), skipTrash ? undefined : isNull(aspects.deletedAt))); + .where(and(eq(aspects.id, aspectId), isNull(aspects.deletedAt))); if (!aspect[0]) - throw new HTTPException(404, { + throw notFound({ message: "The aspect is not found", }); - if (skipTrash) { - await db.delete(aspects).where(eq(aspects.id, aspectId)); - } else { - await db + await db .update(aspects) .set({ deletedAt: new Date(), }) - .where(and(eq(aspects.id, aspectId), isNull(aspects.deletedAt))); - } + .where(eq(aspects.id, aspectId)); + return c.json({ message: "Aspect deleted successfully", }); @@ -322,8 +323,8 @@ // Undo delete .patch( - "/restore/:id", - checkPermission("managementAspect.restore"), + "/restore/:id", + checkPermission("managementAspect.restore"), async (c) => { const aspectId = c.req.param("id"); @@ -332,7 +333,7 @@ if (!aspect) return c.notFound(); if (!aspect.deletedAt) { - throw new HTTPException(400, { + throw forbidden({ message: "The aspect is not deleted", }); } @@ -345,20 +346,22 @@ } ) - // Get sub aspects by aspect ID + // Get sub aspects by aspect ID .get( - "/subAspects/:aspectId", - checkPermission("managementAspect.readAll"), + "/subAspects/:aspectId", + checkPermission("managementAspect.readAll"), async (c) => { const aspectId = c.req.param("aspectId"); const aspect = await db .select() .from(aspects) - .where(and(eq(aspects.id, aspectId), isNull(aspects.deletedAt))); + .where(and( + eq(aspects.id, aspectId), + isNull(aspects.deletedAt))); if (!aspect[0]) - throw new HTTPException(404, { + throw notFound({ message: "The aspect is not found", }); @@ -375,34 +378,35 @@ // Create sub aspect .post( - "/subAspect", - checkPermission("managementAspect.create"), - requestValidator("json", subAspectFormSchema), + "/subAspect", + checkPermission("managementAspect.create"), + requestValidator("json", subAspectFormSchema), async (c) => { const subAspectData = c.req.valid("json"); - // Validasi untuk mengecek apakah nama sub aspek sudah ada + // Validation to check if the sub aspect name already exists const existingSubAspect = await db .select() .from(subAspects) .where( and( - ilike(subAspects.name, subAspectData.name), - eq(subAspects.aspectId, subAspectData.aspectId) - ) - ); + eq(subAspects.name, subAspectData.name), + eq(subAspects.aspectId, subAspectData.aspectId))); if (existingSubAspect.length > 0) { - throw new HTTPException(400, { message: "Nama Sub Aspek sudah tersedia!" }); + throw forbidden({ message: "Nama Sub Aspek sudah tersedia!" }); } - const aspect = await db + const [aspect] = await db .select() .from(aspects) - .where(and(eq(aspects.id, subAspectData.aspectId), isNull(aspects.deletedAt))); + .where( + and( + eq(aspects.id, subAspectData.aspectId), + isNull(aspects.deletedAt))); - if (!aspect[0]) - throw new HTTPException(404, { + if (!aspect) + throw forbidden({ message: "The aspect is not found", }); @@ -419,36 +423,25 @@ // Update sub aspect .patch( - "/subAspect/:id", - checkPermission("managementAspect.update"), - requestValidator("json", subAspectUpdateSchema), + "/subAspect/:id", checkPermission("managementAspect.update"), + requestValidator("json", subAspectUpdateSchema), async (c) => { const subAspectId = c.req.param("id"); const subAspectData = c.req.valid("json"); - // Validasi untuk mengecek apakah nama sub aspek baru sudah ada + // Validation to check if the new sub aspect name already exists const existingSubAspect = await db .select() .from(subAspects) .where( - and( - ilike(subAspects.name, subAspectData.name), - eq(subAspects.aspectId, subAspectData.aspectId), - sql`${subAspects.id} <> ${subAspectId}` - ) - ); + eq(subAspects.aspectId, subAspectData.aspectId)); if (existingSubAspect.length > 0) { - throw new HTTPException(400, { message: "Name Sub Aspect already exists" }); + throw forbidden({ message: "Name Sub Aspect already exists" }); } - const subAspect = await db - .select() - .from(subAspects) - .where(eq(subAspects.id, subAspectId)); - - if (!subAspect[0]) - throw new HTTPException(404, { + if (!existingSubAspect[0]) + throw notFound({ message: "The sub aspect is not found", }); @@ -463,13 +456,12 @@ return c.json({ message: "Sub aspect updated successfully", }); - } - ) + }) // Delete sub aspect .delete( - "/subAspect/:id", - checkPermission("managementAspect.delete"), + "/subAspect/:id", + checkPermission("managementAspect.delete"), async (c) => { const subAspectId = c.req.param("id"); @@ -479,11 +471,17 @@ .where(eq(subAspects.id, subAspectId)); if (!subAspect[0]) - throw new HTTPException(404, { + throw notFound({ message: "The sub aspect is not found", }); - await db.delete(subAspects).where(eq(subAspects.id, subAspectId)); + await db + .update(subAspects) + .set({ + deletedAt: new Date(), + }) + .where(eq(subAspects.id, subAspectId)); + // await db.delete(subAspects).where(eq(subAspects.id, subAspectId)); return c.json({ message: "Sub aspect deleted successfully", @@ -491,5 +489,4 @@ } ); - export default managementAspectRoute; - +export default managementAspectRoute; From b30de1b6e3edc2ad8ef8dcadbed9048e792bd8f4 Mon Sep 17 00:00:00 2001 From: falendikategar Date: Thu, 15 Aug 2024 15:24:17 +0700 Subject: [PATCH 04/24] create: API for Assessments --- apps/backend/src/data/permissions.ts | 24 ++ apps/backend/src/routes/assessments/route.ts | 414 +++++++++++++++++++ 2 files changed, 438 insertions(+) create mode 100644 apps/backend/src/routes/assessments/route.ts diff --git a/apps/backend/src/data/permissions.ts b/apps/backend/src/data/permissions.ts index 1e91356..9490851 100644 --- a/apps/backend/src/data/permissions.ts +++ b/apps/backend/src/data/permissions.ts @@ -32,6 +32,30 @@ const permissionsData = [ { code: "roles.delete", }, + { + code: "assessments.readAssessmentScore", + }, + { + code: "assessments.readAllQuestions", + }, + { + code: "assessments.readAnswers", + }, + { + code: "assessments.toggleFlag", + }, + { + code: "assessments.checkAnswer", + }, + { + code: "assessments.uploadFile", + }, + { + code: "assessments.submitAnswer", + }, + { + code: "assessments.updateAnswer", + }, ] as const; export type SpecificPermissionCode = (typeof permissionsData)[number]["code"]; diff --git a/apps/backend/src/routes/assessments/route.ts b/apps/backend/src/routes/assessments/route.ts new file mode 100644 index 0000000..11b7a06 --- /dev/null +++ b/apps/backend/src/routes/assessments/route.ts @@ -0,0 +1,414 @@ +import { and, eq, ilike, or, sql } from "drizzle-orm"; +import { Hono } from "hono"; +import { z } from "zod"; +import db from "../../drizzle"; +import { answers } from "../../drizzle/schema/answers"; +import { options } from "../../drizzle/schema/options"; +import { questions } from "../../drizzle/schema/questions"; +import { subAspects } from "../../drizzle/schema/subAspects"; +import { aspects } from "../../drizzle/schema/aspects"; +import HonoEnv from "../../types/HonoEnv"; +import requestValidator from "../../utils/requestValidator"; +import authInfo from "../../middlewares/authInfo"; +import checkPermission from "../../middlewares/checkPermission"; +import path from "path"; +import fs from 'fs'; + +export const answerFormSchema = z.object({ + optionId: z.string().min(1), + assessmentId: z.string().min(1), + isFlagged: z.boolean().optional().default(false), + filename: z.string().optional(), + validationInformation: z.string().min(1), +}); + +export const answerUpdateSchema = answerFormSchema.partial(); + +// Helper function to save the file +async function saveFile(filePath: string, fileBuffer: Buffer): Promise { + await fs.promises.writeFile(filePath, fileBuffer); +} + +// Function to update the filename in the database +async function updateFilenameInDatabase(answerId: string, flname: string): Promise { + + await db.update(answers) + .set({ + filename: flname, + }) + .where(eq(answers.id, answerId)); +} + +const assessmentsRoute = new Hono() + .use(authInfo) + + // Get data for current Assessment Score from submitted options By Assessment Id + .get( + "/getCurrentAssessmentScore", + checkPermission("assessments.readAssessmentScore"), + requestValidator( + "query", + z.object({ + assessmentId: z.string(), + }) + ), + async (c) => { + const { assessmentId } = c.req.valid("query"); + + // Query to sum the scores of selected options for the current assessment + const result = await db + .select({ + totalScore: sql`SUM(${options.score})`, + }) + .from(answers) + .leftJoin(options, eq(answers.optionId, options.id)) + .where(eq(answers.assessmentId, assessmentId)) + .execute(); + + return c.json({ + assessmentId, + totalScore: result[0]?.totalScore ?? 0, // Return 0 if no answers are found + }); + } + ) + + // Get all Questions and Options that relate to Sub Aspects and Aspects + .get( + "/getAllQuestions", + checkPermission("assessments.readAllQuestions"), + requestValidator( + "query", + z.object({ + page: z.coerce.number().int().min(0).default(0), + limit: z.coerce.number().int().min(1).max(1000).default(1000), + q: z.string().default(""), + }) + ), + async (c) => { + const { page, limit, q } = c.req.valid("query"); + + const totalCountQuery = + sql`(SELECT count(*) + FROM ${options} + LEFT JOIN ${questions} ON ${options.questionId} = ${questions.id} + LEFT JOIN ${subAspects} ON ${questions.subAspectId} = ${subAspects.id} + LEFT JOIN ${aspects} ON ${subAspects.aspectId} = ${aspects.id} + )`; + + const result = await db + .select({ + optionId: options.id, + aspectsId: aspects.id, + aspectsName: aspects.name, + subAspectId: subAspects.id, + subAspectName: subAspects.name, + questionId: questions.id, + questionText: questions.question, + optionText: options.text, + optionScore: options.score, + fullCount: totalCountQuery, + }) + .from(options) + .leftJoin(questions, eq(options.questionId, questions.id)) + .leftJoin(subAspects, eq(questions.subAspectId, subAspects.id)) + .leftJoin(aspects, eq(subAspects.aspectId, aspects.id)) + .where( + and( + q + ? or( + ilike(aspects.name, q), + ilike(subAspects.name, q), + ilike(questions.question, q), + ilike(options.text, q), + ilike(options.score, q), + eq(options.id, q), + + ) + : undefined + ) + ) + .offset(page * limit) + .limit(limit); + + return c.json({ + data: result.map((d) => ({ ...d, fullCount: undefined })), + _metadata: { + currentPage: page, + totalPages: Math.ceil( + (Number(result[0]?.fullCount) ?? 0) / limit + ), + totalItems: Number(result[0]?.fullCount) ?? 0, + perPage: limit, + }, + }); + } + ) + + // Get all Answers Data by Assessment Id + .get( + "/getAnswers", + checkPermission("assessments.readAnswers"), + requestValidator( + "query", + z.object({ + assessmentId: z.string(), // Require assessmentId as a query parameter + withMetadata: z + .string() + .optional() + .transform((v) => v?.toLowerCase() === "true"), + page: z.coerce.number().int().min(0).default(0), + limit: z.coerce.number().int().min(1).max(1000).default(1000), + q: z.string().default(""), + }) + ), + async (c) => { + const { assessmentId, page, limit, q } = c.req.valid("query"); + + // Query to count total answers for the specific assessmentId + const totalCountQuery = sql`(SELECT count(*) FROM ${answers} WHERE ${answers.assessmentId} = ${assessmentId})`; + + // Query to retrieve answers for the specific assessmentId + const result = await db + .select({ + id: answers.id, + assessmentId: answers.assessmentId, + optionId: answers.optionId, + isFlagged: answers.isFlagged, + filename: answers.filename, + validationInformation: answers.validationInformation, + fullCount: totalCountQuery, + }) + .from(answers) + .where( + and( + eq(answers.assessmentId, assessmentId), // Filter by assessmentId + q + ? or( + ilike(answers.filename, q), + ilike(answers.validationInformation, q), + eq(answers.id, q) + ) + : undefined + ) + ) + .offset(page * limit) + .limit(limit); + + return c.json({ + data: result.map((d) => ({ ...d, fullCount: undefined })), + _metadata: { + currentPage: page, + totalPages: Math.ceil( + (Number(result[0]?.fullCount) ?? 0) / limit + ), + totalItems: Number(result[0]?.fullCount) ?? 0, + perPage: limit, + }, + }); + } + ) + + // Toggles the isFlagged field between true and false + .patch( + "/:id/toggleFlag", + checkPermission("assessments.toggleFlag"), + async (c) => { + const answerId = c.req.param("id"); + + // Retrieve the current state of isFlagged + const currentAnswer = await db + .select({ + isFlagged: answers.isFlagged, + }) + .from(answers) + .where(eq(answers.id, answerId)) + .limit(1); + + if (!currentAnswer.length) { + return c.json( + { + message: "Answer not found", + }, + 404 + ); + } + + // Toggle the isFlagged value + const newIsFlaggedValue = !currentAnswer[0].isFlagged; + + // Update the answer with the toggled value + const updatedAnswer = await db + .update(answers) + .set({ + isFlagged: newIsFlaggedValue, + }) + .where(eq(answers.id, answerId)) + .returning(); + + if (!updatedAnswer.length) { + return c.json( + { + message: "Failed to update answer", + }, + 500 + ); + } + + return c.json( + { + message: "Answer flag toggled successfully", + answer: updatedAnswer[0], + }, + 200 + ); + } + ) + + // Get data answers from table answers by optionId and assessmentId + .post( + "/checkDataAnswer", + checkPermission("assessments.checkAnswer"), + async (c) => { + const { optionId, assessmentId } = await c.req.json(); + + const result = await db + .select() + .from(answers) + .where( + and(eq(answers.optionId, optionId), eq(answers.assessmentId, assessmentId)) + ) + .execute(); + + const existingAnswer = result[0]; + + if (existingAnswer) { + return c.json({ exists: true, answerId: existingAnswer.id }); + } else { + return c.json({ exists: false }); + } + } + ) + + // Upload filename to the table answers and save the file on the local storage + .post( + "/uploadFile", + checkPermission("assessments.uploadFile"), + async (c) => { + // Get the Content-Type header + const contentType = c.req.header('content-type'); + if (!contentType || !contentType.includes('multipart/form-data')) { + return c.json({ success: false, message: 'Invalid Content-Type' }); + } + + // Extract boundary + const boundary = contentType.split('boundary=')[1]; + if (!boundary) { + return c.json({ success: false, message: 'Boundary not found' }); + } + + // Get the raw body + const body = await c.req.arrayBuffer(); + const bodyString = Buffer.from(body).toString(); + + // Split the body by the boundary + const parts = bodyString.split(`--${boundary}`); + + for (const part of parts) { + if (part.includes('Content-Disposition: form-data;')) { + // Extract file name + const match = /filename="(.+?)"/.exec(part); + if (match) { + const fileName = match[1]; + const fileContentStart = part.indexOf('\r\n\r\n') + 4; + const fileContentEnd = part.lastIndexOf('\r\n'); + + // Extract file content as Buffer + const fileBuffer = Buffer.from(part.slice(fileContentStart, fileContentEnd), 'binary'); + + // Define file path and save the file + const filePath = path.join('images', Date.now() + '-' + fileName); + await saveFile(filePath, fileBuffer); + + // Assuming answerId is passed as a query parameter or in the form-data + const answerId = c.req.query('answerId'); + if (answerId) { + await updateFilenameInDatabase(answerId, path.basename(filePath)); + } + + // Return the file URL + const fileUrl = `/images/${path.basename(filePath)}`; + return c.json({ success: true, imageUrl: fileUrl }); + } + } + } + + return c.json({ success: false, message: 'No file uploaded' }); + } + ) + + // Submit option to table answers from use-form in frontend + .post( + "/submitAnswer", + checkPermission("assessments.submitAnswer"), + requestValidator("json", answerFormSchema), + async (c) => { + const answerData = c.req.valid("json"); + + const answer = await db + .insert(answers) + .values({ + optionId: answerData.optionId, + assessmentId: answerData.assessmentId, + isFlagged: answerData.isFlagged, + filename: answerData.filename, + validationInformation: answerData.validationInformation, + }) + .returning(); + + return c.json( + { + message: "Answer created successfully", + answer: answer[0], + }, + 201 + ); + } + ) + + // Update answer in table answers if answer changes + .patch( + "/:id/updateAnswer", + checkPermission("assessments.updateAnswer"), + requestValidator("json", answerUpdateSchema), + async (c) => { + const answerId = c.req.param("id"); + const answerData = c.req.valid("json"); + + const updatedAnswer = await db + .update(answers) + .set({ + optionId: answerData.optionId, + }) + .where(eq(answers.id, answerId)) + .returning(); + + if (!updatedAnswer.length) { + return c.json( + { + message: "Answer not found or update failed", + }, + 404 + ); + } + + return c.json( + { + message: "Answer updated successfully", + answer: updatedAnswer[0], + }, + 200 + ); + } + ) + +export default assessmentsRoute; From 82ba52d5b452cdae7d03857ded7adbcbdeabe566 Mon Sep 17 00:00:00 2001 From: falendikategar Date: Thu, 15 Aug 2024 15:29:02 +0700 Subject: [PATCH 05/24] create: route for Assessments --- apps/backend/src/index.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/backend/src/index.ts b/apps/backend/src/index.ts index c0fbe56..380afe3 100644 --- a/apps/backend/src/index.ts +++ b/apps/backend/src/index.ts @@ -15,6 +15,7 @@ import DashboardError from "./errors/DashboardError"; import HonoEnv from "./types/HonoEnv"; import devRoutes from "./routes/dev/route"; import appEnv from "./appEnv"; +import assessmentsRoute from "./routes/assessments/route"; configDotenv(); @@ -78,6 +79,7 @@ const routes = app .route("/dashboard", dashboardRoutes) .route("/roles", rolesRoute) .route("/dev", devRoutes) + .route("/assessments", assessmentsRoute) .onError((err, c) => { if (err instanceof DashboardError) { return c.json( From 26b5b9228a84d4f01b5437a161d80d9742c084ce Mon Sep 17 00:00:00 2001 From: falendikategar Date: Fri, 16 Aug 2024 13:38:20 +0700 Subject: [PATCH 06/24] create: fetch data in assessmentsQueries to FE still error --- .../queries/assessmentsQueries.ts | 72 ++++++++++ .../assessments/index.lazy.tsx | 131 ++++++++++++++++++ .../_dashboardLayout/assessments/index.tsx | 5 + 3 files changed, 208 insertions(+) create mode 100644 apps/frontend/src/modules/assessmentsManagement/queries/assessmentsQueries.ts create mode 100644 apps/frontend/src/routes/_dashboardLayout/assessments/index.lazy.tsx create mode 100644 apps/frontend/src/routes/_dashboardLayout/assessments/index.tsx diff --git a/apps/frontend/src/modules/assessmentsManagement/queries/assessmentsQueries.ts b/apps/frontend/src/modules/assessmentsManagement/queries/assessmentsQueries.ts new file mode 100644 index 0000000..c15dd34 --- /dev/null +++ b/apps/frontend/src/modules/assessmentsManagement/queries/assessmentsQueries.ts @@ -0,0 +1,72 @@ +import client from "@/honoClient"; +import fetchRPC from "@/utils/fetchRPC"; +import { queryOptions } from "@tanstack/react-query"; +import { InferRequestType } from "hono"; + +export const questionsQueryOptions = (page: number, limit: number, q?: string) => + queryOptions({ + queryKey: ["questions", { page, limit, q }], + queryFn: async () => { + const result = await fetchRPC( + client.assessments.getAllQuestions.$get({ + query: { + limit: String(limit), + page: String(page), + q, + }, + }) + ); + console.log('Result from fetchRPC:', result); + return result; + }, + }); + + +export const getUserByIdQueryOptions = (userId: string | undefined) => + queryOptions({ + queryKey: ["user", userId], + queryFn: () => + fetchRPC( + client.users[":id"].$get({ + param: { + id: userId!, + }, + query: {}, + }) + ), + enabled: Boolean(userId), + }); + +export const createUser = async ( + form: InferRequestType["form"] +) => { + return await fetchRPC( + client.users.$post({ + form, + }) + ); +}; + +export const updateUser = async ( + form: InferRequestType<(typeof client.users)[":id"]["$patch"]>["form"] & { + id: string; + } +) => { + return await fetchRPC( + client.users[":id"].$patch({ + param: { + id: form.id, + }, + form, + }) + ); +}; + +export const deleteUser = async (id: string) => { + return await fetchRPC( + client.users[":id"].$delete({ + param: { id }, + form: {}, + }) + ); +}; diff --git a/apps/frontend/src/routes/_dashboardLayout/assessments/index.lazy.tsx b/apps/frontend/src/routes/_dashboardLayout/assessments/index.lazy.tsx new file mode 100644 index 0000000..15175be --- /dev/null +++ b/apps/frontend/src/routes/_dashboardLayout/assessments/index.lazy.tsx @@ -0,0 +1,131 @@ +import { createLazyFileRoute } from '@tanstack/react-router' + +import { Button } from "@/shadcn/components/ui/button" +import { + Card, + CardContent, + CardDescription, + CardFooter, + CardHeader, + CardTitle, +} from "@/shadcn/components/ui/card" +import { Label } from "@/shadcn/components/ui/label" +import { RadioGroup, RadioGroupItem } from "@/shadcn/components/ui/radio-group" +// import ExtractQueryDataType from '@/types/ExtractQueryDataType' +// import { createColumnHelper } from '@tanstack/react-table' +import { questionsQueryOptions } from "@/modules/assessmentsManagement/queries/assessmentsQueries"; +// import { useForm } from '@mantine/form' +import { useQuery } from '@tanstack/react-query' + +// type DataType = ExtractQueryDataType; +// const columnHelper = useForm(); + +export function CardWithAssessment() { + // const { handleSubmit, form } = useForm(); + + const { page = 1, limit = 10, q = '' } = {} + + const { data, isLoading, isError } = useQuery(questionsQueryOptions(page, limit, q)); + + console.log(data) + + if (isLoading) return
Loading...
; + if (isError) return
Error fetching data
; + + // const groupedQuestions = data?.reduce((acc, item) => { + // const { subAspectId, subAspectName } = item; + // if (!acc[subAspectId]) { + // acc[subAspectId] = { + // subAspectName, + // questions: [], + // }; + // } + // acc[subAspectId].questions.push(item); + // return acc; + // }, {} as Record); + + + const renderQuestions = () => { + return data?.data.map((subAspect) => ( +
+

{subAspect.subAspectName}

+ {data?.data.map((question) => ( +
+ + + {data?.data.map((option) => ( +
+ + +
+ ))} +
+
+ ))} +
+ )); + }; + + const renderQuestionNumbers = () => { + const questionNumbers: number[] = []; + data?.data.forEach((subAspect) => { + data?.data.forEach((question, index) => { + questionNumbers.push(index + 1); + }); + }); + + return questionNumbers.map((num) => ( + + )); + }; + + return ( + +
+ + Pertanyaan + + Bacalah pertanyaan dengan hati-hati dan jawablah dengan teliti! + + + +
+
+ {renderQuestions()} +
+
+
+ + + + +
+
+ + Daftar Nomor + + +
+
+ {renderQuestionNumbers()} +
+
+
+
+
+ ); +} + +export const Route = createLazyFileRoute('/_dashboardLayout/assessments/')({ + component: () => +
+

+ Halaman Assessments +

+ +
+}) \ No newline at end of file diff --git a/apps/frontend/src/routes/_dashboardLayout/assessments/index.tsx b/apps/frontend/src/routes/_dashboardLayout/assessments/index.tsx new file mode 100644 index 0000000..57a1b20 --- /dev/null +++ b/apps/frontend/src/routes/_dashboardLayout/assessments/index.tsx @@ -0,0 +1,5 @@ +import { createFileRoute } from '@tanstack/react-router' + +export const Route = createFileRoute('/_dashboardLayout/assessments/')({ + component: () =>
Hello /_dashboardLayout/assessments/!
+}) \ No newline at end of file From 51d249f4c6f466ee42ef95ade704c597deabb849 Mon Sep 17 00:00:00 2001 From: falendikategar Date: Fri, 16 Aug 2024 14:10:02 +0700 Subject: [PATCH 07/24] Revert "create: fetch data in assessmentsQueries to FE still error" This reverts commit 26b5b9228a84d4f01b5437a161d80d9742c084ce. --- .../queries/assessmentsQueries.ts | 72 ---------- .../assessments/index.lazy.tsx | 131 ------------------ .../_dashboardLayout/assessments/index.tsx | 5 - 3 files changed, 208 deletions(-) delete mode 100644 apps/frontend/src/modules/assessmentsManagement/queries/assessmentsQueries.ts delete mode 100644 apps/frontend/src/routes/_dashboardLayout/assessments/index.lazy.tsx delete mode 100644 apps/frontend/src/routes/_dashboardLayout/assessments/index.tsx diff --git a/apps/frontend/src/modules/assessmentsManagement/queries/assessmentsQueries.ts b/apps/frontend/src/modules/assessmentsManagement/queries/assessmentsQueries.ts deleted file mode 100644 index c15dd34..0000000 --- a/apps/frontend/src/modules/assessmentsManagement/queries/assessmentsQueries.ts +++ /dev/null @@ -1,72 +0,0 @@ -import client from "@/honoClient"; -import fetchRPC from "@/utils/fetchRPC"; -import { queryOptions } from "@tanstack/react-query"; -import { InferRequestType } from "hono"; - -export const questionsQueryOptions = (page: number, limit: number, q?: string) => - queryOptions({ - queryKey: ["questions", { page, limit, q }], - queryFn: async () => { - const result = await fetchRPC( - client.assessments.getAllQuestions.$get({ - query: { - limit: String(limit), - page: String(page), - q, - }, - }) - ); - console.log('Result from fetchRPC:', result); - return result; - }, - }); - - -export const getUserByIdQueryOptions = (userId: string | undefined) => - queryOptions({ - queryKey: ["user", userId], - queryFn: () => - fetchRPC( - client.users[":id"].$get({ - param: { - id: userId!, - }, - query: {}, - }) - ), - enabled: Boolean(userId), - }); - -export const createUser = async ( - form: InferRequestType["form"] -) => { - return await fetchRPC( - client.users.$post({ - form, - }) - ); -}; - -export const updateUser = async ( - form: InferRequestType<(typeof client.users)[":id"]["$patch"]>["form"] & { - id: string; - } -) => { - return await fetchRPC( - client.users[":id"].$patch({ - param: { - id: form.id, - }, - form, - }) - ); -}; - -export const deleteUser = async (id: string) => { - return await fetchRPC( - client.users[":id"].$delete({ - param: { id }, - form: {}, - }) - ); -}; diff --git a/apps/frontend/src/routes/_dashboardLayout/assessments/index.lazy.tsx b/apps/frontend/src/routes/_dashboardLayout/assessments/index.lazy.tsx deleted file mode 100644 index 15175be..0000000 --- a/apps/frontend/src/routes/_dashboardLayout/assessments/index.lazy.tsx +++ /dev/null @@ -1,131 +0,0 @@ -import { createLazyFileRoute } from '@tanstack/react-router' - -import { Button } from "@/shadcn/components/ui/button" -import { - Card, - CardContent, - CardDescription, - CardFooter, - CardHeader, - CardTitle, -} from "@/shadcn/components/ui/card" -import { Label } from "@/shadcn/components/ui/label" -import { RadioGroup, RadioGroupItem } from "@/shadcn/components/ui/radio-group" -// import ExtractQueryDataType from '@/types/ExtractQueryDataType' -// import { createColumnHelper } from '@tanstack/react-table' -import { questionsQueryOptions } from "@/modules/assessmentsManagement/queries/assessmentsQueries"; -// import { useForm } from '@mantine/form' -import { useQuery } from '@tanstack/react-query' - -// type DataType = ExtractQueryDataType; -// const columnHelper = useForm(); - -export function CardWithAssessment() { - // const { handleSubmit, form } = useForm(); - - const { page = 1, limit = 10, q = '' } = {} - - const { data, isLoading, isError } = useQuery(questionsQueryOptions(page, limit, q)); - - console.log(data) - - if (isLoading) return
Loading...
; - if (isError) return
Error fetching data
; - - // const groupedQuestions = data?.reduce((acc, item) => { - // const { subAspectId, subAspectName } = item; - // if (!acc[subAspectId]) { - // acc[subAspectId] = { - // subAspectName, - // questions: [], - // }; - // } - // acc[subAspectId].questions.push(item); - // return acc; - // }, {} as Record); - - - const renderQuestions = () => { - return data?.data.map((subAspect) => ( -
-

{subAspect.subAspectName}

- {data?.data.map((question) => ( -
- - - {data?.data.map((option) => ( -
- - -
- ))} -
-
- ))} -
- )); - }; - - const renderQuestionNumbers = () => { - const questionNumbers: number[] = []; - data?.data.forEach((subAspect) => { - data?.data.forEach((question, index) => { - questionNumbers.push(index + 1); - }); - }); - - return questionNumbers.map((num) => ( - - )); - }; - - return ( - -
- - Pertanyaan - - Bacalah pertanyaan dengan hati-hati dan jawablah dengan teliti! - - - -
-
- {renderQuestions()} -
-
-
- - - - -
-
- - Daftar Nomor - - -
-
- {renderQuestionNumbers()} -
-
-
-
-
- ); -} - -export const Route = createLazyFileRoute('/_dashboardLayout/assessments/')({ - component: () => -
-

- Halaman Assessments -

- -
-}) \ No newline at end of file diff --git a/apps/frontend/src/routes/_dashboardLayout/assessments/index.tsx b/apps/frontend/src/routes/_dashboardLayout/assessments/index.tsx deleted file mode 100644 index 57a1b20..0000000 --- a/apps/frontend/src/routes/_dashboardLayout/assessments/index.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { createFileRoute } from '@tanstack/react-router' - -export const Route = createFileRoute('/_dashboardLayout/assessments/')({ - component: () =>
Hello /_dashboardLayout/assessments/!
-}) \ No newline at end of file From 208a1a1fffa1f415570fe6b437fe3e4a983039be Mon Sep 17 00:00:00 2001 From: falendikategar Date: Fri, 16 Aug 2024 14:10:33 +0700 Subject: [PATCH 08/24] Reapply "create: fetch data in assessmentsQueries to FE still error" This reverts commit 51d249f4c6f466ee42ef95ade704c597deabb849. --- .../queries/assessmentsQueries.ts | 72 ++++++++++ .../assessments/index.lazy.tsx | 131 ++++++++++++++++++ .../_dashboardLayout/assessments/index.tsx | 5 + 3 files changed, 208 insertions(+) create mode 100644 apps/frontend/src/modules/assessmentsManagement/queries/assessmentsQueries.ts create mode 100644 apps/frontend/src/routes/_dashboardLayout/assessments/index.lazy.tsx create mode 100644 apps/frontend/src/routes/_dashboardLayout/assessments/index.tsx diff --git a/apps/frontend/src/modules/assessmentsManagement/queries/assessmentsQueries.ts b/apps/frontend/src/modules/assessmentsManagement/queries/assessmentsQueries.ts new file mode 100644 index 0000000..c15dd34 --- /dev/null +++ b/apps/frontend/src/modules/assessmentsManagement/queries/assessmentsQueries.ts @@ -0,0 +1,72 @@ +import client from "@/honoClient"; +import fetchRPC from "@/utils/fetchRPC"; +import { queryOptions } from "@tanstack/react-query"; +import { InferRequestType } from "hono"; + +export const questionsQueryOptions = (page: number, limit: number, q?: string) => + queryOptions({ + queryKey: ["questions", { page, limit, q }], + queryFn: async () => { + const result = await fetchRPC( + client.assessments.getAllQuestions.$get({ + query: { + limit: String(limit), + page: String(page), + q, + }, + }) + ); + console.log('Result from fetchRPC:', result); + return result; + }, + }); + + +export const getUserByIdQueryOptions = (userId: string | undefined) => + queryOptions({ + queryKey: ["user", userId], + queryFn: () => + fetchRPC( + client.users[":id"].$get({ + param: { + id: userId!, + }, + query: {}, + }) + ), + enabled: Boolean(userId), + }); + +export const createUser = async ( + form: InferRequestType["form"] +) => { + return await fetchRPC( + client.users.$post({ + form, + }) + ); +}; + +export const updateUser = async ( + form: InferRequestType<(typeof client.users)[":id"]["$patch"]>["form"] & { + id: string; + } +) => { + return await fetchRPC( + client.users[":id"].$patch({ + param: { + id: form.id, + }, + form, + }) + ); +}; + +export const deleteUser = async (id: string) => { + return await fetchRPC( + client.users[":id"].$delete({ + param: { id }, + form: {}, + }) + ); +}; diff --git a/apps/frontend/src/routes/_dashboardLayout/assessments/index.lazy.tsx b/apps/frontend/src/routes/_dashboardLayout/assessments/index.lazy.tsx new file mode 100644 index 0000000..15175be --- /dev/null +++ b/apps/frontend/src/routes/_dashboardLayout/assessments/index.lazy.tsx @@ -0,0 +1,131 @@ +import { createLazyFileRoute } from '@tanstack/react-router' + +import { Button } from "@/shadcn/components/ui/button" +import { + Card, + CardContent, + CardDescription, + CardFooter, + CardHeader, + CardTitle, +} from "@/shadcn/components/ui/card" +import { Label } from "@/shadcn/components/ui/label" +import { RadioGroup, RadioGroupItem } from "@/shadcn/components/ui/radio-group" +// import ExtractQueryDataType from '@/types/ExtractQueryDataType' +// import { createColumnHelper } from '@tanstack/react-table' +import { questionsQueryOptions } from "@/modules/assessmentsManagement/queries/assessmentsQueries"; +// import { useForm } from '@mantine/form' +import { useQuery } from '@tanstack/react-query' + +// type DataType = ExtractQueryDataType; +// const columnHelper = useForm(); + +export function CardWithAssessment() { + // const { handleSubmit, form } = useForm(); + + const { page = 1, limit = 10, q = '' } = {} + + const { data, isLoading, isError } = useQuery(questionsQueryOptions(page, limit, q)); + + console.log(data) + + if (isLoading) return
Loading...
; + if (isError) return
Error fetching data
; + + // const groupedQuestions = data?.reduce((acc, item) => { + // const { subAspectId, subAspectName } = item; + // if (!acc[subAspectId]) { + // acc[subAspectId] = { + // subAspectName, + // questions: [], + // }; + // } + // acc[subAspectId].questions.push(item); + // return acc; + // }, {} as Record); + + + const renderQuestions = () => { + return data?.data.map((subAspect) => ( +
+

{subAspect.subAspectName}

+ {data?.data.map((question) => ( +
+ + + {data?.data.map((option) => ( +
+ + +
+ ))} +
+
+ ))} +
+ )); + }; + + const renderQuestionNumbers = () => { + const questionNumbers: number[] = []; + data?.data.forEach((subAspect) => { + data?.data.forEach((question, index) => { + questionNumbers.push(index + 1); + }); + }); + + return questionNumbers.map((num) => ( + + )); + }; + + return ( + +
+ + Pertanyaan + + Bacalah pertanyaan dengan hati-hati dan jawablah dengan teliti! + + + +
+
+ {renderQuestions()} +
+
+
+ + + + +
+
+ + Daftar Nomor + + +
+
+ {renderQuestionNumbers()} +
+
+
+
+
+ ); +} + +export const Route = createLazyFileRoute('/_dashboardLayout/assessments/')({ + component: () => +
+

+ Halaman Assessments +

+ +
+}) \ No newline at end of file diff --git a/apps/frontend/src/routes/_dashboardLayout/assessments/index.tsx b/apps/frontend/src/routes/_dashboardLayout/assessments/index.tsx new file mode 100644 index 0000000..57a1b20 --- /dev/null +++ b/apps/frontend/src/routes/_dashboardLayout/assessments/index.tsx @@ -0,0 +1,5 @@ +import { createFileRoute } from '@tanstack/react-router' + +export const Route = createFileRoute('/_dashboardLayout/assessments/')({ + component: () =>
Hello /_dashboardLayout/assessments/!
+}) \ No newline at end of file From 1b545abf5fdb585933305d3462e8ee6b64498c80 Mon Sep 17 00:00:00 2001 From: falendikategar Date: Fri, 16 Aug 2024 14:14:27 +0700 Subject: [PATCH 09/24] Revert "Reapply "create: fetch data in assessmentsQueries to FE still error"" This reverts commit 208a1a1fffa1f415570fe6b437fe3e4a983039be. --- .../queries/assessmentsQueries.ts | 72 ---------- .../assessments/index.lazy.tsx | 131 ------------------ .../_dashboardLayout/assessments/index.tsx | 5 - 3 files changed, 208 deletions(-) delete mode 100644 apps/frontend/src/modules/assessmentsManagement/queries/assessmentsQueries.ts delete mode 100644 apps/frontend/src/routes/_dashboardLayout/assessments/index.lazy.tsx delete mode 100644 apps/frontend/src/routes/_dashboardLayout/assessments/index.tsx diff --git a/apps/frontend/src/modules/assessmentsManagement/queries/assessmentsQueries.ts b/apps/frontend/src/modules/assessmentsManagement/queries/assessmentsQueries.ts deleted file mode 100644 index c15dd34..0000000 --- a/apps/frontend/src/modules/assessmentsManagement/queries/assessmentsQueries.ts +++ /dev/null @@ -1,72 +0,0 @@ -import client from "@/honoClient"; -import fetchRPC from "@/utils/fetchRPC"; -import { queryOptions } from "@tanstack/react-query"; -import { InferRequestType } from "hono"; - -export const questionsQueryOptions = (page: number, limit: number, q?: string) => - queryOptions({ - queryKey: ["questions", { page, limit, q }], - queryFn: async () => { - const result = await fetchRPC( - client.assessments.getAllQuestions.$get({ - query: { - limit: String(limit), - page: String(page), - q, - }, - }) - ); - console.log('Result from fetchRPC:', result); - return result; - }, - }); - - -export const getUserByIdQueryOptions = (userId: string | undefined) => - queryOptions({ - queryKey: ["user", userId], - queryFn: () => - fetchRPC( - client.users[":id"].$get({ - param: { - id: userId!, - }, - query: {}, - }) - ), - enabled: Boolean(userId), - }); - -export const createUser = async ( - form: InferRequestType["form"] -) => { - return await fetchRPC( - client.users.$post({ - form, - }) - ); -}; - -export const updateUser = async ( - form: InferRequestType<(typeof client.users)[":id"]["$patch"]>["form"] & { - id: string; - } -) => { - return await fetchRPC( - client.users[":id"].$patch({ - param: { - id: form.id, - }, - form, - }) - ); -}; - -export const deleteUser = async (id: string) => { - return await fetchRPC( - client.users[":id"].$delete({ - param: { id }, - form: {}, - }) - ); -}; diff --git a/apps/frontend/src/routes/_dashboardLayout/assessments/index.lazy.tsx b/apps/frontend/src/routes/_dashboardLayout/assessments/index.lazy.tsx deleted file mode 100644 index 15175be..0000000 --- a/apps/frontend/src/routes/_dashboardLayout/assessments/index.lazy.tsx +++ /dev/null @@ -1,131 +0,0 @@ -import { createLazyFileRoute } from '@tanstack/react-router' - -import { Button } from "@/shadcn/components/ui/button" -import { - Card, - CardContent, - CardDescription, - CardFooter, - CardHeader, - CardTitle, -} from "@/shadcn/components/ui/card" -import { Label } from "@/shadcn/components/ui/label" -import { RadioGroup, RadioGroupItem } from "@/shadcn/components/ui/radio-group" -// import ExtractQueryDataType from '@/types/ExtractQueryDataType' -// import { createColumnHelper } from '@tanstack/react-table' -import { questionsQueryOptions } from "@/modules/assessmentsManagement/queries/assessmentsQueries"; -// import { useForm } from '@mantine/form' -import { useQuery } from '@tanstack/react-query' - -// type DataType = ExtractQueryDataType; -// const columnHelper = useForm(); - -export function CardWithAssessment() { - // const { handleSubmit, form } = useForm(); - - const { page = 1, limit = 10, q = '' } = {} - - const { data, isLoading, isError } = useQuery(questionsQueryOptions(page, limit, q)); - - console.log(data) - - if (isLoading) return
Loading...
; - if (isError) return
Error fetching data
; - - // const groupedQuestions = data?.reduce((acc, item) => { - // const { subAspectId, subAspectName } = item; - // if (!acc[subAspectId]) { - // acc[subAspectId] = { - // subAspectName, - // questions: [], - // }; - // } - // acc[subAspectId].questions.push(item); - // return acc; - // }, {} as Record); - - - const renderQuestions = () => { - return data?.data.map((subAspect) => ( -
-

{subAspect.subAspectName}

- {data?.data.map((question) => ( -
- - - {data?.data.map((option) => ( -
- - -
- ))} -
-
- ))} -
- )); - }; - - const renderQuestionNumbers = () => { - const questionNumbers: number[] = []; - data?.data.forEach((subAspect) => { - data?.data.forEach((question, index) => { - questionNumbers.push(index + 1); - }); - }); - - return questionNumbers.map((num) => ( - - )); - }; - - return ( - -
- - Pertanyaan - - Bacalah pertanyaan dengan hati-hati dan jawablah dengan teliti! - - - -
-
- {renderQuestions()} -
-
-
- - - - -
-
- - Daftar Nomor - - -
-
- {renderQuestionNumbers()} -
-
-
-
-
- ); -} - -export const Route = createLazyFileRoute('/_dashboardLayout/assessments/')({ - component: () => -
-

- Halaman Assessments -

- -
-}) \ No newline at end of file diff --git a/apps/frontend/src/routes/_dashboardLayout/assessments/index.tsx b/apps/frontend/src/routes/_dashboardLayout/assessments/index.tsx deleted file mode 100644 index 57a1b20..0000000 --- a/apps/frontend/src/routes/_dashboardLayout/assessments/index.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { createFileRoute } from '@tanstack/react-router' - -export const Route = createFileRoute('/_dashboardLayout/assessments/')({ - component: () =>
Hello /_dashboardLayout/assessments/!
-}) \ No newline at end of file From 7a9980ec73b89b98bfead1c200e8343859b1881c Mon Sep 17 00:00:00 2001 From: falendikategar Date: Fri, 16 Aug 2024 14:18:57 +0700 Subject: [PATCH 10/24] update: route in assessments --- apps/backend/src/routes/assessments/route.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/backend/src/routes/assessments/route.ts b/apps/backend/src/routes/assessments/route.ts index 11b7a06..95333c0 100644 --- a/apps/backend/src/routes/assessments/route.ts +++ b/apps/backend/src/routes/assessments/route.ts @@ -412,3 +412,4 @@ const assessmentsRoute = new Hono() ) export default assessmentsRoute; + From 001327cc97623377b5d51ae764665b188eda71b6 Mon Sep 17 00:00:00 2001 From: percyfikri Date: Sun, 18 Aug 2024 22:36:20 +0700 Subject: [PATCH 11/24] update : Second revision on management-aspect --- apps/backend/src/routes/managementAspect/route.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/backend/src/routes/managementAspect/route.ts b/apps/backend/src/routes/managementAspect/route.ts index dbbf1fb..da8a140 100644 --- a/apps/backend/src/routes/managementAspect/route.ts +++ b/apps/backend/src/routes/managementAspect/route.ts @@ -330,7 +330,7 @@ const managementAspectRoute = new Hono() const aspect = (await db.select().from(aspects).where(eq(aspects.id, aspectId)))[0]; - if (!aspect) return c.notFound(); + if (!aspect) throw notFound(); if (!aspect.deletedAt) { throw forbidden({ From ab37456906115457e450f49589f29341bd057cbe Mon Sep 17 00:00:00 2001 From: falendikategar Date: Tue, 20 Aug 2024 12:24:28 +0700 Subject: [PATCH 12/24] fix: revise route for Assessments --- apps/backend/src/routes/assessments/route.ts | 170 ++++++++++--------- 1 file changed, 87 insertions(+), 83 deletions(-) diff --git a/apps/backend/src/routes/assessments/route.ts b/apps/backend/src/routes/assessments/route.ts index 95333c0..fea0cb6 100644 --- a/apps/backend/src/routes/assessments/route.ts +++ b/apps/backend/src/routes/assessments/route.ts @@ -13,6 +13,7 @@ import authInfo from "../../middlewares/authInfo"; import checkPermission from "../../middlewares/checkPermission"; import path from "path"; import fs from 'fs'; +import { notFound } from "../../errors/DashboardError"; export const answerFormSchema = z.object({ optionId: z.string().min(1), @@ -30,12 +31,10 @@ async function saveFile(filePath: string, fileBuffer: Buffer): Promise { } // Function to update the filename in the database -async function updateFilenameInDatabase(answerId: string, flname: string): Promise { +async function updateFilenameInDatabase(answerId: string, filename: string): Promise { await db.update(answers) - .set({ - filename: flname, - }) + .set({ filename }) .where(eq(answers.id, answerId)); } @@ -76,23 +75,14 @@ const assessmentsRoute = new Hono() .get( "/getAllQuestions", checkPermission("assessments.readAllQuestions"), - requestValidator( - "query", - z.object({ - page: z.coerce.number().int().min(0).default(0), - limit: z.coerce.number().int().min(1).max(1000).default(1000), - q: z.string().default(""), - }) - ), async (c) => { - const { page, limit, q } = c.req.valid("query"); - const totalCountQuery = sql`(SELECT count(*) FROM ${options} LEFT JOIN ${questions} ON ${options.questionId} = ${questions.id} LEFT JOIN ${subAspects} ON ${questions.subAspectId} = ${subAspects.id} LEFT JOIN ${aspects} ON ${subAspects.aspectId} = ${aspects.id} + WHERE ${questions.deletedAt} IS NULL )`; const result = await db @@ -112,34 +102,15 @@ const assessmentsRoute = new Hono() .leftJoin(questions, eq(options.questionId, questions.id)) .leftJoin(subAspects, eq(questions.subAspectId, subAspects.id)) .leftJoin(aspects, eq(subAspects.aspectId, aspects.id)) - .where( - and( - q - ? or( - ilike(aspects.name, q), - ilike(subAspects.name, q), - ilike(questions.question, q), - ilike(options.text, q), - ilike(options.score, q), - eq(options.id, q), - - ) - : undefined - ) - ) - .offset(page * limit) - .limit(limit); + .where(sql`${questions.deletedAt} IS NULL`) return c.json({ - data: result.map((d) => ({ ...d, fullCount: undefined })), - _metadata: { - currentPage: page, - totalPages: Math.ceil( - (Number(result[0]?.fullCount) ?? 0) / limit - ), - totalItems: Number(result[0]?.fullCount) ?? 0, - perPage: limit, - }, + data: result.map((d) => ( + { + ...d, + fullCount: undefined + } + )), }); } ) @@ -165,7 +136,10 @@ const assessmentsRoute = new Hono() const { assessmentId, page, limit, q } = c.req.valid("query"); // Query to count total answers for the specific assessmentId - const totalCountQuery = sql`(SELECT count(*) FROM ${answers} WHERE ${answers.assessmentId} = ${assessmentId})`; + const totalCountQuery = + sql`(SELECT count(*) + FROM ${answers} + WHERE ${answers.assessmentId} = ${assessmentId})`; // Query to retrieve answers for the specific assessmentId const result = await db @@ -225,12 +199,11 @@ const assessmentsRoute = new Hono() .limit(1); if (!currentAnswer.length) { - return c.json( + throw notFound( { message: "Answer not found", - }, - 404 - ); + } + ) } // Toggle the isFlagged value @@ -246,12 +219,11 @@ const assessmentsRoute = new Hono() .returning(); if (!updatedAnswer.length) { - return c.json( + throw notFound( { message: "Failed to update answer", - }, - 500 - ); + } + ) } return c.json( @@ -270,7 +242,7 @@ const assessmentsRoute = new Hono() checkPermission("assessments.checkAnswer"), async (c) => { const { optionId, assessmentId } = await c.req.json(); - + const result = await db .select() .from(answers) @@ -278,16 +250,24 @@ const assessmentsRoute = new Hono() and(eq(answers.optionId, optionId), eq(answers.assessmentId, assessmentId)) ) .execute(); - + const existingAnswer = result[0]; - + let response; + if (existingAnswer) { - return c.json({ exists: true, answerId: existingAnswer.id }); + response = { + exists: true, + answerId: existingAnswer.id + }; } else { - return c.json({ exists: false }); + response = { + exists: false + }; } + + return c.json(response); } - ) + ) // Upload filename to the table answers and save the file on the local storage .post( @@ -297,22 +277,28 @@ const assessmentsRoute = new Hono() // Get the Content-Type header const contentType = c.req.header('content-type'); if (!contentType || !contentType.includes('multipart/form-data')) { - return c.json({ success: false, message: 'Invalid Content-Type' }); + throw notFound({ + message: "Invalid Content-Type", + }); } // Extract boundary const boundary = contentType.split('boundary=')[1]; if (!boundary) { - return c.json({ success: false, message: 'Boundary not found' }); + throw notFound({ + message: "Boundary not found", + }); } // Get the raw body const body = await c.req.arrayBuffer(); const bodyString = Buffer.from(body).toString(); - + // Split the body by the boundary const parts = bodyString.split(`--${boundary}`); - + + let fileUrl = null; + for (const part of parts) { if (part.includes('Content-Disposition: form-data;')) { // Extract file name @@ -321,30 +307,44 @@ const assessmentsRoute = new Hono() const fileName = match[1]; const fileContentStart = part.indexOf('\r\n\r\n') + 4; const fileContentEnd = part.lastIndexOf('\r\n'); - + // Extract file content as Buffer const fileBuffer = Buffer.from(part.slice(fileContentStart, fileContentEnd), 'binary'); - + // Define file path and save the file const filePath = path.join('images', Date.now() + '-' + fileName); await saveFile(filePath, fileBuffer); - + // Assuming answerId is passed as a query parameter or in the form-data const answerId = c.req.query('answerId'); - if (answerId) { - await updateFilenameInDatabase(answerId, path.basename(filePath)); + if (!answerId) { + throw notFound({ + message: "answerId is required", + }); } - - // Return the file URL - const fileUrl = `/images/${path.basename(filePath)}`; - return c.json({ success: true, imageUrl: fileUrl }); + + await updateFilenameInDatabase(answerId, path.basename(filePath)); + + // Set the file URL for the final response + fileUrl = `/images/${path.basename(filePath)}`; } } } - return c.json({ success: false, message: 'No file uploaded' }); + if (!fileUrl) { + throw notFound({ + message: 'No file uploaded', + }); + } + + return c.json( + { + success: true, + imageUrl: fileUrl + } + ); } - ) + ) // Submit option to table answers from use-form in frontend .post( @@ -384,6 +384,8 @@ const assessmentsRoute = new Hono() const answerId = c.req.param("id"); const answerData = c.req.valid("json"); + let response; + let statusCode; const updatedAnswer = await db .update(answers) .set({ @@ -393,23 +395,25 @@ const assessmentsRoute = new Hono() .returning(); if (!updatedAnswer.length) { - return c.json( - { - message: "Answer not found or update failed", - }, - 404 - ); + response = { + message: "Answer not found or update failed", + }; + statusCode = 404; + } else { + response = { + message: "Answer updated successfully", + answer: updatedAnswer[0], + }; + statusCode = 200; } return c.json( - { - message: "Answer updated successfully", - answer: updatedAnswer[0], - }, - 200 + response, + { + status: statusCode + } ); } - ) + ) export default assessmentsRoute; - From c0e28b1019635b302c653b7f395daa5e93a8cad1 Mon Sep 17 00:00:00 2001 From: falendikategar Date: Tue, 20 Aug 2024 17:25:58 +0700 Subject: [PATCH 13/24] fix: revise dashboardError for updateAnswer on Assessments --- apps/backend/src/routes/assessments/route.ts | 29 ++++++-------------- 1 file changed, 9 insertions(+), 20 deletions(-) diff --git a/apps/backend/src/routes/assessments/route.ts b/apps/backend/src/routes/assessments/route.ts index fea0cb6..02781f5 100644 --- a/apps/backend/src/routes/assessments/route.ts +++ b/apps/backend/src/routes/assessments/route.ts @@ -383,9 +383,7 @@ const assessmentsRoute = new Hono() async (c) => { const answerId = c.req.param("id"); const answerData = c.req.valid("json"); - - let response; - let statusCode; + const updatedAnswer = await db .update(answers) .set({ @@ -395,24 +393,15 @@ const assessmentsRoute = new Hono() .returning(); if (!updatedAnswer.length) { - response = { - message: "Answer not found or update failed", - }; - statusCode = 404; - } else { - response = { - message: "Answer updated successfully", - answer: updatedAnswer[0], - }; - statusCode = 200; + throw notFound({ + message: "Answer not found or update failed" + }) } - - return c.json( - response, - { - status: statusCode - } - ); + + return c.json({ + message: "Answer updated successfully", + answer: updatedAnswer[0], + }); } ) From 68eb7468e99811396221c118acaea680668ce575 Mon Sep 17 00:00:00 2001 From: abiyasa05 Date: Thu, 22 Aug 2024 15:00:05 +0700 Subject: [PATCH 14/24] update: status and validatedBy column --- apps/backend/src/drizzle/schema/assessments.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/apps/backend/src/drizzle/schema/assessments.ts b/apps/backend/src/drizzle/schema/assessments.ts index 44eb4ed..14bbc12 100644 --- a/apps/backend/src/drizzle/schema/assessments.ts +++ b/apps/backend/src/drizzle/schema/assessments.ts @@ -4,7 +4,7 @@ import { relations } from "drizzle-orm"; import { respondents } from "./respondents"; import { users } from "./users"; -const statusEnum = pgEnum("status", ["tertunda", "disetujui", "ditolak", "selesai"]); +const statusEnum = pgEnum("status", ["menunggu konfirmasi", "disetujui", "ditolak", "selesai"]); export const assessments = pgTable("assessments", { id: varchar("id", { length: 50 }) @@ -14,10 +14,9 @@ export const assessments = pgTable("assessments", { status: statusEnum("status"), reviewedBy: varchar("reviewedBy"), reviewedAt: timestamp("reviewedAt", { mode: "date" }), - validatedBy: varchar("validatedBy").notNull(), + validatedBy: varchar("validatedBy"), validatedAt: timestamp("validatedAt", { mode: "date" }), createdAt: timestamp("createdAt", { mode: "date" }).defaultNow(), - }); // Query Tools in PosgreSQL // CREATE TYPE status AS ENUM ('tertunda', 'disetujui', 'ditolak', 'selesai'); \ No newline at end of file From d22e4c01612d761fa044566fed8236f8f360a42d Mon Sep 17 00:00:00 2001 From: abiyasa05 Date: Thu, 22 Aug 2024 15:23:59 +0700 Subject: [PATCH 15/24] update: Query Tools for status --- apps/backend/src/drizzle/schema/assessments.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/backend/src/drizzle/schema/assessments.ts b/apps/backend/src/drizzle/schema/assessments.ts index 14bbc12..75b9ccd 100644 --- a/apps/backend/src/drizzle/schema/assessments.ts +++ b/apps/backend/src/drizzle/schema/assessments.ts @@ -19,4 +19,4 @@ export const assessments = pgTable("assessments", { createdAt: timestamp("createdAt", { mode: "date" }).defaultNow(), }); // Query Tools in PosgreSQL -// CREATE TYPE status AS ENUM ('tertunda', 'disetujui', 'ditolak', 'selesai'); \ No newline at end of file +// CREATE TYPE status AS ENUM ('menunggu konfirmasi', 'disetujui', 'ditolak', 'selesai'); \ No newline at end of file From d0808a54c4e9a56b06f26e5451adcd10757ed6a7 Mon Sep 17 00:00:00 2001 From: Sukma Gladys Date: Thu, 22 Aug 2024 15:54:34 +0700 Subject: [PATCH 16/24] feat: develop API forgot password --- apps/backend/package.json | 2 + apps/backend/src/appEnv.ts | 1 + apps/backend/src/drizzle/schema/users.ts | 1 + apps/backend/src/index.ts | 2 + .../src/routes/forgotPassword/route.ts | 111 ++++++++++++++++++ apps/backend/src/utils/authUtils.ts | 38 ++++++ apps/backend/src/utils/mailerUtils.ts | 32 +++++ pnpm-lock.yaml | 28 ++++- 8 files changed, 213 insertions(+), 2 deletions(-) create mode 100644 apps/backend/src/routes/forgotPassword/route.ts create mode 100644 apps/backend/src/utils/mailerUtils.ts diff --git a/apps/backend/package.json b/apps/backend/package.json index a923b14..21a8d3b 100644 --- a/apps/backend/package.json +++ b/apps/backend/package.json @@ -19,6 +19,7 @@ "hono": "^4.4.6", "jsonwebtoken": "^9.0.2", "moment": "^2.30.1", + "nodemailer": "^6.9.14", "postgres": "^3.4.4", "sharp": "^0.33.4", "zod": "^3.23.8" @@ -27,6 +28,7 @@ "@types/bcrypt": "^5.0.2", "@types/jsonwebtoken": "^9.0.6", "@types/node": "^20.14.2", + "@types/nodemailer": "^6.4.15", "drizzle-kit": "^0.22.7", "pg": "^8.12.0", "tsx": "^4.15.5", diff --git a/apps/backend/src/appEnv.ts b/apps/backend/src/appEnv.ts index bedf2a1..2c2e32f 100644 --- a/apps/backend/src/appEnv.ts +++ b/apps/backend/src/appEnv.ts @@ -8,6 +8,7 @@ const envSchema = z.object({ DATABASE_URL: z.string(), ACCESS_TOKEN_SECRET: z.string(), REFRESH_TOKEN_SECRET: z.string(), + RESET_PASSWORD_TOKEN_SECRET: z.string(), COOKIE_SECRET: z.string(), }); diff --git a/apps/backend/src/drizzle/schema/users.ts b/apps/backend/src/drizzle/schema/users.ts index 0574af0..ff5fa03 100644 --- a/apps/backend/src/drizzle/schema/users.ts +++ b/apps/backend/src/drizzle/schema/users.ts @@ -20,6 +20,7 @@ export const users = pgTable("users", { email: varchar("email"), password: text("password").notNull(), isEnabled: boolean("isEnabled").default(true), + resetPasswordToken: varchar("resetPasswordToken"), createdAt: timestamp("createdAt", { mode: "date" }).defaultNow(), updatedAt: timestamp("updatedAt", { mode: "date" }).defaultNow(), deletedAt: timestamp("deletedAt", { mode: "date" }), diff --git a/apps/backend/src/index.ts b/apps/backend/src/index.ts index 14cf329..be57398 100644 --- a/apps/backend/src/index.ts +++ b/apps/backend/src/index.ts @@ -18,6 +18,7 @@ import HonoEnv from "./types/HonoEnv"; import devRoutes from "./routes/dev/route"; import appEnv from "./appEnv"; import questionsRoute from "./routes/questions/route"; +import forgotPasswordRoutes from "./routes/forgotPassword/route"; configDotenv(); @@ -84,6 +85,7 @@ const routes = app .route("/questions", questionsRoute) .route("/management-aspect", managementAspectsRoute) .route("/register", respondentsRoute) + .route("/forgot-password", forgotPasswordRoutes) .onError((err, c) => { if (err instanceof DashboardError) { return c.json( diff --git a/apps/backend/src/routes/forgotPassword/route.ts b/apps/backend/src/routes/forgotPassword/route.ts new file mode 100644 index 0000000..8c3ddb0 --- /dev/null +++ b/apps/backend/src/routes/forgotPassword/route.ts @@ -0,0 +1,111 @@ +import { zValidator } from "@hono/zod-validator"; +import HonoEnv from "../../types/HonoEnv"; +import { z } from "zod"; +import { and, eq, isNull } from "drizzle-orm"; +import { Hono } from "hono"; +import db from "../../drizzle"; +import { users } from "../../drizzle/schema/users"; +import { notFound, unauthorized } from "../../errors/DashboardError"; +import { generateResetPasswordToken, verifyResetPasswordToken } from "../../utils/authUtils"; +import { sendResetPasswordEmail } from "../../utils/mailerUtils"; +import { hashPassword } from "../../utils/passwordUtils"; + +const forgotPasswordRoutes = new Hono() + /** + * Forgot Password + * + * Checking emails in the database, generating tokens, and sending emails occurs. + */ + .post( + '/', + zValidator( + 'json', + z.object({ + email: z.string().email(), + }) + ), + async (c) => { + const { email } = c.req.valid('json'); + + const user = await db + .select() + .from(users) + .where( + and( + isNull(users.deletedAt), + eq(users.email, email) + ) + ); + + if (!user.length) throw notFound(); + + // Generate reset password token + const resetPasswordToken = await generateResetPasswordToken({ + uid: user[0].id, + }); + + await db + .update(users) + .set({ + resetPasswordToken: resetPasswordToken + }) + .where(eq(users.email, email)); + + // Send email with reset password token + await sendResetPasswordEmail(email, resetPasswordToken); + + return c.json({ + message: 'Email has been sent successfully', + }); + } + ) + /** + * Reset Password + */ + .patch( + '/verify', + zValidator( + 'json', + z.object({ + password: z.string(), + confirm_password: z.string() + }) + ), + async (c) => { + const formData = c.req.valid('json'); + const token = c.req.query('token') + + // Token validation + if (!token) { + return c.json({ message: 'Token is required' }, 400); + } + + // Password validation + if (formData.password !== formData.confirm_password) { + return c.json({ message: 'Passwords do not match' }, 400); + } + + const decoded = await verifyResetPasswordToken(token); + if (!decoded) { + return c.json({ message: 'Invalid or expired token' }, 401); + } + + if (!decoded) throw unauthorized(); + + // Hash the password + const hashedPassword = await hashPassword(formData.password); + + await db + .update(users) + .set({ + password: hashedPassword, + updatedAt: new Date(), + }) + .where(eq(users.id, decoded.uid)); + + return c.json({ + message: 'Password has been reset successfully' + }); + }); + +export default forgotPasswordRoutes; \ No newline at end of file diff --git a/apps/backend/src/utils/authUtils.ts b/apps/backend/src/utils/authUtils.ts index 99019f4..09f19b3 100644 --- a/apps/backend/src/utils/authUtils.ts +++ b/apps/backend/src/utils/authUtils.ts @@ -4,6 +4,7 @@ import appEnv from "../appEnv"; // Environment variables for secrets, defaulting to a random secret if not set. const accessTokenSecret = appEnv.ACCESS_TOKEN_SECRET; const refreshTokenSecret = appEnv.REFRESH_TOKEN_SECRET; +const resetPasswordTokenSecret = appEnv.RESET_PASSWORD_TOKEN_SECRET; // Algorithm to be used for JWT encoding. const algorithm: jwt.Algorithm = "HS256"; @@ -11,6 +12,7 @@ const algorithm: jwt.Algorithm = "HS256"; // Expiry settings for tokens. 'null' signifies no expiry. export const accessTokenExpiry: number | string | null = null; export const refreshTokenExpiry: number | string | null = "30d"; +export const resetPasswordTokenExpiry: number | string | null = null; // Interfaces to describe the payload structure for access and refresh tokens. interface AccessTokenPayload { @@ -21,6 +23,10 @@ interface RefreshTokenPayload { uid: string; } +interface ResetPasswordTokenPayload { + uid: string; +} + /** * Generates a JSON Web Token (JWT) for access control using a specified payload. * @@ -84,3 +90,35 @@ export const verifyRefreshToken = async (token: string) => { return null; } }; + +/** + * Generates a JSON Web Token (JWT) for reset password using a specified payload. + * + * @param payload - The payload containing user-specific data for the token. + * @returns A promise that resolves to the generated JWT string. + */ +export const generateResetPasswordToken = async (payload: ResetPasswordTokenPayload) => { + const token = jwt.sign(payload, resetPasswordTokenSecret, { + algorithm, + ...(resetPasswordTokenExpiry ? { expiresIn: resetPasswordTokenExpiry } : {}), + }); + return token; +}; + +/** + * Verifies a given reset password token and decodes the payload if the token is valid. + * + * @param token - The JWT string to verify. + * @returns A promise that resolves to the decoded payload or null if verification fails. + */ +export const verifyResetPasswordToken = async (token: string) => { + try { + const payload = jwt.verify( + token, + resetPasswordTokenSecret + ) as ResetPasswordTokenPayload; + return payload; + } catch { + return null; + } +}; \ No newline at end of file diff --git a/apps/backend/src/utils/mailerUtils.ts b/apps/backend/src/utils/mailerUtils.ts new file mode 100644 index 0000000..fa40740 --- /dev/null +++ b/apps/backend/src/utils/mailerUtils.ts @@ -0,0 +1,32 @@ +import nodemailer from 'nodemailer'; + +/** + * Nodemailer configuration + */ +const transporter = nodemailer.createTransport({ + host: 'smtp.gmail.com', + port: 587, + secure: false, + auth: { + user: process.env.EMAIL_USER, + pass: process.env.EMAIL_PASS, + }, + tls: { + rejectUnauthorized: false, + }, +}); + +export async function sendResetPasswordEmail(to: string, token: string) { + const resetUrl = `https://localhost:3000/forgot-password/verify?token=${token}`; + + const info = await transporter.sendMail({ + from: '"Your App" <${process.env.EMAIL_USER}>', + to, + subject: 'Password Reset Request', + text: `You requested a password reset. Click this link to reset your password: ${resetUrl}`, + html: `

You requested a password reset. Click this link to reset your password:
${resetUrl}

`, + }); + + console.log('Email sent: %s', info.messageId); + return info; +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 16570cb..1659c27 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -50,6 +50,9 @@ importers: moment: specifier: ^2.30.1 version: 2.30.1 + nodemailer: + specifier: ^6.9.14 + version: 6.9.14 postgres: specifier: ^3.4.4 version: 3.4.4 @@ -69,6 +72,9 @@ importers: '@types/node': specifier: ^20.14.2 version: 20.14.2 + '@types/nodemailer': + specifier: ^6.4.15 + version: 6.4.15 drizzle-kit: specifier: ^0.22.7 version: 0.22.7 @@ -1124,6 +1130,7 @@ packages: '@humanwhocodes/config-array@0.11.14': resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} @@ -1131,6 +1138,7 @@ packages: '@humanwhocodes/object-schema@2.0.2': resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} + deprecated: Use @eslint/object-schema instead '@humanwhocodes/retry@0.3.0': resolution: {integrity: sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==} @@ -1759,6 +1767,9 @@ packages: '@types/node@20.14.2': resolution: {integrity: sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==} + '@types/nodemailer@6.4.15': + resolution: {integrity: sha512-0EBJxawVNjPkng1zm2vopRctuWVCxk34JcIlRuXSf54habUWdz1FB7wHDqOqvDa8Mtpt0Q3LTXQkAs2LNyK5jQ==} + '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -3226,6 +3237,7 @@ packages: glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} @@ -3377,6 +3389,7 @@ packages: inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -4047,6 +4060,10 @@ packages: node-releases@2.0.14: resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + nodemailer@6.9.14: + resolution: {integrity: sha512-Dobp/ebDKBvz91sbtRKhcznLThrKxKt97GI2FAlAyy+fk19j73Uz3sBXolVtmcXjaorivqsbbbjDY+Jkt4/bQA==} + engines: {node: '>=6.0.0'} + nopt@5.0.0: resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} engines: {node: '>=6'} @@ -4561,6 +4578,7 @@ packages: rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true rollup@4.18.0: @@ -6760,7 +6778,7 @@ snapshots: '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 20.11.24 + '@types/node': 20.14.2 '@types/graceful-fs@4.1.9': dependencies: @@ -6805,6 +6823,10 @@ snapshots: dependencies: undici-types: 5.26.5 + '@types/nodemailer@6.4.15': + dependencies: + '@types/node': 20.14.2 + '@types/normalize-package-data@2.4.4': {} '@types/parse-json@4.0.2': {} @@ -6841,7 +6863,7 @@ snapshots: '@types/through@0.0.30': dependencies: - '@types/node': 20.11.24 + '@types/node': 20.14.2 '@types/tinycolor2@1.4.6': {} @@ -9717,6 +9739,8 @@ snapshots: node-releases@2.0.14: {} + nodemailer@6.9.14: {} + nopt@5.0.0: dependencies: abbrev: 1.1.1 From 4f83c6f6948eb9ef4519a141c93b82ce1f4516ec Mon Sep 17 00:00:00 2001 From: abiyasa05 Date: Fri, 23 Aug 2024 09:35:11 +0700 Subject: [PATCH 17/24] create: API for assessment request --- apps/backend/src/data/permissions.ts | 6 + apps/backend/src/index.ts | 2 + .../src/routes/assessmentRequest/route.ts | 105 ++++++++++++++++++ 3 files changed, 113 insertions(+) create mode 100644 apps/backend/src/routes/assessmentRequest/route.ts diff --git a/apps/backend/src/data/permissions.ts b/apps/backend/src/data/permissions.ts index a048ea3..bb8eac4 100644 --- a/apps/backend/src/data/permissions.ts +++ b/apps/backend/src/data/permissions.ts @@ -62,6 +62,12 @@ const permissionsData = [ { code: "managementAspect.restore", }, + { + code: "assessmentRequest.read", + }, + { + code: "assessmentRequest.create", + }, ] as const; export type SpecificPermissionCode = (typeof permissionsData)[number]["code"]; diff --git a/apps/backend/src/index.ts b/apps/backend/src/index.ts index 14cf329..2dbd068 100644 --- a/apps/backend/src/index.ts +++ b/apps/backend/src/index.ts @@ -18,6 +18,7 @@ import HonoEnv from "./types/HonoEnv"; import devRoutes from "./routes/dev/route"; import appEnv from "./appEnv"; import questionsRoute from "./routes/questions/route"; +import assessmentRequestRoute from "./routes/assessmentRequest/route"; configDotenv(); @@ -84,6 +85,7 @@ const routes = app .route("/questions", questionsRoute) .route("/management-aspect", managementAspectsRoute) .route("/register", respondentsRoute) + .route("/assessmentRequest", assessmentRequestRoute) .onError((err, c) => { if (err instanceof DashboardError) { return c.json( diff --git a/apps/backend/src/routes/assessmentRequest/route.ts b/apps/backend/src/routes/assessmentRequest/route.ts new file mode 100644 index 0000000..3f189a9 --- /dev/null +++ b/apps/backend/src/routes/assessmentRequest/route.ts @@ -0,0 +1,105 @@ +import { eq } from "drizzle-orm"; +import { Hono } from "hono"; +import { z } from "zod"; +import db from "../../drizzle"; +import { respondents } from "../../drizzle/schema/respondents"; +import { assessments } from "../../drizzle/schema/assessments"; +import { users } from "../../drizzle/schema/users"; +import { rolesToUsers } from "../../drizzle/schema/rolesToUsers"; +import { rolesSchema } from "../../drizzle/schema/roles"; +import HonoEnv from "../../types/HonoEnv"; +import authInfo from "../../middlewares/authInfo"; +import { notFound } from "../../errors/DashboardError"; +import checkPermission from "../../middlewares/checkPermission"; +import requestValidator from "../../utils/requestValidator"; +import { HTTPException } from "hono/http-exception"; +import { createId } from "@paralleldrive/cuid2"; + +const assessmentRequestRoute = new Hono() + .use(authInfo) + + // Get assessment request by user ID + .get( + "/:id", + checkPermission("assessmentRequest.read"), + requestValidator( + "query", + z.object({ + includeTrashed: z.string().default("false"), + }) + ), + async (c) => { + const userId = c.req.param("id"); + + const queryResult = await db + .select({ + userId: users.id, + createdAt: assessments.createdAt, + name: users.name, + code: rolesSchema.code, + status: assessments.status, + }) + .from(users) + .leftJoin(rolesToUsers, eq(users.id, rolesToUsers.userId)) + .leftJoin(rolesSchema, eq(rolesToUsers.roleId, rolesSchema.id)) + .leftJoin(respondents, eq(users.id, respondents.userId)) + .leftJoin(assessments, eq(respondents.id, assessments.respondentId)) + .where(eq(users.id, userId)); + + if (!queryResult[0]) throw notFound(); + + const assessmentRequestData = { + ...queryResult, + }; + + return c.json(assessmentRequestData); + } + ) + + // Post assessment request by user ID + .post( + "/:id", + checkPermission("assessmentRequest.create"), + requestValidator( + "json", + z.object({ + respondentId: z.string().min(1), + }) + ), + async (c) => { + const { respondentId } = c.req.valid("json"); + const userId = c.req.param("id"); + + // Make sure the userId exists + if (!userId) { + throw new HTTPException(400, { message: "User ID is required." }); + } + + // Validate if respondent exists + const respondent = await db + .select() + .from(respondents) + .where(eq(respondents.id, respondentId)); + + if (!respondent.length) { + throw new HTTPException(404, { message: "Respondent not found." }); + } + + // Create the assessment request + const newAssessment = await db + .insert(assessments) + .values({ + id: createId(), + respondentId, + status: "menunggu konfirmasi", + validatedBy: null, + validatedAt: null, + createdAt: new Date(), + }) + .returning(); + + return c.json({ message: "Successfully submitted the assessment request" }, 201); + } + ); + +export default assessmentRequestRoute; \ No newline at end of file From a4000047d6412f788a9ef30ae89cc7e6ed7be91f Mon Sep 17 00:00:00 2001 From: Sukma Gladys Date: Fri, 23 Aug 2024 10:02:48 +0700 Subject: [PATCH 18/24] fix: smtp and appEnv --- apps/backend/.env.example | 9 ++++++++- apps/backend/src/appEnv.ts | 5 +++++ apps/backend/src/utils/mailerUtils.ts | 13 +++++++------ 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/apps/backend/.env.example b/apps/backend/.env.example index 1dd79ad..f06dab1 100644 --- a/apps/backend/.env.example +++ b/apps/backend/.env.example @@ -1,7 +1,14 @@ +BASE_URL = APP_PORT = 3000 DATABASE_URL = ACCESS_TOKEN_SECRET = REFRESH_TOKEN_SECRET = -COOKIE_SECRET = \ No newline at end of file +RESET_PASSWORD_TOKEN_SECRET = +COOKIE_SECRET = + +SMTP_USERNAME = +SMTP_PASSWORD = +SMTP_HOST = +SMTP_PORT = \ No newline at end of file diff --git a/apps/backend/src/appEnv.ts b/apps/backend/src/appEnv.ts index 2c2e32f..9d4672a 100644 --- a/apps/backend/src/appEnv.ts +++ b/apps/backend/src/appEnv.ts @@ -4,12 +4,17 @@ import { z } from "zod"; dotenv.config(); const envSchema = z.object({ + BASE_URL: z.string(), APP_PORT: z.coerce.number().int(), DATABASE_URL: z.string(), ACCESS_TOKEN_SECRET: z.string(), REFRESH_TOKEN_SECRET: z.string(), RESET_PASSWORD_TOKEN_SECRET: z.string(), COOKIE_SECRET: z.string(), + SMTP_USERNAME: z.string(), + SMTP_PASSWORD: z.string(), + SMTP_HOST: z.string(), + SMTP_PORT: z.coerce.number().int(), }); const parsedEnv = envSchema.safeParse(process.env); diff --git a/apps/backend/src/utils/mailerUtils.ts b/apps/backend/src/utils/mailerUtils.ts index fa40740..4f5d660 100644 --- a/apps/backend/src/utils/mailerUtils.ts +++ b/apps/backend/src/utils/mailerUtils.ts @@ -1,15 +1,16 @@ import nodemailer from 'nodemailer'; +import appEnv from '../appEnv'; /** * Nodemailer configuration */ const transporter = nodemailer.createTransport({ - host: 'smtp.gmail.com', - port: 587, + host: appEnv.SMTP_HOST, + port: appEnv.SMTP_PORT, secure: false, auth: { - user: process.env.EMAIL_USER, - pass: process.env.EMAIL_PASS, + user: appEnv.SMTP_USERNAME, + pass: appEnv.SMTP_PASSWORD, }, tls: { rejectUnauthorized: false, @@ -17,10 +18,10 @@ const transporter = nodemailer.createTransport({ }); export async function sendResetPasswordEmail(to: string, token: string) { - const resetUrl = `https://localhost:3000/forgot-password/verify?token=${token}`; + const resetUrl = appEnv.BASE_URL + '/forgot-password/verify?token=' + token; const info = await transporter.sendMail({ - from: '"Your App" <${process.env.EMAIL_USER}>', + from: `"Your App" <${appEnv.SMTP_USERNAME}>`, to, subject: 'Password Reset Request', text: `You requested a password reset. Click this link to reset your password: ${resetUrl}`, From 3b41eb96db80e32a9434187977fc4035b16ac887 Mon Sep 17 00:00:00 2001 From: percyfikri Date: Wed, 28 Aug 2024 14:52:15 +0700 Subject: [PATCH 19/24] Create : API for assessment-results --- apps/backend/src/data/permissions.ts | 13 + apps/backend/src/index.ts | 2 + .../src/routes/assessmentResult/route.ts | 238 ++++++++++++++++++ 3 files changed, 253 insertions(+) create mode 100644 apps/backend/src/routes/assessmentResult/route.ts diff --git a/apps/backend/src/data/permissions.ts b/apps/backend/src/data/permissions.ts index a048ea3..d80bbac 100644 --- a/apps/backend/src/data/permissions.ts +++ b/apps/backend/src/data/permissions.ts @@ -62,6 +62,19 @@ const permissionsData = [ { code: "managementAspect.restore", }, + { + code: "assessmentResult.readAll", + }, + { + code: "assessmentResult.read", + }, + { + code: "assessmentResult.readAllQuestions", + }, + { + code: "assessmentResult.create", + }, + ] as const; export type SpecificPermissionCode = (typeof permissionsData)[number]["code"]; diff --git a/apps/backend/src/index.ts b/apps/backend/src/index.ts index 14cf329..4bc545d 100644 --- a/apps/backend/src/index.ts +++ b/apps/backend/src/index.ts @@ -18,6 +18,7 @@ import HonoEnv from "./types/HonoEnv"; import devRoutes from "./routes/dev/route"; import appEnv from "./appEnv"; import questionsRoute from "./routes/questions/route"; +import assessmentResultRoute from "./routes/assessmentResult/route"; configDotenv(); @@ -84,6 +85,7 @@ const routes = app .route("/questions", questionsRoute) .route("/management-aspect", managementAspectsRoute) .route("/register", respondentsRoute) + .route("/assessmentResult", assessmentResultRoute) .onError((err, c) => { if (err instanceof DashboardError) { return c.json( diff --git a/apps/backend/src/routes/assessmentResult/route.ts b/apps/backend/src/routes/assessmentResult/route.ts new file mode 100644 index 0000000..a1ba1b0 --- /dev/null +++ b/apps/backend/src/routes/assessmentResult/route.ts @@ -0,0 +1,238 @@ +import { and, eq, isNull, sql } from "drizzle-orm"; +import { Hono } from "hono"; +import { z } from "zod"; +import db from "../../drizzle"; +import { assessments } from "../../drizzle/schema/assessments"; +import { respondents } from "../../drizzle/schema/respondents"; +import { users } from "../../drizzle/schema/users"; +import { aspects } from "../../drizzle/schema/aspects"; // Import schema aspek +import { subAspects } from "../../drizzle/schema/subAspects"; // Import schema subAspek +import { questions } from "../../drizzle/schema/questions"; // Import schema question +import { options } from "../../drizzle/schema/options"; +import { answers } from "../../drizzle/schema/answers"; +import { answerRevisions } from "../../drizzle/schema/answerRevisions"; +import HonoEnv from "../../types/HonoEnv"; +import authInfo from "../../middlewares/authInfo"; +import checkPermission from "../../middlewares/checkPermission"; +import requestValidator from "../../utils/requestValidator"; +import { notFound } from "../../errors/DashboardError"; + +const assessmentRoute = new Hono() + .use(authInfo) + + // Get All List of Assessment Results + .get( + "/", + checkPermission("assessmentResult.readAll"), + requestValidator( + "query", + z.object({ + page: z.coerce.number().int().min(0).default(0), + limit: z.coerce.number().int().min(1).max(1000).default(40), + }) + ), + async (c) => { + const { page, limit } = c.req.valid("query"); + + const result = await db + .select({ + id: assessments.id, + respondentName: users.name, // Mengambil `name` langsung dari tabel `users` + companyName: respondents.companyName, + statusAssessments: assessments.status, + statusVerification: sql` + CASE + WHEN ${assessments.validatedAt} IS NOT NULL THEN 'sudah diverifikasi' + ELSE 'belum diverifikasi' + END` + .as("statusVerification"), + assessmentsResult: sql` + (SELECT ROUND(AVG(${options.score}), 2) + FROM ${answers} + JOIN ${options} ON ${options.id} = ${answers.optionId} + JOIN ${questions} ON ${questions.id} = ${options.questionId} + JOIN ${subAspects} ON ${subAspects.id} = ${questions.subAspectId} + JOIN ${aspects} ON ${aspects.id} = ${subAspects.aspectId} + WHERE ${answers.assessmentId} = ${assessments.id})` + .as("assessmentsResult"), + }) + .from(assessments) + .leftJoin(respondents, eq(assessments.respondentId, respondents.id)) + .leftJoin(users, eq(respondents.userId, users.id)) // Menghubungkan `respondents` dengan `users` melalui `userId` + .offset(page * limit) + .limit(limit); + + const totalItems = await db + .select({ + count: sql`COUNT(*)`, + }) + .from(assessments); + + return c.json({ + data: result, + _metadata: { + currentPage: page, + totalPages: Math.ceil(totalItems[0].count / limit), + totalItems: totalItems[0].count, + perPage: limit, + }, + }); + } + ) + + // Get Assessment Result by ID + .get( + "/:id", + checkPermission("assessmentResult.read"), + async (c) => { + const assessmentId = c.req.param("id"); + + const result = await db + .select({ + respondentName: users.name, // Nama Responden + position: respondents.position, // Jabatan + workExperience: respondents.workExperience, // Pengalaman Kerja + email: users.email, // Email + companyName: respondents.companyName, // Instansi/Perusahaan + address: respondents.address, // Alamat + phoneNumber: respondents.phoneNumber, // Nomor Telepon + username: users.username, // Username + assessmentDate: assessments.createdAt, // Tanggal Asesmen + statusAssessment: assessments.status, // Status Asesmen + assessmentsResult: sql` + (SELECT ROUND(AVG(${options.score}), 2) + FROM ${answers} + JOIN ${options} ON ${options.id} = ${answers.optionId} + JOIN ${questions} ON ${questions.id} = ${options.questionId} + JOIN ${subAspects} ON ${subAspects.id} = ${questions.subAspectId} + JOIN ${aspects} ON ${aspects.id} = ${subAspects.aspectId} + WHERE ${answers.assessmentId} = ${assessments.id})` + .as("assessmentsResult"), + }) + .from(assessments) + .leftJoin(respondents, eq(assessments.respondentId, respondents.id)) + .leftJoin(users, eq(respondents.userId, users.id)) + .where(eq(assessments.id, assessmentId)); + + if (!result.length) { + throw notFound({ + message: "Assessment not found", + }); + } + + return c.json(result[0]); + } + ) + + // Get all Questions and Options that relate to Sub Aspects and Aspects based on Assessment ID + .get( + "getAllQuestion/:id", + checkPermission("assessmentResult.readAllQuestions"), + async (c) => { + const assessmentId = c.req.param("id"); + + if (!assessmentId) { + throw notFound({ + message: "Assessment ID is missing", + }); + } + + // Total count of options related to the assessment + const totalCountQuery = sql` + SELECT count(*) + FROM ${options} + LEFT JOIN ${questions} ON ${options.questionId} = ${questions.id} + LEFT JOIN ${subAspects} ON ${questions.subAspectId} = ${subAspects.id} + LEFT JOIN ${aspects} ON ${subAspects.aspectId} = ${aspects.id} + LEFT JOIN ${answers} ON ${options.id} = ${answers.optionId} + WHERE ${questions.deletedAt} IS NULL + AND ${answers.assessmentId} = ${assessmentId} + `; + + // Query to get detailed information about options + const result = await db + .select({ + optionId: options.id, + aspectsId: aspects.id, + aspectsName: aspects.name, + subAspectId: subAspects.id, + subAspectName: subAspects.name, + questionId: questions.id, + questionText: questions.question, + answerId: answers.id, + answerText: options.text, + answerScore: options.score, + }) + .from(options) + .leftJoin(questions, eq(options.questionId, questions.id)) + .leftJoin(subAspects, eq(questions.subAspectId, subAspects.id)) + .leftJoin(aspects, eq(subAspects.aspectId, aspects.id)) + .leftJoin(answers, eq(options.id, answers.optionId)) + .where(sql`${questions.deletedAt} IS NULL AND ${answers.assessmentId} = ${assessmentId}`); + + // Execute the total count query + const totalCountResult = await db.execute(totalCountQuery); + + if (result.length === 0) { + throw notFound({ + message: "Data does not exist", + }); + } + + return c.json({ + data: result, + totalCount: totalCountResult[0]?.count || 0 + }); + } + ) + + // POST Endpoint for creating a new answer revision + .post( + "/answer-revisions", + checkPermission("assessmentResult.create"), + requestValidator( + "json", + z.object({ + answerId: z.string(), + newOptionId: z.string(), + revisedBy: z.string(), + newValidationInformation: z.string(), + }) + ), + async (c) => { + const { answerId, newOptionId, revisedBy, newValidationInformation } = c.req.valid("json"); + + // Check if the answer exists + const existingAnswer = await db + .select() + .from(answers) + .where(eq(answers.id, answerId)); + + if (!existingAnswer.length) { + throw notFound({ + message: "Answer not found", + }); + } + + // Insert new revision + const [newRevision] = await db + .insert(answerRevisions) + .values({ + answerId, + newOptionId, + revisedBy, + newValidationInformation + }) + .returning(); + + return c.json( + { + message: "Answer revision created successfully", + data: newRevision + }, + 201 + ); + } + ); + +export default assessmentRoute; From e8a0ab48e8783d38d3a8cae92acdc589782b937b Mon Sep 17 00:00:00 2001 From: percyfikri Date: Thu, 29 Aug 2024 14:19:17 +0700 Subject: [PATCH 20/24] Update : delete comment --- .../src/routes/assessmentResult/route.ts | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/apps/backend/src/routes/assessmentResult/route.ts b/apps/backend/src/routes/assessmentResult/route.ts index a1ba1b0..40eb776 100644 --- a/apps/backend/src/routes/assessmentResult/route.ts +++ b/apps/backend/src/routes/assessmentResult/route.ts @@ -37,7 +37,7 @@ const assessmentRoute = new Hono() const result = await db .select({ id: assessments.id, - respondentName: users.name, // Mengambil `name` langsung dari tabel `users` + respondentName: users.name, companyName: respondents.companyName, statusAssessments: assessments.status, statusVerification: sql` @@ -58,7 +58,7 @@ const assessmentRoute = new Hono() }) .from(assessments) .leftJoin(respondents, eq(assessments.respondentId, respondents.id)) - .leftJoin(users, eq(respondents.userId, users.id)) // Menghubungkan `respondents` dengan `users` melalui `userId` + .leftJoin(users, eq(respondents.userId, users.id)) .offset(page * limit) .limit(limit); @@ -89,16 +89,16 @@ const assessmentRoute = new Hono() const result = await db .select({ - respondentName: users.name, // Nama Responden - position: respondents.position, // Jabatan - workExperience: respondents.workExperience, // Pengalaman Kerja - email: users.email, // Email - companyName: respondents.companyName, // Instansi/Perusahaan - address: respondents.address, // Alamat - phoneNumber: respondents.phoneNumber, // Nomor Telepon - username: users.username, // Username - assessmentDate: assessments.createdAt, // Tanggal Asesmen - statusAssessment: assessments.status, // Status Asesmen + respondentName: users.name, + position: respondents.position, + workExperience: respondents.workExperience, + email: users.email, + companyName: respondents.companyName, + address: respondents.address, + phoneNumber: respondents.phoneNumber, + username: users.username, + assessmentDate: assessments.createdAt, + statusAssessment: assessments.status, assessmentsResult: sql` (SELECT ROUND(AVG(${options.score}), 2) FROM ${answers} From 7c2eddb18f72c4cbc3bb4f73332cf9ceef18ca86 Mon Sep 17 00:00:00 2001 From: percyfikri Date: Thu, 29 Aug 2024 14:29:18 +0700 Subject: [PATCH 21/24] Update : delete comment --- apps/backend/src/routes/assessmentResult/route.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/backend/src/routes/assessmentResult/route.ts b/apps/backend/src/routes/assessmentResult/route.ts index 40eb776..5b9e989 100644 --- a/apps/backend/src/routes/assessmentResult/route.ts +++ b/apps/backend/src/routes/assessmentResult/route.ts @@ -5,9 +5,9 @@ import db from "../../drizzle"; import { assessments } from "../../drizzle/schema/assessments"; import { respondents } from "../../drizzle/schema/respondents"; import { users } from "../../drizzle/schema/users"; -import { aspects } from "../../drizzle/schema/aspects"; // Import schema aspek -import { subAspects } from "../../drizzle/schema/subAspects"; // Import schema subAspek -import { questions } from "../../drizzle/schema/questions"; // Import schema question +import { aspects } from "../../drizzle/schema/aspects"; +import { subAspects } from "../../drizzle/schema/subAspects"; +import { questions } from "../../drizzle/schema/questions"; import { options } from "../../drizzle/schema/options"; import { answers } from "../../drizzle/schema/answers"; import { answerRevisions } from "../../drizzle/schema/answerRevisions"; From 84d364e1a9f6f56dc663f097aed1500885bcf77b Mon Sep 17 00:00:00 2001 From: falendikategar Date: Fri, 30 Aug 2024 08:33:01 +0700 Subject: [PATCH 22/24] create: Slicing for Login Page --- .../assets/backgrounds/backgroundLogin.png | Bin 0 -> 458150 bytes .../backgrounds/backgroundLoginMobile.png | Bin 0 -> 85491 bytes apps/frontend/src/routes/login/index.lazy.tsx | 172 ++++++++++------- .../src/shadcn/components/ui/alert.tsx | 59 ++++++ .../src/shadcn/components/ui/card.tsx | 79 ++++++++ .../src/shadcn/components/ui/form.tsx | 178 ++++++++++++++++++ .../src/shadcn/components/ui/input.tsx | 25 +++ .../src/shadcn/components/ui/label.tsx | 26 +++ apps/frontend/tailwind.config.js | 10 + 9 files changed, 480 insertions(+), 69 deletions(-) create mode 100644 apps/frontend/src/assets/backgrounds/backgroundLogin.png create mode 100644 apps/frontend/src/assets/backgrounds/backgroundLoginMobile.png create mode 100644 apps/frontend/src/shadcn/components/ui/alert.tsx create mode 100644 apps/frontend/src/shadcn/components/ui/card.tsx create mode 100644 apps/frontend/src/shadcn/components/ui/form.tsx create mode 100644 apps/frontend/src/shadcn/components/ui/input.tsx create mode 100644 apps/frontend/src/shadcn/components/ui/label.tsx diff --git a/apps/frontend/src/assets/backgrounds/backgroundLogin.png b/apps/frontend/src/assets/backgrounds/backgroundLogin.png new file mode 100644 index 0000000000000000000000000000000000000000..3eba5c97c00b05f1972063518d5cc47b1663aa0e GIT binary patch literal 458150 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 literal 0 HcmV?d00001 diff --git a/apps/frontend/src/assets/backgrounds/backgroundLoginMobile.png b/apps/frontend/src/assets/backgrounds/backgroundLoginMobile.png new file mode 100644 index 0000000000000000000000000000000000000000..3032a3890765516ca4b6103fe1760e061573fa72 GIT binary patch literal 85491 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 - initialValues: { + resolver: zodResolver(formSchema), + defaultValues: { username: "", password: "", }, - validate: zodResolver(formSchema), }); useEffect(() => { @@ -94,63 +97,94 @@ export default function LoginPage() { }; return ( -
- - - Welcome - -
- - {errorMessage ? ( - - {errorMessage} - - ) : null} - - - - - - {/* +
+ Amati +
+
+ +

Sign In

+

+ New to this app?{' '} + - Don't have an account? Register - */} -

- - - - - + Register now + +

+
+ +
+ {errorMessage && ( + +

{errorMessage}

+
+ )} + ( + + Email/Username + + + + + + )} + /> + ( + + Password + + + + + + )} + /> +

+ + Forgot Password? + +

+
+
+ +
+
+ + +
); } diff --git a/apps/frontend/src/shadcn/components/ui/alert.tsx b/apps/frontend/src/shadcn/components/ui/alert.tsx new file mode 100644 index 0000000..41fa7e0 --- /dev/null +++ b/apps/frontend/src/shadcn/components/ui/alert.tsx @@ -0,0 +1,59 @@ +import * as React from "react" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const alertVariants = cva( + "relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground", + { + variants: { + variant: { + default: "bg-background text-foreground", + destructive: + "border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive", + }, + }, + defaultVariants: { + variant: "default", + }, + } +) + +const Alert = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes & VariantProps +>(({ className, variant, ...props }, ref) => ( +
+)) +Alert.displayName = "Alert" + +const AlertTitle = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +AlertTitle.displayName = "AlertTitle" + +const AlertDescription = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +AlertDescription.displayName = "AlertDescription" + +export { Alert, AlertTitle, AlertDescription } diff --git a/apps/frontend/src/shadcn/components/ui/card.tsx b/apps/frontend/src/shadcn/components/ui/card.tsx new file mode 100644 index 0000000..afa13ec --- /dev/null +++ b/apps/frontend/src/shadcn/components/ui/card.tsx @@ -0,0 +1,79 @@ +import * as React from "react" + +import { cn } from "@/lib/utils" + +const Card = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +Card.displayName = "Card" + +const CardHeader = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +CardHeader.displayName = "CardHeader" + +const CardTitle = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)) +CardTitle.displayName = "CardTitle" + +const CardDescription = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)) +CardDescription.displayName = "CardDescription" + +const CardContent = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)) +CardContent.displayName = "CardContent" + +const CardFooter = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +CardFooter.displayName = "CardFooter" + +export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent } diff --git a/apps/frontend/src/shadcn/components/ui/form.tsx b/apps/frontend/src/shadcn/components/ui/form.tsx new file mode 100644 index 0000000..44dc758 --- /dev/null +++ b/apps/frontend/src/shadcn/components/ui/form.tsx @@ -0,0 +1,178 @@ +"use client" + +import * as React from "react" +import * as LabelPrimitive from "@radix-ui/react-label" +import { Slot } from "@radix-ui/react-slot" +import { + Controller, + ControllerProps, + FieldPath, + FieldValues, + FormProvider, + useFormContext, +} from "react-hook-form" + +import { cn } from "@/lib/utils" +import { Label } from "@/shadcn/components/ui/label" + +const Form = FormProvider + +type FormFieldContextValue< + TFieldValues extends FieldValues = FieldValues, + TName extends FieldPath = FieldPath +> = { + name: TName +} + +const FormFieldContext = React.createContext( + {} as FormFieldContextValue +) + +const FormField = < + TFieldValues extends FieldValues = FieldValues, + TName extends FieldPath = FieldPath +>({ + ...props +}: ControllerProps) => { + return ( + + + + ) +} + +const useFormField = () => { + const fieldContext = React.useContext(FormFieldContext) + const itemContext = React.useContext(FormItemContext) + const { getFieldState, formState } = useFormContext() + + const fieldState = getFieldState(fieldContext.name, formState) + + if (!fieldContext) { + throw new Error("useFormField should be used within ") + } + + const { id } = itemContext + + return { + id, + name: fieldContext.name, + formItemId: `${id}-form-item`, + formDescriptionId: `${id}-form-item-description`, + formMessageId: `${id}-form-item-message`, + ...fieldState, + } +} + +type FormItemContextValue = { + id: string +} + +const FormItemContext = React.createContext( + {} as FormItemContextValue +) + +const FormItem = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => { + const id = React.useId() + + return ( + +
+ + ) +}) +FormItem.displayName = "FormItem" + +const FormLabel = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => { + const { error, formItemId } = useFormField() + + return ( +