Skip to content

feat: 유저 추가 정보(Additional Info) 관리 기능 - #29

Merged
filename24 merged 1 commit into
stablefrom
feat/user-additional-info
Jun 9, 2026
Merged

filename24 merged 1 commit into
stablefrom
feat/user-additional-info

Conversation

@filename24

@filename24 filename24 commented Jun 9, 2026 •

Copy link
Copy Markdown
Owner

개요

어드민이 ESIS 동기화와 무관한 임의의 추가 정보(예: 수능 수험번호)를 학생에게 수동으로 부여하고, 학생은 본인 프로필에서 읽기 전용으로 확인할 수 있는 기능입니다.

데이터 모델

  • UserInfo 모델 추가 (id, userId, name, data, timestamps)
  • User.id FK + onDelete: Cascade, @@unique([userId, name]) (동일 항목 재입력 시 upsert 갱신)
  • 마이그레이션 20260609150257_add_user_info — 새 테이블만 생성(기존 데이터 손실 없음)

백엔드 (admin/users/info/actions.ts)

  • 모든 서버 액션에 assertAdmin() 가드 + Zod 검증 + Sentry 보고
  • previewBulkUserInfo: 엑셀 붙여넣기(탭/쉼표) 파싱 → 이름→유저 매칭(matched/ambiguous/not_found)
  • commitBulkUserInfo: 트랜잭션 upsert
  • loadAllUserInfo / listFieldNames / deleteUserInfoBulk / updateUserInfoById / searchUsersByName / listUserInfo / upsertUserInfo / deleteUserInfo

프론트엔드

새 사이드바 /admin/users/info (탭 3개):

  • Багцаар оруулах: 항목명 + 엑셀 붙여넣기 → 미리보기 매칭(동명이인 선택) → 일괄 저장
  • Сурагчаар удирдах: 학생 검색 → 추가/인라인 수정/삭제
  • Бүх жагсаалт: 전체 목록(항목 필터 + 학생 검색 + 정렬 + 페이지네이션), 페이지 너머 전체 선택 후 일괄 삭제, CSV 내보내기

추가 연동:

  • /admin/users 각 유저 행에 추가 정보 관리 Sheet(📋) 버튼
  • 학생 /profile에 추가 정보 카드(읽기 전용)

기존 패턴 일치

  • 일괄 삭제 UX: grade/edit의 전체 로드 + TanStack Table + "필터 전체 선택" 패턴을 따름 (ConfirmActionDialog 재사용)
  • 이름 정렬: givenNameSort(@/utils/name)로 기존 UserTable/grade/edit과 동일하게 이름 기준 정렬

테스트 계획

  • ADMIN → /admin/users/info 접근 / 비-ADMIN → /dash 리다이렉트
  • 엑셀 붙여넣기 매칭(동명이인 선택 포함) → 저장 → 재입력 시 upsert 갱신
  • 전체 목록에서 "전체 선택" → 페이지 너머 일괄 삭제
  • CSV 내보내기(엑셀에서 키릴/한글 정상 표시)
  • 학생 /profile 노출 확인

lint · tsc · build 통과 확인 완료.

@vercel

vercel Bot commented Jun 9, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
grade-transcipt Building Building Preview, Comment Jun 9, 2026 3:35pm

@ecc-tools

ecc-tools Bot commented Jun 9, 2026

Copy link
Copy Markdown

Analyzing 200 commits...

@ecc-tools

ecc-tools Bot commented Jun 9, 2026

Copy link
Copy Markdown

Analysis Complete

Generated ECC bundle from 1 commits | Confidence: 55%

View Pull Request #30

Repository Profile
Attribute Value
Language TypeScript
Framework Not detected
Commit Convention conventional
Test Directory separate
Changed Files (16)
Metric Value
Files changed 16
Additions 1665
Deletions 5

Top hotspots

