import { Router } from "express"; import type { Db } from "@paperclipai/db"; import { companySkillImportSchema } from "@paperclipai/shared"; import { validate } from "../middleware/validate.js"; import { companySkillService, logActivity } from "../services/index.js"; import { assertCompanyAccess, getActorInfo } from "./authz.js"; export function companySkillRoutes(db: Db) { const router = Router(); const svc = companySkillService(db); router.get("/companies/:companyId/skills", async (req, res) => { const companyId = req.params.companyId as string; assertCompanyAccess(req, companyId); const result = await svc.list(companyId); res.json(result); }); router.get("/companies/:companyId/skills/:skillId", async (req, res) => { const companyId = req.params.companyId as string; const skillId = req.params.skillId as string; assertCompanyAccess(req, companyId); const result = await svc.detail(companyId, skillId); if (!result) { res.status(404).json({ error: "Skill not found" }); return; } res.json(result); }); router.post( "/companies/:companyId/skills/import", validate(companySkillImportSchema), async (req, res) => { const companyId = req.params.companyId as string; assertCompanyAccess(req, companyId); const source = String(req.body.source ?? ""); const result = await svc.importFromSource(companyId, source); const actor = getActorInfo(req); await logActivity(db, { companyId, actorType: actor.actorType, actorId: actor.actorId, agentId: actor.agentId, runId: actor.runId, action: "company.skills_imported", entityType: "company", entityId: companyId, details: { source, importedCount: result.imported.length, importedSlugs: result.imported.map((skill) => skill.slug), warningCount: result.warnings.length, }, }); res.status(201).json(result); }, ); return router; }