Skip to content

Commit 2717984

Browse files
committed
[Feat] 그룹 검증 라우터에서 진행
1 parent c8ca4ff commit 2717984

File tree

2 files changed

+28
-30
lines changed

2 files changed

+28
-30
lines changed

src/app/Router.tsx

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
import { createBrowserRouter, type LoaderFunctionArgs } from 'react-router'
1+
import {
2+
createBrowserRouter,
3+
redirect,
4+
type LoaderFunctionArgs
5+
} from 'react-router'
26
import dayjs from 'dayjs'
37

48
// layouts
@@ -33,6 +37,11 @@ import Invitation from '@/features/group/edit/invitation/Invitation'
3337
import { StatisticsDetailPage, StatisticsPage } from '@/pages/statistics'
3438
import { PlansOverview } from '@/pages/plan/PlansOverview'
3539
import EditItem from '@/pages/item/edit/EditItem'
40+
import {
41+
fetchGroupInfo,
42+
validateGroupMember
43+
} from '@/features/group/service/groupInfo'
44+
import { useUserStore } from '@/shared/stores/useUserStore'
3645

3746
const getInitialDateForCalendar = (dateParam: string | null) => {
3847
if (dateParam) return dayjs(dateParam).startOf('day').toISOString()
@@ -44,19 +53,34 @@ const getInitialDateForCalendar = (dateParam: string | null) => {
4453

4554
const eventsLoader = async ({ request, params }: LoaderFunctionArgs) => {
4655
const url = new URL(request.url)
47-
4856
const dateParam = url.searchParams.get('date')
4957
const groupId = params.groupId
58+
const user = useUserStore.getState().user
59+
60+
if (!groupId || !user?.id) {
61+
throw redirect('/')
62+
}
63+
64+
const validate = await validateGroupMember(user.id, groupId)
65+
if (!validate) {
66+
localStorage.removeItem('storageGroup')
67+
localStorage.removeItem('storageGroupName')
68+
throw redirect('/')
69+
}
70+
71+
const groupData = await fetchGroupInfo(groupId)
72+
localStorage.setItem('storageGroup', groupData.id)
73+
localStorage.setItem('storageGroupName', groupData.name)
5074

5175
const initialDate = getInitialDateForCalendar(dateParam)
5276

5377
const events = await fetchByMonth(
5478
dayjs(initialDate).year(),
5579
dayjs(initialDate).month(),
56-
groupId ?? ''
80+
groupId
5781
)
5882

59-
return { initialDate, events }
83+
return { initialDate, events, groupId }
6084
}
6185

6286
export const router = createBrowserRouter([

src/pages/calendar/ui/page.tsx

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,6 @@ import {
2323
import { useStorageGroup } from '@/features/group/model/useStorageGroup'
2424

2525
import AddButton from '@/shared/components/buttons/AddButton'
26-
import {
27-
fetchGroupInfo,
28-
validateGroupMember
29-
} from '@/features/group/service/groupInfo'
30-
31-
import { useUserStore } from '@/shared/stores/useUserStore'
3226

3327
interface LoaderData {
3428
events: AccountItem[]
@@ -43,7 +37,6 @@ export const CalendarPage = () => {
4337

4438
const { initialDate, events } = useLoaderData() as LoaderData
4539
const { groupId } = useParams()
46-
const user = useUserStore(state => state.user)
4740

4841
const { searchRecurringItem } = useRecurringItem()
4942
const { searchInstallmentItem } = useInstallmentItem()
@@ -61,25 +54,6 @@ export const CalendarPage = () => {
6154
useShallow(s => [s.setDate, s.setAmountList])
6255
)
6356

64-
useEffect(() => {
65-
if (!storageGroup) return
66-
const fetchGroup = async () => {
67-
if (!user?.id) return
68-
const validate = await validateGroupMember(user.id, storageGroup)
69-
70-
if (!validate) {
71-
navigate(`/`)
72-
localStorage.removeItem('storageGroup')
73-
localStorage.removeItem('storageGroupName')
74-
return
75-
}
76-
const data = await fetchGroupInfo(storageGroup)
77-
localStorage.setItem('storageGroup', data.id)
78-
localStorage.setItem('storageGroupName', data.name)
79-
}
80-
fetchGroup()
81-
}, [storageGroup])
82-
8357
const navigate = useNavigate()
8458

8559
useEffect(() => {

0 commit comments

Comments
 (0)