Skip to content

Commit

Permalink
docs/API 정리
Browse files Browse the repository at this point in the history
  • Loading branch information
BearHumanS authored and kledyu committed Jul 7, 2023
1 parent afeabc9 commit 9f209fb
Show file tree
Hide file tree
Showing 5 changed files with 200 additions and 3 deletions.
48 changes: 48 additions & 0 deletions custom.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
// 소비 기록을 추가하거나 수정할 때 서버 요청 데이터
interface ExpenseData {
amount: number;
userId: string;
category: string;
date: string;
}

// 소비 기록을 작성하는 요청이 성공하면 서버에서 반환하는 데이터
interface ExpenseResponse {
message: string;
}

// 소비 가능한 품목 목록을 요청하는 서버 데이터
type CategoriesResponse = string[]

// 검색어에 해당하는 소비 품목과 금액을 조회하는 서버 요청 데이터
interface SearchResponseItem {
amount: number;
userId: string;
category: string;
date: string;
}

type SearchResponse = SearchResponseItem[];

// 일별, 주별, 월별 소비 조회를 위한 서버 요청 데이터
interface SummaryResponseItem {
_id: string;
totalAmount: number;
}

type SummaryResponse = SearchResponseItem[];

// 소비 기록을 수정하면 서버로부터 반환되는 응답 데이터
type UpdateResponse = {
message: string;
}

// 소비 기록을 삭제하면 서버로부터 반환되는 응답 데이터
type DeleteResponse = {
message: string;
}

// 소비 기록에 대한 서버로부터의 응답 데이터 타입 정의
interface CalendarResponse {
[day: string]: ExpenseData;
}
1 change: 0 additions & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

146 changes: 146 additions & 0 deletions src/lib/api/Api.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
import { API_URL, HEADERS } from "@/lib/api/Base";

// 소비 기록 작성
export const createdExpense = async (data: ExpenseData) => {
try {
const res = await fetch(`${API_URL}/expenses`, {
method: 'POST',
headers: HEADERS,
body: JSON.stringify(data),
});
// 소비 기록 작성 성공
if (res.ok) {
const data: ExpenseResponse = await res.json();
return data;
}
// 실패한 경우
throw new Error('기록 작성에 실패했습니다.');
} catch (error) {
console.error(error);
throw error;
}
};

// 소비 품목 목록
export const category = async (userId: string) => {
try {
const res = await fetch(`${API_URL}/categories?userId=${userId}`, {
method: 'GET',
headers: HEADERS,
});
// 목록 호출 성공
if (res.ok) {
const data: CategoriesResponse = await res.json();
return data;
}
// 실패한 경우
throw new Error('카테고리를 불러오는데 실패했습니다.');
} catch (error) {
console.error(error);
throw error;
}
};

// 검색어에 해당하는 소비 항목 및 금액 조회
export const search = async (keyword: string, userId: string) => {
try {
const encodedKeyword = encodeURIComponent(keyword);
const res = await fetch(`${API_URL}/expenses/search?q=${encodedKeyword}&userId=${userId}`, {
method: 'GET',
headers: HEADERS,
});

// 성공
if (res.ok) {
const data: SearchResponse = await res.json();
return data;
}
// 실패
throw new Error('검색에 실패했습니다.');
} catch (error) {
console.error(error);
throw error;
}
};

// 일별, 주별, 월별 소비 조회
export const summary = async (period: string, userId: string) => {
try {
const res = await fetch(`${API_URL}/expenses/summary?period=${period}&userId=${userId}`, {
method: 'GET',
headers: HEADERS
});

if (res.ok) {
const data: SummaryResponseItem[] = await res.json();
return data;
}

throw new Error('조회에 실패했습니다.');
} catch (error) {
console.error(error);
throw error;
}
};

// 소비 기록 수정
export const updatedRecord = async(id:string, data: ExpenseData) => {
try {
const res = await fetch(`${API_URL}/expenses/${id}`, {
method: 'PUT',
headers: HEADERS,
body: JSON.stringify(data),
});

if (res.ok) {
const data: UpdateResponse = await res.json();
return data;
}

throw new Error('수정에 실패했습니다.')
} catch (error) {
console.error(error);
throw error;
}
};

// 소비 기록 삭제
export const deletedRecord = async(id:string) => {
try {
const res = await fetch(`${API_URL}/expenses/${id}`, {
method: 'DELETE',
headers: HEADERS
});

if (res.ok) {
const data: DeleteResponse = await res.json();
return data;
}

throw new Error('삭제에 실패했습니다.')
} catch (error) {
console.error(error);
throw error;
}
};

// 소비 기록 달력 호출
export const calendar = async(year: number, month: number, userId: string ) => {
try {
const encodedUserId = encodeURIComponent(userId);
const res = await fetch(`${API_URL}/calendar?year=${year}&month=${month}&userId=${encodedUserId}`, {
method: 'GET',
headers: HEADERS
});

if (res.ok) {
const data: CalendarResponse = await res.json();
return data
}

throw new Error('호출에 실패했습니다.')
} catch (error) {
console.error(error);
throw error;
}
};
6 changes: 5 additions & 1 deletion src/lib/api/Base.tsx
Original file line number Diff line number Diff line change
@@ -1 +1,5 @@
export const API_KEY = import.meta.env.VITE_API_KEY
export const API_URL = import.meta.env.VITE_API_URL

export const HEADERS = {
'content-Type': 'application/json',
}
2 changes: 1 addition & 1 deletion tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,6 @@
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true
},
"include": ["src"],
"include": ["src", "**/*.ts", "**/*.tsx"],
"references": [{ "path": "./tsconfig.node.json" }]
}

0 comments on commit 9f209fb

Please sign in to comment.