diff --git a/src/apiCalls.js b/src/apiCalls.js index da33400..33b470c 100644 --- a/src/apiCalls.js +++ b/src/apiCalls.js @@ -1,20 +1,26 @@ import axios from "axios"; export const login = async (id, password) => { - await axios - .post("http://218.146.29.203:8080/user/login", { + try { + const response = await axios.post("http://218.146.29.203:8080/user/login", { username: id, password: password, - }) - .then(res => { - window.sessionStorage.setItem("session", id); - console.log(res.data); - }) - .catch(error => { - console.log(error); - }); + },{ withCredentials: true }); + + console.log("토큰 쿠키 값 확인 : ", document.cookie); + + const token = document.cookie; + console.log("할당된 토큰 쿠키 값 확인 : ",token); + window.sessionStorage.setItem("session", `Bearer ${token}`); + + return response.data; + } catch (error) { + console.error("Login error:", error); + throw error; + } }; + export const join = async (id, password) => { try { const response = await axios.post( @@ -23,10 +29,9 @@ export const join = async (id, password) => { username: id, password: password, name: "혜림", - } + },{ withCredentials: true } ); - console.log(response.data); - return response.data; + console.log(response); } catch (error) { console.error("Join error:", error); throw error; @@ -44,3 +49,74 @@ export const checkIdDuplicate = async id => { throw error; } }; + + + +export const createDiary = async (title, content, weather) => { + try { + const sessionToken = window.sessionStorage.getItem("session"); + console.log("Session Token: ", sessionToken); + + if (!sessionToken) { + throw new Error("로그인이 필요합니다."); + } + + const tokenReplace = sessionToken.replace('Bearer ', ''); + const decodedToken = tokenReplace; + + + const response = await axios.post( + "http://218.146.29.203:8080/diary", + { + title, + content, + weather, + }, + { + headers: { + Authorization: `Bearer ${decodedToken}`, + withCredentials: true + }, + } + ); + console.log("일기 생성 성공"); + return response.data; + } catch (error) { + console.error("Create diary error:", error); + throw error; + } +}; + +export const getUserDiaries = async (userId) => { + try { + const sessionToken = window.sessionStorage.getItem("session"); + if (!sessionToken) { + throw new Error("로그인이 필요합니다."); + } + + const response = await axios.get(`http://218.146.29.203:8080/diary/${userId}`, { + headers: { Authorization: sessionToken }, + }); + return response.data; + } catch (error) { + console.error("getUserDiary error:", error); + throw error; + } +}; + +export const getDiaryById = async (id) => { + try { + const sessionToken = window.sessionStorage.getItem("session"); + if (!sessionToken) { + throw new Error("로그인이 필요합니다."); + } + + const response = await axios.get(`http://218.146.29.203:8080/diary/${id}`, { + headers: { Authorization: sessionToken }, + }); + return response.data; + } catch (error) { + console.error("Error getDiaryById : ", error); + throw error; + } +}; diff --git a/src/components/DiaryListItem.js b/src/components/DiaryListItem.js index 7162382..a3a5684 100644 --- a/src/components/DiaryListItem.js +++ b/src/components/DiaryListItem.js @@ -1,23 +1,23 @@ import {useNavigate} from "react-router-dom"; -const DiaryListItem = Props => { +const DiaryListItem = ({ id, date, title, weather }) => { const navigate = useNavigate(); return ( <>
{ - navigate("/diary-detail"); + navigate(`/diary-detail/${id}`); }} >
-
2024.02.09
-
오늘의 일기 - 날씨가 흐려서 아쉬웠던 날
-
-
날씨 : 흐림
+
{date}
+
{title}
+
+
날씨: {weather}
); }; -export default DiaryListItem; +export default DiaryListItem; \ No newline at end of file diff --git a/src/components/Header.js b/src/components/Header.js index 3718a23..4619e99 100644 --- a/src/components/Header.js +++ b/src/components/Header.js @@ -10,7 +10,6 @@ const Header = () => { window.sessionStorage.removeItem("session"); setIsLogin(false); }; - useEffect(() => { if (window.sessionStorage.getItem("session")) { setIsLogin(true); @@ -56,5 +55,4 @@ const Header = () => { ); }; - -export default Header; +export default Header; \ No newline at end of file diff --git a/src/pages/Creatediary.js b/src/pages/Creatediary.js index 45ed2c5..882812c 100644 --- a/src/pages/Creatediary.js +++ b/src/pages/Creatediary.js @@ -1,7 +1,40 @@ +import React, { useState } from 'react'; import Header from "../components/Header"; +import { useNavigate } from 'react-router-dom'; +import { createDiary } from '../apiCalls'; import "../styles/create-diary.css"; const Creatediary = () => { + const navigate = useNavigate(); + const [title, setTitle] = useState(''); + const [content, setContent] = useState(''); + const [weather, setWeather] = useState(''); + + const handleTitleChange = (e) => setTitle(e.target.value); + const handleContentChange = (e) => setContent(e.target.value); + const handleWeatherChange = (e) => setWeather(e.target.value); + + const handleDiarySubmit = async () => { + if (!title || !content || !weather) { + alert('입력되지 않은 칸이 있습니다.'); + return; + } + + if (content.length < 30) { + alert('내용을 더 입력해주세요'); + return; + } + + try { + await createDiary(title, content, weather); + navigate('/'); + } catch (error) { + alert('일기 작성 중 오류가 발생했습니다.'); + } + }; + + + const date = new Date(); return ( <> @@ -21,23 +54,33 @@ const Creatediary = () => {
- +
- +
diff --git a/src/pages/DiaryDetail.js b/src/pages/DiaryDetail.js index 5d9e5b7..e3a0b03 100644 --- a/src/pages/DiaryDetail.js +++ b/src/pages/DiaryDetail.js @@ -1,9 +1,26 @@ -import {useParams} from "react-router-dom"; +import React, { useEffect, useState } from "react"; import Header from "../components/Header"; -import "../styles/diary-detail.css"; +import "../styles/diary-detail.css" +import { useParams } from "react-router-dom"; +import { getDiaryById } from "../apiCalls"; const DiaryDetail = () => { - const {id} = useParams(); + const { id } = useParams(); + const [diary, setDiary] = useState({}); + + useEffect(() => { + async function fetchDiary() { + try { + const diaryData = await getDiaryById(id); + setDiary(diaryData); + } catch (error) { + console.error("Error fetching diary:", error); + } + } + + fetchDiary(); + }, [id]); + return ( <>
@@ -11,32 +28,27 @@ const DiaryDetail = () => {
-
2024.02.13
+
{diary.date}
- 오늘 + {diary.title}
- 흐림 + {diary.weather}
-
-
-
- +
{diary.content}
+
diff --git a/src/pages/DiaryList.js b/src/pages/DiaryList.js index 5c33108..9d8050a 100644 --- a/src/pages/DiaryList.js +++ b/src/pages/DiaryList.js @@ -1,15 +1,47 @@ +import React, { useEffect, useState } from "react"; import DiaryListItem from "../components/DiaryListItem"; import Header from "../components/Header"; +import { getUserDiaries } from "../apiCalls"; import "../styles/diary-list.css"; -const DiaryList = () => { + +const DiaryList = ({ userId }) => { + const [diaries, setDiaries] = useState([]); + const [error, setError] = useState(null); + + useEffect(() => { + async function fetchDiaries() { + try { + const data = await getUserDiaries(userId); + setDiaries(data); + } catch (error) { + setError(error); + } + } + + fetchDiaries(); + }, [userId]); + + if (error) { + return
Error: {error.message}
; + } + + if (diaries.length === 0) { + return
No diaries found.
; + } + return ( <>
- - - - + {diaries.map((diary) => ( + + ))}
); diff --git a/src/pages/Home.js b/src/pages/Home.js index bba243e..d2ac715 100644 --- a/src/pages/Home.js +++ b/src/pages/Home.js @@ -14,6 +14,7 @@ const Home = () => { navigate("/diary"); } else { alert("로그인이 필요한 서비스입니다."); + navigate("/login"); } }} className="writing-btn" @@ -22,6 +23,7 @@ const Home = () => {
{/* 나무 이미지 */} + Tree {
); }; - -export default Home; +export default Home; \ No newline at end of file diff --git a/src/pages/login.js b/src/pages/login.js index dbba4c6..e8e969f 100644 --- a/src/pages/login.js +++ b/src/pages/login.js @@ -1,3 +1,5 @@ + +import React, {useEffect, useState} from "react"; import React, {useState} from "react"; import {useNavigate} from "react-router-dom"; import {login} from "../apiCalls"; @@ -8,7 +10,6 @@ const Login = () => { const [id, setId] = useState(""); const [pwd, setPwd] = useState(""); const navigate = useNavigate(); - const handleIdChange = e => setId(e.target.value); const handlePwdChange = e => setPwd(e.target.value); @@ -21,6 +22,14 @@ const Login = () => { } }; + useEffect(()=>{ + console.log("쿠키", document.cookie); + // window.sessionStorage.setItem("session", `Bearer ${token}`); + // console.log("로그인 성공, 토큰 저장됨"); + + }); + + return (