Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
126 commits
Select commit Hold shift + click to select a range
7893b2a
feat: 일기 조회 추가 및 일기 이미지 수정 로직 수정
kangsea09 Apr 2, 2026
be66a23
fix: 이미지 조회 div 높이 수정 및 css 주석 삭제
kangsea09 Apr 4, 2026
ac7c0f0
fix: 로그인시 메인으로 이동하는 경로 변경, 회원가입시 이메일 인증후 이메일 변경이불가하도록 변경
pbc1001 Apr 5, 2026
a1fac4c
fix: 기존 비밀번호 표시가 두개의 input에 모두 적용되었던 것 변경 및 이미지 변경 추가
pbc1001 Apr 5, 2026
4714d25
fix: setCheckMessage가 남아있는 문제 해결
pbc1001 Apr 5, 2026
936eabe
Merge pull request #32 from MoDeep11/feat/api-sign-up
pbc1001 Apr 5, 2026
8a07c76
feat: api 채팅 추가
kangsea09 Apr 6, 2026
91bfcb6
feat: 다이어리 추천 조회 및 다이어리 목록 조회
kangsea09 Apr 6, 2026
158fe92
feat: 사용자 정보 조회, 달력 조회 연동 추가
kangsea09 Apr 6, 2026
8407257
fix: 중복 코드 삭제
kangsea09 Apr 7, 2026
b245409
Merge pull request #36 from MoDeep11/feat/publishing-home
kangsea09 Apr 7, 2026
6c579fa
fix: 민감 정보 로깅 제거
kangsea09 Apr 7, 2026
91fa0ab
Merge pull request #35 from MoDeep11/feat/api-diaries
kangsea09 Apr 7, 2026
0679d83
feat: 일기 목록 조회 기능 추가
kangsea09 Apr 4, 2026
5075c0f
fix: 중복 삭제
kangsea09 Apr 7, 2026
df70272
fix: 민감한 요청 메타데이터 콘솔 노출을 제거
kangsea09 Apr 7, 2026
04c92d7
fix: 에러 출력 방법 수정
kangsea09 Apr 7, 2026
b59ce32
fix: 헤더 로그인시 문제 해결
pbc1001 Apr 8, 2026
c0c7da2
Merge pull request #38 from MoDeep11/feat/api-chat
kangsea09 Apr 8, 2026
3bceb27
Merge pull request #37 from MoDeep11/feat/api-user
kangsea09 Apr 8, 2026
d92a984
Merge pull request #41 from MoDeep11/feat/fix-header
pbc1001 Apr 9, 2026
eb54317
fix: useState 관련 동기 문제
pbc1001 Apr 6, 2026
f8e3968
feat: 마이페이지 api 연동
pbc1001 Apr 7, 2026
b2cca77
fix: 토큰 만료시 로그아웃 되도록 설정
pbc1001 Apr 9, 2026
18023a0
fix: 마이페이지 api 연동 (완)
pbc1001 Apr 9, 2026
01992ab
fix: 마운트 직후 1회 검사하도록 변경
pbc1001 Apr 9, 2026
f725f93
fix: 쓸모없는 콘솔로그 삭제
pbc1001 Apr 9, 2026
a4c5d8d
fix: 비밀번호 검증 요청 추가
pbc1001 Apr 9, 2026
e427324
Merge pull request #43 from MoDeep11/feat/api-mypage
pbc1001 Apr 9, 2026
9b8eee2
Merge pull request #42 from MoDeep11/feat/refresh-api
pbc1001 Apr 9, 2026
725e877
feat: 사진첩 api 연결
pbc1001 Apr 9, 2026
f3a30e7
Merge branch 'develop' into feat/refresh-api
pbc1001 Apr 9, 2026
bd131fb
Revert "Merge branch 'develop' into feat/refresh-api"
pbc1001 Apr 9, 2026
616a7cd
Reapply "Merge branch 'develop' into feat/refresh-api"
pbc1001 Apr 9, 2026
01b83b6
fix: 통계 페이지 api 연동
pbc1001 Apr 10, 2026
ce298ab
fix: emotionDistribution이 null일 경우를 위한 옵셔널 체이닝
pbc1001 Apr 10, 2026
a06e6ca
fix: 빠른 처리로 인한 오류발생을 막기위한 Abortcontroller 추가
pbc1001 Apr 10, 2026
33e3896
Terminal fix: emotionDistribution이 null일 경우를 위한 옵셔널 체이닝(2)
pbc1001 Apr 10, 2026
8fe63c8
Merge pull request #44 from MoDeep11/feat/static-api
pbc1001 Apr 10, 2026
bdde126
feat: 사진첩 api 연결
pbc1001 Apr 9, 2026
fe1a422
Revert "Merge branch 'develop' into feat/refresh-api"
pbc1001 Apr 9, 2026
7931f51
Reapply "Merge branch 'develop' into feat/refresh-api"
pbc1001 Apr 9, 2026
028c16a
Merge remote-tracking branch 'origin/feat/photo-api' into feat/photo-api
pbc1001 Apr 10, 2026
8d4da66
refator: 토큰 만료 로직 수정 및 header에 Authorization 토큰 추가
kangsea09 Apr 11, 2026
18c68cf
fix: 경로 수정
kangsea09 Apr 11, 2026
2fba8f7
refactor: 코드래빗 코드 반영
kangsea09 Apr 11, 2026
a8f2e0f
refactor: 코드래빗 코드 반영
kangsea09 Apr 11, 2026
5196690
Merge pull request #45 from MoDeep11/fix/instance
kangsea09 Apr 11, 2026
441d534
feat: emotion 이미지 추가
kangsea09 Apr 11, 2026
bf35f7f
Merge pull request #46 from MoDeep11/feat/add-img
kangsea09 Apr 11, 2026
4d2c9ee
feat: 전체적인 기능 추가
kangsea09 Apr 11, 2026
5854ac0
feat: 전체적인 기능 추가
kangsea09 Apr 11, 2026
b1bf863
Merge remote-tracking branch 'origin/feat/publishing-home' into feat/…
kangsea09 Apr 11, 2026
30f8bf3
refactor: 코드래빗 코드 반영
kangsea09 Apr 11, 2026
d03d92f
Merge pull request #47 from MoDeep11/feat/publishing-home
kangsea09 Apr 11, 2026
477af6b
feat: 이미지 클릭 시 해당 일기로 이동 기능 추가
kangsea09 Apr 12, 2026
47dedfe
fix: 데이터 반환 수정
kangsea09 Apr 12, 2026
ff9fb4f
Merge pull request #48 from MoDeep11/feat/api-diaries
kangsea09 Apr 12, 2026
993adbf
feat: 이미지 클릭 시 해당 일기로 이동 기능 추가
kangsea09 Apr 12, 2026
1fc73b8
Merge remote-tracking branch 'origin/feat/publishing-home' into feat/…
kangsea09 Apr 12, 2026
ca36d37
feat: 일기 수정 기능 추가
kangsea09 Apr 12, 2026
9a0a870
Merge pull request #49 from MoDeep11/feat/api-diaries
kangsea09 Apr 12, 2026
7e8d286
feat: 이미지 클릭 시 해당 일기로 이동 기능 추가
kangsea09 Apr 12, 2026
f471884
Merge remote-tracking branch 'origin/feat/publishing-home' into feat/…
kangsea09 Apr 12, 2026
14bfcf5
Merge pull request #50 from MoDeep11/feat/publishing-home
kangsea09 Apr 12, 2026
f1203c7
feat: 프로필 랜덤 기능 추가
pbc1001 Apr 12, 2026
d69a402
Merge remote-tracking branch 'origin/feat/refresh-api' into feat/refr…
pbc1001 Apr 12, 2026
7b23744
fix: 사용되지 않는 error 로 인한 eslint 오류
pbc1001 Apr 12, 2026
81fb958
fix: 새로고침시에도 alert 창이 뜨던것 수정
pbc1001 Apr 12, 2026
6bc3674
feat: 사진첩 api 연결
pbc1001 Apr 9, 2026
f3c7e79
Revert "Merge branch 'develop' into feat/refresh-api"
pbc1001 Apr 9, 2026
1f8c3a4
Reapply "Merge branch 'develop' into feat/refresh-api"
pbc1001 Apr 9, 2026
7f5d253
Revert "Merge branch 'develop' into feat/refresh-api"
pbc1001 Apr 9, 2026
a8b5a15
Reapply "Merge branch 'develop' into feat/refresh-api"
pbc1001 Apr 9, 2026
0e84cfe
Merge remote-tracking branch 'origin/feat/photo-api' into feat/photo-api
pbc1001 Apr 12, 2026
95403cb
feat: 사진첩 api 연동
pbc1001 Apr 12, 2026
d273977
Revert "Merge branch 'develop' into feat/refresh-api"
pbc1001 Apr 9, 2026
dfe8159
Reapply "Merge branch 'develop' into feat/refresh-api"
pbc1001 Apr 9, 2026
fd1870f
Revert "Merge branch 'develop' into feat/refresh-api"
pbc1001 Apr 9, 2026
9664fba
Reapply "Merge branch 'develop' into feat/refresh-api"
pbc1001 Apr 9, 2026
357283f
feat: 사진첩 api 연동
pbc1001 Apr 12, 2026
dcfba2f
Merge remote-tracking branch 'origin/feat/photo-api' into feat/photo-api
pbc1001 Apr 12, 2026
7d47d43
feat: 일기 조회 기능 추가
kangsea09 Apr 12, 2026
2b9dd5a
fix:tokenExpiary가 없을경우 영구 우회되는 경우 방지
pbc1001 Apr 12, 2026
9d3841d
Merge pull request #51 from MoDeep11/feat/rand-profile
pbc1001 Apr 12, 2026
b40aff0
refactor: 코드래빗 코드 반영
kangsea09 Apr 12, 2026
8ca75b8
feat: 일기 조회 기능 추가
kangsea09 Apr 12, 2026
dcff5dc
refactor: 코드래빗 코드 반영
kangsea09 Apr 12, 2026
fd0c8f6
Merge remote-tracking branch 'origin/feat/api-diaries' into feat/api-…
kangsea09 Apr 12, 2026
8f72189
Merge pull request #53 from MoDeep11/feat/api-diaries
kangsea09 Apr 12, 2026
80ee700
fix: 해당 달이 아닌 일의 color 변경
kangsea09 Apr 12, 2026
204ef49
Merge pull request #52 from MoDeep11/feat/refresh-api
pbc1001 Apr 12, 2026
c42bdb9
feat: 이미지 데이터 받아와 연동 추가
kangsea09 Apr 12, 2026
7b4a674
fix: 미처 지우지못한 콘솔로그 삭제
pbc1001 Apr 12, 2026
84317d8
Merge pull request #55 from MoDeep11/feat/statics-api(2)
pbc1001 Apr 12, 2026
78805c9
Merge pull request #57 from MoDeep11/feat/publishing-home
kangsea09 Apr 12, 2026
5153225
Merge pull request #56 from MoDeep11/feat/api-editDiary
kangsea09 Apr 12, 2026
4898782
Merge pull request #54 from MoDeep11/feat/photo-api
pbc1001 Apr 12, 2026
beb2237
fix: 콘솔로그 삭제 및 잘못 삭제된 setStatics 복구
pbc1001 Apr 12, 2026
c3bde77
Merge branch 'feat/statics-api(2)' into develop
pbc1001 Apr 12, 2026
f0d13d8
fix: yearnum, datenum에서 나던 경고문구 수정
pbc1001 Apr 12, 2026
55c210d
Merge pull request #58 from MoDeep11/feat/photo-api
pbc1001 Apr 12, 2026
c638041
fix: 사진 클릭시 일기로 이동하는 로직이 실수로 삭제된것을 복구
pbc1001 Apr 12, 2026
af88ce8
fix: 설문조사 링크 추가
pbc1001 Apr 12, 2026
69906f4
fix: 코드래빗 코드 반영
kangsea09 Apr 12, 2026
8aa3a4f
Merge pull request #60 from MoDeep11/feat/publishing-home
kangsea09 Apr 12, 2026
1b471ec
fix: 코드래빗 코드 반영
kangsea09 Apr 12, 2026
616cea3
Merge pull request #61 from MoDeep11/feat/api-editDiary
kangsea09 Apr 12, 2026
be29c61
feat: 통계 기능 추가
kangsea09 Apr 12, 2026
32cce4f
feat: 달력에 이모지 추가
kangsea09 Apr 12, 2026
fade304
fix: AI 피드백이 오지 않았을 때 기능 추가
kangsea09 Apr 12, 2026
d687924
refactor: 코드래빗 코드 반영
kangsea09 Apr 12, 2026
7946123
refactor: 코드래빗 코드 반영
kangsea09 Apr 12, 2026
c41274e
Merge pull request #62 from MoDeep11/feat/publishing-home
kangsea09 Apr 12, 2026
828eb85
Merge pull request #63 from MoDeep11/feat/api-diaries
kangsea09 Apr 12, 2026
c29fa99
fix: 오류 수정
kangsea09 Apr 12, 2026
ebe7f65
Merge pull request #64 from MoDeep11/feat/publishing-home
kangsea09 Apr 12, 2026
abc859e
fix: 코드래빗 코드 수정
pbc1001 Apr 12, 2026
bdb18e7
Merge pull request #65 from MoDeep11/feat/photo-coderabbit
pbc1001 Apr 12, 2026
7953e61
fix: 토큰이 노출 삭제
kangsea09 Apr 12, 2026
8114408
Merge pull request #66 from MoDeep11/feat/api-user
kangsea09 Apr 12, 2026
c488b8b
feat: 엔터키 입력시 로그인
pbc1001 Apr 12, 2026
520448e
fix: 코드래빗 권고사항 변경
pbc1001 Apr 12, 2026
50fb8bf
refactor: 코드래빗 코드 반영
kangsea09 Apr 12, 2026
560e92c
Merge pull request #68 from MoDeep11/feat/publishing-home
kangsea09 Apr 12, 2026
947c4d2
Merge pull request #67 from MoDeep11/feat/api-login
pbc1001 Apr 12, 2026
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
33 changes: 31 additions & 2 deletions src/App.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,20 +9,49 @@ import Mypage from "./pages/MyPage.jsx";
import Statics from "./pages/Statics.jsx";
import Home from "./pages/Home.jsx";
import EditDiary from "./pages/EditDiary.jsx";
import { useEffect } from "react";
import { useNavigate } from "react-router-dom";

