Skip to content

Conversation

@silberbullet
Copy link

관련 이슈 번호

Resolves #60

핵심 변경 사항 및 이유

  • kanban_task 작성

    • getKanbanTaskTree: 메인 태스크와 자식 태스크를 트리 구조로 반환합니다.
    • getMainTasks: parent_task_id가 null인 메인 태스크만 조건부로 조회합니다.
    • getSubTasks: 특정 parent_task_id를 가진 서브 태스크 목록을 조회합니다.
    • createKanbanTask: 새로운 태스크를 생성합니다.
    • updateKanbanTask: 특정 태스크를 수정합니다.
    • deleteKanbanTask: 특정 태스크를 삭제합니다.
  • github_repo 작성

    • getGithubRepos: 전체 GitHub 레포 목록을 조회합니다.
    • getGithubReposByTeam: 특정 팀(team_id)의 GitHub 레포 목록을 조회합니다.
  • github_isuue_template 작성

    • getGithubIssueTemplates: 특정 GitHub 레포에 연결된 이슈 템플릿 목록을 조회합니다.
  • 각 테이블을 객체 지향으로 관리하기 위한 types를 추가하였습니다.

image

이외 기타 변경 사항 (선택)

  • 없습니다.

PR 시 참고 사항 (선택)

  • 없습니다

@silberbullet silberbullet self-assigned this Aug 6, 2025
@silberbullet silberbullet added the type: feature 새로운 기능 & 기능적 개선 label Aug 6, 2025
@silberbullet silberbullet changed the base branch from main to develop August 6, 2025 15:24
Copy link

@mike2ox mike2ox left a comment

Choose a reason for hiding this comment

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

현재 제 코드와 합쳐서 실행을 해보진 않았고 코드 리뷰로 궁금한 점만 남겼습니다!
실제 제 코드에 연결해서 테스트하는건 토요일 저녁부터 해보도록 하겠습니다.

repo_id: number;
repo_name: string;
repo_url: string;
installation_id: number;
Copy link

Choose a reason for hiding this comment

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

이게 github app용 id인거 같은데 해당 id는 어디에서 가져올 수 있는지 궁금합니다

Copy link
Author

Choose a reason for hiding this comment

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

installation_id: number 를 말씀하시는 것 같습니다.

installation_id는 GitHub App이 Organizatio 설치될 때 부여되는 고유 ID입니다.
GitHub App 설정 화면의 Install App 메뉴에서 설치된 항목을 클릭 후 확인 가능합니다.

해당 id에 대한 필요성은 현재 작업하면서 제거 가능성이 있는 컬럼 입니다.

name: string;
title: string;
body: string;
raw: string;
Copy link

Choose a reason for hiding this comment

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

github api 둘 다 확인해도 raw라는 필드는 안보이는데 해당 값은 어떤 곳에 사용되는걸까요?

Copy link
Author

Choose a reason for hiding this comment

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

넵 해당 raw 컬럼은 불필요한 컬럼 입니다. 문서와 AI를 쓰면서 잘못 들어간 부분 입니다. 해당 컬럼은 삭제하고 (수퍼베이스에도 동일하게) 반영하겠습니다!

// import { useAuthStore } from '@/stores/authStore';

// const isGuest: boolean = useAuthStore.getState().isGuest;
const isGuest = false;
Copy link

Choose a reason for hiding this comment

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

확인했습니다.

silberbullet and others added 4 commits August 9, 2025 18:19
✨ 주요 기능
- 하드코딩된 프로젝트/팀 목록을 Supabase 기반 동적 관리로 전환
- ID/Name 매핑 시스템으로 표시(이름)와 저장(ID) 분리
- 프로젝트별 독립적인 accordion 토글 기능
- GitHub 저장소 연동 및 동적 사용자 관리
- task_priority와 state label 간 양방향 매핑

🔧 데이터 매핑 및 변환
- mapProjectIdToName/mapTeamIdToName: ID→이름 변환으로 UI 표시 개선
- taskPriorityIdToStateKey/stateKeyToTaskPriorityId: 서버(1-5) ↔ 클라이언트(hold-veryhigh) 매핑
- 필터 없음 상태에서도 모든 프로젝트/팀 레이아웃 생성

