Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
94 changes: 94 additions & 0 deletions src/api/activitiesService.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
import { instance } from './client';
import { ENDPOINTS } from './apiConfig';

interface ActivitiesResponse {
code: number;
message: string;
data: ActivitiesData;
}

interface ActivitiesData {
totalPages: number;
isLastPage: boolean;
totalActivities: number;
activities: Activity[];
}

interface Activity {
id: number;
title: string;
organization: string;
imageUrl: string;
dDay: number;
}

interface DetailActivitiesResponse {
code: number;
message: string;
data: ActivityDetail;
}

interface ActivityDetail {
id: number;
title: string;
organization: string;
corporateType: string;
participate: string;
startDate: string;
endDate: string;
period: string;
recruitment: string;
area: string;
preferredSkills: string;
homepageUrl: string;
activityBenefit: string;
activityField: string;
bonusBenefit: string;
description: string;
imageUrl: string;
}

export interface ActivitiesQuery {
keyword?: null | string;
before?: boolean;
during?: boolean;
closed?: boolean;
orderBy?: 'latest' | 'd-day';
page?: number;
pageSize?: number;
}

class ActivitiesService {
private endpoint = ENDPOINTS.activities;

getAll = async ({
keyword = null,
before = true,
during = true,
closed = false,
orderBy = 'latest',
page = 1,
pageSize = 10,
}: ActivitiesQuery) => {
console.log(this.endpoint);
if (keyword === '' || keyword === null) {
const response = await instance.get<ActivitiesResponse>(
`${this.endpoint}?before=${before}&during=${during}&closed=${closed}&orderBy=${orderBy}&page=${page}&pageSize=${pageSize}`
);
return response.data.data;
} else {
const response = await instance.get<ActivitiesResponse>(
`${this.endpoint}?keyword=${keyword}&before=${before}&during=${during}&closed=${closed}&orderBy=${orderBy}&page=${page}&pageSize=${pageSize}`
);
return response.data.data;
}
};

getOne = async (id: number) => {
const response = await instance.get<DetailActivitiesResponse>(`${this.endpoint}/${id}`);

return response.data.data;
};
}

export default ActivitiesService;
2 changes: 2 additions & 0 deletions src/api/apiConfig.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,6 @@ export const ENDPOINTS = {
resume: `${API_VERSION}/resumes`,
studies: `${API_VERSION}/studies`,
categories: `${API_VERSION}/categories`,
activities: `${API_VERSION}/activities`,
competitions: `${API_VERSION}/competitions`,
};
89 changes: 89 additions & 0 deletions src/api/competitionsService.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
import { instance } from './client';
import { ENDPOINTS } from './apiConfig';

interface CompetitionApiResponse {
code: number;
message: string;
data: CompetitionsData;
}

interface CompetitionsData {
totalPages: number;
isLastPage: boolean;
totalCompetitions: number;
competitions: Competition[];
}

interface Competition {
id: number;
title: string;
organization: string;
imageUrl: string;
dDay: number;
}

interface CompetitionDetailApiResponse {
code: number;
message: string;
data: CompetitionDetail;
}

interface CompetitionDetail {
id: number;
title: string;
organization: string;
corporateType: string;
participate: string;
awardScale: string;
startDate: string;
endDate: string;
homepageUrl: string;
activityBenefit: string;
bonusBenefit: string;
description: string;
imageUrl: string;
}

export interface CompetitionsQuery {
keyword?: null | string;
before?: boolean;
continues?: boolean;
after?: boolean;
orderBy?: 'latest' | 'd-day';
page?: number;
pageSize?: number;
}

class CompetitionsService {
private endpoint = ENDPOINTS.competitions;

getAll = async ({
keyword = null,
before = true,
continues = true,
after = false,
orderBy = 'latest',
page = 1,
pageSize = 10,
}: CompetitionsQuery) => {
if (keyword === '' || keyword === null) {
const response = await instance.get<CompetitionApiResponse>(
`${this.endpoint}?before=${before}&continue=${continues}&after=${after}&orderBy=${orderBy}&page=${page}&pageSize=${pageSize}`
);
return response.data.data;
} else {
const response = await instance.get<CompetitionApiResponse>(
`${this.endpoint}?keyword=${keyword}&before=${before}&continue=${continues}&after=${after}&orderBy=${orderBy}&page=${page}&pageSize=${pageSize}`
);
return response.data.data;
}
};

getOne = async (id: number) => {
const response = await instance.get<CompetitionDetailApiResponse>(`${this.endpoint}/${id}`);

return response.data.data;
};
}

export default CompetitionsService;
79 changes: 70 additions & 9 deletions src/api/reviewService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,19 @@ export interface ReviewPostData {
content: string;
}

export interface ReviewEditData extends ReviewPostData {
authorNickname: string;
}

