diff --git a/README.md b/README.md
index db47f17..201344b 100644
--- a/README.md
+++ b/README.md
@@ -18,21 +18,24 @@
## π₯ ν & μν (RnR)
-| ꡬμ±μ | κ³΅ν΅ μμ
| UI μ»΄ν¬λνΈ | νμ΄μ§ |
+| |
|
|
|
+| :------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------: |
+| μμν(νμ₯)
[@sohyun0](https://github.com/sohyun0) | λ°μ μ²
[@jeschun](https://github.com/jeschun) | μ μΈν
[@gummmmmy0v0](https://github.com/gummmmmy0v0) | μμ¬μ
[@BaeZzi813](https://github.com/BaeZzi813) |
+
+
-|---|---|---|---|
+| ꡬμ±μ | κ³΅ν΅ μμ
| UI μ»΄ν¬λνΈ | νμ΄μ§ |
| νμμ μ | λμμΈ λ° κΈ°λ₯ QA / λ³ΈμΈ μμ
κ΄λ ¨ λ¬Έμ | | |
-| λ°μ μ² | | μΈν, λͺ¨λ¬, λ²νΌ | λ‘κ·ΈμΈ, νμκ°μ
, λ΄νλ‘ν λ±λ‘, μμΈ |
+| λ°μ μ² | μΈν, λͺ¨λ¬, λ²νΌ | λ‘κ·ΈμΈ, νμκ°μ
, λ΄νλ‘ν λ±λ‘, μμΈ |
-| μμ¬μ | μμ°μμ μ€λΉ | κ³΅ν΅ νλ μ, νΈν°, ν μ€νΈ, νμ΄μ§λ€μ΄μ
, μ€μΌλ ν€ UI | κ°κ² μ 보 λ±λ‘,
-μμΈ |
+| μμ¬μ | μμ°μμ μ€λΉ | κ³΅ν΅ νλ μ, νΈν°, ν μ€νΈ, νμ΄μ§λ€μ΄μ
| κ°κ² μ 보 λ±λ‘, μμΈ |
-| μμν | μ΄κΈ° νλ‘μ νΈ μ
ν
/ κ³΅μ© λ¬Έμ μμ± λ° κ΄λ¦¬(λ
Έμ
) | ν€λ, νν°, λλ‘λ€μ΄, post, 컬λ¬,
-ν°νΈ, μμ΄μ½ | κ³΅κ³ λ¦¬μ€νΈ, μμΈ |
+| μμν | λ°ν | μ΄κΈ° νλ‘μ νΈ μ
ν
/ κ³΅μ© λ¬Έμ μμ± λ° κ΄λ¦¬(λ
Έμ
) | ν€λ, νν°, λλ‘λ€μ΄, post,
+컨ν
μ΄λ, μ€μΌλ ν€ UI, 컬λ¬, ν°νΈ, μμ΄μ½ | κ³΅κ³ λ¦¬μ€νΈ, μμΈ |
-| μ μΈν | λ°νμλ£ λ° λ°ν | ν
μ΄λΈ, μλ¦Ό, μΊλ¦°λ | κ°κ² κ³΅κ³ λ±λ‘, μμΈ |
+| μ μΈν | λ°νμλ£ μ€λΉ | ν
μ΄λΈ, μλ¦Ό, μΊλ¦°λ | κ°κ² κ³΅κ³ λ±λ‘, μμΈ |
> λ΄λΉ λ²μλ κ°λ° μ€ μνΈ νμλ‘ μ‘°μ λ μ μμ.
@@ -63,6 +66,12 @@
---
+## π μν¬νλ‘μ° κ°μ
+
+
+
+---
+
## ποΈ μ§ν μΌμ (μμ½)
- **μ 체 κΈ°κ°**: 2025-09-29 ~ 2025-10-22
@@ -182,8 +191,6 @@ project-root/
>
> - `components/features/`λ **λλ©μΈ λ¨μ UI**(μ: `PostForm`, `PostList`) μ€μ¬.
> - `pages/`μμλ **λΌμ°ν
κ³Ό λ°μ΄ν° μ£Όμ
**λ§ λ΄λΉνλλ‘ λΆλ¦¬.
-> - `lib/axios/`μ **axios instance**Β·μΈν°μ
ν°Β·μλ¬ νΈλ€λ¬ λ°°μΉ.
-> - `lib/validators/`λ Zod/Yup μ€ ν1, νΌκ³Ό API κ²½κ³μμ νμ©.
> - `constants/`μ λΌμ°νΈ/ν€/μλ¬ λ©μμ§ μμν β νλμ½λ© λ°©μ§.
---
@@ -219,11 +226,17 @@ NEXT_PUBLIC_API_BASE=...
## π§ λΌμ°ν
(μν¬νλ‘μ°) λ©λͺ¨
- `/` : λ©μΈ
-- `/list` : λ£°ν¨ λͺ©λ‘
-- `/post` : λ£°ν¨(ν
νλ¦Ώ) μμ±
-- `/post/{id}` : λ£°ν¨ λ©μμ§ νμΈ
-- `/post/{id}/message` : λ£°ν¨ λ©μμ§ μμ±
-- `/post/{id}/edit` : λ£°ν¨ λ©μμ§ μμ
+- `/search` : μλ¨λ€λΉ κ²μ
+- `/login` : λ‘κ·ΈμΈ
+- `/signup` : νμκ°μ
+- `/my-profile` : λ΄ νλ‘ν (μμΈ)
+- `/my-profile/register` : λ΄ νλ‘ν (λ±λ‘)
+- `/notices/[shopId]/[noticeId]` : κ³΅κ³ μμΈ - μλ°μ
+- `/my-shop` : λ΄ κ°κ² (μμΈ)
+- `/my-shop/register` : λ΄ κ°κ² (λ±λ‘)
+- `/employer/shops/[shopId]/notices/[noticeId]` : κ³΅κ³ (μμΈ) - μ¬μ₯λ
+- `/employer/shops/[shopId]/notices/register` : κ³΅κ³ (λ±λ‘) - μ¬μ₯λ
+- `/employer/shops/[shopId]/notices/[noticeId]/edit` : κ³΅κ³ (νΈμ§) - μ¬μ₯λ
- (κ³΅ν΅ UI) Modal/Toast/Dropdown λ±μ `components/ui/`μμ μ 곡
> 리ν¬μ§ν 리μ `workflow.png`λ₯Ό READMEμ κ°μ ν΄λμ λλ©΄ ``λ‘ λ°λ‘
diff --git a/src/assets/images/workflow.png b/src/assets/images/workflow.png
new file mode 100644
index 0000000..47cee66
Binary files /dev/null and b/src/assets/images/workflow.png differ
diff --git a/src/pages/my-shop/index.tsx b/src/pages/my-shop/index.tsx
index 838437e..22ba6a0 100644
--- a/src/pages/my-shop/index.tsx
+++ b/src/pages/my-shop/index.tsx
@@ -46,9 +46,7 @@ const Myshop = () => {
const shopRes = await getShop(shopId);
const { description, ...rest } = shopRes.item;
setShopData({ ...rest, shopDescription: description });
- setShopNotice([]);
- setNextOffset(0);
- loadMoreNotice();
+ await loadMoreNotice(true);
} catch (error) {
alert(error);
}
@@ -56,29 +54,38 @@ const Myshop = () => {
get();
}, [user]);
- const loadMoreNotice = useCallback(async () => {
- if (!user?.shop || nextOffset === null || loading) return;
- setLoading(true);
- try {
- const noticeRes: NoticeResponse = await getNotice(user.shop.item.id, {
- offset: nextOffset,
- limit: 6,
- });
- setShopNotice(prevShopNotice => {
- const newItems = noticeRes.items.map(i => i.item);
- const merged = [...prevShopNotice, ...newItems];
- const unique = merged.filter(
- (item, index, self) => index === self.findIndex(i => i.id === item.id)
+ const loadMoreNotice = useCallback(
+ async (isInitial: boolean = false) => {
+ if (!user?.shop || nextOffset === null || loading) return;
+ setLoading(true);
+ try {
+ const noticeRes: NoticeResponse = await getNotice(user.shop.item.id, {
+ offset: nextOffset,
+ limit: 6,
+ });
+ setShopNotice(prevShopNotice => {
+ const newItems = noticeRes.items.map(i => i.item);
+ const merged = [...prevShopNotice, ...newItems];
+ const unique = merged.filter(
+ (item, index, self) => index === self.findIndex(i => i.id === item.id)
+ );
+ return unique;
+ });
+ setNextOffset(
+ noticeRes.hasNext
+ ? isInitial
+ ? noticeRes.items.length
+ : nextOffset + noticeRes.items.length
+ : null
);
- return unique;
- });
- setNextOffset(noticeRes.hasNext ? nextOffset + noticeRes.items.length : null);
- } catch (error) {
- alert(error);
- } finally {
- setLoading(false);
- }
- }, [user?.shop, nextOffset, loading]);
+ } catch (error) {
+ alert(error);
+ } finally {
+ setLoading(false);
+ }
+ },
+ [user?.shop, nextOffset, loading]
+ );
useEffect(() => {
if (!observerRef.current) return;
@@ -145,8 +152,13 @@ const Myshop = () => {
shopId: shopData.id,
originalHourlyPay: shopData.originalHourlyPay,
};
- const href = `/employer/shops/${mergedNotice.shopId}/notices/${item.id}`;
- return