Path Status +/-
apps/web/src/app/(sidebar)/admin/users/info/_Components/AllInfoList.tsx added +397 / -0
apps/web/src/app/(sidebar)/admin/users/info/actions.ts added +343 / -0
apps/web/src/app/(sidebar)/admin/users/info/_Components/UserInfoEditor.tsx added +280 / -0
apps/web/src/app/(sidebar)/admin/users/info/_Components/BulkInfoEditor.tsx added +225 / -0
apps/web/src/app/(sidebar)/admin/users/info/_Components/StudentInfoManager.tsx added +85 / -0

Top directories

Directory Files Total changes
apps/web/src/app/(sidebar)/admin/users/info/_Components 5 1015
apps/web/src/app/(sidebar)/admin/users/info 3 425
apps/web/src/app/(sidebar)/admin/users/_Components 2 64
apps/web/src/schemas 1 62
apps/web/src/app/(dashboard)/profile/_Components 1 37
Analysis Depth Readiness (commit-history, 7%)

ECC Tools uses this to decide whether recommendations should stay at commit-history/setup guidance or expand into CI, security, harness, reference-set, AI-routing, and team backlog work.

Area Status Evidence / Next Step
Commit history Partial 1 commits sampled
CI/CD signals Missing Add workflow files or CI troubleshooting evidence so ECC Tools can reason about pipeline setup.
Security evidence Missing Add AgentShield, audit, SARIF, SBOM, or security review evidence so recommendations can cover security posture.
Harness configuration Missing Add Claude, Codex, OpenCode, Zed, dmux, MCP, plugin, or cross-harness config evidence for harness-agnostic recommendations.
Reference/eval evidence Missing Add fixtures, golden traces, reference sets, or evaluator benchmarks so deeper recommendations have regression evidence.
AI routing and cost controls Missing Add model-routing, budget, usage, or cost-control files before relying on AI-heavy automation recommendations.
Team handoff and project tracking Missing Add roadmap, runbook, project, Linear, or follow-up tracking docs so generated work can land in a team queue.
Reference Set Readiness (0/7, 0%)
Area Status Evidence / Next Step
Deep analyzer corpus Missing Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions.
RAG/evaluator comparison Missing Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior.
PR salvage/review corpus Missing Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation.
Discussion triage corpus Missing Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications.
Harness compatibility Missing Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces.
Security evidence Missing Attach security evidence such as SBOMs, SARIF, audit reports, or AgentShield evidence packs.
CI failure-mode evidence Missing Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes.
Likely Future Issues (3)
Severity Signal Why it may show up
HIGH Regression coverage may lag behind the diff 12 generic code paths changed; 0 test files changed
HIGH Data-layer changes may ship without integration coverage 2 data-layer paths changed; 0 integration or e2e tests changed
MEDIUM User-facing UI changes may ship without browser coverage 2 user-facing UI paths changed; 0 browser or e2e coverage files changed
  • Regression coverage may lag behind the diff: The PR changes multiple code paths but does not touch any obvious test files.
  • Data-layer changes may ship without integration coverage: The PR changes repository, query, or database-access files without touching any obvious integration or end-to-end tests.
  • User-facing UI changes may ship without browser coverage: The PR changes components, pages, or other user-facing UI files without touching any obvious browser or end-to-end coverage.
