Skip to content
Snippets Groups Projects
HomeParticipateForm.js 8.47 KiB
Newer Older
  • Learn to ignore specific revisions
  • Min Dong Hyeun's avatar
    Min Dong Hyeun committed
    import { useState, useEffect } from "react";
    
    import Input from "./Input";
    import Button from "./Button";
    
    Min Dong Hyeun's avatar
    Min Dong Hyeun committed
    import { useNavigate, useParams } from "react-router-dom";
    
    Min Dong Hyeun's avatar
    Min Dong Hyeun committed
    import axios from "axios";
    
    
    function HomeParticipateForm() {
    
    Min Dong Hyeun's avatar
    Min Dong Hyeun committed
        const [name, setName] = useState("");
        const [password, setPassword] = useState("");
        const [email, setEmail] = useState("");
    
        const navigate = useNavigate();
    
    Min Dong Hyeun's avatar
    Min Dong Hyeun committed
        const { id } = useParams();
    
    Min Dong Hyeun's avatar
    Min Dong Hyeun committed
        const handleName = (event) => {
    
            setName(event.target.value);
        }
    
    Min Dong Hyeun's avatar
    Min Dong Hyeun committed
        const handlePassword = (event) => {
    
            setPassword(event.target.value);
        }
    
    Min Dong Hyeun's avatar
    Min Dong Hyeun committed
        const handleEmail = (event) => {
    
            setEmail(event.target.value);
        }
    
        const checkParticipantExistence = async () => {
            try {
    
                const response = await axios.get(`http://localhost:3000/meetings/${id}/participants/?name=${name}`);
    
    Min Dong Hyeun's avatar
    Min Dong Hyeun committed
                return false;
            }
    
            catch (err) {
    
    Min Dong Hyeun's avatar
    Min Dong Hyeun committed
                return true;
    
    Min Dong Hyeun's avatar
    Min Dong Hyeun committed
            }
        }
    
        const handleSubmit = async (event) => {
    
    Min Dong Hyeun's avatar
    Min Dong Hyeun committed
            event.preventDefault();
            if (name === "") {
                alert('이름을 입력하세요')
            }
            else {
    
                let checkParticipant = await checkParticipantExistence();
                console.log(checkParticipant);
                if (checkParticipant) { // DB에 해당 이름이 존재하지 않으면
    
    Min Dong Hyeun's avatar
    Min Dong Hyeun committed
                    try {
    
                        const response = await axios.post(`http://localhost:3000/meetings/${id}/participants`, {
    
    Min Dong Hyeun's avatar
    Min Dong Hyeun committed
                            name: name,
                            password: password,
                            email: email
                        });
    
                            const response = await axios.post(`http://localhost:3000/meetings/${id}/entry`, {
                                name: name,
                                password: password
    
                                withCredentials: true
    
                                const response = await axios.get(`http://localhost:3000/meetings/${id}/`);
    
                                const startDate = response.data.startDate;
                                const endDate = response.data.endDate;
    
                                const startTime = response.data.availableVotingStartTime;
                                const endTime = response.data.availableVotingEndTime;
    
                                    const response = await axios.get(`http://localhost:3000/meetings/${id}/my/schedules`);
                                    // console.log(startDate, endDate);
    
                                    navigate('UserTimeInfo', { state: { id: id, startTime: startTime, endTime: endTime, startDate: startDate, endDate: endDate, schedules: response.data.schedules } });
    
                                catch (e) {
    
                            catch (e) {
    
                                console.log(e);
                            }
                        }
                        catch (error) {
                            if (error.response) {
                                if (error.response.status === 401) {
                                    alert('Password를 잘못 입력하였습니다');
                                } else if (error.response.status === 404) {
                                    alert('해당하는 이름이 존재하지 않습니다');
    
                                }
                                else if (error.response.status === 400) {
    
                                    alert("비밀번호를 설정하셨습니다. 비밀번호를 입력해주세요")
                                }
                                else {
                                    alert(`Unexpected status code: ${error.response.status}`);
                                }
                            } else {
                                console.error(error);
                            }
                        }
    
    Min Dong Hyeun's avatar
    Min Dong Hyeun committed
                    }
                    catch (error) {
                        console.error(error);
                    }
    
    Min Dong Hyeun's avatar
    Min Dong Hyeun committed
                }
    
                else { // 이미 DB에 참여자가 존재하는 경우
                    try {
    
                        await axios.post(`http://localhost:3000/meetings/${id}/entry`, {
                            name: name,
                            password: password
                        }, {
                            withCredentials: true
                        });
    
                        const response = await axios.get(`http://localhost:3000/meetings/${id}/my/schedules`); //투표 여부 확인을 위해
    
                        const schedules = response.data.schedules;
                        if (schedules.length) { // 투표를 진행하였으면 결과 페이지로 이동
                            navigate(`/result/${id}`);
    
                        else { // 투표를 안했으면 투표페이지로 이동
                            try { // 쿠키 재생성
                                try {
                                    const response = await axios.get(`http://localhost:3000/meetings/${id}/`);
                                    const startDate = response.data.startDate;
                                    const endDate = response.data.endDate;
                                    const startTime = response.data.availableVotingStartTime;
                                    const endTime = response.data.availableVotingEndTime;
    
                                    navigate('UserTimeInfo', { state: { id: id, startTime: startTime, endTime: endTime, startDate: startDate, endDate: endDate, schedules: schedules } });
    
                                }
                                catch (e) {
                                    console.log(e);
                                }
                            }
                            catch (error) {
                                if (error.response) {
                                    if (error.response.status === 401) {
                                        alert('Password를 잘못 입력하였습니다');
                                    } else if (error.response.status === 404) {
                                        alert('해당하는 이름이 존재하지 않습니다');
                                    }
                                    else if (error.response.status === 400) {
                                        alert("비밀번호를 설정하셨습니다. 비밀번호를 입력해주세요")
                                    }
                                    else {
                                        alert(`Unexpected status code: ${error.response.status}`);
                                    }
                                } else {
                                    console.error(error);
                                }
                            }
    
                    catch (error) {
    
                        if (error.response) {
                            if (error.response.status === 401) {
                                alert('Password를 잘못 입력하였습니다');
                            } else if (error.response.status === 404) {
                                alert('해당하는 이름이 존재하지 않습니다');
                            }
                            else if (error.response.status === 400) {
                                alert("비밀번호를 설정하셨습니다. 비밀번호를 입력해주세요")
                            }
                            else {
                                alert(`Unexpected status code: ${error.response.status}`);
                            }
                        } else {
                            console.error(error);
                        }
    
    Min Dong Hyeun's avatar
    Min Dong Hyeun committed
                    }
                }
            }
    
    Min Dong Hyeun's avatar
    Min Dong Hyeun committed
                    <h1>투표에 참여하기</h1>
                    <Input
                        type="text"
                        value={name}
                        onChange={handleName}
                        placeholder="이름"
    
    Min Dong Hyeun's avatar
    Min Dong Hyeun committed
                    <Input
                        type="password"
                        value={password}
                        onChange={handlePassword}
    
    Min Dong Hyeun's avatar
    Min Dong Hyeun committed
                        placeholder="Password(선택)"
    
    Min Dong Hyeun's avatar
    Min Dong Hyeun committed
                    <Input
                        type="text"
                        value={email}
                        onChange={handleEmail}
                        placeholder="이메일(선택)"
                    />
                    <Button
                        type='submit'
    
                        text='참여'
                        onClick={handleSubmit}
    
                    />
                </div>
            </form>
        );
    }
    
    export default HomeParticipateForm;