From 826442b399d10620a49a3359c859b029203b2792 Mon Sep 17 00:00:00 2001 From: Imggaggu Date: Fri, 23 May 2025 17:22:40 +0900 Subject: [PATCH] =?UTF-8?q?[Fix]=20admin=20assignment=20api=20=EC=97=B0?= =?UTF-8?q?=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/api/adminattendance.js | 58 ++++++++++++++++++- .../components/AdminDailyAttendanceCard.jsx | 19 +++--- .../pages/admin/AdminStudentAssignment.jsx | 2 +- .../admin/AdminStudentAssignment.module.css | 2 +- 4 files changed, 67 insertions(+), 14 deletions(-) diff --git a/frontend/src/api/adminattendance.js b/frontend/src/api/adminattendance.js index 4506980..684b194 100644 --- a/frontend/src/api/adminattendance.js +++ b/frontend/src/api/adminattendance.js @@ -1,7 +1,7 @@ import api from "./api"; // api/attendanceApi.js - +/* export const getStudentBasicInfo = async (studentId) => { try { const res = await api.get(`/admin/managestudent/${studentId}`); @@ -24,3 +24,59 @@ export const getStudentAttendance = async (studentId) => { throw error; } }; +*/ + + +// 학생 기본 정보 조회 +export const getStudentBasicInfo = async (studentId) => { + try { + const res = await api.get(`/admin/users/${studentId}`); + return res.data; + } catch (error) { + console.error("학생 기본 정보 불러오기 실패:", error); + throw error; + } +}; + +// 학생 출석 전체 데이터 조회 (특정 날짜와 차수 포함) +export const getStudentAttendance = async (studentId) => { + try { + const res = await api.get(`/api/attendance/${studentId}`); + return res.data; + } catch (error) { + console.error("학생 출석 정보 불러오기 실패:", error); + throw error; + } +}; + +// 특정 출석 기록 조회 +export const getAttendanceDetail = async (userId, attendanceId) => { + try { + const res = await api.get(`/api/admin/users/${userId}/attendance/${attendanceId}`); + return res.data; + } catch (error) { + console.error("출석 상세 조회 실패:", error); + throw error; + } +}; + +// 출석 상태 변경 +export const updateAttendanceStatus = async (userId, attendanceId, status) => { + try { + const res = await api.put(`/api/admin/users/${userId}/attendance/${attendanceId}/status`, { status }); + return res.data; + } catch (error) { + console.error("출석 상태 변경 실패:", error); + throw error; + } +}; + +// 출석 기록 삭제 +export const deleteAttendanceRecord = async (userId, attendanceId) => { + try { + await api.delete(`/api/admin/users/${userId}/attendance/${attendanceId}`); + } catch (error) { + console.error("출석 기록 삭제 실패:", error); + throw error; + } +}; diff --git a/frontend/src/components/AdminDailyAttendanceCard.jsx b/frontend/src/components/AdminDailyAttendanceCard.jsx index b782468..73b0b07 100644 --- a/frontend/src/components/AdminDailyAttendanceCard.jsx +++ b/frontend/src/components/AdminDailyAttendanceCard.jsx @@ -1,6 +1,7 @@ import React, { useEffect, useState } from "react"; import "./componentsCss/AdminDailyAttendanceCard.css"; import api from "../api/api"; +import { getStudentAttendance,updateAttendanceStatus } from "../api/adminattendance"; const AdminDailyAttendanceCard = ({ date, studentId, onClose }) => { const [slots, setSlots] = useState([]); @@ -22,12 +23,10 @@ const AdminDailyAttendanceCard = ({ date, studentId, onClose }) => { } */ try { - const res = await api.get("/attendance/user/date", { - params: { userId: studentId, date }, - withCredentials: true, - }); + const rawData = await getStudentAttendance(studentId); + const dayData = rawData.data.find((d) => d.date === date); + const rawSlots = dayData?.slots || []; - const rawSlots = res.data.data?.[0]?.slots || []; setSlots(rawSlots); setModified(Array(rawSlots.length).fill(false)); } catch (err) { @@ -38,9 +37,9 @@ const AdminDailyAttendanceCard = ({ date, studentId, onClose }) => { fetchSlots(); }, [date, studentId]); - const handleToggle = (idx) => { + const handleChange = (idx, newValue) => { const newSlots = [...slots]; - newSlots[idx].status = !newSlots[idx].status; + newSlots[idx].status = newValue === "SUCCESS"; setSlots(newSlots); const newModified = [...modified]; @@ -50,10 +49,8 @@ const AdminDailyAttendanceCard = ({ date, studentId, onClose }) => { const handleSave = async (idx) => { try { - const slotId = slots[idx].id; - await api.put(`/attendance/slot/${slotId}`, { - status: slots[idx].status, - }, { withCredentials: true }); + const slot = slots[idx]; + await updateAttendanceStatus(studentId, slot.id, slot.status); const newModified = [...modified]; newModified[idx] = false; diff --git a/frontend/src/pages/admin/AdminStudentAssignment.jsx b/frontend/src/pages/admin/AdminStudentAssignment.jsx index eed038b..2e48e58 100644 --- a/frontend/src/pages/admin/AdminStudentAssignment.jsx +++ b/frontend/src/pages/admin/AdminStudentAssignment.jsx @@ -10,7 +10,7 @@ import { updateAssignmentStatus, fetchStudentInfo, fetchStudentAssignments, -} from "../../api/assignmentAdmin"; +} from "../../api/adminassignemnt"; const AdminStudentAssignment = () => { const { studentId, week } = useParams(); diff --git a/frontend/src/pages/admin/AdminStudentAssignment.module.css b/frontend/src/pages/admin/AdminStudentAssignment.module.css index 04e3e68..734823f 100644 --- a/frontend/src/pages/admin/AdminStudentAssignment.module.css +++ b/frontend/src/pages/admin/AdminStudentAssignment.module.css @@ -4,7 +4,7 @@ padding: 20px; font-family: "Inter", sans-serif; color: white; - background-color: #1e1e1e; + background-color: var(--background-black); } /* 과제 개요 카드 (상단 형광 카드) */