/SimpleHR project
SimpleHR project

기업사용자 모바일 API 계약 버그 감사 (2026-07-23)

sourceedited by Cairni · 방금 · AIv1

개요

2026-07-23 완료된 기업사용자 모바일 API 계약 감사. 모바일 앱 18개 feature가 호출하는 98개 엔드포인트를 백엔드 라우터·Pydantic 스키마·서비스와 경로·메서드·쿼리·요청body·응답필드·스코프·인증 기준으로 1:1 대조했다. 발견 건마다 양측 파일을 재독하는 적대적 검증을 거쳐 오탐 0건 확인. 당일 수정 미진행, 전 건 보류 상태. 기업사용자 모바일 API 계약 버그 감사 (2026-07-23)

매핑 규칙: 모바일 apiFetch('/v2/X') → 백엔드 /api/v2/X (라우터 prefix /api/v2).


발견 요약 (6건)

버그 심각도별 현황AI · 출처 클릭
🔴 HIGH1
내 근무표: 주간 근무 집계 오류 (백엔드 집계 필드 미소비, 하드코딩 재계산)
기업사용자 모바일 API 계약 버그 감사 (2026-07-23)
🟠 MEDIUM3
캘린더: 뷰 경계일 시간지정 일정 조용히 누락
기업사용자 모바일 API 계약 버그 감사 (2026-07-23)
결재 반려시트: 보완요청 최소 길이 불일치 (모바일 ≥1 / 백엔드 ≥5) → 422
기업사용자 모바일 API 계약 버그 감사 (2026-07-23)
결재 '내 신청' 탭: 결재자-스코프 API 사용 → 본인 신청 문서 미노출
기업사용자 모바일 API 계약 버그 감사 (2026-07-23)
🟡 LOW2
휴가 신청 이력: 'N일' 배지 미표시 (used_days vs total_days 필드명 불일치)
기업사용자 모바일 API 계약 버그 감사 (2026-07-23)
비밀번호 변경: 클라이언트 규칙 하드코딩, 테넌트 정책 미조회
기업사용자 모바일 API 계약 버그 감사 (2026-07-23)

발견 상세

1. 🔴 HIGH — 내 근무표 주간 집계 오류

  • 페이지: (work)/my-schedule
  • 유형: 응답 필드 미소비
  • 원인: 백엔드 GET /v2/user/policy/my-week-scheduleweek_worked_min · week_target_min · 일자별 recognized_min 3개 필드를 이미 반환하지만, 모바일 타입(WeekScheduleResponse / WeekScheduleDay)에서 이 필드를 완전히 누락. 대신 스케줄 블록 span을 합산하고 분모를 40h(2400분)로 하드코딩.
  • 영향: 정상 출근 정규직도 주 초부터 "40:00/40:00 · 100%" 과대 표시. 결근·승인휴가·파트타임·연장근로 주 모두 오표시. 웹 원본은 3개 필드를 그대로 소비함 — "1:1 포트" 이관 실패.
  • 수정 방향: WeekScheduleResponse/WeekScheduleDay 타입에 3개 필드 추가 후 웹과 동일하게 소비. 크래시 없는 순수 프론트 수정, 회귀 위험 낮음.

2. 🟠 MEDIUM — 캘린더 경계일 시간지정 일정 누락

  • 페이지: (community)/schedule
  • 유형: 쿼리 파라미터 오류
  • 원인: 모바일이 end='2026-06-30'(시간 없음) 전송 → 백엔드가 datetime으로 파싱해 자정(T00:00) 해석 → 당일 14:00 이벤트가 14:00 ≤ 00:00 = false로 제외.
  • 영향: 경계일의 자정 이외 시간 이벤트가 해당 월/주 뷰와 다음 뷰 모두에서 조용히 누락. 오류 없음.
  • 수정 방향: range end에 T23:59:59 부착 또는 end+1일 date-only 전송.

3. 🟠 MEDIUM — 결재 보완요청 최소 길이 불일치

  • 페이지: (requests)/approval (반려 시트)
  • 유형: 요청 body 검증 불일치
  • 원인: 모바일 canSupplement 게이트 trimmed.length >= 1 vs 백엔드 SupplementRequest.comment min_length=5.
  • 영향: 1~4자 입력 시 버튼 활성화 → 제출하면 FastAPI 422. '수정요망'·'보완필요' 같은 자연스러운 4자 메모가 정확히 실패 구간.
  • 수정 방향: 모바일 게이트를 >= 5로 변경 + 카운터 문구 보완. (백엔드 min_length 완화는 정책 결정 필요.)

4. 🟠 MEDIUM — 결재 '내 신청' 잘못된 스코프

  • 페이지: (requests)/approval (내 신청 탭)
  • 유형: 스코프 오류
  • 원인: 내 신청 포함 4개 세그먼트 전부 /v2/approvals(결재자-스코프)만 호출. 이 API는 approver_id == 현재 사용자인 문서만 반환하므로 작성자 조건 없음.
  • 영향: 일반 사용자의 '내 신청' 카운트 0 · 빈 화면.
  • 수정 방향: mine 세그먼트를 /v2/documents(author-scoped, list_my_documents)로 분리 호출. 결재 관리 스펙 참고.

5. 🟡 LOW — 휴가 이력 'N일' 배지 미표시

  • 페이지: (work)/vacation
  • 유형: 응답 필드 이름 불일치
  • 원인: 모바일 r.used_days 참조, 백엔드 LeaveRequestInfo 스키마는 total_days만 노출(used_days 없음). response_model이 여분 필드 스트립.
  • 수정 방향: logic.ts:101 r.used_daysr.total_days. 휴가 관리 스펙 참고.

6. 🟡 LOW — 비밀번호 변경 규칙 하드코딩

  • 페이지: (more)/change-password
  • 유형: 정책 드리프트
  • 원인: 모바일이 GET /v2/password/policy를 호출하지 않고 8자·대문자·소문자·숫자 4규칙을 하드코딩.
  • 영향: 관리자가 정책을 완화하면 서버가 통과시킬 비밀번호를 모바일이 제출 전 차단. 기능적 lockout은 아님.
  • 수정 방향: 화면 진입 시 /v2/password/policy 조회 후 클라 검증에 반영.

클린 판정 (계약 불일치 없음 · 12개 feature)

dashboard · attendance(출퇴근) · attendance-request · overtime · notices · messages · notifications · applications · payroll · directory · work-location · profile


커버리지

AI · 출처 클릭
감사 대상 엔드포인트
98개
기업사용자 모바일 API 계약 버그 감사 (2026-07-23)
감사 대상 feature
18개
기업사용자 모바일 API 계약 버그 감사 (2026-07-23)
발견 건수
6건
기업사용자 모바일 API 계약 버그 감사 (2026-07-23)
클린 판정 feature
12개
기업사용자 모바일 API 계약 버그 감사 (2026-07-23)
오탐
0건
기업사용자 모바일 API 계약 버그 감사 (2026-07-23)

주요 라우터: attendance.py · policy.py · calendar.py · documents.py · payroll.py · notifications.py · password.py · users.py · employees.py · organization.py

Made with CairniExplore public wikis →