import { api } from "@/lib/api-client"; import type { DiscussionBoard, DiscussionPost, Announcement, Message, PostCreateRequest, AnnouncementCreateRequest, MessageCreateRequest, } from "@/types/communication"; import type { ApiSuccessResponse, PaginatedResponse, PaginationParams } from "@/types"; export const communicationService = { async listDiscussionBoards(params?: { course_id?: number; batch_id?: number }): Promise { return api.get("/discussion-boards", params as Record); }, async createDiscussionBoard(data: Partial & Pick): Promise { return api.post("/discussion-boards", data); }, async updateDiscussionBoard(id: number, data: Partial): Promise { return api.patch(`/discussion-boards/${id}`, data); }, async listPosts(boardId: number, params?: PaginationParams): Promise> { return api.get>( `/discussion-boards/${boardId}/posts`, params as Record, ); }, async createPost(boardId: number, data: PostCreateRequest): Promise { return api.post(`/discussion-boards/${boardId}/posts`, data); }, async updatePost(id: number, data: Partial): Promise { return api.patch(`/posts/${id}`, data); }, async deletePost(id: number): Promise { return api.delete(`/posts/${id}`); }, async pinPost(id: number, body?: { pinned?: boolean }): Promise { return api.post(`/posts/${id}/pin`, body); }, async resolvePost(id: number): Promise { return api.post(`/posts/${id}/resolve`); }, async listAnnouncements(params?: { course_id?: number; priority?: string }): Promise { return api.get("/announcements", params as Record); }, async createAnnouncement(data: AnnouncementCreateRequest): Promise { return api.post("/announcements", data); }, async updateAnnouncement(id: number, data: Partial): Promise { return api.patch(`/announcements/${id}`, data); }, async deleteAnnouncement(id: number): Promise { return api.delete(`/announcements/${id}`); }, async publishAnnouncement(id: number): Promise { return api.post(`/announcements/${id}/publish`); }, async listMessages(params?: { is_read?: boolean } & PaginationParams): Promise> { return api.get>("/messages", params as Record); }, async listSentMessages(params?: PaginationParams): Promise> { return api.get>("/messages/sent", params as Record); }, async sendMessage(data: MessageCreateRequest): Promise { return api.post("/messages", data); }, async getMessage(id: number): Promise { return api.get(`/messages/${id}`); }, async deleteMessage(id: number): Promise { return api.delete(`/messages/${id}`); }, async getUnreadMessageCount(): Promise<{ count: number }> { return api.get<{ count: number }>("/messages/unread-count"); }, };