update : Revision after first pull request on management-aspect
This commit is contained in:
parent
1774dda83e
commit
625420417e
|
|
@ -2,7 +2,6 @@
|
|||
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";
|
||||
|
|
@ -10,6 +9,8 @@
|
|||
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({
|
||||
|
|
@ -53,6 +54,7 @@
|
|||
* - includeTrashed: boolean (default: false)
|
||||
* - withMetadata: boolean
|
||||
*/
|
||||
|
||||
// Get all aspects
|
||||
.get(
|
||||
"/",
|
||||
|
|
@ -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,21 +171,22 @@
|
|||
)
|
||||
|
||||
// Create aspect
|
||||
.post(
|
||||
"/",
|
||||
.post("/",
|
||||
checkPermission("managementAspect.create"),
|
||||
requestValidator("json", aspectFormSchema),
|
||||
async (c) => {
|
||||
const aspectData = c.req.valid("json");
|
||||
|
||||
// Validasi untuk mengecek apakah nama aspek sudah ada
|
||||
// Validation to check if the aspect name already exists
|
||||
const existingAspect = await db
|
||||
.select()
|
||||
.from(aspects)
|
||||
.where(ilike(aspects.name, aspectData.name));
|
||||
.where(eq(aspects.name, aspectData.name));
|
||||
|
||||
if (existingAspect.length > 0) {
|
||||
throw new HTTPException(400, { message: "Aspect name already existss" });
|
||||
throw forbidden({
|
||||
message: "Aspect name already exists",
|
||||
});
|
||||
}
|
||||
|
||||
const aspect = await db
|
||||
|
|
@ -196,9 +196,10 @@
|
|||
})
|
||||
.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) => ({
|
||||
|
|
@ -227,20 +228,22 @@
|
|||
const aspectId = c.req.param("id");
|
||||
const aspectData = c.req.valid("json");
|
||||
|
||||
// Validasi untuk mengecek apakah nama aspek baru sudah ada
|
||||
// Validation to check if the new aspect name already exists
|
||||
const existingAspect = await db
|
||||
.select()
|
||||
.from(aspects)
|
||||
.where(
|
||||
and(
|
||||
ilike(aspects.name, aspectData.name),
|
||||
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" });
|
||||
throw forbidden({
|
||||
message: "Aspect name already exists",
|
||||
});
|
||||
}
|
||||
|
||||
const aspect = await db
|
||||
|
|
@ -248,7 +251,7 @@
|
|||
.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)
|
||||
|
|
@ -258,20 +261,21 @@
|
|||
})
|
||||
.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
|
||||
.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",
|
||||
});
|
||||
|
|
@ -332,7 +333,7 @@
|
|||
if (!aspect) return c.notFound();
|
||||
|
||||
if (!aspect.deletedAt) {
|
||||
throw new HTTPException(400, {
|
||||
throw forbidden({
|
||||
message: "The aspect is not deleted",
|
||||
});
|
||||
}
|
||||
|
|
@ -355,10 +356,12 @@
|
|||
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",
|
||||
});
|
||||
|
||||
|
|
@ -381,28 +384,29 @@
|
|||
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"),
|
||||
"/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,8 +456,7 @@
|
|||
return c.json({
|
||||
message: "Sub aspect updated successfully",
|
||||
});
|
||||
}
|
||||
)
|
||||
})
|
||||
|
||||
// Delete sub aspect
|
||||
.delete(
|
||||
|
|
@ -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",
|
||||
|
|
@ -492,4 +490,3 @@
|
|||
);
|
||||
|
||||
export default managementAspectRoute;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user