Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
157 commits
Select commit Hold shift + click to select a range
7a32e66
[fix] dev nginx에서 분리
sejoon00 Dec 2, 2024
8f829f8
[feat]모의고사 과목 추가 고1, 고2
sejoon00 Dec 10, 2024
0aed0a1
[feat] 고,고2 배점 적용 완료
sejoon00 Dec 11, 2024
7afe071
[feat] 고,고2 배점 적용 완료
sejoon00 Dec 11, 2024
dc37759
[fix] 개발 클라이언트 도메인 CORS 추가
sejoon00 Dec 16, 2024
bb2bae1
[fix] 개발 클라이언트 도메인 CORS 추가
sejoon00 Dec 16, 2024
57dda5d
[feat] elastic APM과 어플이케이션 컨테이너 같은 네트워크로 묶기
sejoon00 Dec 18, 2024
ec93369
[feat] elastic APM과 어플이케이션 컨테이너 같은 네트워크로 묶기
sejoon00 Dec 18, 2024
8fae4f8
[feat] apm-network 외부 네트워크 설정
sejoon00 Dec 18, 2024
6e3114a
[feat] apm-network 외부 네트워크 설정
sejoon00 Dec 18, 2024
2292fe8
[feat] apm ip 주소 dockerfile 컨테이너 명으로 변경
sejoon00 Dec 18, 2024
14e7f47
[feat/#9] 이메일 비밀번호 인증 필터 및 인증 provider 구현
sejoon00 Jan 14, 2025
c8b6a35
[fix] 동시성 테스트 DB h2 로 변경
sejoon00 Jan 14, 2025
24d496d
[fix] 동시성 중복 테스트 제거
sejoon00 Jan 14, 2025
44e718d
[fix/#9] 단순 이메일 조회 예외처리 로직 repository로 이동
sejoon00 Jan 15, 2025
88c2033
[fix/#9] parsing 예외, NotFound 예외 BadCredentialsException로 통일 및 이메일 검증…
sejoon00 Jan 15, 2025
3b3ef30
Merge pull request #10 from team-MoPlus/feature/#9
sejoon00 Jan 15, 2025
d67a3af
[feat/#11] jwt 인증 필터 구현
sejoon00 Jan 23, 2025
7ab0163
[docs/#15] 사용하지 않는 api swagger에서 정리
sejoon00 Jan 23, 2025
41b4b4e
[feat/#17] 내 정보 조회 api 추가
sejoon00 Jan 24, 2025
651afd5
[chore/#19] 레거시 코드 vo 패키지로 이동
sejoon00 Jan 26, 2025
e778a69
[feat/#21]문항, 새끼문항, 개념태그 엔티티 구현
sejoon00 Jan 26, 2025
0bff27a
[feat/#21] repository 추가
sejoon00 Jan 27, 2025
76bb72b
[feat/#21] 문항 조횟 시 새끼문항 lazy로딩
sejoon00 Jan 27, 2025
c5c4bc2
Merge pull request #14 from team-MoPlus/feature/#11
sejoon00 Jan 28, 2025
6725504
Merge pull request #16 from team-MoPlus/document/#15
sejoon00 Jan 28, 2025
a416fbd
[fix/#17] jwtAuthenticationProvider와 authenticationArgurentResolver에서…
sejoon00 Jan 28, 2025
1b714ff
Merge pull request #18 from team-MoPlus/feature/#17
sejoon00 Jan 28, 2025
93c3dd1
Merge pull request #20 from team-MoPlus/feature/#19
sejoon00 Jan 28, 2025
5b21007
Merge remote-tracking branch 'origin/develop' into feature/#23
sejoon00 Jan 28, 2025
04b6eec
Merge pull request #22 from team-MoPlus/feature/#21
sejoon00 Jan 28, 2025
92e865e
[fix/#24] problem repository bean 이름 겹침 충돌 해결
sejoon00 Jan 29, 2025
e0ea998
Merge pull request #25 from team-MoPlus/feature/#24
sejoon00 Jan 29, 2025
408ee59
[fix/#12] 모니터링 엔드포인트 시큐리티 필터 추가
seokbeom00 Jan 29, 2025
8f5d865
[feat/#23] 문항 생성, 수정, 조회 api
sejoon00 Jan 29, 2025
6f03ad4
Merge remote-tracking branch 'origin/develop' into feature/#23
sejoon00 Jan 29, 2025
43c8501
[feat/#23] mapStruct를 통한 dto -> 객체 mapper 구현 및 테스트
sejoon00 Jan 30, 2025
4f07260
[fix/#23] insert-problem.sql에 childProblem 데이터 삭제 sql 추가
sejoon00 Jan 30, 2025
22c15cf
[fix/#23] updateChildProblem에서 필요없는 코드 삭제
sejoon00 Jan 30, 2025
c389d79
[feature/#23] 모의고사 목록 조회 swagger 설명 추가
sejoon00 Jan 30, 2025
02fa610
Merge pull request #26 from team-MoPlus/feature/#23
sejoon00 Jan 31, 2025
000f92a
[feat/#29] 문항 세트 루트 엔티티 구현
seokbeom00 Jan 31, 2025
b75932c
[feat/#29] 발행 루트 엔티티 구현
seokbeom00 Jan 31, 2025
6c7a704
[fix/#29] ProblemId 리스트로 변경
seokbeom00 Jan 31, 2025
8795115
[feat/#31] 문항 순서 보장 로직 추가
seokbeom00 Jan 31, 2025
4295340
[feat/#31] 문항세트 생성 API 구현
seokbeom00 Jan 31, 2025
979177b
[feat/#31] 문항세트 문항 순서 변경 API 구현
seokbeom00 Jan 31, 2025
0736230
[feat/#31] 문항세트 수정, 삭제, 컨펌 API 구현
seokbeom00 Jan 31, 2025
182e355
[feat/#31] 문항세트 서비스 분리
seokbeom00 Feb 1, 2025
8b2fdfb
[feat/#27] 문항 검색 api 추가
sejoon00 Feb 1, 2025
7f2b389
[feat/#27] querydsl 인터페이스 구현 방식에서 JpaQueryFactory 빈 주입 방식으로 변경
sejoon00 Feb 1, 2025
f1ad376
[fix/#27] 필요한 column만 조회
sejoon00 Feb 1, 2025
154e973
[feat/#31] 문항세트 컨펌 시 문항 유효성 검사
seokbeom00 Feb 2, 2025
48d1cb6
[fix/#31] 문항세트 생성 로직 수정
seokbeom00 Feb 2, 2025
cfb4508
[feat/#31] 문항세트 컨펌 시 컨펌상태 반환
seokbeom00 Feb 2, 2025
16fd5d5
[fix/#31] 문항세트 업데이트 방식 변경
seokbeom00 Feb 2, 2025
a041472
[test/#31] 문항 세트 서비스 테스트 코드 작성
seokbeom00 Feb 2, 2025
fbf5520
[fix/#31] 테스트 문항 데이터 null값 삭제
seokbeom00 Feb 2, 2025
ffa7cf3
[fix/#31] 문항세트 테스트 시 기존 데이터 삭제
seokbeom00 Feb 2, 2025
d07fbe4
[feat/#31] 문항세트 컨펌 상태로 바꾸는 경우만 문항 유효성 검사
seokbeom00 Feb 2, 2025
b604b25
[fix/#31] 문항세트 생성 후 롤백
seokbeom00 Feb 2, 2025
c67c13f
[fix/#31] 테스트 시 연관 테이블 삭제
seokbeom00 Feb 2, 2025
1ae8238
Merge pull request #32 from team-MoPlus/feature/#27
sejoon00 Feb 3, 2025
dc6ee2a
[feat/#31] 문항 토글 로직 수정
seokbeom00 Feb 3, 2025
9d2dfa3
Merge pull request #30 from team-MoPlus/feature/#29
seokbeom00 Feb 3, 2025
f603bfb
[chore/#33] local env 파일 추가
seokbeom00 Feb 6, 2025
d520a95
[feat/#33] 문항세트 조회 api 추가
seokbeom00 Feb 6, 2025
ba49c98
[fix/#33] 문항세트 title로 필드명 변경
seokbeom00 Feb 6, 2025
2cb9c73
[feat/#33] 문항세트 검색 api 추가
seokbeom00 Feb 7, 2025
7cfcf71
[fix/#33] 문항세트 검색시 태그명 필드 삭제
seokbeom00 Feb 7, 2025
685cd61
[fix/#33] 문항세트 순서 api swagger에서 제거
seokbeom00 Feb 7, 2025
3d6f968
[fix/#33] 문항세트 변경사항 반영
seokbeom00 Feb 7, 2025
060d5b2
[fix/#33] 테스트 데이터 수정
seokbeom00 Feb 7, 2025
f2a110f
[fix/#33] 리뷰 사항 반영
seokbeom00 Feb 7, 2025
b929a23
[fix/#36] swagger 서버 url 선택 가능하게 수정
sejoon00 Feb 8, 2025
7189a70
Merge pull request #35 from team-MoPlus/feature/#33
sejoon00 Feb 8, 2025
839667e
Merge remote-tracking branch 'origin/develop' into fix/#36
sejoon00 Feb 8, 2025
40420a3
[fix/#36] test yml에도 swagger 설정 추가
sejoon00 Feb 8, 2025
757f8be
Merge pull request #37 from team-MoPlus/fix/#36
seokbeom00 Feb 8, 2025
f8770a0
[fix/#38] cors url 추가
sejoon00 Feb 8, 2025
6227ac4
Merge pull request #39 from team-MoPlus/fix/#38
sejoon00 Feb 8, 2025
f9868b2
[fix/#38] log 설정 변경
sejoon00 Feb 8, 2025
31fbc56
Merge pull request #40 from team-MoPlus/fix/#38
sejoon00 Feb 8, 2025
54e65d1
[fix/#38] Jwt 환경 변수 누락 추가
sejoon00 Feb 8, 2025
75a468a
Merge pull request #41 from team-MoPlus/fix/#38
sejoon00 Feb 8, 2025
9834a0e
[feat/#42] 발행 생성, 연월별 조회, 삭제 api 구현
seokbeom00 Feb 9, 2025
d990fcd
[feat/#42] 문항세트 조회 시 발행날짜 필드 추가
seokbeom00 Feb 9, 2025
5e1e097
[feat/#42] 문항세트 컨펌 시 유효하지 않은 문항id 에러메시지에 포함
seokbeom00 Feb 9, 2025
b2ce4d1
[fix/#44] jwt 전달 위치 변경 및 cors 추가
sejoon00 Feb 10, 2025
91bda6e
Merge pull request #45 from team-MoPlus/hotfix/#44
sejoon00 Feb 10, 2025
2ba6044
[fix/#42] 발행날짜 유효성검사 도메인으로 이동
seokbeom00 Feb 11, 2025
909bf4f
[fix/42] 발행 조회 쿼리 개선
seokbeom00 Feb 11, 2025
757b6a0
[feat/#42] 발행용 컨펌된 문항세트 검색 api 추가
seokbeom00 Feb 11, 2025
97049cd
Merge pull request #43 from team-MoPlus/feature/#42
sejoon00 Feb 11, 2025
79b5b53
[feat/#34] 문항 첫 생성 api 수정
sejoon00 Feb 11, 2025
8f9cd9f
[feat/#34] 문항 수정 사항 모두 반영 및 테스트 통과
sejoon00 Feb 12, 2025
9105d37
Merge pull request #46 from team-MoPlus/feature/#34
sejoon00 Feb 13, 2025
3f93b5e
[refactor/#48] jwt 쿠키로 변환 & swagger ui 변경
sejoon00 Feb 13, 2025
59a7a07
[refactor/#48] refresh 쿠키 없을 때 400 에러로 변경
sejoon00 Feb 13, 2025
d874a7d
[feat/#50] presigned url 구현
sejoon00 Feb 13, 2025
0a43525
Merge pull request #49 from team-MoPlus/refactor/#48
seokbeom00 Feb 14, 2025
54cd588
Merge pull request #52 from team-MoPlus/feature/#50
sejoon00 Feb 14, 2025
011573d
[feat/#47] null값 유효성검사 추가
seokbeom00 Feb 15, 2025
7802a19
[feat/#47] 문항세트 검색 시 문항타이틀, 문항메모 필드 추가
seokbeom00 Feb 15, 2025
229cc40
Merge pull request #53 from team-MoPlus/feature/#47
seokbeom00 Feb 16, 2025
39be34d
[feat/#55] 공통응답 어드바이스 추가
seokbeom00 Feb 16, 2025
1ad4958
[fix/#55] 문항세트 검색 변경사항 반영
seokbeom00 Feb 16, 2025
7997431
[fix/#55] 변경된 data 필드 추가
seokbeom00 Feb 16, 2025
3d50b10
Merge pull request #56 from team-MoPlus/hotfix/#55
seokbeom00 Feb 16, 2025
1c88774
[hotfix] presigned url 응답 변경
seokbeom00 Feb 17, 2025
77dee78
[fix/#54] 문항 변경사항 반영
sejoon00 Feb 18, 2025
b5653ca
Merge pull request #59 from team-MoPlus/hotfix/#54
sejoon00 Feb 18, 2025
eb44526
[fix/#54] 문항 타이틀, 난이도 null 해결
sejoon00 Feb 18, 2025
7f8454c
[fix/#54] 문항 타이틀, 난이도 null 해결
sejoon00 Feb 18, 2025
4a808df
Merge remote-tracking branch 'origin/develop' into hotfix/#54
sejoon00 Feb 18, 2025
14be218
Merge pull request #60 from team-MoPlus/hotfix/#54
sejoon00 Feb 18, 2025
c7adf26
[feat/#57] 공통응답 스웨거 스키마에 반영
seokbeom00 Feb 18, 2025
ed18106
[fix/#54] 문항 생성 오류 해결
sejoon00 Feb 18, 2025
c661ad0
Merge pull request #61 from team-MoPlus/hotfix/#54
sejoon00 Feb 18, 2025
1359835
[fix/#57] 멤버 테스트 json path 수정
seokbeom00 Feb 18, 2025
95f20f3
[fix/#54] 문항 추천 시간 추가
sejoon00 Feb 18, 2025
3414627
Merge pull request #63 from team-MoPlus/hotfix/#54
sejoon00 Feb 18, 2025
5f36999
Merge pull request #62 from team-MoPlus/hotfix/#57
seokbeom00 Feb 18, 2025
d6f6246
[hotfix] 공통응답 요구사항 반영
seokbeom00 Feb 19, 2025
5337cbb
[fix/#54] 로그인 응답 수정
sejoon00 Feb 19, 2025
e3c8b09
Merge pull request #64 from team-MoPlus/hotfix/#54
sejoon00 Feb 19, 2025
0d09310
[fix/#54] 문항 변경 사항 반영
sejoon00 Feb 20, 2025
6ebbf72
[fix/#54] 문항 변경 사항 반영
sejoon00 Feb 20, 2025
c1887de
Merge pull request #65 from team-MoPlus/hotfix/#54
sejoon00 Feb 20, 2025
78ffa70
[fix/#54] 문항 변경 사항 반영
sejoon00 Feb 20, 2025
6ba7a65
Merge pull request #66 from team-MoPlus/hotfix/#54
sejoon00 Feb 20, 2025
30d0a6d
[fix/#54] 문항 응답 필수값 변경
sejoon00 Feb 20, 2025
52fcf6d
Merge pull request #67 from team-MoPlus/hotfix/#54
sejoon00 Feb 20, 2025
0d27702
[fix/#54] 문항 추천시간 0으로 초기화 변경
sejoon00 Feb 20, 2025
6808d3f
Merge pull request #68 from team-MoPlus/hotfix/#54
sejoon00 Feb 20, 2025
d482b2f
[fix/#54] 문항 추천시간 0으로 초기화 변경
sejoon00 Feb 20, 2025
168d3be
Merge pull request #69 from team-MoPlus/hotfix/#54
sejoon00 Feb 20, 2025
8e30bbd
[fix/#54] 문항 업데이트 수정
sejoon00 Feb 20, 2025
70fe715
Merge remote-tracking branch 'origin/develop' into develop
sejoon00 Feb 20, 2025
b096a85
[fix/#54] 문항 검색 memo -> title
sejoon00 Feb 20, 2025
1aadf80
[fix/#54] 문항 세트 조회 응답 수정
sejoon00 Feb 20, 2025
72a9644
[fix/#54] 발행 응답 id 추가
sejoon00 Feb 20, 2025
a9ba4be
[fix/#54] 발행 삭제 응답 상태 코드 변경
sejoon00 Feb 20, 2025
0243ef6
[fix/#54] 날짜 지난 발행 삭제 불가
sejoon00 Feb 20, 2025
1632b55
[fix/#54] 발행 시 컨펌 해제 불가, 세트 문항에서 발행 날짜 여러개 가능
sejoon00 Feb 20, 2025
56e98d6
[fix/#54] 컬렉션 not null 처리
sejoon00 Feb 20, 2025
e3f90dc
[fix/#54] 문항세트 로직 변경
sejoon00 Feb 21, 2025
4a712bb
[feat] cors 도메인 추가
sejoon00 Feb 21, 2025
3315fc3
[hotfix] 문항세트 문항 중복조회 수정
seokbeom00 Feb 21, 2025
222292d
[hotfix] 문항세트 발행날짜 검증 테스트 제거
seokbeom00 Feb 21, 2025
6b4e27f
Merge branch 'develop' of https://github.com/team-MoPlus/moplus_serve…
seokbeom00 Feb 21, 2025
4eae03e
[hotfix] 문항세트 개별 조회 시 문항타이틀 필드 추가
seokbeom00 Feb 21, 2025
f70d980
[feat] 문항 응답 변경
sejoon00 Feb 21, 2025
804735b
[fix] merge 충돌 해결
sejoon00 Feb 21, 2025
8c93ef0
[fix] merge 충돌 해결
sejoon00 Feb 21, 2025
b255134
Create README.md
sejoon00 Feb 23, 2025
fdd6b0b
Merge branch 'master' into develop
sejoon00 Feb 23, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions .github/workflows/CI.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# This workflow will build a package using Gradle and then publish it to GitHub packages when a release is created
# For more information see: https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md#Publishing-using-gradle

name: Gradle Package

on:
pull_request:
branches:
- "master"
- "develop"

jobs:
build:

runs-on: ubuntu-latest
permissions:
contents: read
packages: write

steps:
- name: checkout
uses: actions/checkout@v3

- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'


- name: build and test
run: |
chmod +x gradlew
./gradlew build
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ build/
!gradle/wrapper/gradle-wrapper.jar
!**/src/main/**/build/
!**/src/test/**/build/

.env
local.env

### STS ###
.apt_generated
Expand Down Expand Up @@ -37,3 +37,5 @@ out/

### VS Code ###
.vscode/

src/test/resources/insert-search-problem.sql
13 changes: 1 addition & 12 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,6 @@ FROM openjdk:17
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar

ARG apm_agent=apm-agent/*.jar
COPY ${apm_agent} apm-agent.jar

ARG PROFILE=dev
ENV SPRING_PROFILES_ACTIVE=${PROFILE}

ENTRYPOINT ["java", \
"-javaagent:/apm-agent.jar", \
"-Delastic.apm.server_urls=http://114.70.23.79:8200", \
"-Delastic.apm.service_name=moplus-apm-agent", \
"-Delastic.apm.application_packages=com.server", \
"-Delastic.apm.environment=dev", \
"-jar", \
"/app.jar"]
ENTRYPOINT ["java", "-jar", "app.jar"]
13 changes: 1 addition & 12 deletions Dockerfile.prod
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,6 @@ FROM openjdk:17
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar

ARG apm_agent=apm-agent/*.jar
COPY ${apm_agent} apm-agent.jar

ARG PROFILE=dev
ENV SPRING_PROFILES_ACTIVE=${PROFILE}

ENTRYPOINT ["java", \
"-javaagent:/apm-agent.jar", \
"-Delastic.apm.server_urls=http://114.70.23.79:8200", \
"-Delastic.apm.service_name=moplus-apm-agent", \
"-Delastic.apm.application_packages=com.server", \
"-Delastic.apm.environment=prod", \
"-jar", \
"/app.jar"]
ENTRYPOINT ["java", "-jar", "app.jar"]
55 changes: 36 additions & 19 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,30 +1,47 @@
# 모플: 매일 3문항 수학 사고력 향상 서비스

매일 **기출 문제 3문항**을 풀며, **수학 사고력 취약점을 진단, 처방, 교정**까지 한 번에 해결하는 **올인원 수학 사고력 향상 서비스**입니다.

![깃허브 배너](https://github.com/user-attachments/assets/e0f52d08-05f9-44ba-9a71-f20cb9d52743)
---

<br/>
## 🎯 사용자 서비스 기능
<div style="display: flex; justify-content: center; gap: 10px;">
<img src="https://github.com/user-attachments/assets/a4c8cf3c-72f9-4d99-b701-ff5f9cc5f85d" width="250" height="400"/>
<img src="https://github.com/user-attachments/assets/7704d134-8b45-4320-996c-5aa7deafffbd" width="250" height="400"/>
<img src="https://github.com/user-attachments/assets/0eb0bcb3-a400-43ae-8eda-773b09795d03" width="250" height="400"/>
</div>

<h2> 빠르게 받아보는 내 취약점 복습서, 모플 </h2>
<h3> 기능1: 빠르게 틀린 문제를 체크해서 내 점수와 등급을 받아보세요. </h3>
<h3> 기능2: 입력한 오답문제를 바탕으로 복습서를 제공합니다. </h3>
<h3> 기능3: 친구에게 내 결과를 공유해보세요. </h3>
- **핵심 사고 과정 점검**: 각 기출 문항은 3개의 세부 문항으로 구성되어 있어, 취약점을 명확히 진단할 수 있습니다.
- **손해설 및 풀이 과정 제공**: 풀이 후, 문제 해결 과정에서 필요했던 핵심 사고력을 정리하여 개념 보완을 돕습니다.
- **오답 분석 및 맞춤 처방**: 세부 문항별 오답을 분석하고, 추가 학습이 필요한 개념을 처방합니다.
- **교정 학습 기능**: 틀린 문제와 유사한 문제를 다시 풀며, 취약한 사고 과정을 보완하고 사고력을 강화할 수 있습니다.

<br/>
---

<h2> Admin 페이지 </h2>
<h3> Thymeleaf를 통해 구현한 어드민 페이지로 모의고사에 대한 정보, 정답, 정답률, 문제 이미지를 업로드할 수 있습니다. </h3>
<div style="display: grid; grid-template-columns: 1fr 1fr; gap: 10px;">
<img src="https://github.com/user-attachments/assets/f9bfffc3-7708-49a4-b240-80ea71bae83e" alt="image" width="400" height="400">
<img src="https://github.com/user-attachments/assets/6bf10fa0-018a-4e63-9219-442ed3843312" alt="image" width="400" height="400">
<img src="https://github.com/user-attachments/assets/b255e176-8eec-4666-b190-12c6e5a3c996" alt="image" width="400" height="400">
<img src="https://github.com/user-attachments/assets/26ac807a-eeab-42ab-8f66-bcb9af101ee4" alt="image" width="400" height="400">
## 🛠 어드민 서비스 기능
<div style="display: flex; flex-direction: column; align-items: center; gap: 10px;">
<img width="900" src="https://github.com/user-attachments/assets/c5007734-4f8c-4fb4-80fe-c46a98293798" />
<img width="900" src="https://github.com/user-attachments/assets/eb8342d1-1ec9-46bb-a6b0-664f87eaca8e" />
<img width="900" src="https://github.com/user-attachments/assets/90d4003d-4836-4408-9dd5-d698b57c2cab" />
</div>

- **문항 및 세부 문항 등록**: 새 문제와 세부 문항을 손쉽게 등록할 수 있습니다.
- **세트 구성 및 일정 관리**: 여러 문항을 세트로 묶어 원하는 날짜에 발행 가능합니다.
- **자동 배포 기능**: 발행된 세트는 사용자에게 **"오늘의 문제"**로 제공됩니다.

<br/>
---

## 서버 팀원 소개
|[BE 개발자 박세준](https://github.com/sejoon00)|
|:--------:|
|<img src="https://avatars.githubusercontent.com/u/74056843?v=4" width=200>|
## 🏗 Architecture
<div style="display: flex; justify-content: center;">
<img width="900" src="https://github.com/user-attachments/assets/dae74b75-2c3f-436a-ac43-f09bcb1233ec" />
</div>

- 서비스의 **안정적인 운영을 위해 prod(운영)과 dev(개발) 서버를 분리**하여 배포 및 관리하고 있습니다.

---

## 서버 팀원 소개
|<img src="https://avatars.githubusercontent.com/u/74056843?v=4" width=200>|<img src="https://avatars.githubusercontent.com/u/101867059?v=4" width=200>|
|:--------:|:--------:|
|[BE 박세준](https://github.com/sejoon00)|[BE 홍석범](https://github.com/seokbeom00)|
</br>
27 changes: 27 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ repositories {
mavenCentral()
}


dependencies {
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
Expand All @@ -33,6 +34,10 @@ dependencies {
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'

// Spring Security
implementation 'org.springframework.boot:spring-boot-starter-security'
testImplementation 'org.springframework.security:spring-security-test'

//db-h2
implementation 'com.h2database:h2'
testImplementation 'com.h2database:h2'
Expand All @@ -44,6 +49,28 @@ dependencies {
//s3
implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE'

// JWT
implementation 'io.jsonwebtoken:jjwt-api:0.11.5'
runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.5'
runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.11.5'

// validator
implementation 'commons-validator:commons-validator:1.7'

// Map Struct
implementation 'org.mapstruct:mapstruct:1.6.3'
annotationProcessor 'org.mapstruct:mapstruct-processor:1.6.3'
annotationProcessor 'org.projectlombok:lombok-mapstruct-binding:0.2.0'

// JPA
implementation 'jakarta.persistence:jakarta.persistence-api:3.1.0'
implementation 'jakarta.annotation:jakarta.annotation-api:2.1.1'

// QueryDSL
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
}

tasks.named('test') {
Expand Down
5 changes: 5 additions & 0 deletions docker-compose-dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,11 @@ services:
- CLOUD_AWS_REGION_STATIC=${AWS_REGION}
- CLOUD_AWS_REGION_AUTO=false
- CLOUD_AWS_STACK_AUTO=false
- JWT_ACCESS_TOKEN_SECRET=${JWT_ACCESS_TOKEN_SECRET}
- JWT_REFRESH_TOKEN_SECRET=${JWT_REFRESH_TOKEN_SECRET}
- JWT_ACCESS_TOKEN_EXPIRATION_TIME=${JWT_ACCESS_TOKEN_EXPIRATION_TIME} # 기본값: 2시간
- JWT_REFRESH_TOKEN_EXPIRATION_TIME=${JWT_REFRESH_TOKEN_EXPIRATION_TIME} # 기본값: 7일
- JWT_ISSUER=${JWT_ISSUER}

depends_on:
- mysql
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package com.moplus.moplus_server.domain.concept.domain;

import static com.querydsl.core.types.PathMetadataFactory.*;

import com.querydsl.core.types.dsl.*;

import com.querydsl.core.types.PathMetadata;
import javax.annotation.processing.Generated;
import com.querydsl.core.types.Path;


/**
* QConceptTag is a Querydsl query type for ConceptTag
*/
@Generated("com.querydsl.codegen.DefaultEntitySerializer")
public class QConceptTag extends EntityPathBase<ConceptTag> {

private static final long serialVersionUID = 652954745L;

public static final QConceptTag conceptTag = new QConceptTag("conceptTag");

public final com.moplus.moplus_server.global.common.QBaseEntity _super = new com.moplus.moplus_server.global.common.QBaseEntity(this);

//inherited
public final DateTimePath<java.time.LocalDateTime> createdDate = _super.createdDate;

public final NumberPath<Long> id = createNumber("id", Long.class);

public final StringPath name = createString("name");

//inherited
public final DateTimePath<java.time.LocalDateTime> updatedDate = _super.updatedDate;

public QConceptTag(String variable) {
super(ConceptTag.class, forVariable(variable));
}

public QConceptTag(Path<? extends ConceptTag> path) {
super(path.getType(), path.getMetadata());
}

public QConceptTag(PathMetadata metadata) {
super(ConceptTag.class, metadata);
}

}

Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package com.moplus.moplus_server.domain.member.domain;

import static com.querydsl.core.types.PathMetadataFactory.*;

import com.querydsl.core.types.dsl.*;

import com.querydsl.core.types.PathMetadata;
import javax.annotation.processing.Generated;
import com.querydsl.core.types.Path;


/**
* QMember is a Querydsl query type for Member
*/
@Generated("com.querydsl.codegen.DefaultEntitySerializer")
public class QMember extends EntityPathBase<Member> {

private static final long serialVersionUID = -705761779L;

public static final QMember member = new QMember("member1");

public final com.moplus.moplus_server.global.common.QBaseEntity _super = new com.moplus.moplus_server.global.common.QBaseEntity(this);

//inherited
public final DateTimePath<java.time.LocalDateTime> createdDate = _super.createdDate;

public final StringPath email = createString("email");

public final NumberPath<Long> id = createNumber("id", Long.class);

public final StringPath name = createString("name");

public final StringPath password = createString("password");

public final EnumPath<MemberRole> role = createEnum("role", MemberRole.class);

//inherited
public final DateTimePath<java.time.LocalDateTime> updatedDate = _super.updatedDate;

public QMember(String variable) {
super(Member.class, forVariable(variable));
}

public QMember(Path<? extends Member> path) {
super(path.getType(), path.getMetadata());
}

public QMember(PathMetadata metadata) {
super(Member.class, metadata);
}

}

Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package com.moplus.moplus_server.domain.problem.domain;

import static com.querydsl.core.types.PathMetadataFactory.*;

import com.querydsl.core.types.dsl.*;

import com.querydsl.core.types.PathMetadata;
import javax.annotation.processing.Generated;
import com.querydsl.core.types.Path;


/**
* QAnswer is a Querydsl query type for Answer
*/
@Generated("com.querydsl.codegen.DefaultEmbeddableSerializer")
public class QAnswer extends BeanPath<Answer> {

private static final long serialVersionUID = 983834524L;

public static final QAnswer answer = new QAnswer("answer");

public final StringPath value = createString("value");

public QAnswer(String variable) {
super(Answer.class, forVariable(variable));
}

public QAnswer(Path<? extends Answer> path) {
super(path.getType(), path.getMetadata());
}

public QAnswer(PathMetadata metadata) {
super(Answer.class, metadata);
}

}

Loading