-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathevent.ts
More file actions
90 lines (75 loc) · 2.85 KB
/
event.ts
File metadata and controls
90 lines (75 loc) · 2.85 KB
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
84
85
86
87
88
89
import { axiosClient } from '../../../shared/types/api/http-client';
import { EventDetailRequest } from '../model/eventDetail';
import { CategoryType, TagType } from '../../../shared/types/baseEventType';
import { ApiResponse } from '../../../shared/types/api/apiResponse';
import { EventItem, PaginationParams } from '../model/eventDetail';
export const eventDetail = async (dto: EventDetailRequest) => {
const response = await axiosClient.get(`/events/${dto.eventId}`, {
params: { userId: dto.userId },
headers: { isPublicApi: true },
});
return response.data;
};
// 전체 이벤트 목록 조회 (무한 스크롤)
export const getAllEventsInfinite = async ({
page,
size,
tag,
}: PaginationParams & { tag?: TagType }): Promise<{ items: EventItem[]; hasNextPage: boolean }> => {
const params = new URLSearchParams();
if (tag) params.append('tag', tag);
params.append('page', page.toString());
params.append('size', size.toString());
const response = await axiosClient.get<ApiResponse<EventItem[]>>(`/events?${params.toString()}`, {
headers: { isPublicApi: true },
});
const items = response.data.result ?? [];
return {
items,
hasNextPage: items.length === size,
};
};
// 카테고리별 이벤트 목록 조회 (무한 스크롤)
export const getCategoryEventsInfinite = async ({
page,
size,
category,
}: PaginationParams & { category: CategoryType }): Promise<{ items: EventItem[]; hasNextPage: boolean }> => {
const params = new URLSearchParams();
params.append('category', category);
params.append('page', page.toString());
params.append('size', size.toString());
const response = await axiosClient.get<ApiResponse<EventItem[]>>(`/events/categories?${params.toString()}`, {
headers: { isPublicApi: true },
});
const items = response.data.result ?? [];
return {
items,
hasNextPage: items.length === size,
};
};
// 태그별 이벤트 목록 조회 (최신, 인기, 마감 / 기본 정보)
export const getEventByTag = async (tag: TagType, { page, size }: PaginationParams): Promise<EventItem[]> => {
const response = await axiosClient.get<{ result: EventItem[] }>(`/events?tag=${tag}&page=${page}&size=${size}`, {
headers: { isPublicApi: true },
});
return response.data.result || [];
};
// 카테고리별 이벤트 목록 조회 (개발, 네트워킹, 해커톤, 컨퍼런스)
export const getEventByCategory = async (
category: CategoryType,
{ page, size }: PaginationParams
): Promise<EventItem[]> => {
const response = await axiosClient.get<EventItem[]>(
`/events/category?category=${category}&page=${page}&size=${size}`,
{
headers: { isPublicApi: true },
}
);
return response.data;
};
// 이벤트 삭제 (DELETE)
export const eventDeletion = async (eventId: number) => {
const response = await axiosClient.delete(`/events/${eventId}`);
return response.data;
};