94 lines
2.5 KiB
TypeScript
94 lines
2.5 KiB
TypeScript
|
|
'use server';
|
||
|
|
|
||
|
|
/**
|
||
|
|
* TodayIssue API 서비스
|
||
|
|
* 헤더 알림 기능을 위한 API 호출 함수
|
||
|
|
*/
|
||
|
|
|
||
|
|
import { apiClient } from './index';
|
||
|
|
import type {
|
||
|
|
ApiResponse,
|
||
|
|
TodayIssueUnreadResponse,
|
||
|
|
TodayIssueUnreadCountResponse,
|
||
|
|
TodayIssueMarkAllReadResponse,
|
||
|
|
} from '@/types/today-issue';
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 읽지 않은 이슈 목록 조회 (헤더 알림용)
|
||
|
|
* @param limit 조회할 최대 항목 수 (기본 10)
|
||
|
|
*/
|
||
|
|
export async function getUnreadTodayIssues(limit: number = 10): Promise<ApiResponse<TodayIssueUnreadResponse>> {
|
||
|
|
try {
|
||
|
|
const response = await apiClient.get<ApiResponse<TodayIssueUnreadResponse>>(
|
||
|
|
'/today-issues/unread',
|
||
|
|
{ params: { limit: String(limit) } }
|
||
|
|
);
|
||
|
|
return response;
|
||
|
|
} catch (error) {
|
||
|
|
console.error('[TodayIssue] getUnreadTodayIssues error:', error);
|
||
|
|
// 에러 시 빈 응답 반환 (UI에서 처리)
|
||
|
|
return {
|
||
|
|
success: false,
|
||
|
|
message: '알림을 불러오는데 실패했습니다.',
|
||
|
|
data: { items: [], total: 0 },
|
||
|
|
};
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 읽지 않은 이슈 개수 조회 (헤더 뱃지용)
|
||
|
|
*/
|
||
|
|
export async function getUnreadTodayIssueCount(): Promise<ApiResponse<TodayIssueUnreadCountResponse>> {
|
||
|
|
try {
|
||
|
|
const response = await apiClient.get<ApiResponse<TodayIssueUnreadCountResponse>>(
|
||
|
|
'/today-issues/unread/count'
|
||
|
|
);
|
||
|
|
return response;
|
||
|
|
} catch (error) {
|
||
|
|
console.error('[TodayIssue] getUnreadTodayIssueCount error:', error);
|
||
|
|
return {
|
||
|
|
success: false,
|
||
|
|
message: '알림 개수를 불러오는데 실패했습니다.',
|
||
|
|
data: { count: 0 },
|
||
|
|
};
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 이슈 읽음 처리
|
||
|
|
* @param id 이슈 ID
|
||
|
|
*/
|
||
|
|
export async function markTodayIssueAsRead(id: number): Promise<ApiResponse<null>> {
|
||
|
|
try {
|
||
|
|
const response = await apiClient.post<ApiResponse<null>>(
|
||
|
|
`/today-issues/${id}/read`
|
||
|
|
);
|
||
|
|
return response;
|
||
|
|
} catch (error) {
|
||
|
|
console.error('[TodayIssue] markTodayIssueAsRead error:', error);
|
||
|
|
return {
|
||
|
|
success: false,
|
||
|
|
message: '읽음 처리에 실패했습니다.',
|
||
|
|
data: null,
|
||
|
|
};
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 모든 이슈 읽음 처리
|
||
|
|
*/
|
||
|
|
export async function markAllTodayIssuesAsRead(): Promise<ApiResponse<TodayIssueMarkAllReadResponse>> {
|
||
|
|
try {
|
||
|
|
const response = await apiClient.post<ApiResponse<TodayIssueMarkAllReadResponse>>(
|
||
|
|
'/today-issues/read-all'
|
||
|
|
);
|
||
|
|
return response;
|
||
|
|
} catch (error) {
|
||
|
|
console.error('[TodayIssue] markAllTodayIssuesAsRead error:', error);
|
||
|
|
return {
|
||
|
|
success: false,
|
||
|
|
message: '모두 읽음 처리에 실패했습니다.',
|
||
|
|
data: { count: 0 },
|
||
|
|
};
|
||
|
|
}
|
||
|
|
}
|