🗃️ 새로운 Store 시스템
- issueStore: Supabase 연동 이슈 관리 및 매핑 함수
- userStore: nettee_user 테이블 기반 동적 사용자 관리
- filterStore: ID 기반 필터링으로 성능 최적화

🎨 UI/UX 개선
- KanbanModal: 다중 선택 담당자/라벨, GitHub 저장소 선택
- 프로젝트별 고유 토글로 독립적인 확장/축소
- 실제 Supabase 데이터 기반 칸반 레이아웃 렌더링

🐛 버그 수정
- fetchProjectList ID 중복 문제 해결 (spread operator 사용)
- 프로젝트명 대신 실제 Supabase ID를 accordion 키로 사용
- 라벨 매핑 불일치 문제 해결

🚀 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <[email protected]>
Copy link

@mike2ox mike2ox left a comment

Choose a reason for hiding this comment

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

올려주신지 일주일이 되어서야 제대로 연동 작업을 진행해보았네요 😭
아래 내역들 중 체크표시는 정상적으로 가져오는게 아마 다른 부분들도 제대로 올거 같네요 ㅎㅎ
작업 해주셔서 감사합니다!

연동작업하면서 논의가 필요할 거 같은 부분은 코멘트로 남겼습니다. 아마 이번에 남긴 코멘트는 디자이너 분들과 논의를 해야할 거 같습니다.

확인 내역

  • getKanbanTaskTree: 메인 태스크와 자식 태스크를 트리 구조로 반환합니다.

  • getMainTasks: parent_task_id가 null인 메인 태스크만 조건부로 조회합니다.

  • getSubTasks: 특정 parent_task_id를 가진 서브 태스크 목록을 조회합니다.

  • createKanbanTask: 새로운 태스크를 생성합니다.

  • updateKanbanTask: 특정 태스크를 수정합니다.

  • deleteKanbanTask: 특정 태스크를 삭제합니다.

  • getGithubRepos: 전체 GitHub 레포 목록을 조회합니다.

  • getGithubReposByTeam: 특정 팀(team_id)의 GitHub 레포 목록을 조회합니다.

  • getGithubIssueTemplates

ended_at: string | null;
template_id: string | null;
repo_url: string | null;
kaban_user_id: string | null;
Copy link

Choose a reason for hiding this comment

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

현재 피그마상에서 하나의 task에 여러 담당자를 할당할 수 있는데, 현재 kaban_user_id는 단일로만 저장되는 문제가 있습니다

template_id: string | null;
repo_url: string | null;
kaban_user_id: string | null;
task_priority_id: number | null;
Copy link

@mike2ox mike2ox Aug 17, 2025

Choose a reason for hiding this comment

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

MVP로는 태스크에 단일 + 우선순위 만 설정하도록 하고 이후에 다중 + 우선순위 + 우선순위 외로 확장하거나 별도 테이블을 만드는 걸 염두하면 좋을거 같습니다.

mike2ox added 16 commits August 17, 2025 16:12
- 시작일/종료일 개별 선택 기능 추가
- 날짜 범위 유효성 검사 및 시각적 경고 표시
- yyyy.mm.dd 포맷 유틸리티 함수 추가
- 한국 시간대 기반 날짜 처리 개선
- KanbanCard 디자인 개선 (아이콘 시스템 적용, 날짜 표시 형식 변경)
- 빈 컬럼 상태 UI 추가
- 프로젝트/팀 헤더 스타일 개선
- 칸반 컬럼 헤더 디자인 업데이트
- 사이드바 텍스트 크기 통일 (text-xl → text-base, text-2xl → text-sm)
- 글로벌 CSS 폰트 크기 정규화 (font-size: 16px)
- 공통 UI 컴포넌트 (button, icon) 스타일 개선
- CLAUDE.md 프로젝트 문서 추가
- Edge Functions 구조 설계 및 주석 추가
- useKanbanData 훅 로직 개선
- 타입 정의 및 상수 업데이트
- .md 파일만 템플릿으로 허용하도록 필터링
- frontmatter 파싱하여 메타정보와 본문 분리
- 템플릿 선택 시 메타정보의 title을 제목에 자동 적용
- 본문 내용만 상세 내용 에디터에 반영
- 기존 작성 내용 있을 시 사용자 확인 후 덮어쓰기
- controlled component 방식으로 제목 입력 관리
- 빈 공간 클릭 시 최하단으로 이동하는 기본 동작 방지
- 실제 콘텐츠 영역 클릭 시에만 커서 이동 허용
- 사용자 경험 향상을 위한 클릭 이벤트 제어 추가
- ESLint 자동 수정으로 import 정렬 및 코드 스타일 통일
- Prettier를 통한 일관된 코드 포맷팅 적용
- 전체 컴포넌트 및 훅 파일들의 스타일 개선
- 태스크 모달 열 때 기존 연동된 저장소가 있으면 GitHub 저장소 목록 자동 로드
- 저장소 목록 로드 후 해당 저장소의 템플릿도 자동 로드
- 사용자가 수동으로 GitHub 연동 체크박스를 클릭할 필요 없이 바로 이용 가능
- ESLint 자동 수정으로 import 순서 정리
- Prettier 적용으로 일관된 코드 스타일 유지
- Sidebar 필터 컴포넌트 및 StateLabel, Editor 컴포넌트 포맷팅 개선
- netteeRepo 상수와 getRepo 함수 제거로 불필요한 의존성 정리
- GitHub 연동 시에만 selectedRepoUrl 사용하도록 단순화
- 코드 가독성 향상 및 유지보수성 개선
mike2ox and others added 16 commits September 14, 2025 17:37
- getAllTasks API 추가하여 메인/서브태스크 모두 조회
- issueStore에 kanbanTasks 원본 데이터 관리 구조 추가
- 원본 데이터와 UI 데이터 자동 동기화 기능 구현
- KanbanCard에 서브태스크 목록 표시 및 드롭 지원
- 드래그 앤 드롭으로 태스크를 다른 태스크 위에 드롭 시 서브태스크 변환
- 메인 컬럼에서 서브태스크 필터링하여 중복 표시 방지
- parent_task_id 기반 계층 관계 관리

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <[email protected]>
Creates detailed documentation for the kanban card improvement feature including:

- Implementation plan with phase-by-phase breakdown
- Project architecture and technical stack analysis
- Task progress tracking template

Provides structured guidance for implementing new features:
- Card assignee/label display
- Pin/unpin functionality
- Column dividers
- Sidebar filtering

Documentation will help maintain development focus and ensure consistent implementation across features.
…unsaved changes protection

- Add checkbox-based GitHub repository selection with visual feedback
- Implement comprehensive unsaved changes detection across all form fields
- Add warning modal with three action options when closing with unsaved changes
- Fix GitHub dropdown layout reflow issue with conditional overflow control
- Enhance modal close handlers to prevent accidental data loss
- Replace icon-based selection with intuitive checkbox interface for better UX

Technical improvements:
- Dynamic overflow control prevents layout shifts during dropdown interactions
- Comprehensive state comparison for reliable change detection
- Form submission integration for save-and-close workflow
…vements

- Document GitHub dropdown layout fix process and technical decisions
- Add comprehensive problem analysis and solution approach
- Update project features list with new KanbanModal capabilities
- Record progress with detailed implementation steps and rollback process
- Maintain development history for future reference and troubleshooting
- Fix false positive in hasUnsavedChanges() function by simplifying markdown comparison
- Simplify warning modal from 3 buttons to 2 clear options (Yes/No)
- Optimize change detection logic with early returns for better performance
- Improve user experience with intuitive modal close behavior:
  • "Yes" or outside click: exit without saving
  • "No": return to modal for manual save
- Remove complex conditional logic that caused incorrect change detection
- Update documentation with refined implementation details

Technical improvements:
- Streamlined markdown !== initialState.body comparison
- Better code formatting and readability
- Enhanced user workflow clarity
- Add minimum width constraints to prevent layout collapse
  • KanbanCard: min-w-[256px] for consistent card sizing
  • KanbanColumn: min-w-[292px] with shrink-0 to maintain column width
- Enhance card layout with justify-between for better element distribution
- Remove flex-wrap from TeamBoard to keep columns in single row
- Simplify datetime format by removing timezone suffix (+09:00)
- Apply consistent code formatting (prettier/eslint rules)
- Optimize column overflow behavior for better scrolling experience

Technical improvements:
- Better responsive design for narrow viewports
- Improved visual consistency across kanban components
- Cleaner date string format for internal operations
- Add pin/unpin icon click functionality in KanbanCard component
- Implement togglePin function in issueStore for state management
- Add pin/unpin area separation in KanbanColumn with proper rendering
- Pin된 카드를 컬럼 상단에 배치하고 일반 카드와 구분선으로 분리
- Update Divider component styling for pin area separation
- Improve type safety by replacing 'any' types with proper interfaces
- Maintain drag-and-drop compatibility with existing functionality

Pin된 카드들이 updated_at 기준으로 정렬되어 상단에 표시되고,
일반 카드들과 Divider로 구분되어 사용성이 향상됨.
- Reorder Tailwind CSS classes as per prettier-plugin-tailwindcss
- Move caret-primary-12 class to beginning for consistent ordering
- Add showPinnedOnly and showGithubOnly states to FilterStore
- Implement togglePinnedFilter and toggleGithubFilter actions
- Update ViewOptions component with interactive filter buttons
- Integrate pin/github filtering logic in useKanbanData hook
- Add proper button state management with variant switching
- Update resetAllFilters to include new filter states

사이드바에서 Pin/GitHub 필터 버튼 클릭으로 칸반 카드를 필터링할 수 있음:
- Pin 필터: Pin된 카드만 표시
- GitHub 필터: GitHub 연동된 카드만 표시
기존 프로젝트/팀/담당자 필터와 조합하여 동작
- Fix query builder formatting in getAllTasks function
- Apply ESLint auto-formatting rules
- Update task-progress.md with completed sidebar filter implementation
- Add detailed technical implementation documentation
- Update progress from 80% to 90% completion
- Update test checklist with completed sidebar filter tests
- Update project-analysis.md with new filtering capabilities
- Add commit information and recent changes tracking

문서에 새로운 Pin/GitHub 필터 기능 상세 내용 추가
- Add detachSubTask API function for separating subtasks from parents
- Enhance validateTaskMove with detailed error messages and errorType
- Update issueStore with detachSubTaskFromParent action
- Improve handleDropOnCard with validation and alert notifications
- Support subtask separation when dragging from card to column
- Add isSubTask detection in drag-and-drop handlers

Features:
- Subtasks can be dragged to columns to detach from parent
- Enhanced validation prevents tasks with subtasks from becoming subtasks
- User-friendly alert messages for validation failures
- Maintains data consistency between frontend and backend
- Separate drag areas: main card header vs individual subtasks
- Add dragType discrimination ('MAIN_CARD' | 'SUB_TASK')
- Implement branching logic based on drag source and drop target
- Enhanced visual feedback during drag operations

Key Features:
- Main card drag: Status change or subtask creation
- Subtask drag: Independence promotion or parent change
- Improved UX with visual feedback and tooltips
- Maintains backward compatibility with existing functionality

Technical Implementation:
- Remove draggable from entire card, add to specific areas
- Extend drag data structure with dragType and parentId
- Enhanced handleDragEnd with conditional processing
- Added hover effects and drag state indicators
- Fix kanbanTasks array not updating when detaching subtasks
- Enhance detachSubTaskFromParent to handle both data sync and status change
- Prevent data conflicts by separating subtask vs main card processing
- Ensure subtask list updates in real-time when items are detached

Technical Changes:
- Update both issues and kanbanTasks arrays in detachSubTaskFromParent
- Add optional newProgress parameter for immediate status changes
- Separate processing paths for SUB_TASK vs MAIN_CARD drag types
- Eliminate redundant reorderIssues calls for subtask operations

Fixes:
- Subtasks now disappear from parent card immediately upon detachment
- No more data inconsistencies between frontend arrays
- Cleaner separation of concerns in drag-and-drop logic
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

type: feature 새로운 기능 & 기능적 개선

Projects

None yet

Development

Successfully merging this pull request may close these issues.

✨메인 태스크 및 깃허브, 레포지토리 테이블 CRUD 수퍼베이스 작성

2 participants