Skip to content

Commit 5ecbe75

Browse files
committed
feat(getcloser): assign challenges
1 parent 1610f25 commit 5ecbe75

3 files changed

Lines changed: 59 additions & 3 deletions

File tree

getcloser/frontend/src/app/page2/page.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import Modal from '@/components/Modal';
1111
import Cookies from 'js-cookie';
1212

1313
export default function Page2() {
14-
const { id } = useFormStore();
14+
const { id, setTeamId, setMemberIds } = useFormStore();
1515
const router = useRouter();
1616
const [inputs, setInputs] = useState<Array<{ id: string; displayName: string }>>(() => {
1717
const initialInputs = Array(5).fill({ id: '', displayName: '' });
@@ -130,6 +130,8 @@ export default function Page2() {
130130

131131
const responseData = await response.json();
132132
console.log('Team creation successful:', responseData);
133+
setTeamId(responseData.team_id); // Save team_id to store
134+
setMemberIds(responseData.members_ids); // Save members_ids to store
133135
router.push('/page3'); // Navigate to page3 on success
134136
} catch (error: unknown) {
135137
console.error('Error creating team:', error);

getcloser/frontend/src/app/page3/page.tsx

Lines changed: 48 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,58 @@ import { Button } from '@/components/ui/button';
66
import { Label } from '@/components/ui/label';
77
import { Textarea } from '@/components/ui/textarea';
88
import { useFormStore } from '../../store/formStore';
9-
import React from 'react';
9+
import React, { useEffect } from 'react'; // Import useEffect
1010

1111
export default function Page3() {
12-
const { question, answer, setAnswer } = useFormStore();
12+
const { question, answer, setAnswer, id, teamId, memberIds } = useFormStore(); // Destructure new state
1313
const router = useRouter();
1414

15+
useEffect(() => {
16+
const assignChallenges = async () => {
17+
if (!teamId || !id || memberIds.length === 0) {
18+
console.warn('Missing teamId, my_id, or memberIds for challenge assignment.');
19+
return;
20+
}
21+
22+
const requestBody = {
23+
team_id: teamId,
24+
my_id: id,
25+
members_ids: memberIds,
26+
};
27+
28+
console.log('Assign Challenges Request Body:', requestBody);
29+
30+
try {
31+
const response = await fetch('/api/v1/challenge/assign-challenges', {
32+
method: 'POST',
33+
headers: {
34+
'Content-Type': 'application/json',
35+
},
36+
body: JSON.stringify(requestBody),
37+
});
38+
39+
if (!response.ok) {
40+
const errorData = await response.json();
41+
throw new Error(`HTTP error! status: ${response.status}, message: ${errorData.detail || response.statusText}`);
42+
}
43+
44+
const responseData = await response.json();
45+
console.log('Challenge assignment successful:', responseData);
46+
// Here you might want to update the question in the store based on responseData
47+
// setQuestion(responseData.challenge_question);
48+
} catch (error: unknown) {
49+
console.error('Error assigning challenges:', error);
50+
let errorMessage = '알 수 없는 오류가 발생했습니다.';
51+
if (error instanceof Error) {
52+
errorMessage = error.message;
53+
}
54+
alert(`챌린지 할당에 실패했습니다: ${errorMessage}`);
55+
}
56+
};
57+
58+
assignChallenges();
59+
}, [id, teamId, memberIds]); // Dependencies for useEffect
60+
1561
const handleSubmit = (e: React.FormEvent) => {
1662
e.preventDefault();
1763
console.log('Question:', question, 'Answer:', answer);

getcloser/frontend/src/store/formStore.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,27 @@ interface FormState {
55
id: string;
66
question: string;
77
answer: string;
8+
teamId: string;
9+
memberIds: string[];
810
setEmail: (email: string) => void;
911
setId: (id: string) => void;
1012
setQuestion: (question: string) => void;
1113
setAnswer: (answer: string) => void;
14+
setTeamId: (teamId: string) => void;
15+
setMemberIds: (memberIds: string[]) => void;
1216
}
1317

1418
export const useFormStore = create<FormState>((set) => ({
1519
email: '',
1620
id: '',
1721
question: '',
1822
answer: '',
23+
teamId: '',
24+
memberIds: [],
1925
setEmail: (email) => set({ email }),
2026
setId: (id) => set({ id }),
2127
setQuestion: (question) => set({ question }),
2228
setAnswer: (answer) => set({ answer }),
29+
setTeamId: (teamId) => set({ teamId }),
30+
setMemberIds: (memberIds) => set({ memberIds }),
2331
}));

0 commit comments

Comments
 (0)