Skip to content

Commit c2cc942

Browse files
authored
Merge pull request #186 from imaginer-dev/183-그룹-일정-수정-생성에서-그룹-생성으로-수정
183 그룹 일정 수정 생성에서 그룹 생성으로 수정
2 parents 7fe326b + be2303d commit c2cc942

21 files changed

+233
-291
lines changed

src/apis/createNewGroupApi.ts

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import supabase from '@/supabase';
2+
import { Member } from '@/types/Member.ts';
3+
4+
interface CreateNewGroup {
5+
name: string;
6+
description: string;
7+
startDate: string;
8+
endDate: string;
9+
memo: string;
10+
newMemberList: Member[];
11+
}
12+
13+
export const createNewGroupApi = async ({ startDate, endDate, newMemberList, ...props }: CreateNewGroup) => {
14+
// 현재 로그인된 사용자를 가져온다.
15+
const { data: user, error: userError } = await supabase.auth.getUser();
16+
17+
if (userError) {
18+
throw userError;
19+
}
20+
21+
// 그룹을 생성한다.
22+
const { data: groupInfo, error: groupInfoError } = await supabase
23+
.from('groups')
24+
.insert({
25+
name: props.name,
26+
description: props.description,
27+
memo: props.memo,
28+
open: true,
29+
start_date: startDate,
30+
end_date: endDate,
31+
})
32+
.select()
33+
.single();
34+
35+
if (!groupInfo || groupInfoError) {
36+
throw groupInfoError;
37+
}
38+
39+
// 그룹에 멤버를 추가한다.
40+
const newRelationSchema = newMemberList.map((member) => ({
41+
group_id: groupInfo.id,
42+
user_id: member.id,
43+
}));
44+
45+
newRelationSchema.push({
46+
group_id: groupInfo.id,
47+
user_id: user.user.id,
48+
});
49+
50+
const { error: groupMemberError } = await supabase.from('group_user_ralations').insert(newRelationSchema);
51+
if (groupMemberError) {
52+
throw groupMemberError;
53+
}
54+
55+
return true;
56+
};

src/apis/getAllGroupMember.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import supabase from '@/supabase';
2+
3+
export const getAllGroupMembers = async (groupId: string) => {
4+
// group_user_ralations 의 응답 결과의 user_id를 포함하는 profile리스트를 받아온다.
5+
const { data, error } = await supabase.from('group_user_ralations').select('user_id').eq('group_id', +groupId);
6+
7+
if (error) {
8+
throw error;
9+
}
10+
11+
if (!data) {
12+
throw new Error('데이터를 찾을 수 없습니다.');
13+
}
14+
15+
const { data: allUserProfile, error: getProfileError } = await supabase
16+
.from('profiles')
17+
.select('*')
18+
.in(
19+
'id',
20+
data.map((d) => d.user_id),
21+
);
22+
23+
if (getProfileError) {
24+
throw getProfileError;
25+
}
26+
27+
return allUserProfile;
28+
};

src/apis/getAllMemberSchedule.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { getAllGroupMembers } from '@/apis/groupScheduleApis.ts';
21
import supabase from '@/supabase';
2+
import { getAllGroupMembers } from '@/apis/getAllGroupMember.ts';
33

