feat(api): add settings categories/definitions CRUD with combined full endpoint
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
import { Elysia, t } from "elysia"
|
||||
import { createCrudRoutes } from "./crud-builder"
|
||||
import { settingCategories, settingDefinitions } from "@/lib/db/schema"
|
||||
import { db } from "@/lib/db/index"
|
||||
import { eq, asc } from "drizzle-orm"
|
||||
|
||||
// ── Setting Categories CRUD ───────────────────────────────────────
|
||||
export const settingCategoriesRoutes = createCrudRoutes(settingCategories, {
|
||||
prefix: "/settings/categories",
|
||||
name: "Setting Category",
|
||||
auth: { read: "public", write: "admin", delete: "admin" },
|
||||
})
|
||||
|
||||
// ── Setting Definitions CRUD ──────────────────────────────────────
|
||||
export const settingDefinitionsRoutes = createCrudRoutes(settingDefinitions, {
|
||||
prefix: "/settings/definitions",
|
||||
name: "Setting Definition",
|
||||
auth: { read: "public", write: "admin", delete: "admin" },
|
||||
filter: { fields: ["categoryId", "inputType", "impactLevel"] },
|
||||
})
|
||||
|
||||
// ── Combined endpoint: categories with their definitions ──────────
|
||||
// This is the main endpoint the frontend uses to render dynamic forms.
|
||||
export const settingsFullRoutes = new Elysia({
|
||||
prefix: "/settings/full",
|
||||
}).get(
|
||||
"/",
|
||||
async () => {
|
||||
const categories = await db
|
||||
.select()
|
||||
.from(settingCategories)
|
||||
.orderBy(asc(settingCategories.sortOrder))
|
||||
|
||||
const definitions = await db
|
||||
.select()
|
||||
.from(settingDefinitions)
|
||||
.orderBy(asc(settingDefinitions.sortOrder))
|
||||
|
||||
// Group definitions by category
|
||||
const result = categories.map((cat) => ({
|
||||
...cat,
|
||||
definitions: definitions.filter((d) => d.categoryId === cat.id),
|
||||
}))
|
||||
|
||||
return result
|
||||
},
|
||||
)
|
||||
Reference in New Issue
Block a user