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.weather}
-
+
>
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 = () => {
{/* 나무 이미지 */}
+

{
);
};
-
-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 (