-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
afeabc9
commit 9f209fb
Showing
5 changed files
with
200 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | ||
} |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | ||
} | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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', | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters