Skip to content

피드백 반영 및 task, 팀생성 기능 구현 - #15

Open
coding-quokka101 wants to merge 3 commits into
mainfrom
yk2
Open

피드백 반영 및 task, 팀생성 기능 구현#15
coding-quokka101 wants to merge 3 commits into
mainfrom
yk2

Conversation

@coding-quokka101

Copy link
Copy Markdown
Contributor

feat: Integrate JWT authentication with team-based task management
🔧 Changes

tasks.ts, task-comments.ts: apiRequest 사용으로 JWT 토큰 자동 전송 및 갱신 TasksPage.tsx: JWT에서 teamId 추출하여 팀별 Task 분리 표시
TaskComments.tsx (신규): 작성자 프로필 아바타 및 이름 표시
TaskDetailModal.tsx, TasksPage.tsx: 작성자 본인만 Edit/Delete 버튼 표시 (currentUserId === creatorId) 팀 미선택 시 안내 화면 추가
댓글 수정 모드 UI 구현
API 파일 분리 (tasks.ts, task-comments.ts)
Task 컴포넌트 분리 (TaskComments 독립)

Dependencies: 백엔드 PR 1, 2 머지 후 배포 필요
Labels: frontend enhancement ui-improvement

feat: Integrate JWT authentication with team-based task management
🔧 Changes

tasks.ts, task-comments.ts: apiRequest 사용으로 JWT 토큰 자동 전송 및 갱신
TasksPage.tsx: JWT에서 teamId 추출하여 팀별 Task 분리 표시
TaskComments.tsx (신규): 작성자 프로필 아바타 및 이름 표시
TaskDetailModal.tsx, TasksPage.tsx: 작성자 본인만 Edit/Delete 버튼 표시 (currentUserId === creatorId)
팀 미선택 시 안내 화면 추가
댓글 수정 모드 UI 구현
API 파일 분리 (tasks.ts, task-comments.ts)
Task 컴포넌트 분리 (TaskComments 독립)

Dependencies: 백엔드 PR 1, 2 머지 후 배포 필요
Labels: frontend enhancement ui-improvement
Comment thread src/lib/api/teams.ts Outdated
}

// 사용자가 속한 팀 목록 조회
export async function getUserTeams(): Promise<UserTeamsResponse> {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

/lib/api/auth.ts에 선언되어있습니다.

export const getTeams = async (): Promise<AuthTeamList> =>
  apiRequest<AuthTeamList>("/api/user/team");

response error 처리는 throw new Error 등으로 처리하지 말고 공통 api 처리 wrapper인 apiRequest로 감싸서 선언하면 Response에 에러메세지가 toast UI에 표시됩니다.

## 작업 내용

### 1. 팀 생성 기능 구현

* 팀 생성 API 구현 (`POST /api/team`)
* `Team`, `TeamResponse` 기반 팀 생성 로직 추가
* `TeamController`, `TeamService`, `TeamServiceImpl` 구성
* 팀 목록 조회 API와 연동되는 기본 팀 데이터 저장 구조 완성

### 2. Task 수정 UX 개선

* Task 수정 모드(`isEditing === true`)일 때 **댓글 영역 숨김 처리**
* Task 상세 조회 시 읽기 모드에서만 댓글 표시되도록 UI 분기

### 3. Task 댓글 기능 개선

* 댓글 작성자 프로필 표시 (이니셜 아바타)
* 댓글 작성자 이름을 **팀 멤버 정보(member)** 기반으로 표시
* 로그인 사용자(memberId)와 댓글 작성자 비교하여

  * 본인 댓글에만 수정 / 삭제 버튼 노출

### 4. 로그인 연동 (JWT 기반)

Task 페이지를 JWT 기반 인증 방식으로 변경하여 게시판과 동일한 패턴으로 통일했습니다.
* JWT 토큰 기반 로그인 사용자 정보 조회 (`getMe`)
* userId가 아닌 **memberId 기준**으로 권한 및 작성자 판단
* Task, Comment, Creator 판단 로직을 팀 멤버 기준으로 통일

### 5. 팀 멤버 기반 권한 관리 구조 정비

* Task 생성자 / 댓글 작성자 판단 시 `memberId` 사용
* 팀 멤버 목록(`members`)을 기준으로:

  * 댓글 작성자 이름 매핑
  * 담당자(assignee) 표시
* 추후 팀 권한 관리 확장을 고려한 구조 정리

---

## 상세 내용

### 팀 생성

* 팀 이름, 설명을 받아 `Team` 엔티티 생성 및 저장
* 생성 시 `uuid`, `createdAt` 자동 세팅
* 팀 생성 완료 후 `TeamResponse` 반환

### Task / Comment UI & 권한

* Task 수정 중에는 댓글이 노출되지 않도록 처리하여 UX 개선
* 댓글 영역에서:

  * 작성자 프로필 이니셜 표시
  * 작성자 이름을 팀 멤버 기준으로 출력
* 로그인 사용자(memberId)와 댓글 creatorId 비교하여

  * 본인 댓글만 수정 / 삭제 가능

---

## 테스트

### 팀 관련

* `POST /api/team` 요청으로 팀 정상 생성 확인
* 팀 생성 후 팀 목록 조회 API에서 생성된 팀 확인

### Task / Comment

* Task 수정 시 댓글 영역 미노출 확인
* Task 조회 모드에서 댓글 정상 표시 확인
* 댓글 작성 / 수정 / 삭제 정상 동작 확인
* 로그인 사용자에 따라 댓글 수정·삭제 버튼 노출 여부 확인

---

## 참고

* 추후 팀 생성 시 **팀 생성자 멤버 초대** 추가 구현 해야함

---

## Frontend

tasks/page.tsx

teamId, currentUserId state 제거
teamUuid 기반으로 팀 선택 여부만 체크
getTeamMembers API를 @/lib/api/member에서 import하여 페이징 처리
Modal에서 teamId prop 제거

TaskCreateModal.tsx

teamId prop 제거
getTeamMembers import 경로 변경 (teams.ts → member.ts)
페이징 응답 처리 (membersData.content)

TaskDetailModal.tsx

getTeamMembers import 경로 변경 (teams.ts → member.ts)
페이징 응답 처리 및 필드명 변경 (memberId → id)

teams.ts

중복된 getTeamMembers 함수 제거 (member.ts에 이미 존재)
Member 인터페이스 제거
@coding-quokka101 coding-quokka101 changed the title Integrate JWT authentication with team-based task management 피드백 반영 및 task, 팀생성 기능 구현 Jan 6, 2026
- isComposing 체크를 추가
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants