import { Prisma } from "@db"; import models from "@models"; import { NotFoundError } from "ts-rails"; import { ApiV1AdminController } from "./admin.controller"; export class ApiV1AdminFeatureController extends ApiV1AdminController { async index() { const search = String(this.req.query.search || "").trim(); const where: Prisma.FeatureWhereInput = { deleted: false }; if (search) { where.OR = [ { code: { contains: search } }, { name: { contains: search } }, ]; } const features = await models.feature.findMany({ where, include: { permissions: { where: { deleted: false } }, parent: true, }, orderBy: [{ sortOrder: "asc" }, { code: "asc" }], }); this.renderJson({ features, search }); } async show() { const feature = await models.feature.findFirst({ where: { id: this.req.params.id, deleted: false }, include: { permissions: { where: { deleted: false } }, parent: true, children: { where: { deleted: false } }, }, }); if (!feature) throw new NotFoundError("Feature not found"); this.renderJson({ feature }); } }