Conversation
- SSE 기본 ping 이벤트 간격 3600초로 변경 - CodeSubmissionResult 가 INTERNAL_SERVER_ERROR 일 때 CodeSubmission 를 Error로 판단
- member, project, history, recruting_info, review, seminar, sponsor, timeline, faq 테이블에 대해 모델 정의를 작성했습니다. - recruit와 recruiting_info 관계를 정의했습니다. - pre-commit hook에 있는 pycln 버전에 문제가 있어 2.5.0 버전으로 변경했습니다. - migration 파일을 추가했습니다.
- Project Image URL 테이블을 추가했습니다. - timeline 테이블에서 content 필드를 삭제했습니다. - pre_registration 테이블을 추가했습니다.
- project api와 recruiting api를 구현했습니다.
- 어드민 권한이 필요한 api의 경우에는 수작업으로 user table에서 is_admin 값이 true인 데이터를 만들어서
테스트 해보았습니다
로컬 회원가입을 사용하기로 하였으니 이후에 이와 관련한 작업이 필요할 것 같습니다.
- 만들고 보니 recruiting_info를 생성하는 api가 없습니다. recruiting_info 생성에 대한 api가
필요할 것 같습니다
- 지금 현재 리크루트 업데이트 api에서 resume_questions이나 problems의 개별 항목을 업데이트 하지는
못하고, 기존 질문들을 모두 제거하고 새로 추가하는 식으로 구현되어 있습니다
- ProjectMember 테이블을 추가했습니다.
- Project 테이블에서 project_type, is_active 필드를 추가했습니다.
- ProjectUrl 테이블에서 title 필드를 추가했습니다.
* seminar api를 구현했습니다. * seminar 모델에서 변경할 것들이 있어 변경 후 마이그레이션 파일 추가했습니다.
- enum class의 구조를 변경하였습니다 - uri 중복으로 인한 오류로 인해 uri 주소를 변경했습니다
- member api를 구현했습니다
- get_members 함수의 경우 헤더로 받는 sso_id가 어드민인지 아닌지에 따라 반환하는 응답이 다릅니다
- erd 그림에는 포함되어 있지만 member model에 introduction이 추가되어 있지 않아서 introduction
필드를 추가했습니다.
커밋이 약간 꼬여서 member api 구현 커밋이 두번 있게 됐습니다...
- 리뷰 api를 구현했습니다
* History 관련 api를 구현했습니다. * History table을 수정하고 마이그레이션 파일을 추가했습니다.
* project url type을 enum으로 수정 후 마이그레이션 파일을 추가했습니다.
* question과 관련된 api를 구현했습니다.
- timeline과 timeline category api를 구현했습니다 - 노션 api 요구사항에 맞게 Timeline 테이블에서 category 열을 없애고 category_id 외래키 열을 추가했습니다
- 서비스/스터디 목록 불러오는 api를 페이지네이션 가능하게 변경했습니다 - 여러 파일에 오타를 수정했습니다 - 모집 일정 불러오는 api에서 recruiting_type을 query parameter로 변경했습니다
* 리스트가 비어있을 때의 예외 처리를 삭제했습니다.
* pre registration api를 구현했습니다. * pre_registration 테이블이 추가가 안되어있어 마이그레이션 파일을 추가했습니다.
- 프로젝트 이미지 업로드를 위한 api를 구현했습니다
- 프로젝트 이미지가 저장되는 버킷은 기존의 포트폴리오가 저장되는 버킷인 wacruit-protfolio-dev 또는
wacruit-protfolio-prod입니다.
- 프로젝트 이미지의 key의 형식은 PROJECT/{project_id}/{file_name}입니다.
- 프로젝트 이미지를 업로드할 때는 프로젝트가 먼저 생성되어 있어야 합니다
- api의 세부적인 내용은 노션을 참조해주세요
- project_image 테이블에서 url 대신 s3 객체 키를 저장하도록 수정하였습니다.
- 어드민 페이지에 새로 추가된 api들이 보일 수 있도록 수정하였습니다
- HistoryResponse를 수정했습니다. - Project introduction과 Review content의 길이가 짧은 것 같아 수정했습니다
* 라우터가 중복으로 등록되어 생기는 경고 메세지가 나오지 않도록 수정했습니다
* Recruiting type을 prod와 맞춰주었습니다.
* stdin, expected_output을 MediumText로 수정했습니다. --------- Co-authored-by: deveroskp <imsmile2004@naver.com>
* testcase의 stdin, expected_output이 Textarea로 보이도록 수정했습니다.
* testcase를 삭제할 때 해당하는 code submission result도 같이 삭제되도록 수정했습니다.
* 타임라인 테스트 코드를 작성했습니다
- pre-registration pytest 코드를 작성했습니다
- sponsor 테스트 코드를 작성했습니다
- sponsor api 코드를 수정했습니다
- amount 자료형을 int으로 하고, sponsored_date의 자료형을 Date로 바꿨습니다
- 제가 그 당시에 코드를 대충 짰나 봅니다 ㅠㅠ
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
- Refactor
- Standardized sponsor amount to an integer value.
- Sponsored date is now date-only (no time/timezone).
- API endpoints now accept numeric sponsor IDs instead of strings.
- Tests
- Added comprehensive tests for sponsor creation, retrieval, listing,
and updates.
- Chores
- Database schema updated to align column types with the new formats.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
* 세미나 API에 대해 테스트 코드를 추가했습니다. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - Tests - Added comprehensive tests for seminar management, covering creation, retrieval (active, all, by ID), and updates to ensure correct behavior and data integrity. - Introduced reusable test fixtures to standardize test setup and improve consistency. - Expanded coverage across active and inactive scenarios to increase reliability. - Chores - No user-facing changes; improvements focus on test robustness and maintainability. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
- faq 테스트 코드를 작성했습니다 - faq api에서 QuestionNowFoundException를 QuestionNotFoundException로 바꿨습니다 - faq 생성 api에서 Service 레이어에 request를 넘겨주는 것으로 수정했습니다 <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * Bug Fixes * Ensured FAQ “question not found” responses consistently return 404 with a clear message. * Refactor * Streamlined FAQ creation flow to improve consistency and maintainability. * Tests * Added comprehensive tests covering FAQ create, read, update, and delete scenarios. * Updated sponsor tests to support and verify partial updates. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
* coderabbit yaml 파일을 추가했습니다.
- review를 불러오는 api에서 멤버의 기수를 불러오도록 수정하였습니다.
* develop -> main 으로 갈 때 충돌이 일어나서 수정했습니다. --------- Co-authored-by: MINKYU LEE <whizkyu@snu.ac.kr> Co-authored-by: fivessun-ridi <fivessun@ridi.com>
* member을 쿼리 스트링으로 불러올 수 있도록 수정했습니다. * alembic 파일에 ANDROID, IOS 타입이 제외되어 있는것 같아 추가했습니다.
- portfolio file service의 get_all_applicant_user_ids함수에서 s3 파일명에 맨 앞에 숫자만 담긴 것만 포함되도록 수정했습니다.
- Project 테이블에 formed_at (팀 결성 날짜) 속성을 추가했고, 불러올 때 formed_at이 작은 순서대로 불러오게 수정했습니다 - 어드민 페이지에서 Project Url을 추가할 수 있도록 수정했습니다. - RecruitingInfo의 date_info의 자료형을 str으로 바꾸었습니다. - get_recruiting_infos_by_type에서 query 날릴 때 오류가 있어서 수정했습니다.
- 기존의 이미지 업로드 api에서 쿼리에 is_thumbnail 필드를 추가하여, 일반 이미지와 썸네일 이미지 업로드를 구분하여
업로드 하게 했습니다.
- 썸네일 이미지의 경우 Project/thumbnail/{file_name} 형식으로 저장
- 이미지 수정, 이미지 삭제 api 구현
- ProjectImage 테이블에 is_thumbnail 속성을 추가해서, 썸네일과 일반 이미지를 구분해서 저장하였습니다.
* 가입할 때 username, password 필드를 추가했습니다. * 토큰 방식의 인증을 추가했습니다. * 현재 유저를 얻을 때 토큰을 사용하도록 했습니다.
- 멤버 정보를 얻는 api에서 기수(내림차순), 포지션 순서(ANDROID, IOS, FRONTEND, BACKEND, DESIGNER) 순서로 정렬되어 출력할 수 있게 수정했습니다 - s3에 저장된 이미지의 경우, 브라우저에서 캐싱이 가능하도록, post presigned url을 생성할 때 cache control 필드를 추가해줬습니다. - ProjectURLType Enum에 DATA_GITHUB을 추가했습니다.
* history에 unit을 추가했습니다. * key가 중복될 경우 기존의 내용을 수정합니다.
* 패키지 관리를 poetry에서 uv로 변경했습니다.
- problem 테이블에 submission과 code_submission이 중복되어 발생한 경고에 대해서, code_submission을 제거하여 해결했습니다.
- 로컬 환경에서는 어드민 페이지가 잘 들어가지 지만, 배포 환경에서 어드민 페이지 접속 시 오류가 발생하여 해결하였습니다. 원인을 잘 모르겠어서 제미나이의 도움을 받아 해결했습니다. 제미나이 답변 > 사용자의 app.py 코드를 보면, 문제의 원인이 된 HttpToHttpsRequestMiddleware는 로컬(local)이나 테스트(test) 환경에서는 아예 등록되지 않도록 설정되어 있습니다. > > 이 로직 때문에 로컬에서 개발할 때는 해당 미들웨어가 작동하지 않아 아무런 문제가 없었지만, 배포 환경(AWS)에서는 이 미들웨어가 활성화되면서 오류를 유발했습니다. > > 2. 근본적인 기술적 원인 (The Root Cause) > 오류 로그(ExceptionGroup: unhandled errors in a TaskGroup)는 **BaseHTTPMiddleware**와 AnyIO 4.x 버전 간의 호환성 문제 때문에 발생합니다. > > 배경: [FastAPI](vscode-file://vscode-app/c:/Users/%EC%9D%B4%EA%B2%BD%ED%91%9C/AppData/Local/Programs/Microsoft%20VS%20Code/resources/app/out/vs/code/electron-browser/workbench/workbench.html)와 Starlette는 비동기 처리를 위해 AnyIO라는 라이브러리를 사용합니다. > 버전 불일치: 현재 프로젝트의 의존성을 보면 AnyIO는 최신 버전인 4.12.0을 사용 중이지만, Starlette는 0.27.0 (FastAPI 0.95.2 의존성)을 사용하고 있습니다. > 충돌 내용: > AnyIO 4.0 버전부터는 태스크 그룹 내에서 발생한 예외를 ExceptionGroup이라는 새로운 방식으로 묶어서 처리합니다. > 하지만 구버전 Starlette의 BaseHTTPMiddleware 구현체는 내부적으로 요청을 처리하기 위해 비동기 태스크를 생성하는데, 여기서 발생하는 AnyIO 4.x 스타일의 ExceptionGroup 예외를 제대로 포착하거나 처리하지 못합니다. > 결과적으로 아주 사소한 연결 종료나 내부 신호조차도 "처리되지 않은 예외 그룹"으로 간주되어 500 Internal Server Error를 터뜨리게 됩니다. > 요약 및 해결 > BaseHTTPMiddleware는 내부 구현이 복잡하여 이러한 호환성 문제가 잦습니다. 따라서, 이번에 수정한 것처럼 Starlette의 순수 ASGI 인터페이스를 직접 사용하여 미들웨어를 구현하면, 복잡한 내부 태스크 관리 없이 가볍게 동작하므로 해당 오류를 완전히 피할 수 있습니다.
500 Server Error AssertionError: The `python-multipart` library must be installed to use form parsing. 이번엔 이런 오류가 떠서 의존성 추가해서 pr 올립니다 로컬 환경에선 따로 오류가 안 발생하는데, 배포 환경에서만 오류가 발생하네요...
* moto의 의존성으로 설치되는 multipart가 python-multipart와 충돌을 일으키는 것 같아 설치하지 않도록 수정했습니다. * README를 수정했습니다.
* 새로운 유저를 만들 때 email, username 중복 확인을 하도록 수정했습니다.
* 이메일로 로그인하도록 수정했습니다. * 이메일 중복확인 API를 추가했습니다. * User 모델에서 username을 삭제했습니다.
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
📝 Coding Plan
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment Tip CodeRabbit can use your project's `ruff` configuration to improve the quality of Python code reviews.Add a Ruff configuration file to your project to customize how CodeRabbit runs |
No description provided.