All files / src/services notificationService.ts

100% Statements 21/21
100% Branches 6/6
100% Functions 7/7
100% Lines 21/21

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83          2x                 2x   2x 1x     2x 1x     2x     2x   2x     2x       2x           2x     1x           2x       1x             2x     1x             2x       1x     2x 1x    
import {
  ListNotificationsResponse,
  MarkAllNotificationsReadResponse,
  UnreadNotificationCountResponse,
} from '@/models/notification';
import { apiDeleteAuth, apiGetAuth, apiPatchAuth } from '@/services/api';
 
export interface ListNotificationsParams {
  limit?: number;
  cursor?: string | null;
  onlyUnread?: boolean;
}
 
function notificationListEndpoint(params?: ListNotificationsParams): string {
  const query = new URLSearchParams();
 
  if (params?.limit) {
    query.set('limit', String(params.limit));
  }
 
  if (params?.cursor) {
    query.set('cursor', params.cursor);
  }
 
  const path = params?.onlyUnread
    ? '/me/notifications/unread'
    : '/me/notifications';
  const serialized = query.toString();
 
  return serialized ? `${path}?${serialized}` : path;
}
 
export function listNotifications(
  token: string,
  params?: ListNotificationsParams,
): Promise<ListNotificationsResponse> {
  return apiGetAuth<ListNotificationsResponse>(
    notificationListEndpoint(params),
    token,
  );
}
 
export function getUnreadNotificationCount(
  token: string,
): Promise<UnreadNotificationCountResponse> {
  return apiGetAuth<UnreadNotificationCountResponse>(
    '/me/notifications/unread-count',
    token,
  );
}
 
export function markNotificationRead(
  notificationId: string,
  token: string,
): Promise<void> {
  return apiPatchAuth<void>(
    `/me/notifications/${notificationId}/read`,
    {},
    token,
  );
}
 
export function markAllNotificationsRead(
  token: string,
): Promise<MarkAllNotificationsReadResponse> {
  return apiPatchAuth<MarkAllNotificationsReadResponse>(
    '/me/notifications/read',
    {},
    token,
  );
}
 
export function deleteNotification(
  notificationId: string,
  token: string,
): Promise<void> {
  return apiDeleteAuth<void>(`/me/notifications/${notificationId}`, token);
}
 
export function deleteAllNotifications(token: string): Promise<void> {
  return apiDeleteAuth<void>('/me/notifications', token);
}