Suggested Follow-up Work (3)
Type Suggested title Targets
PR test: add regression coverage for apps/web/src/app/(dashboard)/profile/_Components/additionalInfo.tsx + apps/web/src/app/(dashboard)/profile/page.tsx apps/web/src/app/(dashboard)/profile/_Components/additionalInfo.tsx, apps/web/src/app/(dashboard)/profile/page.tsx
PR test: add data integration coverage for packages/database/prisma/migrations/20260609150257_add_user_info/migration.sql + packages/database/prisma/schema.prisma packages/database/prisma/migrations/20260609150257_add_user_info/migration.sql, packages/database/prisma/schema.prisma
PR test: add browser coverage for apps/web/src/app/(dashboard)/profile/page.tsx + apps/web/src/app/(sidebar)/admin/users/info/page.tsx apps/web/src/app/(dashboard)/profile/page.tsx, apps/web/src/app/(sidebar)/admin/users/info/page.tsx
  • test: add regression coverage for apps/web/src/app/(dashboard)/profile/_Components/additionalInfo.tsx + apps/web/src/app/(dashboard)/profile/page.tsx: Backfill regression coverage before another change set lands on the touched code paths.
  • test: add data integration coverage for packages/database/prisma/migrations/20260609150257_add_user_info/migration.sql + packages/database/prisma/schema.prisma: Backfill integration coverage before another data-layer change lands on the touched surface.
  • test: add browser coverage for apps/web/src/app/(dashboard)/profile/page.tsx + apps/web/src/app/(sidebar)/admin/users/info/page.tsx: Backfill browser coverage before another user-facing UI change lands on the touched surface.

Copy-ready bodies

test: add regression coverage for apps/web/src/app/(dashboard)/profile/_Components/additionalInfo.tsx + apps/web/src/app/(dashboard)/profile/page.tsx

## Summary
- Add regression coverage for the recently touched code paths before more changes stack on top.

## Why
- Backfill regression coverage before another change set lands on the touched code paths.

## Touched paths
- `apps/web/src/app/(dashboard)/profile/_Components/additionalInfo.tsx`
- `apps/web/src/app/(dashboard)/profile/page.tsx`

## Validation
- Add or extend focused tests that exercise the touched paths.
- Run the affected test suite and verify the new coverage closes the gap.

test: add data integration coverage for packages/database/prisma/migrations/20260609150257_add_user_info/migration.sql + packages/database/prisma/schema.prisma

## Summary
- Add integration coverage for the recently changed repository, query, or database-access surface.

## Why
- Backfill integration coverage before another data-layer change lands on the touched surface.

## Touched paths
- `packages/database/prisma/migrations/20260609150257_add_user_info/migration.sql`
- `packages/database/prisma/schema.prisma`

## Validation
- Add or extend integration coverage for the changed repository, query, or database-access path.
- Exercise realistic read/write flows or equivalent persistence boundary cases.

test: add browser coverage for apps/web/src/app/(dashboard)/profile/page.tsx + apps/web/src/app/(sidebar)/admin/users/info/page.tsx

## Summary
- Add browser or end-to-end coverage for the recently changed user-facing surface.

## Why
- Backfill browser coverage before another user-facing UI change lands on the touched surface.

## Touched paths
- `apps/web/src/app/(dashboard)/profile/page.tsx`
- `apps/web/src/app/(sidebar)/admin/users/info/page.tsx`

## Validation
- Add or extend browser / e2e coverage for the changed component, page, or flow.
- Exercise the visible user journey that depends on the touched UI surface.
Generated Instincts (16)
Domain Count
git 3
code-style 10
testing 2
architecture 1

After merging, import with:

/instinct-import .claude/homunculus/instincts/inherited/grade-transcript-instincts.yaml

Files

  • .claude/ecc-tools.json
  • .claude/skills/grade-transcript/SKILL.md
  • .agents/skills/grade-transcript/SKILL.md
  • .agents/skills/grade-transcript/agents/openai.yaml
  • .claude/identity.json
  • .codex/config.toml
  • .codex/AGENTS.md
  • .codex/agents/explorer.toml
  • .codex/agents/reviewer.toml
  • .codex/agents/docs-researcher.toml
  • .claude/homunculus/instincts/inherited/grade-transcript-instincts.yaml

ECC Tools | Everything Claude Code

@filename24
filename24 merged commit 10e0f76 into stable Jun 9, 2026
8 of 10 checks passed
@filename24
filename24 deleted the feat/user-additional-info branch September 12, 2026 11:47

This branch was successfully deployed

1 active deployment
Preview — 747092fb Deployed Jun 9, 2026 by vercel[bot]
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.

1 participant