{"openapi":"3.1.0","info":{"title":"Police Backend Python","version":"0.1.0"},"paths":{"/healthz":{"get":{"tags":["health"],"summary":"Healthcheck","operationId":"healthcheck_healthz_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Healthcheck Healthz Get"}}}}}}},"/api/public/screening-profiles/sync":{"post":{"tags":["screening"],"summary":"GitHub Pages 스크리닝 설문 동기화","description":"GitHub Pages + Supabase 설문 결과를 신규 FastAPI 백엔드에 동기화합니다. 전화번호를 외부 식별자로 사용하며, PHQ-9/GAD-7/PSS 점수와 gender/birth_date/work_type 등을 부분 업데이트 방식으로 저장합니다.","operationId":"sync_screening_profile_api_public_screening_profiles_sync_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScreeningProfileSyncRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScreeningProfileResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/screening-profiles/eligibility":{"get":{"tags":["screening"],"summary":"스크리닝 등록 가능 여부 확인","description":"이름/전화번호/이메일 기준으로 screening 승인 상태를 확인하고 등록 가능 여부를 반환합니다.","operationId":"check_screening_eligibility_api_public_screening_profiles_eligibility_get","parameters":[{"name":"phone_number","in":"query","required":true,"schema":{"type":"string","description":"조회할 전화번호","title":"Phone Number"},"description":"조회할 전화번호"},{"name":"name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"스크리닝 신청자 이름","title":"Name"},"description":"스크리닝 신청자 이름"},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"스크리닝 신청자 이메일","title":"Email"},"description":"스크리닝 신청자 이메일"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScreeningEligibilityCheckResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/user/auth/signup/email-check":{"post":{"tags":["user"],"summary":"이메일 중복 체크","description":"회원가입 전 이메일 사용 가능 여부를 확인합니다.","operationId":"email_check_api_user_auth_signup_email_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailCheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailCheckResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/user/auth/signup":{"post":{"tags":["user"],"summary":"회원가입","description":"이메일, 전화번호, 나이, 비밀번호로 신규 사용자를 생성합니다. 가입 직후 상태는 `PENDING_ASSESSMENTS` 입니다.","operationId":"signup_api_user_auth_signup_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserSignupRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/user/auth/login":{"post":{"tags":["user"],"summary":"유저 로그인","description":"이메일 또는 전화번호로 로그인하고 JWT access/refresh token을 발급합니다.","operationId":"login_api_user_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserLoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserAuthResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/user/auth/refresh":{"post":{"tags":["user"],"summary":"유저 토큰 재발급","description":"refresh token으로 새 access/refresh token을 발급합니다.","operationId":"refresh_api_user_auth_refresh_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserAuthResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/user/me":{"get":{"tags":["user"],"summary":"내 정보 조회","description":"현재 로그인한 사용자의 기본 정보를 조회합니다.","operationId":"me_api_user_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDetailResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/user/assessments/big5":{"post":{"tags":["user"],"summary":"BIG5 성격검사 제출","description":"응답 척도는 1~5이며, 역채점 문항은 자동 반영됩니다.\n\n문항 목록:\n- Q1: 나는 조용한 편이다. (역채점)\n- Q2: 나는 동정심이 많고 마음이 따뜻하다.\n- Q3: 나는 정리가 잘 안 되는 편이다(체계적이지 않다). (역채점)\n- Q4: 나는 걱정이 많은 편이다.\n- Q5: 나는 예술·음악·문학에 매력을 느낀다.\n- Q6: 나는 주도적이며 리더처럼 행동한다.\n- Q7: 나는 때때로 다른 사람에게 무례하게 군다. (역채점)\n- Q8: 나는 과제를 시작하는 데 어려움이 있다. (역채점)\n- Q9: 나는 우울하고 기운이 없는 느낌이 든다.\n- Q10: 나는 추상적인 아이디어에 관심이 적다. (역채점)\n- Q11: 나는 에너지가 넘친다.\n- Q12: 나는 사람들을 좋게(선의로) 보는 편이다.\n- Q13: 나는 믿을 만하며 언제나 의지가 된다.\n- Q14: 나는 정서적으로 안정적이고 쉽게 동요하지 않는다. (역채점)\n- Q15: 나는 독창적이며 새로운 아이디어를 떠올린다.\n- Q16: 나는 사교적이고 외향적이다.\n- Q17: 나는 차갑고 무심하게 보일 때가 있다. (역채점)\n- Q18: 나는 깔끔하게 정리정돈을 한다.\n- Q19: 나는 편안하며 스트레스를 잘 다룬다. (역채점)\n- Q20: 나는 예술적 관심이 별로 없다. (역채점)\n- Q21: 나는 다른 사람이 주도하는 것을 선호한다. (역채점)\n- Q22: 나는 예의 바르고 다른 사람을 존중한다.\n- Q23: 나는 끈기가 있고 일이 끝날 때까지 한다.\n- Q24: 나는 스스로 편안하고 안정감이 있다. (역채점)\n- Q25: 나는 생각이 깊고 복합적이다(깊이 사유한다).\n- Q26: 나는 다른 사람들보다 덜 활동적이다. (역채점)\n- Q27: 나는 다른 사람의 단점을 잘 찾는 편이다. (역채점)\n- Q28: 나는 다소 부주의할 때가 있다. (역채점)\n- Q29: 나는 감정 기복이 있고 쉽게 감정적이 된다.\n- Q30: 나는 창의성이 별로 없다. (역채점)\n\n도메인 점수:\n- E(외향성): Q1R, Q6, Q11, Q16, Q21R, Q26R\n- A(우호성): Q2, Q7R, Q12, Q17R, Q22, Q27R\n- C(성실성): Q3R, Q8R, Q13, Q18, Q23, Q28R\n- N(부정정서성): Q4, Q9, Q14R, Q19R, Q24R, Q29\n- O(개방성): Q5, Q10R, Q15, Q20R, Q25, Q30R","operationId":"submit_big5_api_user_assessments_big5_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Big5SubmissionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssessmentResultResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/user/assessments/brs":{"post":{"tags":["user"],"summary":"BRS 회복탄력성 검사 제출","description":"응답 척도는 1~5이며, 역채점 문항은 자동 반영됩니다.\n\n문항 목록:\n- Q1: 나는 힘든 시기를 겪은 뒤에도 비교적 빨리 회복하는 편이다.\n- Q2: 나는 스트레스가 큰 일을 겪을 때 버티고 지나가기 어렵다. (역채점)\n- Q3: 스트레스가 큰 일을 겪은 뒤 회복하는 데 오래 걸리지 않는다.\n- Q4: 나쁜 일이 생기면 다시 정상으로 돌아오기가 어렵다. (역채점)\n- Q5: 나는 어려운 시기를 큰 어려움 없이 대체로 잘 지나간다.\n- Q6: 나는 삶의 좌절(실패/난관)에서 회복하는 데 시간이 오래 걸리는 편이다. (역채점)\n\n점수 계산:\n- 총점 = 가공 점수 합(6~30)\n- 평균점수 = 총점 / 6 (1~5)\n- 참고 해석: 낮음 1.00~2.99 / 보통 3.00~4.30 / 높음 4.31~5.00","operationId":"submit_brs_api_user_assessments_brs_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BRSSubmissionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssessmentResultResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/user/shifts":{"get":{"tags":["user"],"summary":"내 근무유형 목록 조회","description":"지정 기간의 근무유형을 날짜별로 조회합니다.","operationId":"get_shifts_api_user_shifts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End Date"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShiftListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/user/shifts/{shift_date}":{"put":{"tags":["user"],"summary":"근무유형 저장/수정","description":"해당 날짜의 근무유형을 `DAY`, `NIGHT`, `OFF`, `DUTY` 중 하나로 저장합니다.","operationId":"upsert_shift_api_user_shifts__shift_date__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"shift_date","in":"path","required":true,"schema":{"type":"string","format":"date","title":"Shift Date"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShiftUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShiftResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["user"],"summary":"근무유형 삭제","description":"해당 날짜의 근무유형 설정을 삭제합니다.","operationId":"delete_shift_api_user_shifts__shift_date__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"shift_date","in":"path","required":true,"schema":{"type":"string","format":"date","title":"Shift Date"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResultResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/user/measurements":{"get":{"tags":["user"],"summary":"내 측정 이력 목록","description":"현재 사용자의 워치 측정 이력 목록을 최신순으로 조회합니다.","operationId":"get_measurements_api_user_measurements_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CollectionSummaryResponse"},"type":"array","title":"Response Get Measurements Api User Measurements Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/user/measurements/{collection_id}":{"get":{"tags":["user"],"summary":"측정 이력 상세","description":"collection_id 기준으로 단건 측정 이력을 조회합니다.","operationId":"get_measurement_detail_api_user_measurements__collection_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"collection_id","in":"path","required":true,"schema":{"type":"string","title":"Collection Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CollectionSummaryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/auth/login":{"post":{"tags":["admin"],"summary":"관리자 로그인","description":"관리자 이메일/비밀번호로 로그인하고 access/refresh token을 발급합니다.","operationId":"login_api_admin_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminLoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminAuthResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/auth/refresh":{"post":{"tags":["admin"],"summary":"관리자 토큰 재발급","description":"refresh token으로 관리자 토큰을 재발급합니다.","operationId":"refresh_api_admin_auth_refresh_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminAuthResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/machine-tokens":{"get":{"tags":["admin"],"summary":"머신 토큰 목록","description":"발급된 read-only 머신 토큰 메타데이터를 조회합니다. 평문 토큰은 반환하지 않습니다.","operationId":"list_admin_machine_tokens_api_admin_machine_tokens_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminMachineTokenListResponse"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["admin"],"summary":"머신 토큰 발급","description":"LLM/컴퓨터가 read-only 머신 API를 호출할 때 사용할 bearer token을 발급합니다. 평문 토큰은 이 응답에서만 1회 반환됩니다.","operationId":"create_admin_machine_token_api_admin_machine_tokens_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminMachineTokenCreateRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminMachineTokenCreateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/machine-tokens/{token_id}/revoke":{"post":{"tags":["admin"],"summary":"머신 토큰 폐기","description":"발급된 머신 토큰을 비활성화합니다.","operationId":"revoke_admin_machine_token_api_admin_machine_tokens__token_id__revoke_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"token_id","in":"path","required":true,"schema":{"type":"integer","title":"Token Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminMachineTokenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users":{"get":{"tags":["admin"],"summary":"유저 목록 조회","description":"사용자 목록을 최신 가입순으로 조회합니다. `q`를 주면 이메일/전화번호 검색을 수행합니다.","operationId":"users_api_admin_users_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUserListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/screenings":{"get":{"tags":["admin"],"summary":"스크리닝 목록 조회","description":"GitHub Pages / Supabase에서 동기화된 screening 원본 목록을 조회합니다. 이름, 전화번호, 이메일, 승인여부를 확인할 수 있습니다.","operationId":"screenings_api_admin_screenings_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"confirmation_status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Confirmation Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminScreeningListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users/{user_id}":{"get":{"tags":["admin"],"summary":"유저 상세 조회","description":"단일 사용자 기본 정보와 검사 완료 상태를 조회합니다.","operationId":"user_detail_api_admin_users__user_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["admin"],"summary":"유저 수정","description":"전화번호, 이메일, 상태를 수정합니다.","operationId":"patch_user_api_admin_users__user_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUserPatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["admin"],"summary":"유저 삭제","description":"특정 사용자를 삭제합니다.","operationId":"delete_user_api_admin_users__user_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResultResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users/{user_id}/screening":{"get":{"tags":["admin"],"summary":"유저 스크리닝 정보 조회","description":"특정 사용자에 연결된 GitHub Pages/Supabase 스크리닝 정보를 조회합니다.","operationId":"user_screening_api_admin_users__user_id__screening_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScreeningProfileResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users/{user_id}/assessments/big5":{"get":{"tags":["admin"],"summary":"유저 BIG5 검사 상세 조회","description":"특정 사용자의 BIG5 성격검사 원문 답변과 계산 결과를 조회합니다.","operationId":"user_big5_assessment_api_admin_users__user_id__assessments_big5_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminBig5AssessmentDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users/{user_id}/assessments/brs":{"get":{"tags":["admin"],"summary":"유저 BRS 검사 상세 조회","description":"특정 사용자의 BRS 회복탄력성 검사 원문 답변과 계산 결과를 조회합니다.","operationId":"user_brs_assessment_api_admin_users__user_id__assessments_brs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminBRSAssessmentDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users/{user_id}/assessments/screening":{"get":{"tags":["admin"],"summary":"유저 스크리닝 검사 상세 조회","description":"특정 사용자의 screening(PHQ9, GAD7, PSS) 및 스크리닝 메타데이터를 조회합니다.","operationId":"user_screening_assessment_api_admin_users__user_id__assessments_screening_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminScreeningAssessmentDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users/{user_id}/shifts":{"get":{"tags":["admin"],"summary":"유저 근무유형 조회","description":"특정 사용자의 날짜별 근무유형 목록을 조회합니다.","operationId":"user_shifts_api_admin_users__user_id__shifts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminShiftListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/analysis-queue":{"get":{"tags":["admin"],"summary":"분석 큐 상태 조회","description":"스트레스/피로도 분석 큐의 상태별 현황, 처리 중 작업, 다음 대기 작업을 조회합니다.","operationId":"analysis_queue_api_admin_analysis_queue_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminAnalysisQueueResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/users/{user_id}/shifts/{shift_date}":{"put":{"tags":["admin"],"summary":"유저 근무유형 저장","description":"관리자가 특정 날짜의 근무유형과 워치 알림 수신 여부를 지정합니다.","operationId":"admin_upsert_shift_api_admin_users__user_id__shifts__shift_date__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}},{"name":"shift_date","in":"path","required":true,"schema":{"type":"string","format":"date","title":"Shift Date"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShiftUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShiftResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/collections":{"get":{"tags":["admin"],"summary":"측정 컬렉션 목록","description":"워치에서 올라온 collection 단위 데이터를 최신순으로 조회합니다.","operationId":"collections_api_admin_collections_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"phone_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone Number"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminCollectionListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/collections/{collection_id}":{"get":{"tags":["admin"],"summary":"측정 컬렉션 상세","description":"원시 파일 메타, feature, 피드백, 분석 상태를 포함한 상세 정보를 조회합니다.","operationId":"collection_detail_api_admin_collections__collection_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"collection_id","in":"path","required":true,"schema":{"type":"string","title":"Collection Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminCollectionDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/collections/{collection_id}/raw":{"get":{"tags":["admin"],"summary":"원시 파일 목록","description":"collection_id에 연결된 raw file 메타데이터를 반환합니다.","operationId":"collection_raw_api_admin_collections__collection_id__raw_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"collection_id","in":"path","required":true,"schema":{"type":"string","title":"Collection Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Collection Raw Api Admin Collections  Collection Id  Raw Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/collections/{collection_id}/features":{"get":{"tags":["admin"],"summary":"분석 feature 조회","description":"전처리 결과와 모델 입력 스냅샷을 반환합니다.","operationId":"collection_features_api_admin_collections__collection_id__features_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"collection_id","in":"path","required":true,"schema":{"type":"string","title":"Collection Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Collection Features Api Admin Collections  Collection Id  Features Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/collections/{collection_id}/feedback":{"get":{"tags":["admin"],"summary":"워치 피드백 조회","description":"스트레스 결과에 대해 워치가 전송한 피드백 이력을 반환합니다.","operationId":"collection_feedback_api_admin_collections__collection_id__feedback_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"collection_id","in":"path","required":true,"schema":{"type":"string","title":"Collection Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Collection Feedback Api Admin Collections  Collection Id  Feedback Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/machine/users":{"get":{"tags":["machine"],"summary":"머신 사용자 목록 조회","description":"머신 토큰으로 전체 사용자 목록을 read-only 조회합니다.","operationId":"machine_users_api_machine_users_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MachineUserListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/machine/users/{user_id}":{"get":{"tags":["machine"],"summary":"머신 사용자 상세 조회","description":"머신 토큰으로 단일 사용자 정보를 read-only 조회합니다.","operationId":"machine_user_detail_api_machine_users__user_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MachineUserResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/machine/collections":{"get":{"tags":["machine"],"summary":"머신 측정 목록 조회","description":"머신 토큰으로 collection 목록을 필터와 함께 조회합니다.","operationId":"machine_collections_api_machine_collections_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"phone_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone Number"}},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date From"}},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date To"}},{"name":"analysis_status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Analysis Status"}},{"name":"collection_type","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Collection Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MachineCollectionListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/machine/collections/{collection_id}":{"get":{"tags":["machine"],"summary":"머신 측정 상세 조회","description":"머신 토큰으로 raw inline, feature, feedback까지 포함한 collection 상세를 조회합니다.","operationId":"machine_collection_detail_api_machine_collections__collection_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"collection_id","in":"path","required":true,"schema":{"type":"string","title":"Collection Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MachineCollectionDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/biodata/upload":{"post":{"tags":["watch"],"summary":"워치 원시 센서 업로드","description":"실제 워치 앱이 사용하는 업로드 엔드포인트입니다. PPG, 가속도, 자이로 raw payload를 collection 단위로 저장하고 분석 작업을 큐에 넣습니다.","operationId":"legacy_biodata_upload_api_biodata_upload_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadDataRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResultResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/devicetoken/":{"post":{"tags":["watch"],"summary":"워치 FCM 토큰 저장","description":"실제 워치 앱이 사용하는 FCM token 등록 엔드포인트입니다. `deviceId`, `fcmToken` lower camel payload를 그대로 받을 수 있습니다.","operationId":"legacy_device_token_api_devicetoken__post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Payload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResultResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/device/verification":{"get":{"tags":["watch"],"summary":"워치 전화번호 확인","description":"워치에서 전화번호 입력 후 실제 등록된 사용자와 활성 상태를 확인하는 엔드포인트입니다.","operationId":"legacy_device_verification_api_device_verification_get","parameters":[{"name":"deviceId","in":"query","required":true,"schema":{"type":"string","title":"Deviceid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/usershifts/date":{"get":{"tags":["watch"],"summary":"워치 날짜별 근무유형 조회","description":"워치가 자동 수집 스케줄 계산에 사용하는 날짜별 근무유형 조회 엔드포인트입니다.","operationId":"legacy_user_shift_api_usershifts_date_get","parameters":[{"name":"deviceId","in":"query","required":true,"schema":{"type":"string","title":"Deviceid"}},{"name":"shiftDate","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Shiftdate"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/feedbackcount":{"get":{"tags":["watch"],"summary":"워치 피드백 카운트 조회","description":"워치 메인 화면 배지 표시에 사용하는 자동/수동 피드백 완료 건수 조회 엔드포인트입니다.","operationId":"legacy_feedback_count_api_feedbackcount_get","parameters":[{"name":"deviceId","in":"query","required":true,"schema":{"type":"string","title":"Deviceid"}},{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Date"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/stressresultfeedback/":{"post":{"tags":["watch"],"summary":"워치 스트레스 결과 피드백 저장","description":"실제 워치 앱이 사용하는 스트레스 결과 피드백 업로드 엔드포인트입니다.","operationId":"legacy_feedback_api_stressresultfeedback__post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StressFeedbackRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/uploadlogs/":{"post":{"tags":["watch"],"summary":"워치 로그 업로드","description":"실제 워치 앱이 사용하는 텍스트 로그 업로드 엔드포인트입니다.","operationId":"legacy_upload_logs_api_uploadlogs__post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatchLogUploadRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AdminAnalysisQueueJobResponse":{"properties":{"job_id":{"type":"integer","title":"Job Id"},"collection_id":{"type":"string","title":"Collection Id"},"phone_number":{"type":"string","title":"Phone Number"},"collection_type":{"type":"integer","title":"Collection Type"},"collection_start_time":{"type":"string","format":"date-time","title":"Collection Start Time"},"collection_end_time":{"type":"string","format":"date-time","title":"Collection End Time"},"status":{"type":"string","title":"Status"},"attempts":{"type":"integer","title":"Attempts"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"locked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Locked At"},"finished_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Finished At"},"running_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Running Seconds"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"}},"type":"object","required":["job_id","collection_id","phone_number","collection_type","collection_start_time","collection_end_time","status","attempts","created_at"],"title":"AdminAnalysisQueueJobResponse"},"AdminAnalysisQueueResponse":{"properties":{"generated_at":{"type":"string","format":"date-time","title":"Generated At"},"summary":{"$ref":"#/components/schemas/AdminAnalysisQueueSummaryResponse"},"by_type_status":{"items":{"$ref":"#/components/schemas/AdminAnalysisQueueTypeStatusResponse"},"type":"array","title":"By Type Status"},"running_jobs":{"items":{"$ref":"#/components/schemas/AdminAnalysisQueueJobResponse"},"type":"array","title":"Running Jobs"},"queued_jobs":{"items":{"$ref":"#/components/schemas/AdminAnalysisQueueJobResponse"},"type":"array","title":"Queued Jobs"}},"type":"object","required":["generated_at","summary","by_type_status","running_jobs","queued_jobs"],"title":"AdminAnalysisQueueResponse"},"AdminAnalysisQueueSummaryResponse":{"properties":{"total":{"type":"integer","title":"Total"},"queued":{"type":"integer","title":"Queued"},"running":{"type":"integer","title":"Running"},"completed":{"type":"integer","title":"Completed"},"failed":{"type":"integer","title":"Failed"},"oldest_queued_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Oldest Queued At"},"oldest_running_locked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Oldest Running Locked At"}},"type":"object","required":["total","queued","running","completed","failed"],"title":"AdminAnalysisQueueSummaryResponse"},"AdminAnalysisQueueTypeStatusResponse":{"properties":{"collection_type":{"type":"integer","title":"Collection Type"},"status":{"type":"string","title":"Status"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["collection_type","status","count"],"title":"AdminAnalysisQueueTypeStatusResponse"},"AdminAuthResponse":{"properties":{"access_token":{"type":"string","title":"Access Token"},"refresh_token":{"type":"string","title":"Refresh Token"},"token_type":{"type":"string","title":"Token Type","default":"bearer"},"admin_email":{"type":"string","format":"email","title":"Admin Email"}},"type":"object","required":["access_token","refresh_token","admin_email"],"title":"AdminAuthResponse","example":{"access_token":"<jwt access token>","refresh_token":"<jwt refresh token>","token_type":"bearer"}},"AdminBRSAssessmentAnswerResponse":{"properties":{"question_code":{"type":"string","title":"Question Code"},"question_text":{"type":"string","title":"Question Text"},"reverse_scored":{"type":"boolean","title":"Reverse Scored"},"value":{"type":"integer","title":"Value"}},"type":"object","required":["question_code","question_text","reverse_scored","value"],"title":"AdminBRSAssessmentAnswerResponse"},"AdminBRSAssessmentDetailResponse":{"properties":{"user_id":{"type":"integer","title":"User Id"},"completed":{"type":"boolean","title":"Completed"},"score":{"type":"number","title":"Score"},"details":{"additionalProperties":{"type":"number"},"type":"object","title":"Details"},"answers":{"items":{"$ref":"#/components/schemas/AdminBRSAssessmentAnswerResponse"},"type":"array","title":"Answers"}},"type":"object","required":["user_id","completed","score","details","answers"],"title":"AdminBRSAssessmentDetailResponse"},"AdminBig5AssessmentAnswerResponse":{"properties":{"question_code":{"type":"string","title":"Question Code"},"factor":{"type":"string","title":"Factor"},"question_text":{"type":"string","title":"Question Text"},"reverse_scored":{"type":"boolean","title":"Reverse Scored"},"value":{"type":"integer","title":"Value"}},"type":"object","required":["question_code","factor","question_text","reverse_scored","value"],"title":"AdminBig5AssessmentAnswerResponse"},"AdminBig5AssessmentDetailResponse":{"properties":{"user_id":{"type":"integer","title":"User Id"},"completed":{"type":"boolean","title":"Completed"},"scores":{"additionalProperties":{"type":"integer"},"type":"object","title":"Scores"},"answers":{"items":{"$ref":"#/components/schemas/AdminBig5AssessmentAnswerResponse"},"type":"array","title":"Answers"}},"type":"object","required":["user_id","completed","scores","answers"],"title":"AdminBig5AssessmentDetailResponse"},"AdminCollectionDetailResponse":{"properties":{"collection_id":{"type":"string","title":"Collection Id"},"user_id":{"type":"integer","title":"User Id"},"phone_number":{"type":"string","title":"Phone Number"},"collection_type":{"type":"integer","title":"Collection Type"},"start_time":{"type":"string","format":"date-time","title":"Start Time"},"end_time":{"type":"string","format":"date-time","title":"End Time"},"analysis_status":{"type":"string","title":"Analysis Status"},"stress_result":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stress Result"},"fatigue_result":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fatigue Result"},"fatigue_prob":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fatigue Prob"},"feedback_received":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Feedback Received"},"feedback_value":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Feedback Value"},"ppg_received":{"type":"boolean","title":"Ppg Received"},"acc_received":{"type":"boolean","title":"Acc Received"},"gyro_received":{"type":"boolean","title":"Gyro Received"},"raw_files":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Raw Files"},"feature_values":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Feature Values"}},"type":"object","required":["collection_id","user_id","phone_number","collection_type","start_time","end_time","analysis_status","ppg_received","acc_received","gyro_received","raw_files"],"title":"AdminCollectionDetailResponse","example":{"analysis_status":"QUEUED","collection_id":"collection-1","collection_type":1,"end_time":"2026-03-23T08:01:00","phone_number":"01099998888","start_time":"2026-03-23T08:00:00","user_id":1}},"AdminCollectionListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/CollectionSummaryResponse"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"AdminCollectionListResponse"},"AdminLoginRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","maxLength":128,"minLength":8,"title":"Password"}},"type":"object","required":["email","password"],"title":"AdminLoginRequest","example":{"email":"admin@lstgrp.com","password":"PoliceAdmin!2026"}},"AdminMachineTokenCreateRequest":{"properties":{"name":{"type":"string","maxLength":255,"minLength":3,"title":"Name"}},"type":"object","required":["name"],"title":"AdminMachineTokenCreateRequest","example":{"name":"llm-readonly-prod"}},"AdminMachineTokenCreateResponse":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"is_active":{"type":"boolean","title":"Is Active"},"created_by_admin_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Created By Admin Id"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"revoked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Revoked At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"token":{"type":"string","title":"Token"}},"type":"object","required":["id","name","is_active","created_at","updated_at","token"],"title":"AdminMachineTokenCreateResponse"},"AdminMachineTokenListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AdminMachineTokenResponse"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"AdminMachineTokenListResponse"},"AdminMachineTokenResponse":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"is_active":{"type":"boolean","title":"Is Active"},"created_by_admin_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Created By Admin Id"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"revoked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Revoked At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","name","is_active","created_at","updated_at"],"title":"AdminMachineTokenResponse"},"AdminScreeningAssessmentDetailResponse":{"properties":{"user_id":{"type":"integer","title":"User Id"},"completed":{"type":"boolean","title":"Completed"},"phone_number":{"type":"string","title":"Phone Number"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Email"},"confirmation_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Confirmation Status"},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gender"},"birth_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Birth Date"},"age":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Age"},"group_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Type"},"phq9":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Phq9"},"gad7":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Gad7"},"pss":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pss"},"source_updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Source Updated At"},"last_synced_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Synced At"}},"type":"object","required":["user_id","completed","phone_number"],"title":"AdminScreeningAssessmentDetailResponse"},"AdminScreeningListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AdminScreeningSummaryResponse"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"AdminScreeningListResponse"},"AdminScreeningSummaryResponse":{"properties":{"id":{"type":"integer","title":"Id"},"user_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"User Id"},"source_participant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Participant Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Email"},"phone_number":{"type":"string","title":"Phone Number"},"confirmation_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Confirmation Status"},"source_updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Source Updated At"},"last_synced_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Synced At"}},"type":"object","required":["id","phone_number"],"title":"AdminScreeningSummaryResponse"},"AdminShiftListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ShiftResponse"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"AdminShiftListResponse"},"AdminUserListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/UserDetailResponse"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"AdminUserListResponse"},"AdminUserPatchRequest":{"properties":{"email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Email"},"phone_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone Number","description":"한국 휴대전화 번호. 예: 010-1234-5678 또는 01012345678"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},"type":"object","title":"AdminUserPatchRequest"},"AssessmentAnswer":{"properties":{"question_code":{"type":"string","title":"Question Code","description":"문항 코드. 예: Q1, Q2"},"value":{"type":"integer","maximum":5.0,"minimum":1.0,"title":"Value","description":"1~5 Likert 응답값"}},"type":"object","required":["question_code","value"],"title":"AssessmentAnswer"},"AssessmentResultResponse":{"properties":{"completed":{"type":"boolean","title":"Completed"},"scores":{"additionalProperties":true,"type":"object","title":"Scores"},"user_status":{"type":"string","title":"User Status"}},"type":"object","required":["completed","scores","user_status"],"title":"AssessmentResultResponse","example":{"completed":true,"scores":{"A_sum":20,"C_sum":17,"E_sum":18,"N_sum":11,"O_sum":19},"user_status":"ACTIVE"}},"BRSSubmissionRequest":{"properties":{"answers":{"items":{"$ref":"#/components/schemas/AssessmentAnswer"},"type":"array","title":"Answers"}},"type":"object","required":["answers"],"title":"BRSSubmissionRequest","example":{"answers":[{"question_code":"Q1","value":3},{"question_code":"Q2","value":3},{"question_code":"Q3","value":3},{"question_code":"Q4","value":3},{"question_code":"Q5","value":3},{"question_code":"Q6","value":3}]}},"Big5SubmissionRequest":{"properties":{"answers":{"items":{"$ref":"#/components/schemas/AssessmentAnswer"},"type":"array","title":"Answers"}},"type":"object","required":["answers"],"title":"Big5SubmissionRequest","example":{"answers":[{"question_code":"Q1","value":3},{"question_code":"Q2","value":3},{"question_code":"Q3","value":3},{"question_code":"Q4","value":3},{"question_code":"Q5","value":3},{"question_code":"Q6","value":3},{"question_code":"Q7","value":3},{"question_code":"Q8","value":3},{"question_code":"Q9","value":3},{"question_code":"Q10","value":3},{"question_code":"Q11","value":3},{"question_code":"Q12","value":3},{"question_code":"Q13","value":3},{"question_code":"Q14","value":3},{"question_code":"Q15","value":3},{"question_code":"Q16","value":3},{"question_code":"Q17","value":3},{"question_code":"Q18","value":3},{"question_code":"Q19","value":3},{"question_code":"Q20","value":3},{"question_code":"Q21","value":3},{"question_code":"Q22","value":3},{"question_code":"Q23","value":3},{"question_code":"Q24","value":3},{"question_code":"Q25","value":3},{"question_code":"Q26","value":3},{"question_code":"Q27","value":3},{"question_code":"Q28","value":3},{"question_code":"Q29","value":3},{"question_code":"Q30","value":3}]}},"CollectionSummaryResponse":{"properties":{"collection_id":{"type":"string","title":"Collection Id"},"user_id":{"type":"integer","title":"User Id"},"phone_number":{"type":"string","title":"Phone Number"},"collection_type":{"type":"integer","title":"Collection Type"},"start_time":{"type":"string","format":"date-time","title":"Start Time"},"end_time":{"type":"string","format":"date-time","title":"End Time"},"analysis_status":{"type":"string","title":"Analysis Status"},"stress_result":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stress Result"},"fatigue_result":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fatigue Result"},"fatigue_prob":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fatigue Prob"},"feedback_received":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Feedback Received"},"feedback_value":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Feedback Value"}},"type":"object","required":["collection_id","user_id","phone_number","collection_type","start_time","end_time","analysis_status"],"title":"CollectionSummaryResponse","example":{"analysis_status":"QUEUED","collection_id":"collection-1","collection_type":1,"end_time":"2026-03-23T08:01:00","phone_number":"01099998888","start_time":"2026-03-23T08:00:00","user_id":1}},"EmailCheckRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"}},"type":"object","required":["email"],"title":"EmailCheckRequest","example":{"email":"user@example.com"}},"EmailCheckResponse":{"properties":{"available":{"type":"boolean","title":"Available"}},"type":"object","required":["available"],"title":"EmailCheckResponse","example":{"available":true}},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"MachineCollectionDetailResponse":{"properties":{"collection_id":{"type":"string","title":"Collection Id"},"user_id":{"type":"integer","title":"User Id"},"phone_number":{"type":"string","title":"Phone Number"},"collection_type":{"type":"integer","title":"Collection Type"},"start_time":{"type":"string","format":"date-time","title":"Start Time"},"end_time":{"type":"string","format":"date-time","title":"End Time"},"analysis_status":{"type":"string","title":"Analysis Status"},"stress_result":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stress Result"},"fatigue_result":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fatigue Result"},"fatigue_prob":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fatigue Prob"},"feedback_received":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Feedback Received"},"feedback_value":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Feedback Value"},"feature_values":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Feature Values"},"model_input_snapshot":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Model Input Snapshot"},"model_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Version"},"ppg_received":{"type":"boolean","title":"Ppg Received"},"acc_received":{"type":"boolean","title":"Acc Received"},"gyro_received":{"type":"boolean","title":"Gyro Received"},"raw_files":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Raw Files"},"raw_data":{"$ref":"#/components/schemas/MachineRawInlineResponse"},"feedback_entries":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Feedback Entries"}},"type":"object","required":["collection_id","user_id","phone_number","collection_type","start_time","end_time","analysis_status","ppg_received","acc_received","gyro_received","raw_files","raw_data","feedback_entries"],"title":"MachineCollectionDetailResponse","example":{"analysis_status":"COMPLETED","collection_id":"collection-1","collection_type":3,"end_time":"2026-03-23T08:01:00","feature_values":{"PPG_MeanHR":72.3,"PPG_MeanNN":850.0},"feedback_received":true,"feedback_value":2,"model_input_snapshot":{"E_sum":18,"age":25,"work_type":"일근직"},"model_version":"stress_2026_deploy_LST","phone_number":"01012345678","start_time":"2026-03-23T08:00:00","stress_result":"Stress O","user_id":1}},"MachineCollectionListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/MachineCollectionSummaryResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"}},"type":"object","required":["items","total","limit","offset"],"title":"MachineCollectionListResponse"},"MachineCollectionSummaryResponse":{"properties":{"collection_id":{"type":"string","title":"Collection Id"},"user_id":{"type":"integer","title":"User Id"},"phone_number":{"type":"string","title":"Phone Number"},"collection_type":{"type":"integer","title":"Collection Type"},"start_time":{"type":"string","format":"date-time","title":"Start Time"},"end_time":{"type":"string","format":"date-time","title":"End Time"},"analysis_status":{"type":"string","title":"Analysis Status"},"stress_result":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stress Result"},"fatigue_result":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fatigue Result"},"fatigue_prob":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fatigue Prob"},"feedback_received":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Feedback Received"},"feedback_value":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Feedback Value"},"feature_values":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Feature Values"},"model_input_snapshot":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Model Input Snapshot"},"model_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Version"}},"type":"object","required":["collection_id","user_id","phone_number","collection_type","start_time","end_time","analysis_status"],"title":"MachineCollectionSummaryResponse","example":{"analysis_status":"COMPLETED","collection_id":"collection-1","collection_type":3,"end_time":"2026-03-23T08:01:00","feature_values":{"PPG_MeanHR":72.3,"PPG_MeanNN":850.0},"feedback_received":true,"feedback_value":2,"model_input_snapshot":{"E_sum":18,"age":25,"work_type":"일근직"},"model_version":"stress_2026_deploy_LST","phone_number":"01012345678","start_time":"2026-03-23T08:00:00","stress_result":"Stress O","user_id":1}},"MachineRawInlineResponse":{"properties":{"ppg_green":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ppg Green"},"acceleration":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Acceleration"},"gyro":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gyro"}},"type":"object","title":"MachineRawInlineResponse"},"MachineShiftResponse":{"properties":{"shift_date":{"type":"string","format":"date","title":"Shift Date"},"shift_type":{"type":"string","title":"Shift Type"},"start_hour":{"type":"integer","title":"Start Hour"},"end_hour":{"type":"integer","title":"End Hour"},"interval_minutes":{"type":"integer","title":"Interval Minutes"},"watch_notification_enabled":{"type":"boolean","title":"Watch Notification Enabled"}},"type":"object","required":["shift_date","shift_type","start_hour","end_hour","interval_minutes","watch_notification_enabled"],"title":"MachineShiftResponse"},"MachineUserListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/MachineUserResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"}},"type":"object","required":["items","total","limit","offset"],"title":"MachineUserListResponse"},"MachineUserResponse":{"properties":{"id":{"type":"integer","title":"Id"},"email":{"type":"string","format":"email","title":"Email"},"phone_number":{"type":"string","title":"Phone Number"},"status":{"type":"string","title":"Status"},"age":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Age"},"big5_completed":{"type":"boolean","title":"Big5 Completed"},"brs_completed":{"type":"boolean","title":"Brs Completed"},"latest_shift":{"anyOf":[{"$ref":"#/components/schemas/MachineShiftResponse"},{"type":"null"}]}},"type":"object","required":["id","email","phone_number","status","big5_completed","brs_completed"],"title":"MachineUserResponse","example":{"age":25,"big5_completed":true,"brs_completed":true,"email":"user@example.com","id":1,"latest_shift":{"end_hour":8,"interval_minutes":60,"shift_date":"2026-03-23","shift_type":"DUTY","start_hour":8,"watch_notification_enabled":true},"phone_number":"01012345678","status":"ACTIVE"}},"RefreshRequest":{"properties":{"refresh_token":{"type":"string","title":"Refresh Token"}},"type":"object","required":["refresh_token"],"title":"RefreshRequest","example":{"refresh_token":"<jwt refresh token>"}},"ResultResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"type":"string","title":"Message","default":""}},"type":"object","title":"ResultResponse","example":{"message":"ok","success":true}},"ScreeningEligibilityCheckResponse":{"properties":{"found":{"type":"boolean","title":"Found"},"eligible":{"type":"boolean","title":"Eligible"},"confirmation_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Confirmation Status"},"message":{"type":"string","title":"Message"},"screening_profile_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Screening Profile Id"},"source_participant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Participant Id"}},"type":"object","required":["found","eligible","message"],"title":"ScreeningEligibilityCheckResponse","example":{"confirmation_status":"approved","eligible":true,"found":true,"message":"승인된 스크리닝 사용자입니다.","screening_profile_id":1,"source_participant_id":"9e4e4e7d-1111-2222-3333-4ac9a6f9b999"}},"ScreeningProfileResponse":{"properties":{"id":{"type":"integer","title":"Id"},"user_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"User Id"},"source_participant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Participant Id"},"phone_number":{"type":"string","title":"Phone Number"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Email"},"confirmation_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Confirmation Status"},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gender"},"birth_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Birth Date"},"age":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Age"},"group_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Type"},"phq9":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Phq9"},"gad7":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Gad7"},"pss":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pss"},"department":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Department"},"work_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Work Type"},"watch_delivery_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Watch Delivery Address"},"source_updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Source Updated At"},"last_synced_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Synced At"}},"type":"object","required":["id","user_id","source_participant_id","phone_number","name","email","confirmation_status","gender","birth_date","age","group_type","phq9","gad7","pss","department","work_type","watch_delivery_address","source_updated_at","last_synced_at"],"title":"ScreeningProfileResponse","example":{"age":33,"birth_date":"1992-05-12","confirmation_status":"approved","department":"강남경찰서","email":"hong@example.com","gad7":7,"gender":"male","group_type":"depression","id":1,"last_synced_at":"2026-04-16T09:30:03","name":"홍길동","phone_number":"01012345678","phq9":11,"pss":18,"source_participant_id":"9e4e4e7d-1111-2222-3333-4ac9a6f9b999","source_updated_at":"2026-04-16T09:30:00","user_id":1,"watch_delivery_address":"서울시 강남구 ...","work_type":"주간근무"}},"ScreeningProfileSyncRequest":{"properties":{"source_participant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Participant Id","description":"Supabase survey-person.id"},"phone_number":{"type":"string","title":"Phone Number","description":"GitHub Pages / Supabase에서 수집한 전화번호"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Email"},"confirmation_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Confirmation Status"},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gender"},"birth_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Birth Date"},"phq9":{"anyOf":[{"type":"integer","maximum":27.0,"minimum":0.0},{"type":"null"}],"title":"Phq9","description":"Supabase depressive 점수"},"gad7":{"anyOf":[{"type":"integer","maximum":21.0,"minimum":0.0},{"type":"null"}],"title":"Gad7","description":"Supabase anxiety 점수"},"pss":{"anyOf":[{"type":"integer","maximum":40.0,"minimum":0.0},{"type":"null"}],"title":"Pss","description":"Supabase stress 점수"},"department":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Department"},"work_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Work Type"},"watch_delivery_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Watch Delivery Address"},"group_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Type","description":"미전달 시 서버에서 phq9/pss로 계산"},"source_updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Source Updated At"},"source_payload":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Source Payload"}},"type":"object","required":["phone_number"],"title":"ScreeningProfileSyncRequest","example":{"birth_date":"1992-05-12","confirmation_status":"approved","department":"강남경찰서","email":"hong@example.com","gad7":7,"gender":"male","name":"홍길동","phone_number":"010-1234-5678","phq9":11,"pss":18,"source_participant_id":"9e4e4e7d-1111-2222-3333-4ac9a6f9b999","source_updated_at":"2026-04-16T09:30:00","watch_delivery_address":"서울시 강남구 ...","work_type":"주간근무"}},"ShiftListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ShiftResponse"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"ShiftListResponse","example":{"items":[{"end_hour":8,"interval_minutes":60,"shift_date":"2026-03-23","shift_type":"DUTY","start_hour":8,"watch_notification_enabled":true}]}},"ShiftResponse":{"properties":{"shift_date":{"type":"string","format":"date","title":"Shift Date"},"shift_type":{"type":"string","title":"Shift Type"},"start_hour":{"type":"integer","title":"Start Hour"},"end_hour":{"type":"integer","title":"End Hour"},"interval_minutes":{"type":"integer","title":"Interval Minutes"},"watch_notification_enabled":{"type":"boolean","title":"Watch Notification Enabled"}},"type":"object","required":["shift_date","shift_type","start_hour","end_hour","interval_minutes","watch_notification_enabled"],"title":"ShiftResponse","example":{"end_hour":8,"interval_minutes":60,"shift_date":"2026-03-23","shift_type":"DUTY","start_hour":8,"watch_notification_enabled":true}},"ShiftUpdateRequest":{"properties":{"shift_type":{"type":"string","title":"Shift Type"},"watch_notification_enabled":{"type":"boolean","title":"Watch Notification Enabled","default":true}},"type":"object","required":["shift_type"],"title":"ShiftUpdateRequest","example":{"shift_type":"DUTY","watch_notification_enabled":true}},"StressFeedbackRequest":{"properties":{"DeviceId":{"type":"string","title":"Deviceid"},"CollectionId":{"type":"string","title":"Collectionid"},"FeedbackReceived":{"type":"boolean","title":"Feedbackreceived"},"FeedbackValue":{"type":"integer","title":"Feedbackvalue"}},"type":"object","required":["DeviceId","CollectionId","FeedbackReceived","FeedbackValue"],"title":"StressFeedbackRequest","example":{"collectionId":"collection-1","deviceId":"01099998888","feedbackReceived":true,"feedbackValue":2}},"UploadDataRequest":{"properties":{"DeviceId":{"type":"string","title":"Deviceid"},"CollectionId":{"type":"string","title":"Collectionid"},"CollectionType":{"type":"integer","title":"Collectiontype"},"IsOnShift":{"type":"boolean","title":"Isonshift","default":false},"StartTime":{"type":"integer","title":"Starttime"},"EndTime":{"type":"integer","title":"Endtime","default":0},"DataType":{"type":"integer","title":"Datatype"},"Data":{"type":"string","title":"Data","default":""}},"type":"object","required":["DeviceId","CollectionId","CollectionType","StartTime","DataType"],"title":"UploadDataRequest","example":{"collectionId":"collection-1","collectionType":1,"data":"1711111111000,500\\n1711111112000,510","dataType":1,"deviceId":"01099998888","endTime":1711111171000,"isOnShift":true,"startTime":1711111111000}},"UserAuthResponse":{"properties":{"access_token":{"type":"string","title":"Access Token"},"refresh_token":{"type":"string","title":"Refresh Token"},"token_type":{"type":"string","title":"Token Type","default":"bearer"},"user":{"$ref":"#/components/schemas/UserDetailResponse"}},"type":"object","required":["access_token","refresh_token","user"],"title":"UserAuthResponse","example":{"access_token":"<jwt access token>","refresh_token":"<jwt refresh token>","token_type":"bearer"}},"UserDetailResponse":{"properties":{"id":{"type":"integer","title":"Id"},"email":{"type":"string","format":"email","title":"Email"},"phone_number":{"type":"string","title":"Phone Number"},"status":{"type":"string","title":"Status"},"age":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Age"},"big5_completed":{"type":"boolean","title":"Big5 Completed"},"brs_completed":{"type":"boolean","title":"Brs Completed"}},"type":"object","required":["id","email","phone_number","status","big5_completed","brs_completed"],"title":"UserDetailResponse","example":{"age":35,"big5_completed":true,"brs_completed":true,"email":"user@example.com","id":1,"phone_number":"01012345678","status":"ACTIVE"}},"UserLoginRequest":{"properties":{"identifier":{"type":"string","title":"Identifier"},"password":{"type":"string","maxLength":128,"minLength":8,"title":"Password"}},"type":"object","required":["identifier","password"],"title":"UserLoginRequest","example":{"identifier":"user@example.com","password":"Password123!"}},"UserSignupRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"phone_number":{"type":"string","maxLength":20,"minLength":10,"title":"Phone Number","description":"한국 휴대전화 번호. 예: 010-1234-5678 또는 01012345678"},"gender":{"type":"string","title":"Gender","description":"male 또는 female"},"age":{"type":"integer","maximum":120.0,"minimum":18.0,"title":"Age","description":"회원가입 시 입력하는 나이"},"password":{"type":"string","maxLength":128,"minLength":8,"title":"Password"}},"type":"object","required":["email","phone_number","gender","age","password"],"title":"UserSignupRequest","example":{"age":35,"email":"user@example.com","gender":"male","password":"Password123!","phone_number":"010-1234-5678"}},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WatchLogUploadRequest":{"properties":{"DeviceId":{"type":"string","title":"Deviceid"},"LogName":{"type":"string","title":"Logname","default":"watch.log"},"Content":{"type":"string","title":"Content"}},"type":"object","required":["DeviceId","Content"],"title":"WatchLogUploadRequest","example":{"content":"line1\\nline2","deviceId":"01099998888","logName":"watch.log"}}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}