From cb6afe9583da08e87e8bc4ecf8ad20ff52c57807 Mon Sep 17 00:00:00 2001 From: Tiago Yamamoto Date: Thu, 25 Dec 2025 22:41:38 -0300 Subject: [PATCH] fix(frontend): enable job delete/update API calls and add logging - Added update() and delete() methods to jobsApi in api.ts - Fixed handleDeleteJob to call jobsApi.delete() instead of just local state - Fixed handleSaveEdit to call jobsApi.update() instead of being commented out - Added console logging to all CRUD operations for debugging --- frontend/src/app/dashboard/jobs/page.tsx | 24 ++++++++++++++++++------ frontend/src/lib/api.ts | 16 ++++++++++++++++ 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/frontend/src/app/dashboard/jobs/page.tsx b/frontend/src/app/dashboard/jobs/page.tsx index 2a43422..bd3f33e 100644 --- a/frontend/src/app/dashboard/jobs/page.tsx +++ b/frontend/src/app/dashboard/jobs/page.tsx @@ -20,7 +20,7 @@ import { Label } from "@/components/ui/label" import { Textarea } from "@/components/ui/textarea" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" import { Plus, Search, Edit, Trash2, Eye, ChevronLeft, ChevronRight } from "lucide-react" -import { adminJobsApi, adminCompaniesApi, type AdminJob, type AdminCompany } from "@/lib/api" +import { adminJobsApi, adminCompaniesApi, jobsApi, type AdminJob, type AdminCompany } from "@/lib/api" type AdminJobRow = { id: string @@ -174,33 +174,45 @@ export default function AdminJobsPage() { } const handleDeleteJob = async (id: string) => { + console.log("[JOBS_PAGE] handleDeleteJob called with id:", id) if (!confirm("Are you sure you want to delete this job?")) return try { - // await adminJobsApi.delete(id) + console.log("[JOBS_PAGE] Calling jobsApi.delete...") + await jobsApi.delete(id) + console.log("[JOBS_PAGE] Job deleted successfully, updating local state") setJobs((prevJobs) => prevJobs.filter((job) => job.id !== id)) } catch (error) { - console.error("Failed to delete job:", error) + console.error("[JOBS_PAGE] Failed to delete job:", error) alert("Failed to delete job") } } + const handleSaveEdit = async () => { if (!selectedJob) return + console.log("[JOBS_PAGE] handleSaveEdit called for job:", selectedJob.id) + console.log("[JOBS_PAGE] Edit form data:", editForm) + try { setIsLoading(true) - // const updated = await adminJobsApi.update(selectedJob.id, editForm) - // setJobs((prev) => prev.map((j) => (j.id === selectedJob.id ? updated : j))) + console.log("[JOBS_PAGE] Calling jobsApi.update...") + const updated = await jobsApi.update(selectedJob.id, editForm) + console.log("[JOBS_PAGE] Job updated successfully:", updated) + // Reload jobs to get fresh data + const jobsData = await adminJobsApi.list({ limit: 10, page: 1 }) + setJobs(jobsData.data ?? []) setIsEditDialogOpen(false) } catch (error) { - console.error("Failed to update job:", error) + console.error("[JOBS_PAGE] Failed to update job:", error) alert("Failed to update job") } finally { setIsLoading(false) } } + const handlePreviousPage = () => { if (page > 1) setPage(page - 1) } diff --git a/frontend/src/lib/api.ts b/frontend/src/lib/api.ts index 0a6964c..34a7374 100644 --- a/frontend/src/lib/api.ts +++ b/frontend/src/lib/api.ts @@ -349,8 +349,24 @@ export const jobsApi = { body: JSON.stringify(data), }); }, + update: (id: string, data: Partial) => { + logCrudAction("update", "jobs", { id, ...data }); + console.log("[JOBS_API] Updating job:", id, data); + return apiRequest(`/api/v1/jobs/${id}`, { + method: "PUT", + body: JSON.stringify(data), + }); + }, + delete: (id: string) => { + logCrudAction("delete", "jobs", { id }); + console.log("[JOBS_API] Deleting job:", id); + return apiRequest(`/api/v1/jobs/${id}`, { + method: "DELETE", + }); + }, }; + export const applicationsApi = { create: (data: any) => apiRequest("/api/v1/applications", {