Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion eslint.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import globals from 'globals'
import reactHooks from 'eslint-plugin-react-hooks'
import reactRefresh from 'eslint-plugin-react-refresh'
import { defineConfig, globalIgnores } from 'eslint/config'

/** 작성자: 김대호 */
export default defineConfig([
globalIgnores(['dist']),
{
Expand Down
2 changes: 1 addition & 1 deletion src/Router.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import ShareCalendar from "./pages/ShareCalendar";
import HumanResources from "./pages/HumanResources";
import PrivateRoute from "./components/common/loading/PrivateRoute";
import RoleProtectedRoute from "./components/common/loading/RoleProtectedRoute";

/** 작성자: 김대호 */
const router = createBrowserRouter([
{
path: "/login",
Expand Down
2 changes: 1 addition & 1 deletion src/api/authAPI.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import api from './client';

/** 작성자: 김대호 */
// 로그인
export const login = async (accountId, password) => {
try {
Expand Down
2 changes: 1 addition & 1 deletion src/api/chatApi.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import api from './client';

/** 작성자: 조윤상 */
// 공통 API 호출 함수
const apiCall = (method, url, data = null, params = null) => {
return api({
Expand Down
1 change: 1 addition & 0 deletions src/api/client.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
/** 작성자: 김대호 */
// import axios from 'axios';

// // axios 인스턴스 생성
Expand Down
2 changes: 1 addition & 1 deletion src/api/commentAPI.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import api from './client';

/** 작성자: 백승준 */
export const getComments = async (issueId) => {
try {
const response = await api.get(`/issues/${issueId}/comments`);
Expand Down
2 changes: 1 addition & 1 deletion src/api/dashboardAPI.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import api from './client.js';

/** 작성자: 김대호 */
/**
* 대시보드 프로젝트 리스트를 가져오는 API 함수
* @returns {Promise<Object>} 프로젝트 데이터가 포함된 응답 객체
Expand Down
2 changes: 1 addition & 1 deletion src/api/meetingAPI.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import api from './client';

/** 작성자: 김대호, 배지원 */
// 회의록 생성
export const createMeeting = async (projectId, meetingData, audioFile = null) => {
try {
Expand Down
2 changes: 1 addition & 1 deletion src/api/memberAPI.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import api from './client';

/** 작성자: 김대호 */
// 회원 목록 조회
export const getMembers = async () => {
try {
Expand Down
4 changes: 1 addition & 3 deletions src/api/projectAPI.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import api from './client';

/** 작성자: 백승준 */
export const getProjects = async (params = {}) => {
try {
const response = await api.get('/projects', { params });
Expand Down Expand Up @@ -69,7 +69,6 @@ export const deleteProject = async (projectId) => {

export const createProjectMember = async (projectId, memberId) => {
try {
// memberId를 JSON 객체로 감싸서 전송합니다.
const response = await api.post(`/projects/${projectId}/members`, memberId);
return response.data;
} catch (error) {
Expand All @@ -80,7 +79,6 @@ export const createProjectMember = async (projectId, memberId) => {

export const deleteProjectMember = async (projectId, memberId) => {
try {
// DELETE 요청 시 body는 { data: ... } 객체 안에 넣어주어야 합니다.
const response = await api.delete(`/projects/${projectId}/members`, { data: { memberId } });
return response.data;
} catch (error) {
Expand Down
2 changes: 1 addition & 1 deletion src/api/projectIssueAPI.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import api from './client';

/** 작성자: 백승준 */
// 이슈 목록 조회 (필터링, 검색 지원)
export const getProjectIssues = async (projectId, filters = {}) => {
try {
Expand Down
2 changes: 1 addition & 1 deletion src/api/socketService.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Client } from '@stomp/stompjs';
import SockJS from 'sockjs-client';

/** 작성자: 김대호, 조윤상 */
let stompClient = null;
let subscriptions = new Map();

Expand Down
2 changes: 1 addition & 1 deletion src/components/calendar/Calendar.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { useState, useCallback } from 'react'
import { Calendar as BigCalendar, dayjsLocalizer } from 'react-big-calendar'
import dayjs from 'dayjs'
import 'react-big-calendar/lib/css/react-big-calendar.css'

/** 작성자: 김대호 */
const localizer = dayjsLocalizer(dayjs)

const Calendar = ({ events, onSelectEvent, onSelectSlot }) => {
Expand Down
3 changes: 2 additions & 1 deletion src/components/calendar/CalendarFilters.jsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
const CalendarFilters = ({
/** 작성자: 김대호 */
const CalendarFilters = ({
filters,
onFilterChange,
sortBy,
Expand Down
2 changes: 1 addition & 1 deletion src/components/calendar/EventDetails.jsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import dayjs from 'dayjs'

/** 작성자: 김대호 */
const EventDetails = ({ selectedDate, events, onEventAction }) => {
const formatDate = (date) => {
return dayjs(date).format('YYYY.MM.DD')
Expand Down
2 changes: 1 addition & 1 deletion src/components/common/AISummaryPanel.jsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import React from 'react';

/** 작성자: 김대호, 배지원 */
function AISummaryPanel({
summary,
title = "AI 정리",
Expand Down
2 changes: 1 addition & 1 deletion src/components/common/AudioPlayer.jsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import React, { useState } from 'react';
import { PlayArrow, Pause } from '@mui/icons-material';

/** 작성자: 김대호 */
function AudioPlayer({ audioFile, title = "회의 녹음", createdAt }) {
const [isPlaying, setIsPlaying] = useState(false);

Expand Down
2 changes: 1 addition & 1 deletion src/components/common/BadgeComponent.jsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import React from 'react';

/** 작성자: 김대호 */
function BadgeComponent({ type, customConfig = {} }) {
const defaultTypeConfig = {
"Daily Scrum": {
Expand Down
1 change: 1 addition & 0 deletions src/components/common/ConfirmDialog.jsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
/** 작성자: 김대호 */
const ConfirmDialog = ({
isOpen,
title,
Expand Down
2 changes: 1 addition & 1 deletion src/components/common/DataTable.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import {
ArrowDownward
} from '@mui/icons-material'
import { Skeleton } from '@mui/material'

/** 작성자: 김대호 */
function DataTable({
data = [],
columns = [],
Expand Down
2 changes: 1 addition & 1 deletion src/components/common/Dropdown.jsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Menu, MenuButton, MenuItem, MenuItems } from '@headlessui/react';
import { ExpandMore } from '@mui/icons-material';

/** 작성자: 김대호 */
/**
* 재사용 가능한 Dropdown 컴포넌트
* @param {Object} props
Expand Down
2 changes: 1 addition & 1 deletion src/components/common/ErrorBoundary.jsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import React from 'react';
import { AlertTriangle, RefreshCw } from '@mui/icons-material';

/** 작성자: 김대호 */
class ErrorBoundary extends React.Component {
constructor(props) {
super(props);
Expand Down
2 changes: 1 addition & 1 deletion src/components/common/MeetingMetadata.jsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import React from 'react';

/** 작성자: 김대호 */
function MeetingMetadata({ data, className = "grid grid-cols-1 md:grid-cols-2 gap-4 text-sm" }) {
return (
<div className={className}>
Expand Down
2 changes: 1 addition & 1 deletion src/components/common/MultiSelectDropdown.jsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { useState, useCallback, useRef, useEffect } from 'react';
import { ExpandMore, Close, Check } from '@mui/icons-material';

/** 작성자: 김대호 */
/**
* 다중 선택이 가능한 Dropdown 컴포넌트
* @param {Object} props
Expand Down
2 changes: 1 addition & 1 deletion src/components/common/ParticipantList.jsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import React from 'react';
import { People } from '@mui/icons-material';

/** 작성자: 김대호 */
function ParticipantList({ participants = [], title = "참석자", gridCols = "grid-cols-2 md:grid-cols-3 lg:grid-cols-6" }) {
return (
<div className="flex items-center gap-2">
Expand Down
2 changes: 1 addition & 1 deletion src/components/common/SearchableDropdown.jsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { useState, useCallback, useRef, useEffect } from 'react';
import { ExpandMore, Search, Close } from '@mui/icons-material';

/** 작성자: 김대호 */
/**
* 검색 기능이 있는 Dropdown 컴포넌트
* @param {Object} props
Expand Down
2 changes: 1 addition & 1 deletion src/components/common/Toast.jsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { useEffect, useState } from "react";
import { CheckCircle, Error, Warning, Info, Close } from "@mui/icons-material";

/** 작성자: 김대호 */
const Toast = ({
message,
type = "success",
Expand Down
2 changes: 1 addition & 1 deletion src/components/common/chat/ChatHeader.jsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Close, Minimize, ArrowBack } from '@mui/icons-material'
import { useAuth } from '../../../hooks/useAuth'

/** 작성자: 김대호 */
const ChatHeader = ({
currentView,
selectedChat,
Expand Down
2 changes: 1 addition & 1 deletion src/components/common/chat/ChatRoom.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import useChatStore from '../../../store/chatStore';
import { sendInviteMessage } from '../../../api/socketService';
import { useDebounce } from '../../../hooks/useDebounce';
import * as chatApi from '../../../api/chatApi';

/** 작성자: 김대호, 조윤상 */
const ChatRoom = ({
selectedChat,
message,
Expand Down
2 changes: 1 addition & 1 deletion src/components/common/chat/ChatRoomList.jsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Search, Add, Group } from '@mui/icons-material';

/** 작성자: 조윤상 */
const ChatRoomList = ({
searchTerm,
onSearchChange,
Expand Down
2 changes: 1 addition & 1 deletion src/components/common/chat/ContextMenu.jsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import React, { useEffect, useRef } from 'react';

/** 작성자: 조윤상 */
const ContextMenu = ({ x, y, visible, items, onClose }) => {
const menuRef = useRef(null);

Expand Down
2 changes: 1 addition & 1 deletion src/components/common/chat/EmployeeSearch.jsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Search } from '@mui/icons-material'

/** 작성자: 김대호 */
const EmployeeSearch = ({
employeeSearchTerm,
onSearchChange,
Expand Down
2 changes: 1 addition & 1 deletion src/components/common/chat/FloatingChat.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import EmployeeSearch from './EmployeeSearch';
import ChatRoom from './ChatRoom';
import ContextMenu from './ContextMenu';
import { ExitToApp } from '@mui/icons-material';

/** 작성자: 조윤상 */
function FloatingChat() {
const { user } = useAuth();
const { setCurrentUser } = useChatStore();
Expand Down
2 changes: 1 addition & 1 deletion src/components/common/chat/FloatingChatButton.jsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Telegram } from '@mui/icons-material';

/** 작성자: 조윤상 */
const FloatingChatButton = ({ onClick, unreadCount }) => {
return (
<button
Expand Down
2 changes: 1 addition & 1 deletion src/components/common/loading/LoadingComponents.jsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Replay, Warning} from "@mui/icons-material";
import { Skeleton } from "@mui/material";

/** 작성자: 김대호 */
// 대시보드 KPI 카드용 스켈레톤
export function KPICardSkeleton({ count = 2 }) {
return (
Expand Down
2 changes: 1 addition & 1 deletion src/components/common/loading/PrivateRoute.jsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Navigate } from 'react-router-dom';
import { useAuth } from '../../../hooks/useAuth.jsx';

/** 작성자: 김대호 */
function PrivateRoute({ children }) {
const { isAuthenticated, loading } = useAuth();

Expand Down
2 changes: 1 addition & 1 deletion src/components/common/loading/RoleProtectedRoute.jsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Navigate } from 'react-router-dom';
import { useAuth } from '../../../hooks/useAuth.jsx';

/** 작성자: 김대호 */
function RoleProtectedRoute({ children, requiredRole, fallback = null }) {
const { user, isAuthenticated, loading } = useAuth();

Expand Down
2 changes: 1 addition & 1 deletion src/components/common/task/TaskActions.jsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Delete, Edit } from "@mui/icons-material";

/** 작성자: 김대호 */
function TaskActions({
isEditing,
onEdit,
Expand Down
2 changes: 1 addition & 1 deletion src/components/common/task/TaskComments.jsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import React, { useState, useContext } from 'react';
import { useGetComments, useCreateComment, useUpdateComment, useDeleteComment } from '../../../hooks/useCommentQueries';
import AuthContext from '../../../contexts/AuthContext';

/** 작성자: 김대호, 백승준 */
// 댓글 하나를 렌더링하는 재사용 가능한 컴포넌트
const Comment = ({ comment, onStartEdit, onSaveEdit, onCancelEdit, onDelete, onStartReply, editingCommentId, editContent, setEditContent, currentUser }) => {
const formatDate = (dateString) => {
Expand Down
3 changes: 2 additions & 1 deletion src/components/common/task/TaskDescription.jsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
function TaskDescription({
/** 작성자: 김대호 */
function TaskDescription({
task,
isEditing,
editData,
Expand Down
2 changes: 1 addition & 1 deletion src/components/common/task/TaskDetail.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import TaskDescription from './TaskDescription';
import TaskMetadata from './TaskMetadata';
import TaskSchedule from './TaskSchedule';
import TaskComments from './TaskComments';

/** 작성자: 김대호, 백승준 */
// 상수 분리
const PRIORITY_MAPPING = {
low: 'LOW',
Expand Down
2 changes: 1 addition & 1 deletion src/components/common/task/TaskHeader.jsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { ArrowBack, Person, Flag, Assignment, Schedule } from "@mui/icons-material";
import Dropdown from "../Dropdown";
import { membersData } from "../../../data/employees";

/** 작성자: 김대호 */
function TaskHeader({
task,
isEditing,
Expand Down
1 change: 1 addition & 0 deletions src/components/common/task/TaskMetadata.jsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
/** 작성자: 김대호 */
function TaskMetadata({ task }) {
// 메타데이터 구성
const metadataItems = [
Expand Down
3 changes: 2 additions & 1 deletion src/components/common/task/TaskSchedule.jsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
function TaskSchedule({
/** 작성자: 김대호 */
function TaskSchedule({
task,
isEditing,
editData,
Expand Down
2 changes: 1 addition & 1 deletion src/components/dashboard/ErrorList.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { useQuery } from '@tanstack/react-query';
import { fetchProjectDashboard } from '../../api/dashboardAPI';
import { Warning, Person, AccessTime } from '@mui/icons-material';
import { useNavigate } from 'react-router-dom';

/** 작성자: 김대호, 배지원 */
function ErrorList({ selectedProjectId }) {
const { data: dashboardData, isLoading, error } = useQuery({
queryKey: ['projectDashboard', selectedProjectId],
Expand Down
1 change: 1 addition & 0 deletions src/components/dashboard/KPICard.jsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
/** 작성자: 김대호 */
function KPICard({ title, value, icon, trend, trendValue, onClick }) {
return (
<div
Expand Down
2 changes: 1 addition & 1 deletion src/components/dashboard/PriorityTasks.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { useQuery } from '@tanstack/react-query';
import { fetchProjectDashboard } from '../../api/dashboardAPI';
import { useNavigate } from 'react-router-dom';
import { useState } from 'react';

/** 작성자: 김대호, 배지원 */
function PriorityTasks({ selectedProjectId }) {
const { data: dashboardData, isLoading, error } = useQuery({
queryKey: ['projectDashboard', selectedProjectId],
Expand Down
2 changes: 1 addition & 1 deletion src/components/dashboard/ProjectList.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import {
import { fetchDashboardProjects } from '../../api/dashboardAPI';
import { ProjectListSkeleton, ErrorFallback } from '../common/loading/LoadingComponents';
import useProjectStore from '../../store/projectStore';

/** 작성자: 김대호 */
// 데이터 로딩 컴포넌트 (TanStack Query 사용)
function ProjectListContent() {
const navigate = useNavigate();
Expand Down
2 changes: 1 addition & 1 deletion src/components/dashboard/ProjectProgressChart.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import React from 'react';
import { PieChart, Pie, Cell, ResponsiveContainer, Tooltip, Legend, Label } from 'recharts';
import { useQuery } from '@tanstack/react-query';
import { fetchProjectDashboard } from '../../api/dashboardAPI';

/** 작성자: 김대호, 배지원 */
function ProjectProgressChart({ selectedProjectId }) {
const { data: dashboardData, isLoading, error } = useQuery({
queryKey: ['projectDashboard', selectedProjectId],
Expand Down
2 changes: 1 addition & 1 deletion src/components/dashboard/TeamProductivityTrend.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import React from 'react';
import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer } from 'recharts';
import { useQuery } from '@tanstack/react-query';
import { fetchProjectDashboard } from '../../api/dashboardAPI';

/** 작성자: 김대호 */
function TeamProductivityTrend({ selectedProjectId, title = "인원별 이슈 진행률" }) {
const { data: dashboardData, isLoading, error } = useQuery({
queryKey: ['projectDashboard', selectedProjectId],
Expand Down
Loading