Skip to content

Commit 9e7fcb4

Browse files
committed
refact: 중복된 이벤트 API 타입과 함수 제거 및 폴더 구조 정리
1 parent b1e8d59 commit 9e7fcb4

File tree

16 files changed

+76
-173
lines changed

16 files changed

+76
-173
lines changed

src/entities/event/api/event.ts

Lines changed: 21 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,24 @@
11
import { axiosClient } from '../../../shared/types/api/http-client';
2-
import { EventNormalResponse, EventDetailResponse } from '../model/eventResponse';
3-
import { EventTag, EventCategory, PaginationParams } from '../model/eventMeta';
4-
import { EventCreate, EventUpdate } from '../model/eventRequest';
5-
import { EventResponse } from '../model/eventResponse';
6-
import { EventItem } from '../model/event';
72
import { EventDetailRequest } from '../model/event';
3+
import { CategoryType, TagType } from '../../../shared/types/baseEventType';
4+
import { ApiResponse } from '../../../shared/types/api/apiResponse';
5+
import { EventItem, PaginationParams } from '../model/event';
86

97
export const eventDetail = async (dto: EventDetailRequest) => {
108
const response = await axiosClient.get(`/events/${dto.eventId}`);
119
return response.data;
1210
};
1311

1412
// 이벤트 검색 (기본 정보)
15-
export const searchEvents = async (keyword: string, { page, size }: PaginationParams): Promise<EventNormalResponse> => {
13+
export const searchEvents = async (keyword: string, { page, size }: PaginationParams): Promise<ApiResponse<EventItem[]>> => {
1614
const params = new URLSearchParams();
1715

1816
params.append('keyword', keyword);
1917
params.append('page', page.toString());
2018
params.append('size', size.toString());
2119

22-
const response = await axiosClient.get<EventNormalResponse>(
23-
`/events/search?keyword=${params.toString()}`
24-
);
20+
const response = await axiosClient.get<ApiResponse<EventItem[]>>(`/events/search?keyword=${params.toString()}`);
21+
2522
return response.data;
2623
};
2724

@@ -30,54 +27,39 @@ export const getAllEventsInfinite = async ({
3027
page,
3128
size,
3229
tag,
33-
}: PaginationParams & { tag?: EventTag }): Promise<{ items: EventItem[]; hasNextPage: boolean }> => {
34-
const response = await axiosClient.get<EventNormalResponse>(
30+
}: PaginationParams & { tag?: TagType }): Promise<{ items: EventItem[]; hasNextPage: boolean }> => {
31+
const response = await axiosClient.get<ApiResponse<EventItem[]>>(
3532
`/events${tag ? `?tags=${tag}` : ''}${tag ? '&' : '?'}page=${page}&size=${size}`
3633
);
3734

35+
// ApiResponse의 result는 옵셔널 -> result?: T
36+
const items = response.data.result ?? [];
37+
3838
return {
39-
items: response.data.result,
40-
hasNextPage: response.data.result.length === size,
39+
items,
40+
hasNextPage: items.length === size,
4141
};
4242
};
4343

4444
// 태그별 이벤트 목록 조회 (최신, 인기, 마감 / 기본 정보)
45-
export const getEventByTag = async (tag: EventTag, { page, size }: PaginationParams): Promise<EventNormalResponse> => {
46-
const response = await axiosClient.get<EventNormalResponse>(`/events?tags=${tag}&page=${page}&size=${size}`);
47-
return response.data;
45+
export const getEventByTag = async (tag: TagType, { page, size }: PaginationParams): Promise<EventItem[]> => {
46+
const response = await axiosClient.get<{ result: EventItem[] }>(`/events?tags=${tag}&page=${page}&size=${size}`);
47+
return response.data.result || [];
4848
};
4949

5050
// 카테고리별 이벤트 목록 조회 (개발, 네트워킹, 해커톤, 컨퍼런스)
5151
export const getEventByCategory = async (
52-
category: EventCategory,
52+
category: CategoryType,
5353
{ page, size }: PaginationParams
54-
): Promise<EventNormalResponse> => {
55-
const response = await axiosClient.get<EventNormalResponse>(
54+
): Promise<EventItem[]> => {
55+
const response = await axiosClient.get<EventItem[]>(
5656
`/events/category?category=${category}&page=${page}&size=${size}`
5757
);
5858
return response.data;
5959
};
6060

61-
// 이벤트 상세 조회 (기본 정보 + 상세 정보)
62-
export const getEventById = async (eventId: number): Promise<EventDetailResponse> => {
63-
const response = await axiosClient.get<EventDetailResponse>(`/events/${eventId}`);
64-
return response.data;
65-
};
66-
67-
// 이벤트 생성 (POST)
68-
export const createEvent = async (eventData: EventCreate): Promise<EventResponse<string>> => {
69-
const response = await axiosClient.post<EventResponse<string>>(`/events`, eventData);
70-
return response.data;
71-
};
72-
73-
// 이벤트 수정 (PUT)
74-
export const updateEvent = async (eventId: number, eventData: EventUpdate): Promise<EventResponse<string>> => {
75-
const response = await axiosClient.put<EventResponse<string>>(`/events/${eventId}`, eventData);
76-
return response.data;
77-
};
78-
7961
// 이벤트 삭제 (DELETE)
80-
export const deleteEvent = async (eventId: number): Promise<EventResponse<string>> => {
81-
const response = await axiosClient.delete<EventResponse<string>>(`/events/${eventId}`);
62+
export const deleteEvent = async (eventId: number): Promise<ApiResponse<string>> => {
63+
const response = await axiosClient.delete<ApiResponse<string>>(`/events/${eventId}`);
8264
return response.data;
8365
};

src/entities/event/model/event.ts

Lines changed: 14 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { BaseEvent } from '../../../shared/types/baseEventType';
1+
import { BaseEvent, CategoryType, TagType } from '../../../shared/types/baseEventType';
22

33
export interface EventDetailRequest {
44
eventId: number;
@@ -11,36 +11,23 @@ export interface EventDetailResponse {
1111
hostChannelName: string;
1212
hostChannelDescription: string;
1313
status: string;
14+
// detailAddress: string;
1415
};
1516
}
1617

17-
import { OnlineType, Location, ReferenceLink, Category, EventStatus } from './eventMeta';
18+
export interface PaginationParams {
19+
page: number;
20+
size: number;
21+
}
1822

19-
// 이벤트 기본 정보 (최신, 인기, 마감, 검색)
20-
export interface EventItem {
21-
id: number;
22-
bannerImageUrl: string;
23-
title: string;
24-
startDate: string;
25-
address: string;
26-
hostChannelName: string;
27-
onlineType: OnlineType;
28-
hashtags: string[];
29-
remainDays: string;
23+
export interface EventFilters {
24+
tag?: TagType;
25+
category?: CategoryType;
26+
search?: string;
3027
}
3128

32-
// 이벤트 상세 정보 (기본 정보 + 추가 정보)
33-
export interface EventDetail extends Omit<EventItem, 'remainDays'> {
34-
participantCount: number;
35-
endDate: string;
36-
startTime: string;
37-
endTime: string;
38-
location: Location;
39-
description: string;
40-
hostChannelDescription: string;
41-
organizerEmail: string;
42-
organizerPhoneNumber: string;
43-
referenceLinks: ReferenceLink[];
44-
category: Category;
45-
status: EventStatus;
29+
export interface EventItem extends BaseEvent {
30+
id: number;
31+
hostChannelName: string;
32+
remainDays: string;
4633
}

src/entities/event/model/eventMeta.ts

Lines changed: 0 additions & 45 deletions
This file was deleted.

src/entities/event/model/eventRequest.ts

Lines changed: 0 additions & 30 deletions
This file was deleted.

src/entities/event/model/eventResponse.ts

Lines changed: 0 additions & 11 deletions
This file was deleted.

src/features/dashboard/model/event.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,9 @@ import { BaseEvent } from '../../../shared/types/baseEventType';
22

33
export interface UpdateEventRequest extends BaseEvent {
44
hostChannelId: number;
5+
6+
// Swagger에서 이벤트 생성 시 제공하는 필드
7+
// detailAddress: string;
8+
// locationLat: number;
9+
// locationLng: number;
510
}

src/features/event-manage/event-create/api/event.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { axiosClient } from '../../../../shared/types/api/http-client';
2-
import { CreateEventRequest } from '../model/eventCreation';
2+
import { CreateEventRequest } from '../model/event';
33

44
export const createEvent = async (data: CreateEventRequest) => {
55
const response = await axiosClient.post('/events', data);

src/features/event-manage/event-create/hooks/useEventHook.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { AxiosError } from 'axios';
22
import { ApiResponse } from '../../../../shared/types/api/apiResponse';
33
import { createEvent } from '../api/event';
4-
import { CreateEventRequest } from '../model/eventCreation';
4+
import { CreateEventRequest } from '../model/event';
55
import { useMutation } from '@tanstack/react-query';
66

77
export const useEventCreation = () => {

src/features/event-manage/event-create/model/FunnelContext.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React, { createContext, ReactNode, useContext, useState } from 'react';
2-
import { CreateEventRequest } from './eventCreation';
2+
import { CreateEventRequest } from './event';
33
import { HostCreationRequest } from './hostCreation';
44

55
export interface FunnelState {

src/features/event-manage/event-create/model/eventCreation.ts renamed to src/features/event-manage/event-create/model/event.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,5 @@ import { BaseEvent } from '../../../../shared/types/baseEventType';
33
export interface CreateEventRequest extends BaseEvent {
44
hostChannelId: number;
55
}
6+
7+

0 commit comments

Comments
 (0)