44
export const getAllMemberSchedule = async (groupId: string) => {
55
const memberList = await getAllGroupMembers(groupId);

src/apis/getOneGroupApi.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import supabase from '@/supabase';
2+
3+
export const getOneGroupApi = async (groupId: string) => {
4+
const { data, error } = await supabase.from('groups').select('*').eq('id', +groupId);
5+
6+
if (error) {
7+
throw error;
8+
}
9+
10+
if (!data) {
11+
throw new Error('데이터를 찾을 수 없습니다.');
12+
}
13+
14+
return data[0];
15+
};

src/apis/groupScheduleApis.ts

Lines changed: 0 additions & 176 deletions
This file was deleted.

src/apis/updateGroupApi.ts

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import supabase from '@/supabase';
2+
3+
interface UpdateGroup {
4+
name: string;
5+
description: string;
6+
startDate: string;
7+
endDate: string;
8+
memo: string;
9+
groupId: string;
10+
}
11+
12+
export const updateGroup = async ({ name, description, startDate, endDate, memo, groupId }: UpdateGroup) => {
13+
console.log(memo);
14+
console.log(description);
15+
const { data, error } = await supabase
16+
.from('groups')
17+
.update({
18+
name,
19+
description,
20+
start_date: startDate,
21+
end_date: endDate,
22+
memo,
23+
})
24+
.eq('id', +groupId);
25+
26+
if (error) {
27+
throw error;
28+
}
29+
30+
return data;
31+
};

src/apis/updateGroupMemberApi.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import supabase from '@/supabase';
2+
import { Member } from '@/types/Member.ts';
3+
4+
interface UpdateGroupMember {
5+
updatedMemberList: Member[];
6+
groupId: string;
7+
}
8+
9+
export const updateGroupMember = async ({ updatedMemberList, groupId }: UpdateGroupMember) => {
10+
const { error: deleteError } = await supabase.from('group_user_ralations').delete().eq('group_id', groupId);
11+
if (deleteError) {
12+
throw deleteError;
13+
}
14+
15+
const { data, error: insertError } = await supabase.from('group_user_ralations').insert(
16+
updatedMemberList.map((member) => ({
17+
group_id: +groupId,
18+
user_id: member.id,
19+
})),
20+
);
21+
22+
if (insertError) {
23+
throw insertError;
24+
}
25+
26+
return data;
27+
};

src/components/common/SideBar/SideBarGroupList.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ const SideBarGroupList: FC<Props> = ({ userId }) => {
3131
key={group.id + 'sidebar-group-list'}
3232
>
3333
<Link to={`/group/${group.id}`}>{group.name}</Link>
34-
<Link to={`/group/${group.id}/edit/${group.id}`}>
34+
<Link to={`/group/${group.id}/edit`}>
3535
<PencilIcon />
3636
</Link>
3737
</li>

src/hooks/useAddGroupSchedule.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export const useAddGroupSchedule = () => {
1616
e.preventDefault();
1717
const formData = new FormData(e.currentTarget);
1818
const newGroupSchedule = {
19-
title: formData.get('name') as string,
19+
name: formData.get('name') as string,
2020
description: formData.get('description') as string,
2121
startDate: formData.get('startDate') as string,
2222
endDate: formData.get('endDate') as string,
Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import { useGetAllMember } from '@/react-queries/useGetAllMember';
2-
import { useGetOneGroupSchedule } from '@/react-queries/useGetOneGroupSchedule';
2+
import { useGetOneGroup } from '@/react-queries/useGetOneGroup.ts';
33

4-
export const useGetGroupScheduleDefaultData = (scheduleId: string, groupId: string) => {
4+
export const useGetGroupScheduleDefaultData = (groupId: string) => {
55
const {
6-
data: groupScheduleData,
7-
isLoading: groupScheduleIsLoading,
8-
error: groupScheduleError,
9-
isError: groupScheduleIsError,
10-
} = useGetOneGroupSchedule(scheduleId);
6+
data: groupData,
7+
isLoading: groupIsLoading,
8+
error: groupError,
9+
isError: groupIsError,
10+
} = useGetOneGroup(groupId);
1111

1212
const {
1313
data: groupMemberData,
@@ -17,10 +17,10 @@ export const useGetGroupScheduleDefaultData = (scheduleId: string, groupId: stri
1717
} = useGetAllMember(groupId);
1818

1919
return {
20-
groupScheduleData,
20+
groupData,
2121
groupMemberData,
22-
isLoading: groupScheduleIsLoading || groupMemberIsLoading,
23-
error: groupScheduleError ?? groupMemberError,
24-
isError: groupScheduleIsError || groupMemberIsError,
22+
isLoading: groupIsLoading || groupMemberIsLoading,
23+
error: groupError ?? groupMemberError,
24+
isError: groupIsError || groupMemberIsError,
2525
};
2626
};

0 commit comments

Comments
 (0)