Pull Request branch dev-clone to main #1

Merged
gitea merged 429 commits from dev-clone into main 2024-12-23 09:31:34 +00:00
Showing only changes of commit 625420417e - Show all commits

View File

@ -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;