- Restructure: move backend from new_project/ to backend/ - Add full React/TypeScript frontend (37 pages, 17 services, 16 type defs, 11 query hooks) - Add docs/ with SRS specs, user stories, and workflow documentation - Update .gitignore for new directory layout Workflows implemented: WF1 User Signup, WF2 Placement Test, WF3 Exam Configuration, WF4 General English Exam, WF5 Course Generation, WF6 Entity Student Onboarding, AI Course Generation, Adaptive Learning Engine UI, White-Label Branding, Score Release Made-with: Cursor
86 lines
2.6 KiB
TypeScript
86 lines
2.6 KiB
TypeScript
import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query";
|
|
import { queryKeys } from "./keys";
|
|
import { faqService } from "@/services/faq.service";
|
|
import type { FaqCategoryCreateRequest, FaqItemCreateRequest } from "@/types/faq";
|
|
|
|
export function useFaqCategories(audience?: string) {
|
|
return useQuery({
|
|
queryKey: queryKeys.faqCategories(audience),
|
|
queryFn: () => faqService.listCategories(audience ? { audience } : undefined),
|
|
});
|
|
}
|
|
|
|
export function useFaqItems(params?: { category_id?: number; audience?: string; search?: string }) {
|
|
return useQuery({
|
|
queryKey: queryKeys.faqItems(params),
|
|
queryFn: () => faqService.listItems(params),
|
|
});
|
|
}
|
|
|
|
export function useCreateFaqCategory() {
|
|
const qc = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: (data: FaqCategoryCreateRequest) => faqService.createCategory(data),
|
|
onSuccess: () => {
|
|
qc.invalidateQueries({ queryKey: ["faq", "categories"] });
|
|
},
|
|
});
|
|
}
|
|
|
|
export function useUpdateFaqCategory() {
|
|
const qc = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: ({ id, data }: { id: number; data: Partial<FaqCategoryCreateRequest> }) =>
|
|
faqService.updateCategory(id, data),
|
|
onSuccess: () => {
|
|
qc.invalidateQueries({ queryKey: ["faq", "categories"] });
|
|
qc.invalidateQueries({ queryKey: ["faq", "items"] });
|
|
},
|
|
});
|
|
}
|
|
|
|
export function useDeleteFaqCategory() {
|
|
const qc = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: (id: number) => faqService.deleteCategory(id),
|
|
onSuccess: () => {
|
|
qc.invalidateQueries({ queryKey: ["faq", "categories"] });
|
|
qc.invalidateQueries({ queryKey: ["faq", "items"] });
|
|
},
|
|
});
|
|
}
|
|
|
|
export function useCreateFaqItem() {
|
|
const qc = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: (data: FaqItemCreateRequest) => faqService.createItem(data),
|
|
onSuccess: () => {
|
|
qc.invalidateQueries({ queryKey: ["faq", "items"] });
|
|
qc.invalidateQueries({ queryKey: ["faq", "categories"] });
|
|
},
|
|
});
|
|
}
|
|
|
|
export function useUpdateFaqItem() {
|
|
const qc = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: ({ id, data }: { id: number; data: Partial<FaqItemCreateRequest> }) =>
|
|
faqService.updateItem(id, data),
|
|
onSuccess: () => {
|
|
qc.invalidateQueries({ queryKey: ["faq", "items"] });
|
|
qc.invalidateQueries({ queryKey: ["faq", "categories"] });
|
|
},
|
|
});
|
|
}
|
|
|
|
export function useDeleteFaqItem() {
|
|
const qc = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: (id: number) => faqService.deleteItem(id),
|
|
onSuccess: () => {
|
|
qc.invalidateQueries({ queryKey: ["faq", "items"] });
|
|
qc.invalidateQueries({ queryKey: ["faq", "categories"] });
|
|
},
|
|
});
|
|
}
|