Implements announcements end-to-end (admin CRUD + read status, user list + mark read) with OR-of-AND targeting. Also breaks the ent<->service import cycle by moving schema-facing constants/targeting into a new domain package.
72 lines
1.9 KiB
TypeScript
72 lines
1.9 KiB
TypeScript
/**
|
|
* Admin Announcements API endpoints
|
|
*/
|
|
|
|
import { apiClient } from '../client'
|
|
import type {
|
|
Announcement,
|
|
AnnouncementUserReadStatus,
|
|
BasePaginationResponse,
|
|
CreateAnnouncementRequest,
|
|
UpdateAnnouncementRequest
|
|
} from '@/types'
|
|
|
|
export async function list(
|
|
page: number = 1,
|
|
pageSize: number = 20,
|
|
filters?: {
|
|
status?: string
|
|
search?: string
|
|
}
|
|
): Promise<BasePaginationResponse<Announcement>> {
|
|
const { data } = await apiClient.get<BasePaginationResponse<Announcement>>('/admin/announcements', {
|
|
params: { page, page_size: pageSize, ...filters }
|
|
})
|
|
return data
|
|
}
|
|
|
|
export async function getById(id: number): Promise<Announcement> {
|
|
const { data } = await apiClient.get<Announcement>(`/admin/announcements/${id}`)
|
|
return data
|
|
}
|
|
|
|
export async function create(request: CreateAnnouncementRequest): Promise<Announcement> {
|
|
const { data } = await apiClient.post<Announcement>('/admin/announcements', request)
|
|
return data
|
|
}
|
|
|
|
export async function update(id: number, request: UpdateAnnouncementRequest): Promise<Announcement> {
|
|
const { data } = await apiClient.put<Announcement>(`/admin/announcements/${id}`, request)
|
|
return data
|
|
}
|
|
|
|
export async function deleteAnnouncement(id: number): Promise<{ message: string }> {
|
|
const { data } = await apiClient.delete<{ message: string }>(`/admin/announcements/${id}`)
|
|
return data
|
|
}
|
|
|
|
export async function getReadStatus(
|
|
id: number,
|
|
page: number = 1,
|
|
pageSize: number = 20,
|
|
search: string = ''
|
|
): Promise<BasePaginationResponse<AnnouncementUserReadStatus>> {
|
|
const { data } = await apiClient.get<BasePaginationResponse<AnnouncementUserReadStatus>>(
|
|
`/admin/announcements/${id}/read-status`,
|
|
{ params: { page, page_size: pageSize, search } }
|
|
)
|
|
return data
|
|
}
|
|
|
|
const announcementsAPI = {
|
|
list,
|
|
getById,
|
|
create,
|
|
update,
|
|
delete: deleteAnnouncement,
|
|
getReadStatus
|
|
}
|
|
|
|
export default announcementsAPI
|
|
|