'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> { try { const response = await apiClient.get>( '/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> { try { const response = await apiClient.get>( '/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> { try { const response = await apiClient.post>( `/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> { try { const response = await apiClient.post>( '/today-issues/read-all' ); return response; } catch (error) { console.error('[TodayIssue] markAllTodayIssuesAsRead error:', error); return { success: false, message: '모두 읽음 처리에 실패했습니다.', data: { count: 0 }, }; } }