Skip to content

Commit 79d0efd

Browse files
authored
Merge pull request #60 from codegasms/feat/problems-frontend-integration
Problems frontend integration
2 parents ee534f4 + 8416abf commit 79d0efd

File tree

5 files changed

+1175
-31
lines changed

5 files changed

+1175
-31
lines changed

app/[orgId]/problems/page.tsx

Lines changed: 33 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export default function ProblemsPage({
1919
}) {
2020
const [problems, setProblems] = useState<Problem[]>([]);
2121
const [selectedProblem, setSelectedProblem] = useState<Problem | null>(null);
22-
// const [isEditorOpen, setIsEditorOpen] = useState(false);
22+
const [isEditorOpen, setIsEditorOpen] = useState(false);
2323

2424
const { toast } = useToast();
2525

@@ -29,7 +29,7 @@ export default function ProblemsPage({
2929
const response = await fetch(`/api/orgs/${params.orgId}/problems`);
3030
if (!response.ok) throw new Error("Failed to fetch problems");
3131
const data = await response.json();
32-
setProblems(data);
32+
setProblems(data && data.length ? data : mockProblems);
3333
} catch (error) {
3434
console.error("Error fetching problems:", error);
3535
setProblems(mockProblems);
@@ -38,10 +38,10 @@ export default function ProblemsPage({
3838
fetchProblems();
3939
}, [params.orgId]);
4040

41-
// const handleAdd = () => {
42-
// setSelectedProblem(null);
43-
// setIsEditorOpen(true);
44-
// };
41+
const handleAdd = () => {
42+
setSelectedProblem(null);
43+
setIsEditorOpen(true);
44+
};
4545

4646
// const handleEdit = (problem: Problem) => {
4747
// setSelectedProblem(problem);
@@ -63,33 +63,35 @@ export default function ProblemsPage({
6363
}
6464
};
6565

66-
// const handleSave = async (problem: Problem) => {
67-
// try {
68-
// const url = selectedProblem
69-
// ? `/api/orgs/${params.orgId}/problems/${selectedProblem.id}`
70-
// : `/api/orgs/${params.orgId}/problems`;
66+
/*
67+
const handleSave = async (problem: Problem) => {
68+
try {
69+
const url = selectedProblem
70+
? `/api/orgs/${params.orgId}/problems/${selectedProblem.id}`
71+
: `/api/orgs/${params.orgId}/problems`;
7172
72-
// const response = await fetch(url, {
73-
// method: selectedProblem ? "PATCH" : "POST",
74-
// headers: { "Content-Type": "application/json" },
75-
// body: JSON.stringify({ ...problem, orgId: parseInt(params.orgId) }),
76-
// });
73+
const response = await fetch(url, {
74+
method: selectedProblem ? "PATCH" : "POST",
75+
headers: { "Content-Type": "application/json" },
76+
body: JSON.stringify({ ...problem, orgId: parseInt(params.orgId) }),
77+
});
7778
78-
// if (!response.ok) throw new Error("Failed to save problem");
79-
// const savedProblem = await response.json();
79+
if (!response.ok) throw new Error("Failed to save problem");
80+
const savedProblem = await response.json();
8081
81-
// setProblems((prev) => {
82-
// if (selectedProblem) {
83-
// return prev.map((p) =>
84-
// p.id === selectedProblem.id ? savedProblem : p,
85-
// );
86-
// }
87-
// return [...prev, savedProblem];
88-
// });
89-
// } catch (error) {
90-
// console.error("Error saving problem:", error);
91-
// }
92-
// };
82+
setProblems((prev) => {
83+
if (selectedProblem) {
84+
return prev.map((p) =>
85+
p.id === selectedProblem.id ? savedProblem : p,
86+
);
87+
}
88+
return [...prev, savedProblem];
89+
});
90+
} catch (error) {
91+
console.error("Error saving problem:", error);
92+
}
93+
};
94+
*/
9395

9496
// const handleSavelocal = (updatedProblem: Problem) => {
9597
// setProblems(
@@ -109,7 +111,7 @@ export default function ProblemsPage({
109111
columns={columns}
110112
title="Problems"
111113
searchableFields={["nameId", "title"]}
112-
// onAdd={handleAdd}
114+
onAdd={handleAdd}
113115
// onEdit={null}
114116
onDelete={handleDelete}
115117
allowDownload={true}

app/api/orgs/[orgId]/problems/route.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,11 @@ export async function GET(
1111
{ params }: { params: { orgId: string } },
1212
) {
1313
try {
14+
console.log("HERE");
1415
const orgId = await getOrgIdFromNameId(NameIdSchema.parse(params.orgId));
16+
console.log(`orgId: ${orgId}`);
1517
const problems = await problemService.getOrgProblems(orgId);
18+
console.log(`problems: ${problems}`);
1619

1720
const validatedProblems = z.array(problemSchema).parse(problems);
1821
return NextResponse.json(validatedProblems);
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
ALTER TABLE "problems" ADD COLUMN "code" text NOT NULL;--> statement-breakpoint
2+
ALTER TABLE "problems" ADD CONSTRAINT "problems_code_unique" UNIQUE("code");

0 commit comments

Comments
 (0)