Skip to content

Commit

Permalink
develop -> main Merge (#486)
Browse files Browse the repository at this point in the history
* test: TestContainer 적용 (#27)

* test: TestContainer 적용

* test: TestContainer MySQL 버전 5.7로 변경

* test: RestAssured port 선언조건 추가

* feat: POST /user/login API 구현 (#50)

* feat: User Entity 추가

* test: /user/login 인수테스트 작성

* feat: 로그인 뼈대코드 구성

* feat: testcontainer 도입

* test: TestContainer 적용

* test: TestContainer MySQL 버전 5.7로 변경

* test: RestAssured port 선언조건 추가

* feat: 사용자 로그인 구현

* feat: 사용자 마지막 로그인한 날짜 추가

* test: ActiveProfiles 설정 추가

* build: 토큰 값 minute 주석 추가

* refactor: refreshToken 만료일자 14일로 수정

* build: 불필요한 설정파일 제거

* refactor: 예외처리부 추가

* test: 학교 메일로 테스트케이스 수정

* refactor: 반환값 accessToken임을 명시

* feat: 상점 메뉴 조회 API 구현 (#112)

* refactor: 전체 패키지 구조 변경 (#114)

* refactor: 패키지 구조 변경

* refactor: DTO 레코드로 변경

* refactor: 상점 도메인 패키지 구조 변경

* refactor: 패키지 표현 변경

* feat: GET /lands API 구현  (#148)

* feat : 도메인 생성

* faet : controller 구현

* feat : response DTO 생성

* feat : 전체 조회 service 구현

* feat : 전체 조회 repository 생성

* feat : Domain 생성

* test : 인수 테스트 작성

* refactor : 하위 패키지 중 domain을 model로 수정

* refactor : DTO 클래스에 JsonNaming 어노테이션 사용

* refactor : Column 어노테이션 안에 필요없는 내용 제거

* refactor : 복덕방 리스트 조회 메서드에 Transaction(readOnly=true)가 적용되도록 수정

* refactor : 리스트 원소로 사용하던 LandResponse의 이름을 LandListItemResponse로 수정

* feat: 사용자 인증 구현 (#149)

* feat: 사용자 인증 구현

* refactor: ArgumentResolver 이름 변경

* refactor: CustomException 적용

* refactor: 예외상황 명시하도록 순서 변경

* refactor: 상수추출

* refactor: 미사용 생성자 제거

* chore: 패키지 변경

* refactor: 미사용 어노테이션 제거

* refactor: 오타수정

* refactor: 오류메시지 구체화

* refactor: 미사용 메서드 제거

* �feat: GET /dept, GET /depts 구현 (#147)

* refactor: 패키지 구조 변경

* refactor: DTO 레코드로 변경

* refactor: 상점 도메인 패키지 구조 변경

* feat: 학과 조회 관련 틀 작성

* feat: 학과명 열거형 추가

* feat: 학과 조회 초안 작성

* feat: 학과 조회 정상 동작

* refactor: 열거형 제거

최대한 도입해보려 시도했으나 `@Enumerated(EnumType.STRING)`으로는 불가능한 구조인 것으로 판단하여 제거
(DB에 한글로 저장되어 있어서 enum과 매핑하려면 한글 열거형이 필요해보임)

ERROR DETAIL: "No enum constant in.koreatech.koin.domain.dept.domain.DeptType.기계공학부"

* rename: 정적 팩토리 메서드 네이밍 수정

* test: 인수 테스트 추가

* fix: 정상 동작하도록 수정 (복합키 매핑 이전)

* refactor: 복합키 매핑

* remove: 미사용 코드 제거

* feat: GET /depts 구현

* test: GET /depts 테스트 작성

* rename: 도메인명 수정

Dept -> DeptInfo

* fix: DeptInfoRepository Key 수정

* refactor: service 코드 간소화

* fix: GET /dept 응답 메시지 자료형 수정

* refactor: 트랜잭션 적용

* rename: 변수명 수정

* refactor: 응답 객체 자료형 수정

* refactor: 개행 컨벤션 준수

* rename: DTO 네이밍 수정

* refactor: 개행 컨벤션 준수

* refactor: 메서드 네이밍 수정

* test: 테스트 인자 상수화

* test: 코드 간소화

* fix: Repository ID 제네릭 수정

* refactor: Static Import로 변경

Response 클래스들에 붙은 SnakeCaseStrategy.class를 static import하여 가독성 향상

* test: GET /depts 테스트 코드 수정

1. 기존에 연관관계를 테스트하지 않던 코드 수정
2. 반복문을 제거하고 일일이 매핑하도록 수정

* refactor: DB에서 enum으로 구조 변경

cc. #152

* rename: 메서드명 컨벤션 준수

* rename: 컨트롤러 메서드명 컨벤션 준수

* refactor: 존재하지 않을 시 응답 코드 변경

* style: enum 개행 조정

* remove: DB 미사용으로 인한 불필요 코드 제거

---------

Co-authored-by: Invidam <[email protected]>

* feat: logout 구현 (#154)

* feat: accessToken 재발급 (#155)

* feat: logout 구현

* feat: accessToken 재발급 구현

* fix: 응답 수정 및 테스트 수정

* refactor: 사용자 인증 요구사항 제거

* refactor: 리프레시토큰 userId 구분

* �feat: 게시글 목록 조회 구현 (#158)

* feat: 골격 작성

* feat: 엔티티 작성

* feat: repository 작성

* feat: service 작성

* feat: response 작성

* feat: DB 조회 로직 작성

* feat: Jsoup 의존성 추가

* feat: 응답 내용 추가

1. article.is_notice
2. article.contentSummary
3. board.is_notice
4. board.children (must null)

* feat: 예외처리 작성

* refactor: 페이징 관련 정보 클래스 분리

* fix: soft delete된 게시판 or 게시글은 조회 안되도록 수정

* fix: 1페이지 조회 안되는 버그 수정

* fix: 누락된 응답 추가 (summary)

* fix: 최신글부터 조회하도록 수정

* test: 테스트 코드 작성

* move: ErrorResponseWrapper 위치 변경

* refactor: 코딩 컨벤션 준수

* refactor: 문자열 파싱 메서드 리팩토링

* test: 예외상황 테스트 추가

* feat: 메뉴 카테고리 목록 조회 (#153)

* feat: 메뉴 카테고리 조회 기능 구현

* refactor: 응답 DTO 생성 로직 수정

* refactor: cascade 처리 방식 변경

refactor: cascade 처리 방식 변경

* test: 테스트 문맥 변경

* feat: 복덕방 단일 조회 (#156)

* feat : controller 구현

* feat : repository에 id로 조회 기능 생성

* feat : service에 조회 기능 구현

* feat : 응답 DTO 구현

* refactor : domain 필드 자료형 변경

* refactor : stream 라인 변경

* refactor : 코드 축약

* test : 단일 조회 테스트 작성

* refactor : 에러 메시지 구체적으로 수정

* refactor : 기존 응답 구조와 동일하도록 수정

* test : 테스트에 이미지 추가

* refactor:� findByXXX -> getByXXX (#164)

* refactor: default method 활용한 getByXXX 메소드 추가

* style: 공벡 제거

* refactor: 복덕방에도 적용

* refactor: DataNotFoundException으로 묶어서 관리

* feat: 게시글 단일 조회 (#173)

* feat: 골격 작성

* feat: Repository 메서드 추가

* feat: 응답 객체 작성

* feat: Comment 도메인 엔티티 작성

* feat: 초안 완성

* fix: 로그인된 사용자 정보 습득 절차 수정

1. 비로그인 유저의 요청도 받도록 수정
2. 올바르지 않은 토큰 입력 시 권한 없음으로 진행되도록 수정

* rename: 응답 객체 변수명 수정

* refactor: 내용 요약 정보 최신화 시기 변경

기존: getter 호출 시마다 로직 수행하여 추출
변경: jpa 엔티티 로드 후 1회 로직 수행

* refactor: 유저 인증 정보 전달 방식 수정

기존: 컨트롤러단에서 @RequestHeader로 받아 전달
변경: 서비스단에서 RequestContextHolder로 습득

* feat: 게시글 조회 기록 저장 및 조회수 변동 구현

유저의 게시글 조회가 조회수 증가로 이어지는 간격을 1시간으로 설정

* fix: 게시글 조회 관련 버그 수정

기존에 게시글 조회 이력이 남아있는데 만료 시간이 지난 경우, 기존 내역을 업데이트해줘야 하나 새로 저장을 시도하여 구문 에러가 발생함.
위 상황에는 기존 내역을 업데이트하는 로직을 추가함으로써 문제 해결

* fix: 게시글 목록 조회 버그 수정

문제: 최대 페이지 초과 시 404 에러가 발생하지 않음.
원인: 예외처리 로직을 별도 함수로 분리했으나 기존 함수를 사용중이었음
해결: 예외처리가 적용된 함수로 호출문 변경

* fix: 조회 기록 Builder에 만료시간 기입

* test: 신규 테스트 추가 및 기존 테스트 수정

* other: 학과 조회 자료형 수정

학과 코드: Long -> String

* refactor: 코드스타일 개선

* rename: 메서드 네이밍 수정

* refactor: 빈 게시글 목록 조회 예외처리 제거

* refactor: IP 주소 습득 로직 분리

* test: 예외 제거에 따른 테스트 수정

* refactor: 연관관계 방식으로 로직 및 테스트 수정

* refactor: ArticleViewLog의 FK를 연관관계로 매핑

* refactor: Auth 어노테이션 활용하도록 변경 (#175)

* refactor: Auth 어노테이션 활용하도록 변경

* refactor: IPAddress Interceptor 추가

* chore: auth global 패키지로 이동

* style: 로깅 디테일

* refactor: 불필요한 UserType 제거

* docs: add swagger config (#176)

* refactor: Auth 어노테이션 활용하도록 변경

* refactor: IPAddress Interceptor 추가

* docs: swagger 추가

* chore: auth global 패키지로 이동

* style: 로깅 디테일

* refactor: 불필요한 UserType 제거

* refactor: Parameter Path 수정

* feat: 버전 단일 조회 (#168)

* feat: request dto 작성

* feat: 엔티티 작성

* feat: response dto 작성

* feat: 서비스 작성

* feat: 컨트롤러 작성

* feature: 기존 코드 제거 및 테스트 코드 추가

* feat: 리뷰 적용

* feat: VersionType 피드백 적용 및 Exception Test Case 추가

* feat: 공백 컨벤션 수정 & No newline at end of file 적용

* feat: 회원 탈퇴 구현 (#178)

* feat: 회원 탈퇴 구현

* refactor: 줄바꿈

* feat: 인기 게시글 목록 조회 (#181)

* feat: API 골격 작성

* feat: Redis 접근 기능 구

* feat: 만료 체크 로직 자동화

* feat: 인기 많은 게시글 출력 로직 작성

1. 모든 로그 조회
2. 조회수 내림차순 정렬
3. Limit로 자르기
4. 결과 반환

* refactor: 스케줄러 관심사 분리

* feat: 최근 조회된 게시글 수가 10개 미만이면 최신 게시글과 병합

* fix: 응답 객체 필드명 수정

* test: 테스트 작성

* refactor: 조회수 검증 로직 개선

* docs: 응답 객체 설명 추가

* test: 불필요한 콘솔 출력 제거

* refactor: redis 대신 mysql을 사용하도록 수정

* test: 테스트 수정

* feat: 사장님 정보 조회 (#182)

* feat: 도메인 엔티티 생성

* feat: 응답 객체 초안 작성

* feat: 도메인 클래스 작성

* feat: API 작성

1. 경로 수정(다른 API로 착각하고 작업중이었어서 수정)
2. 연관관계 매핑
3. API 로직 작성

* test: 테스트 작성

* refactor: 접근제어자 수정

* docs: 응답 객체 문서 주석 추가

* refactor: 트랜잭션 추가

* refactor: 예외처리 보완

* refactor: 양방향 연관관계 제거

* refactor: 잘못 기입된 Setter 제거

* refactor: 기본생성자 접근제어 추가

* refactor: 소프트딜리트된 대상은 제외

* refactor: 기본생성자 접근제어 추가

* style: 컨벤션 준수

* rename: 메서드명 변경

* feat: 사장님 자신의 모든 상점 조회 (#183)

* feat: 도메인 엔티티 생성

* feat: 응답 객체 초안 작성

* feat: 도메인 클래스 작성

* feat: API 작성

1. 경로 수정(다른 API로 착각하고 작업중이었어서 수정)
2. 연관관계 매핑
3. API 로직 작성

* test: 테스트 작성

* feat: API 작성

* test: 테스트 작성

* refactor: 트랜잭션 적용

* docs: 응답 객체 문서 주석 추가

* fix: 버그 수정

* refactor: 읽기 전용 트랜잭션으로 수정

* refactor: 개행 컨벤션 준수

* feat: 사장님 회원가입 인증번호 전송 요청 (#184)

* feat : owner controller 구현

* refactor: 기존 url에 맞게 수정

* feat: 이메일 관련 도메인 생성 & 검증 기능 구현

* feat: 중복 이메일인지 검증하는 기능 구현

* feat : AwsSesConfig 작성

* feat : SesMailSender 작성

* feat: 메일폼 작성 & 템플릿 가져오는 기능 구현

* feat: 메일 보내는 기능 구현

* feat: 메일 보낼 수 있는지 검사

* feat: OwnerInVerification 작성

* feat: redis에 저장

* fix: 타임리프 가져오는 에러 해결

* fix: 메일 전송 에러 해결

* refactor: mail form loader 설정 코드 메서드로 분리

* fix: 중복 이메일 검증 오류 해결

* feat: slack에 알림 보내는 기능 구현

* feat: 스웨거 작성

* refactor: 예외처리 수정

* feat: 슬랙 test url 작성

* feat: 레디스에 있는 사장님 정보 조회 구현

* test: 회원가입 인증번호 전송 요청 테스트 작성

* style: 클래스&메서드명 수정

* style: global의 commaon 패키지를 domain 패키지로 수정

* test: 테스트 메서드명 수정

* refactor: 인증번호 랜덤 생성을 따로 구현

* refactor: Aws SES 서울 리전으로 수정

* refactor: 이메일 검증 로직 수정

* fix: AWS SES 기존 Region으로 수정

* refactor: 스프링 이벤트 적용해서 슬랙 알림 전송하도록 수정

* refactor: 메일폼 가져오는 라이브러리 thymeleaf로 변경

* test: 슬래 전송 실패해도 200으로 응답하는 테스트로 수정

* test: 사장님 회원가입 인증번호 전송 요청 이벤트 발생 시 슬랙 전송 이벤트가 발생하는지 확인하는 테스트

* refactor: EmailAddress 객체 정적 팩토리 메서드를 사용하도록 수정

* refactor: OwnerInVerification 팩토리 메서드명 수정

* refactor: noticeEmailVerification()에서 코드 줄임

* refactor: 사용하지 않는 코드 제거

* test: MockBean을 SpyBean으로 수정

* test: MockBean 위치 변경

* test: application test yml에 thymeleaf 경로 설정 추가

* test: test/resources/mail/owner메일폼 추가

* test: test/resources/owner메일폼 제거

* test: MockBean 위치 AcceptanceTest로 변경

* style: record 변수 선언 세로로 위치 변경

* style: OwnerInVerification의 AccessLevel static import로 수정

* style: User 생성자 인수 일정하게 나열

* refactor: User 생성자 private으로 수정

* style: 모든 AccessLevel을 static import로 수정

* style: Owner, OwnerAttachment Doamin 위치 domain 패키지에서 model패키지로 수정

* refactor: aws ses 최신 버전으로 수정

* fix: 버전 매핑 에러 수정 (#191)

* fix: 버그 수정

* refactor: 예외 수정

* test: 테스트 분리

* feat: 버전 최신화 메서드 작성

* refactor: 응답 간결화 및 버그 수정

* feat: 이메일 중복 체크 (#194)

* feat: 이메일 중복 체크 구현

* feat: 이메일 중복 테스트 구현

* chore: application-test.yml 수정

- datasource 추가

* chore: application-test.yml 수정
- datasource 삭제

* refactor: ModelAttribute 적용

- @RequestParam -> @ModelAttribute

* feat: 이메일 중복 테스트 추가

- 이메일을 보내지 않으면 400
- 잘못된 이메일 형식이면 400

* style: 라인 포맷팅

* feat : 강의 목록 조회(학기별) (#192)

* feat : Lecture 클래스 생성

* feat : LectureApi 클래스 생성

* feat : LectureController 클래스 생성

* feat : LectureRepository 클래스 생성

* feat : LectureResponse DTO 생성

* feat : LectureService 클래스 생성

* feat : LectureApiTest 테스트 생성 후 통과

* refactor : 리뷰 반영

* refactor : classTime 반환타입 Integer[]로 변경

* refactor : 리뷰 반영

* refactor : Integer[]배열 List<Long>으로 변경

* refactor : TimeTable로 네이밍 변경

* refactor : 리뷰 반영

* feat: 버스 남은 시간 조회 - 셔틀버스, 등하교 버스 (#185)

* feat: API 골격 작성

* feat: mongoDB 의존성 추가

* feat: 응답 객체 작성

* feat: 예외 추가

* feat: 엔티티 작성

* feat: 미운행인 버스 필터링

* feat: enum 추가

* feat: 남은 시간 계산 로직 작성

* feat: 가장 최근 버스까지 남은 시간 응답 구현

* feat: 미운행 요일 제외 로직 추가

* feat: 버스 정거장 검증로직 적용 및 중복되는 시간 제외

* refactor: enum 객체를 사용하도록 수정

* refactor: 등하교 방향 기준 탐색에서 정류장 탐색으로 로직 변경

* remove: 미사용 코드 제거

BusCourse.isRunning()

* refactor: 테스트 mocking 위해 Clock 사용하도록 수정

* test: 테스트컨테이너 mongoDB 추가

* test: 셔틀 버스 조회 테스트 추가

* docs: API 문서에 파라미터 정보 명시

* remove: 불필요 주석 제거

* refactor: 누락된 Transactional 추가

* fix: mocking 변수 선언부 이동

* remove: 불필요 주석 제거

* refactor: 도착 시각 패턴 불일치 시 예외처리

* refactor: 반복문을 stream으로 변환

* refactor: 엔티티 필드로 List 사용 시 미리 초기화

* refactor: String 비교 시 NPE 예방

* refactor: 불필요한 매핑 메서드 제거

* refactor: 변수 분리

* rename: 변수명 수정

* refactor: Builder 생성자 접근제어자 수정

* refactor: enum 필드 간소화

* fix: 미사용 예외 사용하도록 수정

* feat: 출발지와 도착지가 일치할 경우 예외 처리

* refactor: IllegalArgumentException 예외 응답 수정

* feat : 학기 조회(전학기) (#196)

* feat : Semester get API 구현 완료

* chore : 리뷰 반영 코드 위치 수정 / 패키지 이름 변경

* style : 라인 포매팅 및 클래스 삭제

* test : 테스트 코드 수정

* feat : 사장님 식당 생성, 특정 상점 조회 API구현 (#199)

* feat: 상점 생성 기능 추가

* feat: 상점등록을 하기 위해 연관된 model정의

* feat: shop과 관련된 repository, exception작성

* feat: 1차 테스트 완료

* feat: 사장님 상점 생성 기능 구현

* feat: 특정상점조회 API구현

* refactor: 특정상점조회 테스트코드 수정

* chore: import경로 오류 수정

* chore: pull충돌 해결

* refactor: saveAll제거

* feat: 스웨거 설명 추가

* refactor: Builder생성자 접근제어 변경

* refactor: ShopResponse 적팩메이름 of로 변경

* refactor: ShopResponse 적팩메이름 of로 변경

* feat: 닉네임 중복 체크 (#189)

* refactor: 회원 탈퇴 반환타입 수정

* feat: 중복 데이터 예외 처리 추가

* feat: 닉네임 중복 예외 처리 추가

* feat: 닉네임 중복 체크 구현

* feat: 닉네임 중복 테스트

* refactor: 예외 처리 수정

* refactor: 닉네임 중복 로직 수정

* feat: 닉네임 중복 중복아닐때, 제약조건위반시 테스트 추가

* refactor: 파라미터 valid 적용

* refactor: 전역 데이터 중복 예외 제거(이미 전에 누가 만들었음)

* feat: 충돌 해결

* refactor: 코멘트 반영 수정

* feat : 식단 Api 구현 (#193)

* feat : 충돌 해결

* chore : VersionException 제거

* chore : SnakeCaseStrategy import static 수정

* refactor : 엔티티 id int -> Long 수정

* feat : 사장님 식당 생성, 특정 상점 조회 API구현 (#199)

* feat: 상점 생성 기능 추가

* feat: 상점등록을 하기 위해 연관된 model정의

* feat: shop과 관련된 repository, exception작성

* feat: 1차 테스트 완료

* feat: 사장님 상점 생성 기능 구현

* feat: 특정상점조회 API구현

* refactor: 특정상점조회 테스트코드 수정

* chore: import경로 오류 수정

* chore: pull충돌 해결

* refactor: saveAll제거

* feat: 스웨거 설명 추가

* refactor: Builder생성자 접근제어 변경

* refactor: ShopResponse 적팩메이름 of로 변경

* refactor: ShopResponse 적팩메이름 of로 변경

* feat : 커스텀 예외처리 추가

* chore : 충돌 해결

* chore : 테스트 정보 수정

* chore : 파라미터 설명 추가

* refactor : menu String -> List 수정

* fix : 테이블명 수정

* refactor : 현재시간에 대한 테스트를 위해 clock 모킹 추가

* remove : 사용하지 않는 예외 삭제

* chore : 테스트코드 public 제외, 불필요한 공백 삭제

---------

Co-authored-by: Hyeonsu Lee <[email protected]>

* feat : 특정상점 전체메뉴조회 api작성 (#208)

* feat: 특정 상점 모든 메뉴조회 api 작성

* feat: 특정 상점 모든 메뉴조회 api 테스트코드 작성

* feat: 코드리뷰사항 반영 1 차

* feat: 코드 리뷰사항 반영 2차

* feat : BCSD Lab 활동 api구현 (#207)

* feat: bcsd lab 활동 가져오기 1차 테스트 통과

* refactor: 반환 값을 리스트에서 맵으로 변경

* refactor: activitiy api 반환값 맵으로 변경

* refactor: controller가 ActivityApi를 구현하게 변경

* chore: 불필요한 문자 제거

* style: 서비스 로직 최적화

* chore: 불필요한 코드 삭제

* chore: 충돌 해결

* chore: 불필요한 문자 제거

* chore: 1차 코드 리뷰 피드백 적용

* chore: 테스트 정보 주정

* style: 테스트에 param 적용

* chore: 줄 바꿈 수정

* style: 반환 타입 을 dto로 변경

* style: 컨트롤러 변수의 반환타입을 명시적으로 변경

* chore: 피드백 반영

* chore: 테스트 코드 내용 추가

* chore: ActivitiesResponseList Dto이름 변경

* feat: Presigned URL 구현 (#210)

* feat: Enum Converter 추가

* style: 변수명 변경

* style: 불필요한 주석 제거

* refactor: Controller 테스트 제거

* refactor: 예외 수정

* chore: 패키지 구분

* refactor: 외부 API로 구분

* style: 공백제거

* test: 테스트 수정

* refactor: 변수명 변경

* refactor: fileName 포함하도록 수정

* refactor: request dto swagger 설명 추가

* refactor: passwordEncoder 활용하도록 수정 (#211)

* fix: 특정 상점 전체메뉴조회 응답 객체 미스매치 수정 (#214)

* feat: 특정 상점 모든 메뉴조회 api 작성

* feat: 특정 상점 모든 메뉴조회 api 테스트코드 작성

* feat: 코드리뷰사항 반영 1 차

* feat: 코드 리뷰사항 반영 2차

* fix: menus응답 수정

* chore: 충돌 해결

* chore: 충돌 해결

* chore: 응답 필드 이름 수정

* chore: 응답 필드 이름 수정

* feat: 시간표 기능 구현 (#212)

* feat: 시간표 조회 기능 추가

* feat: 시간표 생성 기능 추가

* feat: 시간표 수정/삭제 기능 추가

* fix: 시간표 수정 변경

* refactor: 리뷰 반영 1차

* refactor: 리뷰 반영 2차

* refactor: 리뷰 반영 3차

* refactor: UpdateTimeTableRequest 이름 수정

UpdateTimeTableRequest -> TimeTableUpdateRequest

* refactor: 리뷰 반영 5차

* refactor: 리뷰 반영 6차

* feat: 파일 단건 업로드 구현 (#227)

* feat: 파일 단건 업로드 구현

* refactor: swagger 문서 추가

* refactor: swagger 설명 추가

* refactor: 미사용 변수 제거

* refactor: 파일 최대크기 설정 변경

* refactor: 필드주입방싱을 생성자주입 방식으로 변경

* feat: 파일 다중 업로드 구현 (#229)

* feat: 파일 다중 업로드 구현

* docs: swagger 수정

* feat: 영양사 권한 추가 (#231)

* feat: 영양사 권한 추가

* fix: 후행쉼표 추가

* fix: 복덕방 전제 조회 응답 객체 미스매치 수정 (#215)

* chore: LandListItemResponse dto이름 LandsResponse로 변경

* fix: 반환값 list에서 key value형태로 변경

* fix: UploadServiceTest 수정

* style: 라인 포맷팅

* chore: ActivityResponse 예시 수정

* style: dto를 일반 클래스에서 record클래스로 수정

* style: ActivitiesResponse dto를 일반 클래스에서 record클래스로 수정

* feat: FCM 설정 (#232)

* refactor: 상점 Entity 연관관계 설정 (#237)

* feat: shop연관관계 수정

* refactor: 서비스레이어 dto변환 로직 제거

* feat: 상점사장님이 특정 상점을 조회하는 api작성 (#240)

* feat: 상점조회 api작성

* chore: 라인포맷팅

* chore: 권한이 없는 사장님이 특정 상점 조회 테스트 코드 분리

---------

Co-authored-by: HyeonsuLee <[email protected]>

* feat : 영양사 품절 정보 입력 (#238)

* feat : Dining 클래스에 soldOut 컬럼 추가

* feat : DiningResponse DTO에 soldOut 컬럼 추가

* feat : flyway DB에 sold_out 컬럼 추가

* feat : SoldOutRequest DTO 클래스 추가(메뉴아이디, 품절여부)

* feat : CoopDiningController, CoopDiningApi 클래스 추

* feat : CoopDiningService 클래스 추가

* feat : DiningRepository 품절여부 변경 메서드 추가, 테스트용 메서드 추

* feat : 영양사 품절 요청 테스트, 권한 확인 테스트 추

* feat : 기존 테스트 동작하도록 수정

* feat : 리뷰 반

* feat : 리뷰 반영, 테스트 방식 변

* feat : coop 패키지 분

* feat : setSoldOut() 메서드 추

* feat : update 방식을 조회 후 set해주는 방식으로 변

* feat : 사용하지 않는 메서드 삭

* feat : 패키지 변경으로 인한 테스트 변경

* feat : 인가 테스트로 변경

* feat : getById()로 수정

* feat : 개행 추가

* feat : 메뉴가 없는 경우 예외 추가

* refactor: 컨벤션 반영

* refactor: snakecase로 변경

* feat : 영양사 코너별 식단 사진 업로드  (#241)

* feat : 충돌 해결

* chore : VersionException 제거

* chore : SnakeCaseStrategy import static 수정

* refactor : 엔티티 id int -> Long 수정

* feat : 사장님 식당 생성, 특정 상점 조회 API구현 (#199)

* feat: 상점 생성 기능 추가

* feat: 상점등록을 하기 위해 연관된 model정의

* feat: shop과 관련된 repository, exception작성

* feat: 1차 테스트 완료

* feat: 사장님 상점 생성 기능 구현

* feat: 특정상점조회 API구현

* refactor: 특정상점조회 테스트코드 수정

* chore: import경로 오류 수정

* chore: pull충돌 해결

* refactor: saveAll제거

* feat: 스웨거 설명 추가

* refactor: Builder생성자 접근제어 변경

* refactor: ShopResponse 적팩메이름 of로 변경

* refactor: ShopResponse 적팩메이름 of로 변경

* feat : 커스텀 예외처리 추가

* chore : 충돌 해결

* chore : 테스트 정보 수정

* chore : 파라미터 설명 추가

* refactor : menu String -> List 수정

* fix : 테이블명 수정

* refactor : 현재시간에 대한 테스트를 위해 clock 모킹 추가

* remove : 사용하지 않는 예외 삭제

* chore : 테스트코드 public 제외, 불필요한 공백 삭제

* feat : 영양사 컨트롤러, 서비스 구현

* feat : 식단 이미지 변수 추가

* feat : 영양사 권한 및 영양사 도메인 enum 추가

* feat : image 컬럼 추가

* feat : Image 업로드 요청 DTO 생성

* feat : 영양사님의 사진 업로드 테스트 추가

* feat : 특정 식단의 이미지 업데이트 쿼리 추가

* feat : 쿼리문 수정

* chore : log 제거

* refactor : coop Api 분리

* refactor : image_url로 변수명 수정

* refactor : image_url로 변수명 수정

* chore : menuId로 변수명 구체화

* chore : V$ -> V3 버전 수정

* remove : repository 계층 트랜잭션 제거(service 계층 처리)

* feat : 허용되지 않은 권한에 대한 테스트 추가

* refactor : update 수정(setter 이용)

* refactor : 테스트 - 허용되지않은 권한 수정

* refactor : getById() 추가

* chore : Optional 검증을 위해 findById() -> getById() 수정

* remove() : DynamicUpdate 제거

* chore : 충돌 해결

* chore : 파일 위치 수정

---------

Co-authored-by: Hyeonsu Lee <[email protected]>

* feat: 사장님 회원가입 (#244)

* feat: 사장님 회원가입 및 슬랙 알림발송 구현

* refactor: slack 알림발송 로직 수정

* refactor: 사장님 회원가입 로직 구성

* test: 미사용 테스트 제거

* style: 코드 포맷팅

* test: 테스트 수정

* refactor: update flyway

* feature: 상점 사장님 관련 모든 GET API를 작성했습니다. (#245)

* feat: 상점조회 api작성

* chore: 라인포맷팅

* feat: 점주전용 상점관련 조회 api작성

* feat: 사장님 상점 조회 api get 모두 작성

* chore: 리뷰사항 반영

---------

Co-authored-by: HyeonsuLee <[email protected]>

* fix: 게시판 공지사항 판단 로직 수정 (#246)

* fix: 공지사항 판단 로직 수정

* fix: 공지사항 판단 로직 재수정

* refactor: 게시판 태그 enum으로 분리

* feat: 사장님 인증코드 검증 (#248)

* feat: 사장님 인증번호 인증 구현

* refactor: 로직 수정 및 인증이 완료된 값에 대해 레디스 제거

* test: 테스트 추가

* build: 테이블 복원

* refactor: 인증방식 수정, 사용자 인증없이 사용자 id만 필요한 경우 `@UserId`를 사용하도록 수정

* test: MySQL 테스트 컨테이너 버전 8.0.29로 수정

* refactor: ArgumentResolver Webconfig 등록

* refactor: 파일업로드 임시 토큰에 대한 허용

* test: 테스트 수정

* refactor: 변수 사용

* fix: 전공별 커리큘럼 링크 수정, 새로운 과 추가 (#251)

* fix: 전공별 커리큘럼 링크 수정, 새로운 과 추가

* fix: 전공별 커리큘럼 링크 다시 수정

* chore: DeptListItemResponse이름을 DeptsResponse로 변경

* style: 와일드 카드 사용하지 않는 것으로 다시 원래대로 복구

* chore: 주석 설명 변경

* style: 열거형 사용해서 필터 하게 변경

* feat: 사장님 비밀번호 재발급 구현 (#253)

* feat: 사장님 인증번호 인증 구현

* refactor: 로직 수정 및 인증이 완료된 값에 대해 레디스 제거

* test: 테스트 추가

* build: 테이블 복원

* refactor: 인증방식 수정, 사용자 인증없이 사용자 id만 필요한 경우 `@UserId`를 사용하도록 수정

* test: MySQL 테스트 컨테이너 버전 8.0.29로 수정

* refactor: ArgumentResolver Webconfig 등록

* refactor: 파일업로드 임시 토큰에 대한 허용

* test: 테스트 수정

* feat: 사장님 비밀번호 찾기 API 구현

* refactor: 이메일 형식 수정

* refactor: 인증 제거

* feat : 회원 정보 수정 (#236)

* feat : DTO 추가

* feat : 유저 수정 추가

* test : log.all() 삭제 및 422번 오류 삭제

* chore : update 수정 및 사용하지 않는 Request 객체 삭제

* refactor : update 이름 수정

* refactor : DTO major 라인 포맷팅

* chore : bulider() 미사용 및 update 로직 수

* chore : 리뷰 반영 및 학부/학번 404 -> 400번 오류로 수정

* chore : ApiResponse 수정

* chore : 리뷰 반영

* chore : withDetail 수정

* chore : 리뷰 반영(코드 스타일 및 메소드 분리)

* chore : Local 내 회원 정보 조회 오류 확인 추가

* chore : 삼항 연산자 제거

* chore : Response department null 처리 추가

* chore : 변수 수정 및 Gender null 처리 추가

* chore : 변수 수정 및 department null 처리 추가

* chore : DB 학과 한글 저장

* chore : DB 저장 체크(Enumerated 삭제)

* chore : DB 저장 체크(Enumerated 삭제 및 model 이름 수정)

* chore : ENUM 사용하도록 재수정

* fix : ENUM -> STRING 사용

* chore : 검증 ENUM으로 이동

* chore : ENUM 영어 변수로 수정

* chore : ENUM 후행 쉼표 추가

* fix: 학기 최신 순으로 반환 (#268)

* feat : 알림 구독 Api 구현 (#269)

* feat : 충돌 해결

* chore : VersionException 제거

* chore : SnakeCaseStrategy import static 수정

* refactor : 엔티티 id int -> Long 수정

* feat : 사장님 식당 생성, 특정 상점 조회 API구현 (#199)

* feat: 상점 생성 기능 추가

* feat: 상점등록을 하기 위해 연관된 model정의

* feat: shop과 관련된 repository, exception작성

* feat: 1차 테스트 완료

* feat: 사장님 상점 생성 기능 구현

* feat: 특정상점조회 API구현

* refactor: 특정상점조회 테스트코드 수정

* chore: import경로 오류 수정

* chore: pull충돌 해결

* refactor: saveAll제거

* feat: 스웨거 설명 추가

* refactor: Builder생성자 접근제어 변경

* refactor: ShopResponse 적팩메이름 of로 변경

* refactor: ShopResponse 적팩메이름 of로 변경

* feat : 커스텀 예외처리 추가

* chore : 충돌 해결

* chore : 테스트 정보 수정

* chore : 파라미터 설명 추가

* refactor : menu String -> List 수정

* fix : 테이블명 수정

* refactor : 현재시간에 대한 테스트를 위해 clock 모킹 추가

* remove : 사용하지 않는 예외 삭제

* chore : 테스트코드 public 제외, 불필요한 공백 삭제

* feat : 영양사 컨트롤러, 서비스 구현

* feat : 식단 이미지 변수 추가

* feat : 영양사 권한 및 영양사 도메인 enum 추가

* feat : image 컬럼 추가

* feat : Image 업로드 요청 DTO 생성

* feat : 영양사님의 사진 업로드 테스트 추가

* feat : 특정 식단의 이미지 업데이트 쿼리 추가

* feat : 쿼리문 수정

* chore : log 제거

* refactor : coop Api 분리

* refactor : image_url로 변수명 수정

* refactor : image_url로 변수명 수정

* chore : menuId로 변수명 구체화

* chore : V$ -> V3 버전 수정

* remove : repository 계층 트랜잭션 제거(service 계층 처리)

* feat : 허용되지 않은 권한에 대한 테스트 추가

* refactor : update 수정(setter 이용)

* refactor : 테스트 - 허용되지않은 권한 수정

* refactor : getById() 추가

* chore : Optional 검증을 위해 findById() -> getById() 수정

* remove() : DynamicUpdate 제거

* chore : 충돌 해결

* chore : 파일 위치 수정

* feat : 알림 구독 엔티티 생성

* feat: flyway 테이블 추가

* feat: API 형태 추가

* feat: 알림구독 추가, 삭제 컨트롤러 작성

* feat: 레포지토리 추가중..

* feat : delete api 수정

* feat: post 수정 중 ..

* feat: GET 요청 반환값 만들기

* feat: 안정화

* feat: notification 팩토리 추가

* feat: getNotification 테스트코드 작성중

* test: 테스트 작성 중..

* feat: getNotification 테스트코드 작성완료

* feat: 스네이크케이스로 변경 후 디바이스토큰 추가 테스트코드 작성

* feat: post반환값 수정

* feat : deleteNotification 테스트 코드 추가

* feat : NotificationApiTest 완성

* remove : 알림 구독 관련 테스트 제거

* fix: 상속 받는 예외 클래스 수정

* fix: BIGINT -> UNSIGNED INT 수정

* test: koinAppUrl 추가

* style: 라인포맷팅

* test: .log().all() 제거

---------

Co-authored-by: Hyeonsu Lee <[email protected]>
Co-authored-by: songsunkook <[email protected]>
Co-authored-by: HyeonsuLee <[email protected]>
Co-authored-by: 최준호 <[email protected]>

* feat: 메뉴 변경 여부 추가 (#250)

* feat: 메뉴 변경 확인 추가

* refactor: 테스트 수정

* feat: flyway 컬럼 추가

* refactor: V4에서 V5로 변경

* rename: V5에서 V6으로 변경

* Revert "feat: 메뉴 변경 여부 추가 (#250)" (#273)

This reverts commit f8458cce0f1b7fdbb05089d15d59619c39b0c6f5.

* refactor: 메뉴 변경 여부 컬럼명 통일 (#274)

* feat: 메뉴 변경 확인 추가

* refactor: 테스트 수정

* feat: flyway 컬럼 추가

* refactor: V4에서 V5로 변경

* rename: V5에서 V6으로 변경

* refactor: 필드명 변경

* refactor: 필드명 변경

* feat: 버스 남은 시간 조회 - 시내버스 (#239)

* feat: API 골격 작성

* feat: mongoDB 의존성 추가

* feat: 응답 객체 작성

* feat: 예외 추가

* feat: 엔티티 작성

* feat: 미운행인 버스 필터링

* feat: enum 추가

* feat: 남은 시간 계산 로직 작성

* feat: 가장 최근 버스까지 남은 시간 응답 구현

* feat: 미운행 요일 제외 로직 추가

* feat: 버스 정거장 검증로직 적용 및 중복되는 시간 제외

* refactor: enum 객체를 사용하도록 수정

* refactor: 등하교 방향 기준 탐색에서 정류장 탐색으로 로직 변경

* remove: 미사용 코드 제거

BusCourse.isRunning()

* refactor: 테스트 mocking 위해 Clock 사용하도록 수정

* test: 테스트컨테이너 mongoDB 추가

* test: 셔틀 버스 조회 테스트 추가

* feat: 시내버스 Open API 호출 로직 작성

* feat: 방향 판단 로직 추가

* fix: 호출 예외 수정

* feat: json 파싱 로직 작성

1. json 파싱 로직 작성
2. 결과 코드 검증
3. 예외 추가 (500 반환)

* feat: API 골격 작성

* feat: mongoDB 의존성 추가

* feat: 응답 객체 작성

* feat: 예외 추가

* feat: 엔티티 작성

* feat: 미운행인 버스 필터링

* feat: enum 추가

* feat: 남은 시간 계산 로직 작성

* feat: 가장 최근 버스까지 남은 시간 응답 구현

* feat: 미운행 요일 제외 로직 추가

* feat: 버스 정거장 검증로직 적용 및 중복되는 시간 제외

* refactor: enum 객체를 사용하도록 수정

* refactor: 등하교 방향 기준 탐색에서 정류장 탐색으로 로직 변경

* remove: 미사용 코드 제거

BusCourse.isRunning()

* refactor: 테스트 mocking 위해 Clock 사용하도록 수정

* test: 테스트컨테이너 mongoDB 추가

* test: 셔틀 버스 조회 테스트 추가

* docs: API 문서에 파라미터 정보 명시

* remove: 불필요 주석 제거

* refactor: 누락된 Transactional 추가

* fix: mocking 변수 선언부 이동

* remove: 불필요 주석 제거

* refactor: 도착 시각 패턴 불일치 시 예외처리

* refactor: 반복문을 stream으로 변환

* refactor: 엔티티 필드로 List 사용 시 미리 초기화

* refactor: String 비교 시 NPE 예방

* refactor: 불필요한 매핑 메서드 제거

* refactor: 변수 분리

* rename: 변수명 수정

* fix: 충돌 해결

* refactor: Builder 생성자 접근제어자 수정

* refactor: enum 필드 간소화

* fix: 충돌 해결

* feat: 버스번호 필터링

* feat: 시내버스 조회 정보를 레디스 캐시로 저장

* feat: 버전 최신화 메서드 작성

* refactor: Pair를 사용하지 않도록 수정

* feat: ApiType 추가

- BusType과 BusOpenApiRequester 타입 맵핑을 위함

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* refactor: 주석 추가

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* refactor: record로 수정

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* refactor: 시내버스 캐시 저장 정보 변경

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* feat: 시내버스 버스 번호 반환 추가

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* feat: 버스 타입별 로직 분기 추가

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* refactor: 캐싱 정보 추가

- 남은 시간만 캐싱 -> 버스 도착 정보 통째로 캐싱
- api url 수정
- 버전 정보 저장
- forEach -> for

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* refactor: 시내버스 남은 시간 계산 로직 추가

- 버스 캐싱 정보 수정
- 시내버스 남은 시간 계산 로직 추가

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* refactor: 응답 객체 수정

- 기존: "now_bus": {"bus_number": null, ...}
- 수정: "now_bus": null

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* refactor: 주석 추가

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* refactor: 응답 객체 null 체크 추가

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* feat: test 작성

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* refactor: 빈 배열 반환하도록 수정

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* refactor: 도착시간순 정렬 추가

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* refactor: 시간 차 수정

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* refactor: null 필터링 수정

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* refactor: updated_at 변경 로직 수정

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* refactor: .log().all() 삭제

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* refactor: switch문 if문으로 변경

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* refactor: 복붙 문제 수정

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* style: 컨벤션 적용

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* rename: BusInfoCache -> BusCache 이름 변경

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* refactor: 주석 수정

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* style: 컨벤션 적용

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* refactor: .log().all() 삭제

Co-authored-by: dradnats1012 <[email protected]>

* refactor: 패키지 분리

Co-authored-by: dradnats1012 <[email protected]>

* refactor: 상수, 검증 로직 분리

Co-authored-by: dradnats1012 <[email protected]>

* refactor: 파일 이름 수정

Co-authored-by: dradnats1012 <[email protected]>

* refactor: Bus.java 삭제와 구조 변경

Co-authored-by: dradnats1012 <[email protected]>

* refactor: 시내버스 남은 시간 - Redis 테스트 수정

Co-authored-by: dradnats1012 <[email protected]>

* refactor: 시내버스 남은 시간 - OpenApi 테스트 중간 작성

Co-authored-by: dradnats1012 <[email protected]>

* refactor: 변수명 변경

Co-authored-by: dradnats1012 <[email protected]>

* feat: 시내버스 남은 시간 - OpenApi 테스트 추

Co-authored-by: dradnats1012 <[email protected]>

* refactor: 시내버스 테스트 수정

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* refactor: Constant 클래스 enum으로 변경

* refactor: 캐시 만료 시간 분리

* Revert "refactor: Constant 클래스 enum으로 변"

This reverts commit 5dcbf975cccbbd276dfa5e8dbbb52864eca6c209.

* Revert "Revert "refactor: Constant 클래스 enum으로 변""

This reverts commit f321b7eb60f0d5426a1fef4d839c4861a08198a2.

* refactor: Constant 클래스 네이밍 변경

* feat: 버스 번호 필터링 추가

- 400, 402, 405

Co-authored-by: dradnats1012 <[email protected]>

* chore: 충돌 해결

Co-authored-by: dradnats1012 <[email protected]>

* style: 줄바꿈

Co-authored-by: dradnats1012 <[email protected]>

* refactor: 중괄호 제거

Co-authored-by: dradnats1012 <[email protected]>

* test: OPEN_API_KEY 추가

* refactor: 리뷰 반영

* refactor: 디버그 코드 삭제

---------

Co-authored-by: songsunkook <[email protected]>
Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* feature: 상점 사장님 관련 추가, 수정, 삭제 / 일반유저 모든 상점 조회 api작성 (#270)

* feat: delete Api 구현

* feat: 테스트코드 작성

* feat: 메뉴생성요청 dto작성

* feat: 상점 사장님 추가, 수정 / 일반 유저 모든상점조회 api 작성

* feat: 라인 포맷팅

* feat: 테스트코드 로그 제거

* feat: 피드백 반영 1차

* chore: 디버깅용 출력 제거

* chore: 리뷰반영 2

---------

Co-authored-by: HyeonsuLee <[email protected]>

* feat: spring actuator 추가 (#276)

Co-authored-by: Jang Jun Young <[email protected]>

* fix: 상점 생성 서버에러(@Valid 추가) (#281)

Co-authored-by: HyeonsuLee <[email protected]>

* refactor: 조회 방식 수정 (#284)

* feat: 상점 모든 카테고리 조회 api작성 (#282)

* feat: delete Api 구현

* feat: 테스트코드 작성

* feat: 메뉴생성요청 dto작성

* feat: 상점 사장님 추가, 수정 / 일반 유저 모든상점조회 api 작성

* feat: 라인 포맷팅

* feat: 테스트코드 로그 제거

* feat: 피드백 반영 1차

* chore: 디버깅용 출력 제거

* chore: 리뷰반영 2

* feat: 모든 상점 카테고리 조회 api작성

* chore: 충돌해결

* chore: 충돌해결

---------

Co-authored-by: HyeonsuLee <[email protected]>

* �fix: student Entity 필드 수정 (#286)

* refactor: #283 작업 revert

* refactor: UserIdentity Ordinal로 수정

* refactor: 로그아웃, 탈퇴에 대한 권한 수정 (#288)

* refactor: 이메일 인증 요청 dto 값 수정 (#290)

* refactor: dto 네이밍 수정

* refactor: 사용자 성별 반환값 ordinal로 수정

* feat: lecture blank error (#293)

* fix: 공백 문자 처리

* chore: log 제거

* style: 코드 효율적으로 전환

* fix: timetables 반환값 수정 (#294)

* refactor: 반환값 형태 수정

* test: 테스트 값 수정

* test: 주석 제거

* refactor: trim -> strip 으로 변경

* test: 로그 제거

* fix/291 get lecture blank error reopen (#296)

* fix: 공백 문자 처리

* chore: log 제거

* style: 코드 효율적으로 전환

* fix: 완전 비어 있는 리스트 처리

* chore: 우선 복구

* feat: 가게 이벤트 정보 조회 (#298)

* feat: stage logback 적용 (#300)

* feat: 로깅 추가

* feat: dev profile에만 추가되도록 구성

* feat: slack 알림발송 로직 추가

* refactor: 테스트용 코드 제거

* feat: slack 알림 메시지 수정 (#306)

* feat: slack 알림 메시지 수정

* feat: 피드백 반영

* feat: 피드백 반영2

---------

Co-authored-by: Jang Jun Young <[email protected]>

* fix : userGender null 값 처리 추가 (#304)

* feat: get member (#311)

* feat: Get /members 구현

* feat: 사용자 단건조회 구현

* test: 테스트 구성

* fix: 없는 상점 조회 시 예외 발생 (#313)

* fix: 없는 상점 조회시 예외 던지기

* chore: 개행 삭제

* chore: 라인포맷팅

---------

Co-authored-by: HyeonsuLee <[email protected]>

* fix: 연관관계 수정 (#315)

Co-authored-by: HyeonsuLee <[email protected]>

* fix: 상점 사장님 회원가입 에러 수정 (#316)

* fix: 연관관계 수정

* fix: 연관관계 수정

---------

Co-authored-by: HyeonsuLee <[email protected]>

* Fix: bearerToken 추출 오류 수정 (#309)

* refactor: 강의시간 문자열 분리 수정

* refactor: BEARER_TYPE 수정

* refactor: 수정

* feat: is_event값 추가 (#302)

* test: add JsonAssertions

* feat: isEvent 값 추가

* test: 인자 변수로 수정

* test: 테스트 수정

* feat: 시외버스 API 구현 (#317)

* feat: API 골격 작성

* feat: mongoDB 의존성 추가

* feat: 응답 객체 작성

* feat: 예외 추가

* feat: 엔티티 작성

* feat: 미운행인 버스 필터링

* feat: enum 추가

* feat: 남은 시간 계산 로직 작성

* feat: 가장 최근 버스까지 남은 시간 응답 구현

* feat: 미운행 요일 제외 로직 추가

* feat: 버스 정거장 검증로직 적용 및 중복되는 시간 제외

* refactor: enum 객체를 사용하도록 수정

* refactor: 등하교 방향 기준 탐색에서 정류장 탐색으로 로직 변경

* remove: 미사용 코드 제거

BusCourse.isRunning()

* refactor: 테스트 mocking 위해 Clock 사용하도록 수정

* test: 테스트컨테이너 mongoDB 추가

* test: 셔틀 버스 조회 테스트 추가

* feat: 시내버스 Open API 호출 로직 작성

* feat: 방향 판단 로직 추가

* fix: 호출 예외 수정

* feat: json 파싱 로직 작성

1. json 파싱 로직 작성
2. 결과 코드 검증
3. 예외 추가 (500 반환)

* feat: API 골격 작성

* feat: mongoDB 의존성 추가

* feat: 응답 객체 작성

* feat: 예외 추가

* feat: 엔티티 작성

* feat: 미운행인 버스 필터링

* feat: enum 추가

* feat: 남은 시간 계산 로직 작성

* feat: 가장 최근 버스까지 남은 시간 응답 구현

* feat: 미운행 요일 제외 로직 추가

* feat: 버스 정거장 검증로직 적용 및 중복되는 시간 제외

* refactor: enum 객체를 사용하도록 수정

* refactor: 등하교 방향 기준 탐색에서 정류장 탐색으로 로직 변경

* remove: 미사용 코드 제거

BusCourse.isRunning()

* refactor: 테스트 mocking 위해 Clock 사용하도록 수정

* test: 테스트컨테이너 mongoDB 추가

* test: 셔틀 버스 조회 테스트 추가

* docs: API 문서에 파라미터 정보 명시

* remove: 불필요 주석 제거

* refactor: 누락된 Transactional 추가

* fix: mocking 변수 선언부 이동

* remove: 불필요 주석 제거

* refactor: 도착 시각 패턴 불일치 시 예외처리

* refactor: 반복문을 stream으로 변환

* refactor: 엔티티 필드로 List 사용 시 미리 초기화

* refactor: String 비교 시 NPE 예방

* refactor: 불필요한 매핑 메서드 제거

* refactor: 변수 분리

* rename: 변수명 수정

* fix: 충돌 해결

* refactor: Builder 생성자 접근제어자 수정

* refactor: enum 필드 간소화

* fix: 충돌 해결

* feat: 버스번호 필터링

* feat: 시내버스 조회 정보를 레디스 캐시로 저장

* feat: 버전 최신화 메서드 작성

* refactor: Pair를 사용하지 않도록 수정

* feat: ApiType 추가

- BusType과 BusOpenApiRequester 타입 맵핑을 위함

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* refactor: 주석 추가

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* refactor: record로 수정

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* refactor: 시내버스 캐시 저장 정보 변경

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* feat: 시내버스 버스 번호 반환 추가

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* feat: 버스 타입별 로직 분기 추가

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* refactor: 캐싱 정보 추가

- 남은 시간만 캐싱 -> 버스 도착 정보 통째로 캐싱
- api url 수정
- 버전 정보 저장
- forEach -> for

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* refactor: 시내버스 남은 시간 계산 로직 추가

- 버스 캐싱 정보 수정
- 시내버스 남은 시간 계산 로직 추가

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* refactor: 응답 객체 수정

- 기존: "now_bus": {"bus_number": null, ...}
- 수정: "now_bus": null

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* refactor: 주석 추가

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* refactor: 응답 객체 null 체크 추가

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* feat: test 작성

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* refactor: 빈 배열 반환하도록 수정

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* refactor: 도착시간순 정렬 추가

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* refactor: 시간 차 수정

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* refactor: null 필터링 수정

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* refactor: updated_at 변경 로직 수정

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* refactor: .log().all() 삭제

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* refactor: switch문 if문으로 변경

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* refactor: 복붙 문제 수정

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* style: 컨벤션 적용

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* rename: BusInfoCache -> BusCache 이름 변경

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* refactor: 주석 수정

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* style: 컨벤션 적용

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* refactor: .log().all() 삭제

Co-authored-by: dradnats1012 <[email protected]>

* refactor: 패키지 분리

Co-authored-by: dradnats1012 <[email protected]>

* refactor: 상수, 검증 로직 분리

Co-authored-by: dradnats1012 <[email protected]>

* refactor: 파일 이름 수정

Co-authored-by: dradnats1012 <[email protected]>

* refactor: Bus.java 삭제와 구조 변경

Co-authored-by: dradnats1012 <[email protected]>

* refactor: 시내버스 남은 시간 - Redis 테스트 수정

Co-authored-by: dradnats1012 <[email protected]>

* refactor: 시내버스 남은 시간 - OpenApi 테스트 중간 작성

Co-authored-by: dradnats1012 <[email protected]>

* refactor: 변수명 변경

Co-authored-by: dradnats1012 <[email protected]>

* feat: 시내버스 남은 시간 - OpenApi 테스트 추

Co-authored-by: dradnats1012 <[email protected]>

* refactor: 시내버스 테스트 수정

Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* refactor: Constant 클래스 enum으로 변경

* refactor: 캐시 만료 시간 분리

* Revert "refactor: Constant 클래스 enum으로 변"

This reverts commit 5dcbf975cccbbd276dfa5e8dbbb52864eca6c209.

* Revert "Revert "refactor: Constant 클래스 enum으로 변""

This reverts commit f321b7eb60f0d5426a1fef4d839c4861a08198a2.

* refactor: Constant 클래스 네이밍 변경

* feat: 버스 번호 필터링 추가

- 400, 402, 405

Co-authored-by: dradnats1012 <[email protected]>

* chore: 충돌 해결

Co-authored-by: dradnats1012 <[email protected]>

* style: 줄바꿈

Co-authored-by: dradnats1012 <[email protected]>

* refactor: 중괄호 제거

Co-authored-by: dradnats1012 <[email protected]>

* test: OPEN_API_KEY 추가

* refactor: 리뷰 반영

* feat : 인수인계용 커밋

* feat: 시외버스기능구현

Co-authored-by: dradnats1012 <[email protected]>, Choon0414 <[email protected]>

* feat: 시외버스 리팩터링

Co-authored-by: dradnats1012 <[email protected]>, Choon0414 <[email protected]>

* test: 테스트 수정

Co-authored-by: dradnats1012 <[email protected]>, Choon0414 <[email protected]>

* test: 테스트 수정

Co-authored-by: dradnats1012 <[email protected]>, Choon0414 <[email protected]>

* test: 테스트 수정

Co-authored-by: dradnats1012 <[email protected]>, Choon0414 <[email protected]>

* test: 테스트 제거

* refactor: 미사용 메소드 제거

* refactor: 네이밍 수정

* refactor: 네이밍 수정

* refactor: 네이밍 수정

* refactor: ttl 선언방식 수정

* refactor: 불필요한 추상화 제거

* refactor: 네이밍 수정

* style: 공백제거

* style: 코드 포맷팅

* style: 미사용 메소드 제거

* style: 미사용 클래스 제거

* refactor: API 사용 수정

* refactor: 클래스명 수정

---------

Co-authored-by: songsunkook <[email protected]>
Co-authored-by: 박성빈 <[email protected]>
Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>

* fix: 사장님 가게정보 수정 오류 (#319)

* refactor: cascade 옵션 수정

* refactor: flush 추가

* fix: menu 정보 수정 시에도 flush 추가 (#320)

* refactor: cascade 옵션 수정

* refactor: flush 추가

* refactor: flush 추가

* refactor: 식단 품절, 변경 여부 (Boolean -> 시간)으로 변경 (#310)

* refactor: flyway 추가

Co-authored-by: dradnats1012 <[email protected]>

* refactor: Boolean에서 LocalDateTime으로 변경

Co-authored-by: dradnats1012 <[email protected]>

* test: Boolean에서 LocalDateTime으로 수정

Co-authored-by: dradnats1012 <[email protected]>

* test: DisplayName 수정

Co-authored-by: dradnats1012 <[email protected]>

* refactor: 품절 취소로직 추가

Co-authored-by: dradnats1012 <[email protected]>

* refactor: DTO NotNull Valid 추가

Co-authored-by: dradnats1012 <[email protected]>

---------

Co-authored-by: dradnats1012 <[email protected]>

* feat: 유저 권한 조회 API 작성 (#322)

* feat: 유저 권한 조회 API 작성

* test: 테스트 작성

* refactor: 식단 조회 API DTO 필드명 변경 (#324)

* fix: @Param추가 (#327)

Co-authored-by: HyeonsuLee <[email protected]>

* feat: 학생 회원가입 (#271)

* feat: 에외 추가

* feat: 이메일 폼 추가

* feat: 골격 추가

* feat: 서비스 로직 구현

* feat: 인증 완료 폼

* feat: 회원 등록 폼 타임리프 설정

* feat: 이메일 인증 실패 폼

* feat: Controller 추가

* feat: 인증 완료시 isAuthed true 변경

* feat: 학번 학부 인증 및 UserIdentity->ordinal로 변경

* feat: 학생 회원가입 dto

* feat: Service 구현

* feat: 토큰으로 부터 찾는 메서드 Repository에 추가

* feat: authToken 암호화 Util

* feat: koreatehc.ac.kr 도메인 검증

* feat: 학번과 학부 검증

* feat: 슬랙 알림

* feat: 학생 이메일 요청, 가입 이벤트

* feat: 토큰 유효기간 설정 DateUtil

* feat: 잘못된 학번 형식 예외

* feat: 이메일 인증 검증 dto

* feat: 회원가입 이메일 인증 폼 데이터

* refactor: contorller 메서드 수정

* feat: 테스트 작성

* refactor: 컨벤션 맞게 수정

* refactor: log().all() 제거

* refactor: 컨벤션에 맞게 수정

* refactor: authToken passwordEncoder를 통해 암호화

* refactor: 학번 검증 수정

* refactor: 학번 검증 수정

* refactor: 메서드 네이밍수정

* refactor: 필드 controller->service 이동

* refactor: 유효하지 않은 데이터 400으로 반환

* refactor: 라인포맷팅

* refactor: 라인포맷팅

* feat: 에러코드반환수정 및 학번검증 테스트 추가

* refactor: 오류 해결

* refactor: 폼 반환 로직 수정

* refactor: 라인포맷팅

* refactor: 날짜 관련 로직 수정

* refactor: 호스트주소 추출 어노테이션으로 변경

* refactor: 학부,학번 검증 로직 변경

* refactor: 비밀번호 example 중복 제거

* refactor: 폼 반환 service 로직 수정

* refactor: 호스트 주소 어노테이션 적용

* refactor: 머지 형식에 맞게 수정

* refactor: 최신 전공 형식에 맞게 수정

* refactor: InvalidDataException -> IllegalException 변경

* refactor: 개행 수정

* refactor: camelCase로 수정

* refactor: 테스트명 수정

* refactor: expiredAt clock인자 받게 수정

* refactor: authToken UUID로 수정

* refactor: LocalTimeStringConverter 이름을 LocalTimeToHHmmStringConverter로 변경

* refactor: User객체 날짜 관련 속성LocalTimeToHHmmStringConverter 이용

* refactor: 학번 검증 수정

* refactor: host어노테이션 이름 변경

* refactor: LocalDate관련 수정

* refactor: 라인포맷팅

* refactor: LocalDate관련 클래스이름 수정

* refactor: URL얻어오는 코드 수정

* refactor: AuthResult orElse -> orElseGet

* refactor: LocalTimeAttributeConverter 원래대로 수정

* refactor: 라인포맷팅

* refactor: orElseGet 수정

* feat: 신규상점 생성시 기본 카테고리 추가 (#331)

* fix: @Param추가

* feat: 신규 상점 생성 시 기본 메뉴 카테고리 추가

* chore: 라인포맷팅

---------

Co-authored-by: HyeonsuLee <[email protected]>

* fix: AttributeConverter 오류 수정 (#335)

* feat: FCM 발송방식 수정 (#333)

* docs: github workflow 설정 추가

* refactor: 알림 발송형태 수정

* refactor: 컬럼명 수정

* feat: isEvent 추가 (#337)

* fix: shopId null일때 처리하기 (#341)

* feat: 비밀번호 변경 로직 구현 (#342)

* feat : 수정을 위한 1차 커밋

* feat : mailForm 생성 및 DTO, mail html 추가

* feat: controller 작성

* feat: webConfig 추가

* feat: resetToken전달하도록 수정

* feat: 이메일 전송

* feat: 버튼 누를 때 기능

* chore : 권한 static import

* chore : LocalDateTime 형식으로 수정 및 미사용 파일 삭제

* feat: 비밀번호 초기화 구현

* docs: hidden 추가

* style: 개행제거

---------

Co-authored-by: duehee <[email protected]>
Co-authored-by: daheeParkk <[email protected]>

* fix : JsonProperty 삭제 (#345)

* fix : Mixed Content 헤더 추가 (#347)

* fix: attributeConverter milli second 길이가 두개인 경우도 반영 (#348)

* fix: mili second 길이가 두개인 경우도 반영

* fix: authExpiredAt 시간 변경

* chore: datetimeformatter 변수명 변경

* Fix: attribute converter 오류 수정 (#349)

* refactor: 회원가입 인증 토큰 만료기간 수정

* fix: AttributeConverter 오류 수정

* fix : 삭제된 userGender null 로직 추가 (#357)

* feat: 이벤트 추가, 수정, 삭제, 베너조회 api 작성 (#350)

* fix: @Param추가

* feat: 신규 상점 생성 시 기본 메뉴 카테고리 추가

* chore: 라인포맷팅

* feat: 이벤트 추가 api 자것ㅇ

* feat: 이벤트 수정 컨트롤러 생성

* feat: 이벤트 수정, 삭제 api작성

* feat: 이벤트 추가 테스트코드 작성중

* feat: 이벤트 수정, 삭제, 베너 조회 테스트 코드 작성

* fix: 특정 상점 이벤트 조회 테스트코드 수정

* refactor: log().all()삭제

* refactor: 진행중인 이벤트 검색 repository메소드명 변겅

---------

Co-authored-by: HyeonsuLee <[email protected]>

* fix: isAuthed 검증 추가 (#355)

* fix: isAuthed 검증 추가

* refactor: 권한별 인증 세부 구분 추가

* refactor: 문구수정

* refactor: 문구수정

* test: 테스트 수정

* test: 테스트 수정

* Fix: 회원탈퇴 Hard Delete & 슬랙 알림 발송 (#352)

* fix: Hard Delete로 수정

* feat: 회원탈퇴시 슬랙 알람 발송

* refactor: 변수명 수정

* refactor: 유저 삭제시 fk 엔티티 삭제

* refactor: 탈퇴 로직 수정

* refactor: 테스트 수정

* refactor: 테스트 수정

* refactor: 로직 수정

* refactor: 로직 수정

* feat: 회원 탈퇴시 유저타입 추가 (#360)

* fix: soft delete메뉴 조회시 서버에러 해결 (#366)

* fix: @Param추가

* refactor: 연관관계 수정

* fix: menu를 통해 조회

* fix: lastUpdatedAt을 정적메소드를 통해 min선언

* chore: 라인 포맷팅

---------

Co-authored-by: HyeonsuLee <[email protected]>

* feat : 버스 코스 조회 구현 (#358)

* test : 버스 course 조회 controller 추가

* feat : 버스 course 조회 service 추가

* test : 버스 course 조회 test 추가

* chore : 줄바꿈 수정

* chore : 버스 course 조회 테스트 수정

* chore : 버스 course 조회 테스트 수정

* chore : 버스 course 조회 테스트 수정

* fix : snake case 수정

* feat: 버스 검색 구현 (#353)

* feat: 버스 검색 구현

* feat: 포맷 추가

* refactor: 메서드 위 변경

* feat: 버스 검색 테스트 작성

* refactor: 탑승까지 남은시간 반환 수정

- 기존: 하차까지 남은 시간 반환

* refactor: departure -> depart

* refactor: 리뷰 반영

* refactor: /bus 수정

* test: 버스 테스트 수정

* fix: 버스 노드 도착 시간이 시간이 아닌 경우 처리 (#328)

* refactor: 예외형태 수정 (#374)

* refactor: 예외형태 수정

* refactor: time 제거

* refactor: handleExceptionInternal 반환값 수정

* fix: 메뉴 삭제 시 연관 데이터 삭제 수정 (#368)

* fix: @Param추가

* refactor: 연관관계 수정

* fix: menu를 통해 조회

* fix: lastUpdatedAt을 정적메소드를 통해 min선언

* chore: 라인 포맷팅

* fix: orphanRemoval설정 끄기

* fix: list.clear시 entityManager에 반영 안되는 현상 수정

---------

Co-authored-by: HyeonsuLee <[email protected]>

* fix: jpa, schema 정합성 (#367)

* refactor: activity id Integer로 변경

* refactor: timestamp 명시

* refactor: LocalDateTimeAttributeConverter 개선

* refactor: id bigint로 변경

* Revert "refactor: activity id Integer로 변경"

This reverts commit bea44bb4c28c7e26b7494fcface5f8e95269f9cb.

* refactor: LocalDateTime 컬럼에 대해 columnDefinition 추가

* refactor: id 수정 flyway 제거

* refactor: Activity id Long -> Integer 수정

* refactor: Article id Long -> Integer 수정

* refactor: User id Long -> Integer 수정

* refactor: Article content, hit 수정

* refactor: Board id Long -> Integer 수정

* refactor: Board articleCount Long -> Integer 수정

* refactor: Board parentId, seq Long -> Integer 수정

* refactor: Comment id, content 수정

* refactor: Dining id, date 수정

* refactor: Dining soldOut, isChanged 수정

* refactor: EventArticle id, content 수정

* refactor: Shop, Menu Entity validate 맞게 수정

* refactor: Land validate 맞게 수정

* refactor: Lecture id Long -> Integer 수정

* refactor: Member, Track, Board Notification validate 조건에 맞게 수정

* refactor: Notification 수정

* refactor: OwnerAttachment 수정

* refactor: Owner boolean 처리

* refactor: Semester id Long -> Integer 수정

* refactor: ShopCategory id Long -> Integer 수정

* refactor: ShopCategoryMap id Long -> Integer 수정

* refactor: ShopImage id Long -> Integer 수정

* refactor: MenuOption id Long -> Integer 수정

* refactor: MenuImage, ShopOpen id Long -> Integer 수정

* refactor: Boolean 값 primitive로 수정

* refactor: Shop 필드값 수정

* refactor: Student identity 수정

* refactor: TechStack imageUrl 수정

* refactor: User 정보 수정

* refactor: Repository 정보 수정

* test: 테스트 수정

* fix: Repository 수정 (#377)

* fix: 매개변수 자료형 fix (#381)

* feat: CORS 설정 추가 (#382)

* refactor: 비밀번호가 틀렸을 때 반환하는 메시지 간략화 (#383)

* refactor: 스웨거에 400에러 표시 (#385)

* feat: 버스 시간표 불러오기 (#369)

* feat : 인수인계용 커밋

* feat : ExpressBusTimeTable record 삭제

* feat : ExpressBusTimetable 클래스 생성

* feat : ExpressBusOpenApiClient 클래스 완성

* feat : ExpressBusCache busInfos 생성자 다시 추가

* feat : busType.Lowercase 추가

* feat : 미사용 쿼리 제거, getBy로 변경

* feat : 테스트 추가

* feat : 리뷰 반영

* fix: flush 추가 및 unique 설정 (#386)

* fix: flush 추가

* feat: 연관관계 Unique 제약 추가

* refactor: flyway 구문 수정

* refactor: unique 제약조건 구성

* test: 테스트 수정

* �feat: 상점 이벤트 생성, 조회 기능 구현 (#387)

* refactor: 이벤트 get shop_id추가 및 이미지리스트 반환으로 dto변경

* refactor: 이벤트 조회관련 dto에 shopName, eventId 추가

* refactor: softdelete관련 이슈로 인한 shop -> eventArticle조회

* feat: 테스트코드 작성 중...

* refactor: 테스트 통과하도록 수정

* refactor: 메소드명 수정

* refactor: clock 주입

* refactor: flush 추가

* refactor: 코드 포맷팅

* test: 시간 조정

* refactor: api path 복수로 수정

---------

Co-authored-by: HyeonsuLee <[email protected]>

* feat: 사장님 가게 생성 시 알림 발송하도록 추가 (#389)

* feat: 사장님 가게 생성 시 알림 발송하도록 추가

* refactor: notification nullable

* fix: 자료형 수정 (#393)

* fix: 사장님 이벤트 날짜조건 제거한 DTO 추가 (#395)

* fix: 로그인에 권한 확인 로직 추가 (#397)

* Fix: 사장님 회원탈퇴 오류 (#380)

* fix: Column 'owner_id' cannot be null 해결

* refactor: 라인포맷팅

* refactor: 머지충돌

* refactor: 머지충돌

* refactor: 사장님 회원 탈퇴 수정

* refactor: shop 삭제 삭제

* feat : PUT user/student/me 현재 사용 닉네임 처리 로직 추가 (#391)

* feat : 사용 중인 본인 닉네임 검증 로직 추가

* chore : 오타 수정

* chore : nickname null 누락 사항 추가

* chore : 리뷰 반영 완료

* feat : depart json 네이밍 변경 (#402)

* feat : json 네이밍 변경

* feat : json 네이밍 변경

* fix: POST/user/refresh 반환코드 수정 (#399)

* fix: 반환코드 수정

* fix: 테스트 수정

* fix: 건축, 기계, 메카 커리큘럼 링크 수정 (#404)

* feat: 영양사 정보 조회 (#407)

* feat: 영양사 정보 조회 기능 구현

* test: 올바른 영양사 계정인지 확인하는 테스트 작성

* refactor: 메뉴, 메뉴카테고리 Soft Delete로 변경 (#417)

* feat: flyway is_delete컬럼 삭제 쿼리 작성

* feat: flyway is_delete컬럼 삭제 쿼리 작성

* feat: flyway is_delete컬럼 삭제 쿼리 롤백

* refactor: 메서드 이름 변경

---------

Co-authored-by: HyeonsuLee <[email protected]>

* docs: 스웨거 DTO 예시 수정 (#415)

* fix: 코인 인증 메일 폼 만료 시간 수정 (#414)

* chore: dto 예시 및 설명 추가 (#419)

Co-authored-by: HyeonsuLee <[email protected]>

* feat : 품절 알림 발송 구현 (#372)

* feat : FCM 일괄 push 구현

* feat : Factory 품절 메시지 추가

* feat : repository 타입으로 찾기 추가

* feat : coop 품절 알림 관련 수정

* refactor : 서비스 호출 -> 이벤트 발생 수정

* feat : coop 이벤트 리스너 추가

* refactor : 멀티캐스팅 -> 반복 발송 수정

* test : coop 품절 이벤트 발송 테스트

* chore : 사용하지 않는 의존성 제거

* test : @MockBean 주입 AcceptanceTest로 이동

* refactor : push 메서드 분리

* chore : 충돌 해결

* chore : 생성자 -> builder 수정

* chore : builder 수정

* chore : 주석 제거

* refactor : 클래스 별 기능 재분류

* chore : 생성자 -> builder 수정

* chore : soldOutRequest 빌더 -> 생성자 선언으로 수정

* refactor: 특정 알림 구독 인자 수정 및 예외처리 (#416)

* refactor: 입력 파라미터 수정 및 알림 미구독 예외처리

* fix: 인자명 복구 및 테스트 수정

* feat: 이벤트메뉴 -> 추천메뉴, 대표메뉴 -> 메인 메뉴 update flyway 추가 (#424)

Co-authored-by: HyeonsuLee <[email protected]>

* docs: Swagger 필수인자 명시 (#425)

* dosc: swagger 3.1 로 설정

* dosc: Activity 필수 여부 추가

* dosc: bus 응답 추가

* dosc: article 응답 추가

* docs: Dept, Dining Dto 설명 추가

* docs: land

* docs: land dto 보완

* docs: Member Dto 구체화

* docs: Owner DTO 구체화

* docs: OwnerShop DTO 구체화

* chore: record 명 변경

* chore: shop record 수정

* chore: timetable record 수정

* chore: user dto 개선

* chore: version dto 개선

* chore: bus dto 개선

* test: 테스트 설정파일 위치 변경

* fix : 품절 알림 문구 수정 (#427)

* fix : 품절 알림 문구 수정

* fix : 품절 알림 문구 수정

* feat: ClientAbortException handle (#430)

* feature: 리프레시 토큰 만료 기한을 14일에서 20초로 변경 (#431)

* feature: 리프레시 토큰 만료 기한 14일로 원상 복구 (#432)

* fix: 사장님 이메일 중복요청시 재요청 시간제한 (#434)

* refactor: 사장님 이메일 인증번호 만료시간 2시간

* feat: 사장님 이메일 발송 시 제한시간 추가

* test: stage 환경과 DB 버전 맞춤

* test: redis, mongo 초기화 로직 추가

* refactor: 만료시간 final 제거 및 로직 수정

* test: 이메일 중복가입요청 테스트

* refactor: 이름 변경

* test: 버스 테스트 수정

* fix: 상점 이벤트 알림을 구독한 유저에게만 알림을 보내도록 코드 변경 (#443)

Co-authored-by: HyeonsuLee <[email protected]>

* chore: 상점 설명 NotBlank에서 NotNull로 변경 (#436)

* chore: 상점 설명 NotBlank에서 NotNul로 변견

* chore: 상점 조회할 때 설명이 Blank일 시 "-"를 기본값으로 반환하게 변경(안드로이드 대응 이슈)

---------

Co-authored-by: HyeonsuLee <[email protected]>

* feat: GET /admin/lands 기능 구현 (#438)

* feat: GET /admin/lands 기능 구현

* chore: /admin/lands Response 수정

* chore: AdminLandRepository 개행 추가

* chore: Criteria 및 관련 코드 자료형 변경

* chore: count() 반환형 Integer로 변경

* chore: @Transactional(readOnly = true)를 전역으로 선언하도록 수정

* fix: 상점 이미지, 카테고리id중복되는 요소 입력 시 발생하는 에러 핸들링 (#448)

* feat: imageUrl과 카테고리id에 중복된 요소가 있는지 하는 어노테이션 작성

* feat: 중복 데이터 검즘 stream사용

---------

Co-authored-by: HyeonsuLee <[email protected]>

* feat: 시간표 총 학점 조회 (#440)

* feat: 시간표 총 학점 조회

* refactor: 용어 변경

* refactor: 학점조회 테스트 코드 추가

* refactor: 용어 변경

* Fix : 버스 남은시간 수정, 캐시만료로직 수정 (#454)

* feat : UnSupportedOperation ExceptionHandler 추

* feat : 남은시간 반환형식 변경

* feat : 레디스키 존재여부 메서드 추가

* feat : 캐시만료확인 로직 변경

* feat : 외부API가 빈배열이 아닐경우에만 저장

* refactor : 중괄호 추가

* feat : 버스 버저닝 V2 updated_at 추가 (#446)

* feat : 버스 timetable v2 추가

* feat : 버스 버저닝 timetable/v2 서비스 구현

* test : 버스 시간표 조회 v2 테스트 추가

* chore : 버스 v2 테스트 수정

* chore : 사용하지 않는 import 제거

* chore : log() 제거

* chore : 스웨거 설명 추가

* fix: 시외버스 시간표 캐시확인로직 변경 (#457)

* feat: 도커파일 추가 (#445)

* feat: 도커파일 추가

* feat: 도커파일 리뷰반영

* feat: 도커파일 리뷰반영2

* feat: 도커파일 테스트

* feat: 도커파일 테스트2

* feat: 도커파일 arm호환성 추가

* feat: 도커파일 arm호환성 추가2

* feat: 피드백 수정

---------

Co-authored-by: Jang Jun Young <[email protected]>

* test: 테스트 리팩터링 (#458)

* test: 시간 제어 구성 및 Activity Fixture 추가

* test: 로그인 테스트 최적화

* test: bus API 테스트 수정

* test: community 테스트 수정

* test: dept 테스트 수정

* test: dining test 수정

* test: land test 수정

* test: member test 수정

* test: notification test 수정

* test: owner test 수정

* test: ownerShop test 수정

* test: shop test 수정

* test: lecture test 수정

* test: track test 수정

* test: version test 수정

* test: log 제거

* test: SuppressWarnings 추가

* test: 라인 포맷팅

* test: ExtractableResponse var로 대체

* test: objectMapper static으로 변경

* chore: admin 패키지 위치 수정

* test: log 제거

* test: 불필요한 설정 제거

* feat: 네이버 문자인증 구성 (#463)

* feat: 불필요한 설정 제거

* feat: 문자인증 api작성

* feat: 문자인증 API 구체화

* test: 테스트 수정

---------

Co-authored-by: 최준호 <[email protected]>
Co-authored-by: HyeonsuLee <[email protected]>

* refactor: dto 수정 (#464)

Co-authored-by: HyeonsuLee <[email protected]>

* fix: String -> Double (#466)

* refactor: 사용자에게는 기본 메시지만 보이도록 예외 수정 (#460)

* refactor: 사용자에게는 기본 메시지만 보이도록 예외 수정

* refactor: 예외 메시지와 global exception handler 구조 변경

* chore: withDetail에 static 적용 누락 수정

* feat: 상점 사장님 문자인증 발송 시 slack알림 발송 (#473)

* fix: DB의 상점 설명이 null인 경우 예외처리 (#476)

* fix: shop description null일 경우 예외처리

* chore: 사장님 회원가입 의미 없는 코드 삭제

---------

Co-authored-by: HyeonsuLee <[email protected]>

* feat : 회원 정보 수정에 비밀번호 수정 추가 (#477)

* feat : 회원 정보 수정에 비밀번호 수정 추가

* chore : 라인 포맷팅

* fix : kcal, menu nullable 여부 수정 (#480)

* fix : kcal -> NOT_REQUIRED, menu -> REQUIRED 수정

* fix : 식단 response, price와 kcal이 null이면 0 반환

* fix: 천안역에서 출발할 경우 Exception 발생 버그 수정 (#475)

* feat: 상점 운영중 기준으로 정렬 및 is_event 필드 추가 (#479)

* fix: shop description null일 경우 예외처리

* chore: 사장님 회원가입 의미 없는 코드 삭제

* feat: 응답에 영업중 여부 포함 및 영업중으로 정렬

* feat: 테스트코드 수정

* chore: 테스트코드 로깅용 출력 제거

* chore: now에 clock주입

* chore: 리뷰 반영

* chore: getShops에서 일시 한번만 호출

* feat: 정렬 방식 변경

* chore: 변수명 변경

---------

Co-authored-by: HyeonsuLee <[email protected]>

* fix: 상점 수정시 배달금액 언더플로우 해결 (#482)

* fix: shop description null일 경우 예외처리

* chore: 사장님 회원가입 의미 없는 코드 삭제

* feat: 응답에 영업중 여부 포함 및 영업중으로 정렬

* feat: 테스트코드 수정

* chore: 테스트코드 로깅용 출력 제거

* fix: 상점, 메뉴 수정 추가 dto의 금액 필드에 0원 이상 오도록 설정

* feat: 리뷰 반영

* chore: now에 clock주입

* chore: 리뷰 반영

* chore: getShops에서 일시 한번만 호출

* feat: 정렬 방식 변경

* chore: 변수명 변경

* chore: Entity금액 관련 필드 @PositiveOrZero추가

---------

Co-authored-by: HyeonsuLee <[email protected]>

* feat: 비밀번호 검증 api 작성 (#478)

* feature: 패스워드 체크 controller, service dto 추가

* chore: 컨트롤러 반환값 수정

* chore: 반환값 정확하게 수정

* fix: 영양사님도 허용 되게 swagger 변경

* test: 테스트 코드 작성

* chore: swagger에 표시되는 문구 변경

* style: boolean이 아닌 상태를 반환하는 것으로 변경

* test: 테스트 코드 변경 및 추가 작성

* chore: 오타 수정

* chore: 피드백 반영

* fix: 조건문 수정

* chore: 함수에 넣은 값 수정

* feat: 카카오 챗봇 API 구현 (#485)

* feat: 카카오 챗봇 식단 API 구성

* refactor: adapter 형태로 수정

* feat: bus 남은시간 API 구현

* feat: bus 경로 API 구현

* refactor: 로깅용 코드 제거

* refactor: KoinException 구체화

* refactor: Exception 정리 구체화

* refactor: getFullMessage로 변경

* refactor: slack 알림 dev 이외에도 포함되도록 수정

* test: 테스트 수정

* refactor: 미사용 변수 제거

* refactor: 메뉴 검증 추가

* fix: 오타수정

* refactor: magicNumber 상수 추출

* refactor: 페이코로 변경

* refactor: 표준예외, 커스텀예외 구분

* style: 라인 포맷팅

* fix: 결과 joiner 참조 수정

* style: 순서 변경

* refactor: from 활용

* refactor: Enum 활용하도록 수정

* refactor: 변수명 수정

* refactor: 자바 기본 예외 래핑

* refactor: 제약조건 수정

* fix: handler 추가 및 IAE 변경 (#489)

* refactor: 모든 상점 조회 api 성능개선 (#487)

* feat: is_open여부를 결정 할 때 쿼리문에서 로직으로 변경

* refactor: ShopOpen Boolean -> boolean

* refactor: 시간 처리 로직 개선

* style: 라인 포맷팅

---------

Co-authored-by: HyeonsuLee <[email protected]>
Co-authored-by: 최준호 <[email protected]>

* fix: 17~2시인경우 확인 안되는문제 해결 (#490)

Co-authored-by: HyeonsuLee <[email protected]>

* refactor: 라인포맷팅 (#492)

Co-authored-by: HyeonsuLee <[email protected]>

---------

Co-authored-by: Hansu Park <[email protected]>
Co-authored-by: daheeParkk <[email protected]>
Co-authored-by: 송선권 <[email protected]>
Co-authored-by: tongil <[email protected]>
Co-authored-by: Park Sungbin <[email protected]>
Co-authored-by: 허준기 <[email protected]>
Co-authored-by: duehee <[email protected]>
Co-authored-by: Hyeonsu Lee <[email protected]>
Co-authored-by: 김원경 <[email protected]>
Co-authored-by: 황현식 <[email protected]>
Co-authored-by: 김성재 <[email protected]>
Co-authored-by: HyeonsuLee <[email protected]>
Co-authored-by: dradnats1012 <[email protected]>
Co-authored-by: Choon0414 <[email protected]>
Co-authored-by: Jang-JunYoung <[email protected]>
Co-authored-by: Jang Jun Young <[email protected]>
Co-authored-by: 박성빈 <[email protected]>
Co-authored-by: daheeParkk <[email protected]>
Co-authored-by: YunYongWoon <[email protected]>
  • Loading branch information
20 people authored Apr 30, 2024
1 parent 3c61882 commit 9e15162
Show file tree
Hide file tree
Showing 467 changed files with 28,395 additions and 367 deletions.
1 change: 0 additions & 1 deletion .github/CODEOWNERS

This file was deleted.

6 changes: 6 additions & 0 deletions .github/pr-labeler.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
기능: feature/*
버그: fix/*
리팩터링: refactor/*
문서: docs/*
테스트: test/*
인프라: infra/*
12 changes: 12 additions & 0 deletions .github/workflows/pr-labeler.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
name: PR Labeler
on:
pull_request:
types: [ opened ]

jobs:
pr-labeler:
runs-on: ubuntu-latest
steps:
- uses: TimonVS/pr-labeler-action@v4
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -38,3 +38,6 @@ out/
.DS_STORE

application.yml
*adminsdk.json

logs
7 changes: 7 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
FROM amazoncorretto:17

WORKDIR /app

COPY ./build/libs/KOIN_API_V2.jar /app/app.jar

ENTRYPOINT ["java", "-jar", "/app/app.jar"]
46 changes: 45 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,59 @@ repositories {
}

dependencies {
implementation group: 'org.json', name: 'json', version: '20231013'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'com.mysql:mysql-connector-j'
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
implementation 'org.springframework.boot:spring-boot-starter-data-mongodb'

implementation 'io.jsonwebtoken:jjwt-api:0.12.3'

implementation 'org.jsoup:jsoup:1.15.3'
implementation 'com.amazonaws:aws-java-sdk:1.12.672'
implementation 'com.google.code.gson:gson:2.10.1'

// swagger
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.3.0'

// security
implementation 'org.springframework.security:spring-security-crypto:6.2.2'

runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.12.3'
runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.12.3'
runtimeOnly 'com.h2database:h2'
runtimeOnly 'com.mysql:mysql-connector-j'
compileOnly 'org.projectlombok:lombok'

annotationProcessor 'org.projectlombok:lombok'

testImplementation 'org.testcontainers:testcontainers:1.19.3'
testImplementation 'org.testcontainers:junit-jupiter:1.19.3'
testImplementation 'org.testcontainers:mysql'
testImplementation 'io.rest-assured:rest-assured:5.3.2'
testImplementation 'org.springframework.boot:spring-boot-starter-test'

// presigned url
implementation platform('software.amazon.awssdk:bom:2.20.56')
implementation 'software.amazon.awssdk:s3'

// localstack
testImplementation 'org.testcontainers:localstack'

// flyway
implementation 'org.flywaydb:flyway-mysql'

// fcm
implementation 'com.google.firebase:firebase-admin:9.2.0'

// Actuator
implementation 'org.springframework.boot:spring-boot-starter-actuator'

// slack Notification
implementation 'com.github.maricn:logback-slack-appender:1.4.0'
}

tasks.named('bootBuildImage') {
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/in/koreatech/koin/KoinApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,12 @@

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
import org.springframework.scheduling.annotation.EnableScheduling;

@EnableScheduling
@SpringBootApplication
@ConfigurationPropertiesScan
public class KoinApplication {

public static void main(String[] args) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package in.koreatech.koin.admin.land.controller;

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

import in.koreatech.koin.admin.land.dto.AdminLandsResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;

@Tag(name = "(Admin) AdminLand: 복덕방", description = "관리자 권한으로 복덕방 정보를 관리한다")
public interface AdminLandApi {

@ApiResponses(
value = {
@ApiResponse(responseCode = "200"),
@ApiResponse(responseCode = "404", content = @Content(schema = @Schema(hidden = true))),
}
)
@Operation(summary = "복덕방 목록 조회")
@GetMapping("/admin/lands")
ResponseEntity<AdminLandsResponse> getLands(
@RequestParam(name = "page", defaultValue = "1") Integer page,
@RequestParam(name = "limit", defaultValue = "10", required = false) Integer limit,
@RequestParam(name = "is_deleted", defaultValue = "false") Boolean isDeleted
);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package in.koreatech.koin.admin.land.controller;

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import in.koreatech.koin.admin.land.dto.AdminLandsResponse;
import in.koreatech.koin.admin.land.service.AdminLandService;
import lombok.RequiredArgsConstructor;

@RestController
@RequiredArgsConstructor
public class AdminLandController implements AdminLandApi {

private final AdminLandService adminLandService;

@Override
@GetMapping("/admin/lands")
public ResponseEntity<AdminLandsResponse> getLands(
@RequestParam(name = "page", defaultValue = "1") Integer page,
@RequestParam(name = "limit", defaultValue = "10", required = false) Integer limit,
@RequestParam(name = "is_deleted", defaultValue = "false") Boolean isDeleted
) {
return ResponseEntity.ok().body(adminLandService.getLands(page, limit, isDeleted));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package in.koreatech.koin.admin.land.dto;

import static com.fasterxml.jackson.databind.PropertyNamingStrategies.SnakeCaseStrategy;
import static io.swagger.v3.oas.annotations.media.Schema.RequiredMode.REQUIRED;

import com.fasterxml.jackson.databind.annotation.JsonNaming;

import in.koreatech.koin.domain.land.model.Land;
import io.swagger.v3.oas.annotations.media.Schema;

@JsonNaming(value = SnakeCaseStrategy.class)
public record AdminLandResponse(
@Schema(description = "고유 id", example = "1", requiredMode = REQUIRED)
Integer id,

@Schema(description = "이름", example = "금실타운", requiredMode = REQUIRED)
String name,

@Schema(description = "종류", example = "원룸")
String roomType,

@Schema(description = "월세", example = "200만원 (6개월)")
String monthlyFee,

@Schema(description = "전세", example = "3500")
String charterFee,

@Schema(description = "삭제(soft delete) 여부", example = "false", requiredMode = REQUIRED)
Boolean isDeleted
) {
public static AdminLandResponse from(Land land) {
return new AdminLandResponse(
land.getId(),
land.getName(),
land.getRoomType(),
land.getMonthlyFee(),
land.getCharterFee(),
land.isDeleted()
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package in.koreatech.koin.admin.land.dto;

import static com.fasterxml.jackson.databind.PropertyNamingStrategies.SnakeCaseStrategy;
import static io.swagger.v3.oas.annotations.media.Schema.RequiredMode.REQUIRED;

import java.util.List;

import org.springframework.data.domain.Page;

import com.fasterxml.jackson.databind.annotation.JsonNaming;

import in.koreatech.koin.domain.land.model.Land;
import in.koreatech.koin.global.model.Criteria;
import io.swagger.v3.oas.annotations.media.Schema;

@JsonNaming(value = SnakeCaseStrategy.class)
public record AdminLandsResponse(

@Schema(description = "조건에 해당하는 총 집의 수", example = "57", requiredMode = REQUIRED)
Long totalCount,

@Schema(description = "조건에 해당하는 집 중에 현재 페이지에서 조회된 수", example = "10", requiredMode = REQUIRED)
Integer currentCount,

@Schema(description = "조건에 해당하는 집들을 조회할 수 있는 최대 페이지", example = "6", requiredMode = REQUIRED)
Integer totalPage,

@Schema(description = "현재 페이지", example = "2", requiredMode = REQUIRED)
Integer currentPage,

@Schema(description = "집 정보 리스트", requiredMode = REQUIRED)
List<AdminLandResponse> lands
) {
public static AdminLandsResponse of(Page<Land> pagedResult, Criteria criteria) {
return new AdminLandsResponse(
pagedResult.getTotalElements(),
pagedResult.getContent().size(),
pagedResult.getTotalPages(),
criteria.getPage() + 1,
pagedResult.getContent()
.stream()
.map(AdminLandResponse::from)
.toList()
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package in.koreatech.koin.admin.land.repository;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.repository.Repository;

import in.koreatech.koin.domain.land.model.Land;

public interface AdminLandRepository extends Repository<Land, Integer> {

Page<Land> findAllByIsDeleted(boolean isDeleted, Pageable pageable);

Integer countAllByIsDeleted(boolean isDeleted);

Land save(Land request);

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package in.koreatech.koin.admin.land.service;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import in.koreatech.koin.admin.land.dto.AdminLandsResponse;
import in.koreatech.koin.admin.land.repository.AdminLandRepository;
import in.koreatech.koin.domain.land.model.Land;
import in.koreatech.koin.global.model.Criteria;
import lombok.RequiredArgsConstructor;

@Service
@RequiredArgsConstructor
@Transactional(readOnly = true)
public class AdminLandService {

private final AdminLandRepository adminLandRepository;

public AdminLandsResponse getLands(Integer page, Integer limit, Boolean isDeleted) {

// page > totalPage인 경우 totalPage로 조회하기 위해
Integer total = adminLandRepository.countAllByIsDeleted(isDeleted);

Criteria criteria = Criteria.of(page, limit, total);
PageRequest pageRequest = PageRequest.of(criteria.getPage(), criteria.getLimit(),
Sort.by(Sort.Direction.ASC, "id"));

Page<Land> result = adminLandRepository.findAllByIsDeleted(isDeleted, pageRequest);

return AdminLandsResponse.of(result, criteria);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package in.koreatech.koin.domain.activity.controller;

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

import in.koreatech.koin.domain.activity.dto.ActivitiesResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;

@Tag(name = "(Normal) Activity", description = "BCSDLab 활동")
public interface ActivityApi {

@ApiResponses(
value = {
@ApiResponse(responseCode = "200", description = "성공적으로 활동 목록을 조회함"),
@ApiResponse(responseCode = "404", description = "해당하는 활동이 없음", content = @Content(schema = @Schema(hidden = true))),
}
)
@Operation(summary = "BCSD Lab 활동 조회")
@GetMapping("/activities")
ResponseEntity<ActivitiesResponse> getActivities(
@RequestParam(required = false) String year
);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package in.koreatech.koin.domain.activity.controller;

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import in.koreatech.koin.domain.activity.dto.ActivitiesResponse;
import in.koreatech.koin.domain.activity.service.ActivityService;
import lombok.RequiredArgsConstructor;

@RestController
@RequiredArgsConstructor
public class ActivityController implements ActivityApi {

private final ActivityService activityService;

@GetMapping("/activities")
public ResponseEntity<ActivitiesResponse> getActivities(
@RequestParam(required = false) String year
) {
ActivitiesResponse response = activityService.getActivities(year);
return ResponseEntity.ok(response);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package in.koreatech.koin.domain.activity.dto;

import java.util.List;

import com.fasterxml.jackson.annotation.JsonProperty;

public record ActivitiesResponse(
@JsonProperty("Activities")
List<ActivityResponse> activities
) {
public ActivitiesResponse(List<ActivityResponse> activities) {
this.activities = activities;
}
}
Loading

0 comments on commit 9e15162

Please sign in to comment.