Repository navigation
Releases: JNU-SWCU/oss-hub
Release list
v0.24.10
백엔드 구조 정리 3단계입니다(#1652). 화면과 API 응답은 바뀌지 않습니다.
- service, repository, client, guard, interceptor의 모든 클래스를
@Injectable로 두고 생성자 주입으로만 씁니다. static 멤버와 함수 export를 없앴습니다. - 컨트롤러는 HTTP 요청을 서비스 호출 하나로 넘기고 그 결과를 응답 DTO로 바꾸는 일만 합니다.
- 요청 DTO에는 메서드를 두지 않고, 변환은 서비스가 맡습니다.
- 이 세 규칙과 인자를 그대로 넘기는
useFactory금지를 backend lint로 CI에서 막습니다.
라우트 목록, 역할 스냅샷, 응답 JSON 스냅샷은 바뀌지 않았습니다. PR CI(통합 테스트 포함), backend unit 전체(376 suites, 6165 tests), 독립 검증이 통과했습니다.
v0.24.9
백엔드 역할 확인을 Nest 표준 방식으로 바꿨습니다(#1649). 화면은 바뀌지 않습니다.
- 교직원·관리자 같은 역할 확인을
@Roles+RolesGuard로 옮겨, 로그인할 때 이미 읽은 사용자 정보로 판정합니다. 요청마다 역할을 DB에서 다시 조회하던 43곳이 없어졌습니다. - 처리 도중 권한이 바뀌는 경우를 막는 트랜잭션 안의 재확인은 그대로 둡니다.
바뀌는 동작 — 역할이 없는 로그인 사용자의 요청만 해당합니다. 역할이 있는 사용자와 비로그인 사용자의 응답은 그대로입니다.
| 요청 | 이전 | 이후 |
|---|---|---|
| 역할이 필요한 라우트에 잘못된 입력 | 400 SYS_003 |
그 라우트의 역할 거부(403과 모듈 오류 코드, 작성 라우트는 409) |
| 작성 idempotency key 누락 | 400 | 409 |
| 저장소 공개 확인 누락 | 400 | 403 SUB_002 |
| 서류 묶음 내려받기 범위 오류 | 400 | 403 MSD_001 |
| 교직원 통계 연도 오류 | 400 | 403 APP_018 |
| 작성 업로드 크기 초과·형식 오류 | 413·400 | 409 |
권한이 없는 사람에게 입력이 맞았는지 알려 주지 않게 됩니다.
PR CI(통합 테스트 포함), backend unit 전체, 독립 검증이 통과했습니다.
v0.24.8
프론트엔드 주소·서버 데이터 정리의 마지막 단계입니다(#1648). 앞 단계인 주소 정리(#1622)는 v0.24.0, 서버 데이터 조회 통일(#1644)은 v0.24.7에 나갔습니다. 백엔드와 API는 바뀌지 않습니다.
- 프로그램이나 팀을 지운 직후, 지운 대상을 다시 불러오지 않습니다.
:가 들어간 id로 리뷰·공개 프로필·프로젝트 주소를 열면 id가 두 번 인코딩돼 404가 나던 문제를 고쳤습니다.- 검색어나 커서가 비어 있으면 빈 값(
search=,cursor=)을 보내지 않습니다. 프로그램 목록 첫 요청이search=&status=current에서status=current로 바뀝니다. - 권한 관리 상세에서 늦게 도착한 이력 응답이, 승인 직후를 포함해 최신 이력을 덮어쓰지 않습니다.
- 주소 파라미터 직접 읽기, 창 전역 이벤트로 화면 갱신, Effect 안의 서버 조회, Effect로 페이지 초기화를 ESLint 오류로 막습니다. 앞 단계에서 정한 규칙이 다시 깨지지 않게 하려는 것입니다.
알려진 후속 과제: 템플릿 키가 oss_contest로 저장된 프로그램은 신청 양식을 찾지 못합니다. 정식 키는 oss-contest이며 이번 변경 전에도 같았습니다.
PR CI가 통과했습니다.
v0.24.7
백엔드 인증 가드를 하나로 정리했습니다(#1645). 화면과 API 응답은 바뀌지 않습니다.
- 라우트마다 붙어 있던
SessionGuard를 지우고 전역 인증 가드 하나로 인증합니다. lint가SessionGuard재도입을 막습니다. - 팀 개요 조회(
GET /api/v1/programs/:programId/overview/teams)의@Public표시를 지웠습니다. 비로그인 사용자는 지금과 같이 401을 받습니다. - CSRF origin 검사 가드와 그 설정을 platform으로 옮겨, 기능 모듈이 가드 때문에 auth를 import하지 않습니다.
- 프로필 완성 규칙을 users 모듈로 옮겼습니다. 모듈 의존은 auth → users 한 방향입니다.
이 릴리스에는 먼저 머지된 #1644(프론트엔드 서버 상태 정리)도 함께 들어갑니다.
PR CI, backend unit 전체(376 suites, 6165 tests), 독립 검증의 정적 점검이 통과했습니다.
v0.24.6
쓰지 않는 백엔드 환경변수 6개를 정리했습니다(#1643). 화면과 API 응답은 바뀌지 않습니다.
GITHUB_COLLECTION_APP_SMOKE_PUBLIC_ALIASES,GITHUB_COLLECTION_APP_SMOKE_PRIVATE_ALIAS를 지웠습니다. 읽는 코드가 없었습니다.GITHUB_COLLECTION_APP_API_BASE_URL,GITHUB_COLLECTION_APP_MAX_PAGES,GITHUB_COLLECTION_APP_DEADLINE_MS,COLLECTION_CRON_EXPRESSION은 운영에서 비어 있어 기본값으로만 돌았습니다. 같은 값(GitHub API 주소, 100페이지, 30초, 매시 정각)을 코드 상수로 고정하고 env에서 뺐습니다.- 운영 env 파일에 이 이름들이 남아 있어도 더 이상 쓰이지 않습니다.
PR CI가 통과했습니다.
v0.24.5
백엔드 구조 정리 2단계입니다(#1638). 화면은 바뀌지 않습니다.
- repository는 DB에서 읽은 row만 돌려주고, 계산과 업무 규칙은 서비스로 옮겼습니다.
- 요청 DTO에는 형식 검사만 남기고, 업무 규칙은 서비스가 확인합니다.
- 다른 모듈의 데이터는 그 모듈이 내보낸 서비스를 주입받아 씁니다. export 규칙을 lint가 막습니다.
바뀌는 동작: 학생 저장소 URL은 https://github.com/<owner>/<repo> 표준 모양만 받습니다(끝의 /와 대문자는 허용). :443 포트, 빈 ?·#, 중복 슬래시, .·.. 경로, %로 인코딩한 호스트 같은 표기는 이제 400입니다.
통합 테스트를 포함한 전체 게이트와 PR CI가 통과했습니다.
v0.24.4
v0.24.3
백엔드 구조를 Nest 기본 방식으로 정리한 첫 단계입니다(#1640). 화면과 API 응답은 바뀌지 않습니다.
- 주기 작업은 각 모듈 서비스의
@Cron메서드로 옮겼습니다. 실행 주기는 그대로입니다. - 운영 배치 명령 3개를
src/cli.ts하나로 모았습니다.package.json스크립트 이름은 같고, 직접dist경로를 부르던 곳은 PR 본문의 대조표대로 바꿔야 합니다. - repository·config·service 파일이 무엇을 내보낼 수 있는지 lint로 막았습니다.
- 저장소 생성 이력 검증과 OWN 저장소 비교에서 생겼던 회귀 2건을 고치고 회귀 테스트를 붙였습니다.
통합 테스트를 포함한 전체 게이트와 PR CI가 통과했습니다.
v0.24.2
거르기 칩 모양을 모든 화면에서 공용 칩 하나로 맞췄습니다(#1639).
- 내 활동의
월별·연도별이 테두리 상자 대신 다른 필터와 같은 칩으로 보입니다. - 인사이트 칩과 기간 링크에 덧대 있던 포커스 스타일(실제로는 그려지지 않던 코드)을 지웠습니다. 키보드 포커스 표시는 그대로입니다.
- 이제 화면에서 칩 모양을 따로 바꿀 수 없고, 칩 모양은 공용 컴포넌트 한 곳에서만 정합니다.
백엔드 변경은 없습니다. 단위 테스트와 PR CI가 통과했습니다.
v0.24.1
서류별 요약 칩을 공용 칩 모양으로 맞추고 '팀' 반복을 뺐습니다(#1637).
- 마일스톤 서류 수합 화면의 서류 칩이 다른 필터와 같은 모양으로
<서류명> 필수 제출 30 / 47처럼 보입니다. 아래 칩과 겹치던 미제출 수는 뺐습니다. - 서류를 고르면 나오는 칩이
전체 N·미제출 N·제출 N으로 상태와 수만 말합니다. - 공용 칩이 좁은 화면에서 넘치지 않고 띄어쓰기에서 줄을 바꿉니다. 긴 서류명이 휴대폰에서 잘리던 문제가 사라집니다.
백엔드 변경은 없습니다. 단위 테스트와 PR CI가 통과했습니다.