export interface ReviewPostResponse {
code: number;
message: string;
data: ReviewPostData | null;
data: ReviewPostData;
}
export interface ReviewEditResponse {
code: number;
message: string;
data: ReviewEditData | null;
}

export type ReviewRequest = {
Expand All @@ -28,7 +37,15 @@ export type ReviewRequest = {
export interface SummaryResponse {
code: number;
message: string;
data: Summary[];
data: SummaryData;
}

interface SummaryData {
currentPage: 1;
totalPages: 1;
currentElements: 2;
totalElements: 2;
reviews: Summary[];
}

export interface Summary {
Expand All @@ -37,32 +54,76 @@ export interface Summary {
totalReviews: number;
}

export interface ReviewDetail {
id: number;
authorNickname: string;
bootcamp: string;
title: string;
goodtags: string[];
badtags: string[];
rating: number;
content: string;
}

export interface ReviewDetailResponseData {
currentPage: number;
totalPages: number;
currentElements: number;
totalElements: number;
reviews: ReviewDetail[];
}

export interface ReviewDetailResponse {
code: number;
message: string;
data: ReviewDetailResponseData;
}

class ReviewService {
private endpoint = ENDPOINTS.reviews;

post = async (review: ReviewRequest) => {
const response = await instance.post<{ data: ReviewPostResponse }>(this.endpoint, review);
const response = await instance.post<ReviewPostResponse>(this.endpoint, review);

return response.data.data;
};

delete = async (id: number) => {
const response = await instance.post<{ data: ReviewPostResponse }>(`${this.endpoint}/${id}`);
const response = await instance.post<{
code: number;
message: string;
data: null;
}>(`${this.endpoint}/${id}`);

return response.data.data;
};

edit = async (review: ReviewRequest, id: number) => {
const response = await instance.put<{ data: ReviewPostResponse }>(
`${this.endpoint}/${id}`,
review
const response = await instance.put<ReviewEditResponse>(`${this.endpoint}/${id}`, review);

return response.data.data;
};

summary = async ({ page = 1, size = 6 }: { page?: number; size?: number }) => {
const response = await instance.get<SummaryResponse>(
`${this.endpoint}/summary?page=${page}&size=${size}`
);

return response.data.data;
};

summary = async () => {
const response = await instance.put<{ data: SummaryResponse }>(`${this.endpoint}/summary`);
detail = async ({
sortBy = 'createdAt',
bootcamp,
page = 1,
}: {
sortBy?: 'rating' | 'createdAt';
bootcamp: string;
page?: number;
}) => {
const response = await instance.get<ReviewDetailResponse>(
`${this.endpoint}?sortBy=${sortBy}&bootcamp=${bootcamp}&page=${page}`
);

return response.data.data;
};
Expand Down
24 changes: 24 additions & 0 deletions src/hooks/activitiesData/query/useActivitiesData.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import ActivitiesService, { type ActivitiesQuery } from '@/api/activitiesService';
import { useQuery } from '@tanstack/react-query';

const useActivitiesData = (query: ActivitiesQuery) => {
const activitiesService = new ActivitiesService();

return useQuery({
queryKey: [
'activities',
query.before,
query.closed,
query.during,
query.keyword,
query.orderBy,
query.page,
query.pageSize,
],
queryFn: () => {
return activitiesService.getAll(query);
},
});
};

export default useActivitiesData;
16 changes: 16 additions & 0 deletions src/hooks/activitiesData/query/useActivityData.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import ActivitiesService from '@/api/activitiesService';
import { useQuery } from '@tanstack/react-query';

const useActivitiyData = ({ id, start }: { id: number; start: boolean }) => {
const activitiesService = new ActivitiesService();

return useQuery({
queryKey: ['activitiy', id],
queryFn: () => {
return activitiesService.getOne(id);
},
enabled: start,
});
};

export default useActivitiyData;
24 changes: 24 additions & 0 deletions src/hooks/competitionsData/query/useAllCompetitionData.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import CompetitionsService, { type CompetitionsQuery } from '@/api/competitionsService';
import { useQuery } from '@tanstack/react-query';

const useAllCompetitionData = (query: CompetitionsQuery) => {
const competitionsService = new CompetitionsService();

return useQuery({
queryKey: [
'competitions',
query.before,
query.continues,
query.after,
query.keyword,
query.orderBy,
query.page,
query.pageSize,
],
queryFn: () => {
return competitionsService.getAll(query);
},
});
};

export default useAllCompetitionData;
16 changes: 16 additions & 0 deletions src/hooks/competitionsData/query/useCompetitionData.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import CompetitionsService from '@/api/competitionsService';
import { useQuery } from '@tanstack/react-query';

const useCompetitionData = ({ id, start }: { id: number; start: boolean }) => {
const competitionsService = new CompetitionsService();

return useQuery({
queryKey: ['competition', id],
queryFn: () => {
return competitionsService.getOne(id);
},
enabled: start,
});
};

export default useCompetitionData;
Loading