From b97b3afd22fc7dcc26f321ff1e00c788ede4f9f1 Mon Sep 17 00:00:00 2001 From: jyx-07 Date: Wed, 27 May 2026 10:00:15 +0900 Subject: [PATCH 1/2] =?UTF-8?q?docs=20:=20README=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 00000000..0edc0d76 --- /dev/null +++ b/README.md @@ -0,0 +1,35 @@ +# Flooding Server V2 + +학생을 위한 학교 편의 플랫폼 백엔드 서버입니다. + +기숙사 신청(자습실, 안마의자), 급식 조회, 동아리 관리, 시간표, AI 기반 음악 추천 등 다양한 편의 기능을 제공합니다. + +--- + +## 기술 스택 + +| 분류 | 기술 | +|------|------| +| 언어 | Kotlin, Java 24 | +| 프레임워크 | Spring Boot 4.0.2 | +| 데이터베이스 | PostgreSQL, Redis | +| 보안 | Spring Security, JWT | +| 인프라 | Docker, Harbor, Kubernetes (Helm) | +| 빌드 | Gradle KTS | +| 문서 | SpringDoc OpenAPI (Swagger) | +| 테스트 | Kotest, MockK | + +--- + +## 주요 기능 + +- **동아리** — 동아리 CRUD, 동아리 지원서 제출 및 승인, 동아리 개설 신청 +- **기숙사 - 자습실** — 자습실 신청 및 목록 조회, SSE 실시간 알림 +- **기숙사 - 안마의자** — 안마의자 신청 및 목록 조회 +- **기숙사 - 기상음악** — 기상음악 신청 (URL / 직접 업로드) +- **기숙사 - 벌점** — 벌점 부여 및 조회 +- **기숙사 - 청소구역** — 청소구역 생성 및 구성원 배정 +- **급식 / 시간표** — NEIS API 연동으로 급식·시간표 조회 +- **AI** — AI 채팅 및 노래 추천 + +--- \ No newline at end of file From 307ed941e73ab58ef55d2347a36d3dea2e5f8a61 Mon Sep 17 00:00:00 2001 From: jyx-07 Date: Thu, 28 May 2026 09:11:13 +0900 Subject: [PATCH 2/2] =?UTF-8?q?style=20:=20ktlint=20=ED=8F=AC=EB=A7=B7?= =?UTF-8?q?=ED=8C=85=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../massage/service/impl/ApplyMassageServiceImpl.kt | 6 +++--- .../study/service/impl/StudyApplicationServiceImpl.kt | 11 +++++++++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/main/kotlin/team/incube/flooding/domain/dormitory/massage/service/impl/ApplyMassageServiceImpl.kt b/src/main/kotlin/team/incube/flooding/domain/dormitory/massage/service/impl/ApplyMassageServiceImpl.kt index 1c90269e..a812e36a 100644 --- a/src/main/kotlin/team/incube/flooding/domain/dormitory/massage/service/impl/ApplyMassageServiceImpl.kt +++ b/src/main/kotlin/team/incube/flooding/domain/dormitory/massage/service/impl/ApplyMassageServiceImpl.kt @@ -23,9 +23,9 @@ class ApplyMassageServiceImpl( val now = LocalTime.now() - if (now.isBefore(massageProperties.openTime)) { - throw ExpectedException("안마의자 신청 시간이 아닙니다.", HttpStatus.BAD_REQUEST) - } + if (now.isBefore(massageProperties.openTime)) { + throw ExpectedException("안마의자 신청 시간이 아닙니다.", HttpStatus.BAD_REQUEST) + } val lock = redissonClient.getLock(massageProperties.lockKey) val acquired = lock.tryLock(5, 3, TimeUnit.SECONDS) diff --git a/src/main/kotlin/team/incube/flooding/domain/dormitory/study/service/impl/StudyApplicationServiceImpl.kt b/src/main/kotlin/team/incube/flooding/domain/dormitory/study/service/impl/StudyApplicationServiceImpl.kt index 703f076b..ca43b9ac 100644 --- a/src/main/kotlin/team/incube/flooding/domain/dormitory/study/service/impl/StudyApplicationServiceImpl.kt +++ b/src/main/kotlin/team/incube/flooding/domain/dormitory/study/service/impl/StudyApplicationServiceImpl.kt @@ -43,8 +43,15 @@ class StudyApplicationServiceImpl( } if (outOfRange) { - log.warn("자습 신청 가능 시간 아님: userId={}, now={}, openTime={}, closeTime={}", user.id, now, studyProperties.openTime, studyProperties.closeTime) - throw ExpectedException("자습 신청 시간이 아닙니다.", HttpStatus.BAD_REQUEST) } + log.warn( + "자습 신청 가능 시간 아님: userId={}, now={}, openTime={}, closeTime={}", + user.id, + now, + studyProperties.openTime, + studyProperties.closeTime, + ) + throw ExpectedException("자습 신청 시간이 아닙니다.", HttpStatus.BAD_REQUEST) + } if (studyRedisAdapter.getApplicationStatus(user.id) == StudyApplicationStatus.BANNED || studyBanJpaRepository.existsByUserIdAndBannedUntilAfter(user.id, LocalDateTime.now(clock))