From 739a87fc3ea7c3007eb7807b34251883b63ce351 Mon Sep 17 00:00:00 2001 From: NamKyeongMin Date: Sat, 10 May 2025 19:57:38 +0900 Subject: [PATCH] =?UTF-8?q?[add]:=20boom-img-container=20=EB=8F=99?= =?UTF-8?q?=EC=A0=81=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../public/assets/img/boom-fill-green.png | Bin 0 -> 16289 bytes frontend/public/assets/img/boom-fill-red.png | Bin 0 -> 16879 bytes frontend/src/Attendance.jsx | 101 +++++++++++++----- 3 files changed, 73 insertions(+), 28 deletions(-) create mode 100644 frontend/public/assets/img/boom-fill-green.png create mode 100644 frontend/public/assets/img/boom-fill-red.png diff --git a/frontend/public/assets/img/boom-fill-green.png b/frontend/public/assets/img/boom-fill-green.png new file mode 100644 index 0000000000000000000000000000000000000000..6416093059824996f574981553f5705819c56466 GIT binary patch literal 16289 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 A#sB~S literal 0 HcmV?d00001 diff --git a/frontend/public/assets/img/boom-fill-red.png b/frontend/public/assets/img/boom-fill-red.png new file mode 100644 index 0000000000000000000000000000000000000000..ef5bb3b1d467a98c48a0b7990526fe5f0b75af1b GIT binary patch literal 16879 zcmeIaWmuG5*EfF75Dp?R0)hg7bo-XJr^(XDi8yY{=%cl zq13O1p6G10-Mpm12>X_8#x$a%`>PS6)HqExU9fohr5WwZ(~Z!izj4r+1`L(;thaMG zZq#HV272I#h>N^3kfO_M$s6!9_y-uq z{@*W=Qy?HJ+N7A%qz|AV7aG#@sEAYuhWh%U>l*2KI63s?-_7V5QP9PkPYmynK7fI6 z!o=^RFfz~JV7QBR+{o=?e6{V zT{2;G{Kgmt6z>$!Mj@HIF)X#1d_y-L$Kh?pN@=CegBk3nz1W_)_g0oWhh8bIR78yq z0R|+%VwGsL_UhG0_X1XK4tvvK!3sA^xB4RKhcbAUP7=` z&gZFbSWkK;kI8lJL^=t}CcZ-lK3AyVFyaLEQA&k`>^@ol7NGKs$%_~mOb8sc;?x!t zT_u`~p@0lzv+4QUzQbc=(|ypXTC-ESTNgWUPdBEyyG)vuXkc7GquxOA0=vws5=YO{ znz#I$euhc>l-+LoscUUcq|yqwj&?G$y#)%1R=}Z$aKoSS$No`n)nm?zl2HLf*=YmW zX{a$7W#SeS4~OwdI}V3QOjS+D4)Gz`erv=+(M8}1G^znJTc;)l1P#o zASr2gQIdaL{!!rY*r+}&p(}65v7VKIRpquh5Pk{}er9(qo z^qO0bqLPZ4;fNAI^3Tq%O`S2!jU!WsU5I(?{Ra=|%BZhwKO!&Hya4DeP= BCl?m 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 { const [attendanceCode, setAttendanceCode] = useState([""]); const [attendanceData, setAttendanceData] = useState([]); + const [todayStatuses, setTodayStatuses] = useState([ + "not_started", + "not_started", + "not_started", + ]); const getSubImage = (count) => { switch (count) { @@ -22,6 +27,18 @@ const Attendance = () => { } }; + // 세션별 상단 이미지 handling + const getBoomImage = (status) => { + switch (status) { + case "success": + return "/assets/img/boom-fill-green.png"; + case "fail": + return "/assets/img/boom-fill-red.png"; + default: + return "/assets/img/tabler--boom.png"; + } + }; + // 날짜 기반 주차 계산 const getWeekFromDate = (dateStr) => { const startDate = new Date("2025-06-24"); // 세션 시작일 @@ -64,26 +81,57 @@ const Attendance = () => { }); }; - useEffect(() => { - const fetchAttendance = async () => { - try { - const user = JSON.parse(localStorage.getItem("user")); - const userId = user?.id; - - if (!userId) return; - - const res = await axios.get(`/api/attendance/user`, { - params: { userId }, - }); - - const rawData = res.data.data; - const weekly = processWeeklyAttendance(rawData); - setAttendanceData(weekly); - } catch (error) { - console.error("출석 정보 가져오기 실패:", error); + const fetchAttendance = async () => { + try { + const user = JSON.parse(localStorage.getItem("user")); + const userId = user?.id; + if (!userId) return; + + // 유저 전체 출석 데이터 불러오기 + const res = await axios.get(`/api/attendance/user`, { + params: { userId }, + }); + const rawData = res.data.data; + const weekly = processWeeklyAttendance(rawData); + setAttendanceData(weekly); + } catch (error) { + console.error("출석 정보 가져오기 실패:", error); + } + }; + + // 세션별 출석체크(총 3번) 진행 정보 불러오기 + const fetchTodayAttendance = async () => { + try { + const user = JSON.parse(localStorage.getItem("user")); + const userId = user?.id; + if (!userId) return; + + const today = new Date().toISOString().split("T")[0]; // YYYY-MM-DD + const res = await axios.get(`/api/attendance/user/date`, { + params: { userId, date: today }, + }); + + const slots = res.data.data?.[0]?.slots || []; + + const statuses = slots.map((slot) => { + if (slot.status === true) return "success"; + else return "fail"; + }); + + // 출석체크 진행안된 것 처리 + while (statuses.length < 3) { + statuses.push("not_started"); } - }; + + setTodayStatuses(statuses); + } catch (error) { + console.error("오늘 출석 정보 가져오기 실패:", error); + } + }; + + useEffect(() => { fetchAttendance(); + fetchTodayAttendance(); }, []); const handleChange = (index, value) => { @@ -100,7 +148,7 @@ const Attendance = () => { const userId = user?.id; if (!userId) return; - // 출석체크 서버에 반영 + // 유저가 입력한 출석 코드 서버에 전달(서버에서 출석코드 체크) const res = await axios.post("/api/attendance/mark", { userId, code: attendanceCode[0], @@ -109,6 +157,7 @@ const Attendance = () => { if (res.data.success) { alert("출석이 성공적으로 처리되었습니다!"); fetchAttendance(); // 서버 출석체크 전달 후 UI 반영 + fetchTodayAttendance(); // 세션별 상단 이미지 UI 반영 } else { alert(res.data.message); } @@ -137,15 +186,11 @@ const Attendance = () => { )}
-
- -
-
- -
-
- -
+ {todayStatuses.map((status, idx) => ( +
+ {`attendance-${idx}`} +
+ ))}
{attendanceData.map(({ week, classes }) => (