Skip to content

Commit 5a5805d

Browse files
committed
feat: GET /shared/posts/dormitory API (kookmin-sw#75)
1 parent 7ac4bd6 commit 5a5805d

File tree

4 files changed

+107
-0
lines changed

4 files changed

+107
-0
lines changed

src/entities/shared-post/shared-post.type.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,3 +104,36 @@ export interface SharedPost {
104104
modifiedAt: Date;
105105
modifiedBy: string;
106106
}
107+
108+
export interface DormitorySharedPostListItem {
109+
id: number;
110+
title: string;
111+
content: string;
112+
thumbnail: {
113+
fileName: string;
114+
isThumbNail: boolean;
115+
order: number;
116+
};
117+
publisherAccount: {
118+
memberId: string;
119+
email: string;
120+
nickname: string;
121+
birthYear: string;
122+
gender: string;
123+
phoneNumber: string;
124+
profileImageFileName: string;
125+
createdAt: Date;
126+
createdBy: string;
127+
modifiedAt: Date;
128+
modifiedBy: string;
129+
};
130+
address: {
131+
oldAddress: string;
132+
roadAddress: string;
133+
};
134+
isScrapped: boolean;
135+
createdAt: Date;
136+
createdBy: string;
137+
modifiedAt: Date;
138+
modifiedBy: string;
139+
}

src/features/shared/shared.api.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,3 +112,28 @@ export const scrapPost = async (postId: number) =>
112112
await axios.get<SuccessBaseDTO>(
113113
`/maru-api/shared/posts/studio/${postId}/scrap`,
114114
);
115+
116+
export const getDormitorySharedPosts = async ({
117+
filter,
118+
search,
119+
page,
120+
}: GetSharedPostsProps) => {
121+
const getURI = () => {
122+
const baseURL = '/maru-api/shared/posts/studio';
123+
let query = '';
124+
125+
if (filter != null) {
126+
query += `filter=${JSON.stringify(filterConvertToValues(filter))}`;
127+
}
128+
129+
if (search != null) {
130+
query += `&search=${search}`;
131+
}
132+
133+
query += `&page=${page}`;
134+
135+
return `${baseURL}?${encodeURI(query)}`;
136+
};
137+
138+
return await axios.get<GetSharedPostsDTO>(getURI());
139+
};

src/features/shared/shared.dto.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import {
2+
type DormitorySharedPostListItem,
23
type SharedPost,
34
type SharedPostListItem,
45
} from '@/entities/shared-post';
@@ -38,3 +39,34 @@ export interface GetSharedPostsDTO extends SuccessBaseDTO {
3839
export interface GetSharedPostDTO extends SuccessBaseDTO {
3940
data: SharedPost;
4041
}
42+
43+
export interface GetDormitorySharedPostsDTO extends SuccessBaseDTO {
44+
data: {
45+
content: DormitorySharedPostListItem[];
46+
pageable: {
47+
pageNumber: number;
48+
pageSize: number;
49+
sort: {
50+
empty: boolean;
51+
unsorted: boolean;
52+
sorted: boolean;
53+
};
54+
offset: number;
55+
paged: boolean;
56+
unpaged: boolean;
57+
};
58+
last: boolean;
59+
totalPages: number;
60+
totalElements: number;
61+
first: boolean;
62+
size: number;
63+
number: number;
64+
sort: {
65+
empty: boolean;
66+
unsorted: boolean;
67+
sorted: boolean;
68+
};
69+
numberOfElements: number;
70+
empty: boolean;
71+
};
72+
}

src/features/shared/shared.hook.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { useCallback, useEffect, useMemo, useState } from 'react';
55
import {
66
createSharedPost,
77
deleteSharedPost,
8+
getDormitorySharedPosts,
89
getSharedPost,
910
getSharedPosts,
1011
scrapPost,
@@ -386,3 +387,19 @@ export const useScrapSharedPost = () =>
386387
useMutation<AxiosResponse<SuccessBaseDTO>, FailureDTO, number>({
387388
mutationFn: scrapPost,
388389
});
390+
391+
export const useDormitorySharedPosts = ({
392+
filter,
393+
search,
394+
page,
395+
enabled,
396+
}: GetSharedPostsProps & { enabled: boolean }) =>
397+
useQuery({
398+
queryKey: ['/api/shared/posts/studio', { filter, search, page }],
399+
queryFn: async () =>
400+
await getDormitorySharedPosts({ filter, search, page }).then(
401+
response => response.data,
402+
),
403+
staleTime: 60000,
404+
enabled,
405+
});

0 commit comments

Comments
 (0)