function App() {

const navigate = useNavigate();
useEffect(() => {
const checkTokenExpiry = () => {
const token = localStorage.getItem("accessToken");
const expiry = localStorage.getItem("tokenExpiry");

if (!token) {
return;
}

const expiryMs = Number(expiry);
const now = Date.now();

if (!expiry || !Number.isFinite(expiryMs) || now > expiryMs) {
alert("세션이 만료되었습니다. 다시 로그인해주세요.");
localStorage.clear();
navigate("/");
}
};

checkTokenExpiry();
const interval = setInterval(checkTokenExpiry, 60000);

return () => clearInterval(interval);
}, [navigate]);

return (
<Routes>
<Route path="/" element={<Main />} />
<Route path="/login" element={<Login />} />
<Route path="/signup" element={<Signup />} />
<Route path="/ai/chats" element={<AiChat />} />
<Route path="/diary" element={<Diary />} />
<Route path="/diary/:id" element={<Diary />} />
<Route path="/mypage" element={<Mypage />} />
<Route path="/statics" element={<Statics />} />
<Route path="/home" element={<Home />} />
<Route path="/photobook" element={<Photo_book />} />
<Route path="/editDiary" element={<EditDiary />} />
<Route path="/editDiary/:id" element={<EditDiary />} />
</Routes>
);
}
Expand Down
1 change: 0 additions & 1 deletion src/apis/auth.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ export const login = async (userData) => {
return response.data;
};

