feat: implement API composables for authentication and data fetching
- Add useApiFetch composable for HTTP requests with auth token - Implement useAuth composable for authentication endpoints - Add useAdmin composable for admin operations - Add useOperator composable for operator management - Add useMembers composable for member data - Add usePublic composable for public reports - Add useReports composable for report operations Co-authored-by: Copilot <[email protected]>
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
import type {
|
||||
CreateReportRequest,
|
||||
CreateReportResponse, FeedbackRequest, FlagRequest, FlagResponse,
|
||||
MediaUploadResponse,
|
||||
MessageListResponse, MessageRequest, OkResponse,
|
||||
ReportDetailResponse,
|
||||
ReportListResponse
|
||||
} from "~/types/api";
|
||||
|
||||
export const useReports = () => {
|
||||
const getReports = (query?: { area_id?: number; category_id?: number; status?: string }) =>
|
||||
useApiFetch<ReportListResponse>('/api/v1/reports', { method: 'GET', query })
|
||||
|
||||
const createReport = (body: CreateReportRequest) =>
|
||||
useApiFetch<CreateReportResponse>('/api/v1/reports', { method: 'POST', body })
|
||||
|
||||
const getReportDetail = (id: number) =>
|
||||
useApiFetch<ReportDetailResponse>(`/api/v1/reports/${id}`, { method: 'GET' })
|
||||
|
||||
const uploadMedia = (id: number, formData: FormData) =>
|
||||
useApiFetch<MediaUploadResponse>(`/api/v1/reports/${id}/media`, { method: 'POST', body: formData })
|
||||
|
||||
const getMessages = (id: number) =>
|
||||
useApiFetch<MessageListResponse>(`/api/v1/reports/${id}/messages`, { method: 'GET' })
|
||||
|
||||
const addMessage = (id: number, body: MessageRequest) =>
|
||||
useApiFetch<OkResponse>(`/api/v1/reports/${id}/messages`, { method: 'POST', body })
|
||||
|
||||
const addFeedback = (id: number, body: FeedbackRequest) =>
|
||||
useApiFetch<OkResponse>(`/api/v1/reports/${id}/feedback`, { method: 'POST', body })
|
||||
|
||||
const flagReport = (id: number, body: FlagRequest) =>
|
||||
useApiFetch<FlagResponse>(`/api/v1/reports/${id}/flags`, { method: 'POST', body })
|
||||
|
||||
const flagMessage = (reportId: number, messageId: number, body: FlagRequest) =>
|
||||
useApiFetch<FlagResponse>(`/api/v1/reports/${reportId}/messages/${messageId}/flags`, { method: 'POST', body })
|
||||
|
||||
return {
|
||||
getReports,
|
||||
createReport,
|
||||
getReportDetail,
|
||||
uploadMedia,
|
||||
getMessages,
|
||||
addMessage,
|
||||
addFeedback,
|
||||
flagReport,
|
||||
flagMessage,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user