// apis/auth.js

export const logout = async (refreshToken) => {
const response = await instance.post('/api/v1/auth/logout', {
Expand Down
83 changes: 83 additions & 0 deletions src/apis/chat.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
import instance from "./instance";

const logApiError = (label, error) => {
const status = error?.response?.status;
const message = error?.response?.data?.message ?? error?.message;
console.error(label, { status, message });
};

// 채팅 생성
export const createChat = async (chatData) => {
try {
const res = await instance.post(`/api/v1/chats`, chatData);
return res.data;
} catch (error) {
// 상세 에러 로깅
logApiError("채팅 생성 실패:", error);
throw error;
}
};

// 채팅 음성 생성
export const createChatVoice = async (chatId, voiceData) => {
try {
const res = await instance.post(`/api/v1/chats/${chatId}/voice`, voiceData);
return res.data;
} catch (error) {
logApiError("음성 생성 실패:", error);
throw error;
}
};

// 채팅 메시지 전송
export const createChatMessage = async (chatId, messageData) => {
try {
const res = await instance.post(
`/api/v1/chats/${chatId}/messages`,
messageData,
);
return res.data;
} catch (error) {
logApiError("메시지 전송 실패:", error);
throw error;
}
};

// 채팅 수정
export const updateChat = async (chatId) => {
try {
const res = await instance.patch(`/api/v1/chats/${chatId}`);
return res.data;
} catch (error) {
logApiError("채팅 수정 실패:", error);
throw error;
}
};

// 대화 중 사진 추가
export const createChatImage = async (chatId, imageData) => {
try {
const res = await instance.post(
`/api/v1/chats/${chatId}/images`,
imageData,
);
return res.data;
} catch (error) {
logApiError("이미지 생성 실패:", error);
throw error;
}
};

// AI 이미지 생성 요청
export const createChatImageGeneration = async (chatId, generationData) => {
try {
const res = await instance.post(
`/api/v1/chats/${chatId}/images/generations`,
generationData,
);
return res.data;
} catch (error) {
logApiError("이미지 생성 실패:", error);
throw error;
}
};
42 changes: 30 additions & 12 deletions src/apis/diaries.js
Original file line number Diff line number Diff line change
@@ -1,16 +1,27 @@
import instance from "./axios";
import instance from "./instance";

// 일기 조회
// 일기 단건 조회
export const getDiaries = async (id) => {
try {
const res = await instance.get(`/api/v1/diaries/${id}`);
return res.data;
return res.data.data;
} catch (error) {
console.error("일기 조회 실패:", error);
throw error;
}
};

// 일기 목록 조회
export const getDiariesList = async (params) => {
try {
const res = await instance.get(`/api/v1/diaries`, { params });
return res.data;
} catch (error) {
console.error("일기 목록 조회 실패:", error);
throw error;
}
};

// 일기 내용 수정
export const updateDiaries = async (id, updateData) => {
try {
Expand All @@ -26,15 +37,11 @@ export const updateDiaries = async (id, updateData) => {
};

// 일기 이미지 수정
export const updateDiariesImg = async (diary_id, imageFile) => {
export const updateDiariesImg = async (diaryId, imageList) => {
try {
const formData = new FormData();
formData.append("file", imageFile);

const res = await instance.patch(
`/api/v1/diaries/${diary_id}/images`,
formData,
{ headers: { "Content-Type": "multipart/form-data" } },
`/api/v1/diaries/${diaryId}/images`,
imageList,
);
return res.data;
} catch (error) {
Expand All @@ -44,13 +51,24 @@ export const updateDiariesImg = async (diary_id, imageFile) => {
};

// 일기 삭제
export const deleteDiaries = async (diary_id) => {
export const deleteDiaries = async (diaryId) => {
try {
const res = await instance.delete(`/api/v1/diaries/${diary_id}`);
const res = await instance.delete(`/api/v1/diaries/${diaryId}`);
return res.data;
} catch (error) {
console.error("일기 삭제 실패:", error);
throw error;
}
};

// 다이어리 추천 조회
export const getDiaryRecommendation = async () => {
try {
const res = await instance.get(`/api/v1/diaries/recommendation`);
return res.data;
} catch (error) {
console.error("상태 코드:", error.response?.status);
console.error("에러 메시지:", error.response?.data);
throw error;
}
};
61 changes: 41 additions & 20 deletions src/apis/instance.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import axios from "axios";

const instance = axios.create({
baseURL: import.meta.env.VITE_BASE_URL,
timeout: 5000,
timeout: 30000,
headers: { "Content-Type": "application/json" },
});

Expand All @@ -22,13 +22,13 @@ const processQueue = (error, token = null) => {

instance.interceptors.request.use(
(config) => {
const accessToken = localStorage.getItem("accessToken");
if (accessToken) {
config.headers.Authorization = `Bearer ${accessToken}`;
const token = localStorage.getItem("accessToken");
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
},
(error) => Promise.reject(error)
(error) => Promise.reject(error),
);

instance.interceptors.response.use(
Expand All @@ -53,43 +53,64 @@ instance.interceptors.response.use(

try {
const refreshToken = localStorage.getItem("refreshToken");
const accessToken = localStorage.getItem("accessToken");
if (!refreshToken) {
throw Object.assign(new Error("Missing refresh token"), {
response: { status: 401 },
});
}

const refreshHeaders = accessToken
? { Authorization: `Bearer ${accessToken}` }
: {};

const res = await axios.post(
`${import.meta.env.VITE_BASE_URL}/api/v1/auth/reissue`,
{ refreshToken: refreshToken }
{ refreshToken },
{
headers: refreshHeaders,
timeout: instance.defaults.timeout,
},
);

if (res.data.status === "success") {
const { accessToken, refreshToken: newRefreshToken } = res.data.data;
const tokenPayload = res.data.data ?? res.data;
const { accessToken: newAccessToken, refreshToken: newRefreshToken } =
tokenPayload ?? {};
if (!newAccessToken) {
throw new Error("Token refresh response missing access token");
}

localStorage.setItem("accessToken", newAccessToken);
if (newRefreshToken) {
localStorage.setItem("refreshToken", newRefreshToken);
}
localStorage.setItem("tokenExpiry", Date.now() + 60 * 60 * 1000);

localStorage.setItem("accessToken", accessToken);
localStorage.setItem("refreshToken", newRefreshToken);
originalRequest.headers.Authorization = `Bearer ${newAccessToken}`;
processQueue(null, newAccessToken);

originalRequest.headers.Authorization = `Bearer ${accessToken}`;
processQueue(null, accessToken);

return instance(originalRequest);
} else {
const failError = new Error("토큰 리프레시가 실패했어요");
processQueue(failError, null);
return Promise.reject(failError);
throw new Error("Token refresh failed");
}
} catch (refreshError) {
processQueue(refreshError, null);

const status = refreshError.response?.status;
if (status === 401 || status === 403) {
console.warn("세션이 만료되었습니다. 다시 로그인해주세요.");
console.warn("세션이 만료되어 로그아웃됩니다.");
localStorage.clear();
window.location.href = "/login";
}

return Promise.reject(refreshError);
} finally {
isRefreshing = false;
}
}

return Promise.reject(error);
}
},
);

export default instance;
export default instance;
48 changes: 48 additions & 0 deletions src/apis/mypages.api.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
import instance from "./instance";

export const getMyInfo = async () => {
const response = await instance.get("/api/v1/users/me");
return response.data;
};

export const withdrawAccount = async () => {
const response = await instance.delete("/api/v1/auth/me");
return response.data;
};

export const updateProfile = async (formData) => {
const response = await instance.patch('/api/v1/users/me/profile', formData, {
headers: {
"Content-Type": undefined,
},
});
return response.data;
};

export const changePassword = async (passwordData) => {
const response = await instance.patch('/api/v1/users/me/password', passwordData);
return response.data;
};

export const deleteUser = async () => {
const refreshToken = localStorage.getItem("refreshToken");
const response = await instance.delete('/api/v1/users/me', {
data: {
refreshToken: refreshToken
}
});
return response.data;
};

export const logout = async () => {
const refreshToken = localStorage.getItem("refreshToken");
const response = await instance.post('/api/v1/auth/logout', {
refreshToken: refreshToken
});
return response.data;
};

export const getRandomProfile = async () => {
const response = await instance.patch('/api/v1/users/me/profile-images/random');
return response.data;
};
15 changes: 15 additions & 0 deletions src/apis/photo.api.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import instance from "./instance";

export const getMyGallery = async (yearMonth, tag = "") => {
const response = await instance.get('/api/v1/diaries', {
params: {
imageType: 'MANUAL',
hasPhoto: true,
yearMonth: yearMonth,
limit: 32,
tag: tag || null,
sort: 'createdAt,desc'
}
});
return response.data;
};
Loading