Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
68fcc2f
โœจ (#267) ํ•™์ƒ ํด๋ž˜์Šค ํŽ˜์ด์ง€์— ํด๋ž˜์Šค ์ถ”๊ฐ€ ๋ฐ ๋ชฉ๋ก ์„น์…˜ ๊ตฌํ˜„
iinuyha Aug 3, 2025
62f0257
โœจ (#267) ํด๋ž˜์Šค ์ž…์žฅ ๋ชจ๋‹ฌ์— QR ์Šค์บ” ๋ฐ ์ฝ”๋“œ ์ž…๋ ฅ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
iinuyha Aug 3, 2025
39f0462
โ™ป๏ธ (#267) ํด๋ž˜์Šค ์ž…์žฅ ๋ชจ๋‹ฌ์—์„œ onBack ํ”„๋กœํผํ‹ฐ๋ฅผ onClose๋กœ ๋ณ€๊ฒฝ
iinuyha Aug 3, 2025
0ecedf7
โœจ (#267) ์ž…์žฅ ์ฝ”๋“œ ์ž…๋ ฅ API ๋ฐ ํƒ€์ž… ์ •์˜ ์ถ”๊ฐ€
iinuyha Aug 3, 2025
301c322
โœจ (#267) ํด๋ž˜์Šค ์ž…์žฅ ๋ชจ๋‹ฌ์— ์ž…์žฅ ์ฝ”๋“œ ์ œ์ถœ ๋กœ์ง ๋ฐ ์˜ค๋ฅ˜ ์•Œ๋ฆผ ๋ชจ๋‹ฌ ์ถ”๊ฐ€
iinuyha Aug 3, 2025
cbdf9a3
โœจ (#267) ํด๋ž˜์Šค ๋‹‰๋„ค์ž„ ์„ค์ • ๋ชจ๋‹ฌ ์ปดํฌ๋„ŒํŠธ ๋ฐ ์Šคํƒ€์ผ ์ถ”๊ฐ€
iinuyha Aug 3, 2025
b57b5ea
โœจ (#267) ํด๋ž˜์Šค ์ž…์žฅ ๋ชจ๋‹ฌ์— QR ์ฝ”๋“œ ์Šค์บ” ๊ธฐ๋Šฅ ๋ฐ jsqr ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€
iinuyha Aug 3, 2025
cfe832d
Merge branch 'Refactor/#272/refactor-verify' of https://github.com/KWโ€ฆ
iinuyha Aug 4, 2025
d1a2a2a
โœจ (#267) ํด๋ž˜์Šค ๋‹‰๋„ค์ž„ ์„ค์ • ๋ชจ๋‹ฌ ๋ฐ QR ์ฝ”๋“œ ๊ฐ์ง€ ๊ธฐ๋Šฅ ๊ฐœ์„ 
iinuyha Aug 4, 2025
9a54418
โœจ (#267) ํด๋ž˜์Šค ๋‹‰๋„ค์ž„ ์„ค์ • API ๋ฐ ํƒ€์ž… ์ถ”๊ฐ€, ๋ชจ๋‹ฌ์—์„œ API ํ˜ธ์ถœ๋กœ ๋ณ€๊ฒฝ
iinuyha Aug 4, 2025
d0027b9
โœจ (#267) ๋‚ด ์ˆ˜์—… ๋ชฉ๋ก์„ ๊ฐ€์ ธ์˜ค๋Š” API ๋ฐ ํƒ€์ž… ์ถ”๊ฐ€
iinuyha Aug 4, 2025
bb604ec
โœจ (#267) ์ฐธ์—ฌ์ค‘์ธ ํด๋ž˜์Šค ๋ชฉ๋ก์„ ํ‘œ์‹œํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ ๋ฐ ์Šคํƒ€์ผ ์ถ”๊ฐ€
iinuyha Aug 4, 2025
395b0a3
:package: ๋ฐฑ์—”๋“œ CI ๊ตฌ์„ฑ
sunninz Aug 5, 2025
c1c41d0
:package: ๋ฐฑ์—”๋“œ CI gradlew ๋””๋ ‰ํ† ๋ฆฌ ์ง€์ •
sunninz Aug 5, 2025
becb6b1
:package: ํ”„๋ก ํŠธ CI ๊ตฌ์„ฑ
sunninz Aug 5, 2025
98c339f
:sparkles: (#271) ํ€ด์ฆˆ ์ •๋‹ต ์กฐํšŒ DTO
mumminn Aug 5, 2025
2793a7a
Merge branch 'Fix/#274-student-classes-role' of https://github.com/KWโ€ฆ
iinuyha Aug 5, 2025
7beccd2
:sparkles: (#271) ํ•™์ƒ๋ณ„ ํ€ด์ฆˆ ์„ ํƒ ๊ฒฐ๊ณผ ์กฐํšŒ ๋กœ์ง ์ถ”๊ฐ€
mumminn Aug 11, 2025
d8c00c2
:package: ํ”„๋ก ํŠธ dockerfile ์ž‘์„ฑ
sunninz Aug 12, 2025
829f8e7
:package: docker-compose ์ˆ˜์ •
sunninz Aug 12, 2025
3c4f06f
โœจ (#267) ํด๋ž˜์Šค ๋‹‰๋„ค์ž„ ์„ค์ • ๋ชจ๋‹ฌ์—์„œ Next.js์˜ useRouter ํ›…์„ ์‚ฌ์šฉํ•˜๋„๋ก ๋ณ€๊ฒฝ
iinuyha Aug 12, 2025
e1446b3
Merge pull request #279 from KW-ClassLog/Feat/#267/student-class
iinuyha Aug 12, 2025
5e61ccc
Merge pull request #278 from KW-ClassLog/Feat/#271/student-quiz-result
mumminn Aug 12, 2025
1af9cef
:package: ํ”„๋ก ํŠธ Dockerfile ์ˆ˜์ •
sunninz Aug 17, 2025
a01b294
:package: docker-compose ์ˆ˜์ •
sunninz Aug 17, 2025
c8ad04b
:package: CD ํŒŒ์ดํ”„๋ผ์ธ
sunninz Aug 18, 2025
a7cd9af
:bug: (#284) CORS ์„ค์ • ํ”„๋ก ํŠธ origin ์ถ”๊ฐ€
sunninz Aug 18, 2025
157f20c
Merge pull request #285 from KW-ClassLog/Fix/#284/cors-allows-origin
sunninz Aug 18, 2025
9be5c1f
Merge branch 'dev' into Chore/#276-deploy
sunninz Aug 18, 2025
74a6237
:package: ๋ฐฑ์—”๋“œ CI ๊ตฌ์„ฑ
sunninz Aug 5, 2025
358d7e4
:package: ๋ฐฑ์—”๋“œ CI gradlew ๋””๋ ‰ํ† ๋ฆฌ ์ง€์ •
sunninz Aug 5, 2025
49d1209
:package: ํ”„๋ก ํŠธ CI ๊ตฌ์„ฑ
sunninz Aug 5, 2025
632f185
:package: ํ”„๋ก ํŠธ dockerfile ์ž‘์„ฑ
sunninz Aug 12, 2025
73bc04d
:package: docker-compose ์ˆ˜์ •
sunninz Aug 12, 2025
daa66ee
:package: ํ”„๋ก ํŠธ Dockerfile ์ˆ˜์ •
sunninz Aug 17, 2025
037ac83
:package: docker-compose ์ˆ˜์ •
sunninz Aug 17, 2025
cd3e9a4
:package: CD ํŒŒ์ดํ”„๋ผ์ธ
sunninz Aug 18, 2025
7fb6762
:sparkles: (#276) CORS ์„ค์ • ์ถ”๊ฐ€
sunninz Aug 19, 2025
745fb48
:sparkles: (#276) Security ์„ค์ • ๋ณ€๊ฒฝ
sunninz Aug 19, 2025
61c8b19
Merge remote-tracking branch 'origin/Chore/#276-deploy' into Chore/#2โ€ฆ
sunninz Aug 20, 2025
62580f1
:package: (#276) nginx ์„ค์ •
sunninz Aug 20, 2025
099bca3
:package: (#276) AI ์ปจํ…Œ์ด๋„ˆ ์„ค์ • ๋ณ€๊ฒฝ
sunninz Aug 20, 2025
9ac0892
:package: (#276) docker compose ๋ฐฐํฌํ™˜๊ฒฝ์œผ๋กœ ๋ณ€๊ฒฝ
sunninz Aug 20, 2025
290713f
:package: (#276) CD.yml ์˜คํƒ€ ์ˆ˜์ •
sunninz Aug 20, 2025
f118dce
:package: (#276) ๋ฐฐํฌ ํ…Œ์ŠคํŠธ push๋กœ ์ˆ˜์ •
sunninz Aug 20, 2025
11434b7
:package: (#276) docker-compose username ๋ณ€๊ฒฝ
sunninz Aug 20, 2025
019bda7
:package: (#276) cors origin ์ฃผ์ž…๋ฐฉ์‹๋ณ€๊ฒฝ
sunninz Aug 20, 2025
1772d69
:package: (#276) cors origin ""์ถ”๊ฐ€
sunninz Aug 20, 2025
94b3711
:package: (#276) cors origin ๋ณ€๊ฒฝ
sunninz Aug 20, 2025
81c8704
:package: (#276) cors origin ์˜คํƒ€ ์ˆ˜์ •
sunninz Aug 20, 2025
478adff
:package: (#276) ํ‘ธ์‹œ ๋ธŒ๋Ÿฐ์น˜ dev๋กœ ๋ณ€๊ฒฝ
sunninz Aug 20, 2025
18844a3
:bug: (#276) ๋กœ๊ทธ์•„์›ƒ ์ˆ˜์ •
sunninz Aug 20, 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
117 changes: 117 additions & 0 deletions .github/workflows/CD.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
name: ClassLog CD

on:
push:
branches: ["dev"]

permissions:
contents: read
packages: write

env:
IMAGE_TAG: ${{ github.sha }}
BACKEND_IMAGE: ${{ secrets.DOCKER_USERNAME }}/classlog-backend
FRONTEND_IMAGE: ${{ secrets.DOCKER_USERNAME }}/classlog-frontend
jobs:
build-and-push:
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v4

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

- name: Grant execute permission for gradlew
working-directory: ./backend
run: chmod +x gradlew

- name: Build with Gradle
working-directory: ./backend
run: ./gradlew clean bootJar

- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}

- name: Build & Push Backend Image
run: |
docker build -t ${BACKEND_IMAGE}:latest -t ${BACKEND_IMAGE}:${IMAGE_TAG} ./backend
docker push ${BACKEND_IMAGE}:latest
docker push ${BACKEND_IMAGE}:${IMAGE_TAG}

- name: Build & Push Frontend Image
run: |
docker build -t ${FRONTEND_IMAGE}:latest -t ${FRONTEND_IMAGE}:${IMAGE_TAG} ./frontend
docker push ${FRONTEND_IMAGE}:latest
docker push ${FRONTEND_IMAGE}:${IMAGE_TAG}
deploy:
needs: build-and-push
runs-on: ubuntu-latest

steps:
- name: Create backend/.env on server
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USER }}
key: ${{ secrets.SSH_KEY }}
script: |
mkdir -p /home/ubuntu/classlog/backend
cat > /home/ubuntu/classlog/backend/.env <<EOF
DB_USERNAME=${{ secrets.DB_USERNAME }}
DB_PASSWORD=${{ secrets.DB_PASSWORD }}
DB_NAME=${{ secrets.DB_NAME }}
DB_HOST=${{ secrets.DB_HOST }}
DB_PORT=${{ secrets.DB_PORT }}
REDIS_HOST=${{ secrets.REDIS_HOST }}
REDIS_PORT=${{ secrets.REDIS_PORT }}
JWT_SECRET=${{ secrets.JWT_SECRET }}
MAIL_HOST=${{ secrets.MAIL_HOST }}
MAIL_PORT=${{ secrets.MAIL_PORT }}
MAIL_USERNAME=${{ secrets.MAIL_USERNAME }}
MAIL_PASSWORD=${{ secrets.MAIL_PASSWORD }}
AWS_REGION=${{ secrets.AWS_REGION }}
AWS_ACCESS_KEY=${{ secrets.AWS_ACCESS_KEY }}
AWS_SECRET_KEY=${{ secrets.AWS_SECRET_KEY }}
AWS_S3_BUCKET_NAME=${{ secrets.AWS_S3_BUCKET_NAME }}
AI_SERVER_URL=${{ secrets.AI_SERVER_URL }}
OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }}
KAKAO_API_KEY=${{ secrets.KAKAO_API_KEY }}
KAKAO_REDIRECT_URI=${{ secrets.KAKAO_REDIRECT_URI }}
CORS_ORIGIN=${{ secrets.CORS_ORIGIN}}
EOF

- name: Create frontend/.env on server
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USER }}
key: ${{ secrets.SSH_KEY }}
script: |
mkdir -p /home/ubuntu/classlog/frontend
cat > /home/ubuntu/classlog/frontend/.env <<EOF
NEXT_PUBLIC_API_BASE_URL=${{secrets.NEXT_PUBLIC_API_BASE_URL}}
EOF
- name: Deploy containers
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USER }}
key: ${{ secrets.SSH_KEY }}
script: |
cd /home/ubuntu/classlog
export DOCKERHUB_USERNAME="${{ secrets.DOCKER_USERNAME }}"
export IMAGE_TAG="${{ github.sha }}"

echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${DOCKERHUB_USERNAME}" --password-stdin
docker compose down
docker compose pull
docker compose up -d
docker image prune -f
66 changes: 66 additions & 0 deletions .github/workflows/CI-backend.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
name: ClassLog CI - Backend
on:
pull_request:
paths:
- 'backend/**'
branches: ["dev"]

permissions:
contents: read
checks: write
pull-requests: write

jobs:
backend-test:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

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

- name : Set up redis
uses: supercharge/redis-github-action@1.7.0
with:
redis-version: 7

- name: Grant execute permission for gradlew
working-directory: ./backend
run: chmod +x gradlew

- name: Build with Gradle
working-directory: ./backend
env:
DB_USERNAME: ${{ secrets.DB_HOST }}
DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
DB_NAME: ${{ secrets.DB_NAME }}
DB_HOST: ${{ secrets.DB_HOST }}
DB_PORT: ${{ secrets.DB_PORT }}
REDIS_HOST: ${{ secrets.REDIS_HOST }}
REDIS_PORT: ${{ secrets.REDIS_PORT }}
JWT_SECRET: ${{ secrets.JWT_SECRET }}
MAIL_HOST: ${{ secrets.MAIL_HOST }}
MAIL_PORT: ${{ secrets.MAIL_PORT }}
MAIL_USERNAME: ${{ secrets.MAIL_USERNAME }}
MAIL_PASSWORD: ${{ secrets.MAIL_PASSWORD }}
AWS_REGION: ${{ secrets.AWS_REGION }}
AWS_ACCESS_KEY: ${{ secrets.AWS_ACCESS_KEY }}
AWS_SECRET_KEY: ${{ secrets.AWS_SECRET_KEY }}
AI_SERVER_URL: ${{ secrets.AI_SERVER_URL }}
AWS_S3_BUCKET_NAME: ${{ secrets.AWS_S3_BUCKET_NAME }}
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
KAKAO_API_KEY: ${{ secrets.KAKAO_API_KEY }}
KAKAO_REDIRECT_URI: ${{ secrets.KAKAO_REDIRECT_URI }}
run: ./gradlew build

- name: โœ…Passed
if: success()
run: echo "Backend Tests passed"

- name: โŒFailed
if: failure()
run: echo "Backend Tests failed"
41 changes: 41 additions & 0 deletions .github/workflows/CI-frontend.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
name: ClassLog CI - Frontend
on:
pull_request:
paths:
- 'frontend/**'
branches: ["dev"]

permissions:
contents: read
checks: write
pull-requests: write

jobs:
frontend-test:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version: '20'

- name: Install dependencies
working-directory: ./frontend
run: npm install

- name: Build with npm
working-directory: ./frontend
env:
NEXT_PUBLIC_API_BASE_URL : ${{ secrets.NEXT_PUBLIC_API_BASE_URL }}
run: npm run build

- name: โœ…Passed
if: success()
run: echo "Frontend Tests passed"

- name: โŒFailed
if: failure()
run: echo "Frontend Tests failed"
56 changes: 0 additions & 56 deletions backend/docker-compose.yml

This file was deleted.

Empty file modified backend/gradlew
100644 โ†’ 100755
Empty file.
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ public static void main(String[] args) {
System.setProperty("AWS_S3_BUCKET_NAME", dotenv.get("AWS_S3_BUCKET_NAME"));
System.setProperty("KAKAO_API_KEY", dotenv.get("KAKAO_API_KEY"));
System.setProperty("KAKAO_REDIRECT_URI", dotenv.get("KAKAO_REDIRECT_URI"));
System.setProperty("CORS_ORIGIN",dotenv.get("CORS_ORIGIN"));

SpringApplication.run(BackendApplication.class, args);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ public enum QuizErrorCode implements BaseErrorCode {
DUPLICATE_SUBMISSION(HttpStatus.BAD_REQUEST,"QUIZ400_3", "์ด๋ฏธ ํ•ด๋‹น ํ€ด์ฆˆ์— ๋Œ€ํ•œ ๋‹ต์•ˆ์„ ์ œ์ถœํ•˜์˜€์Šต๋‹ˆ๋‹ค."),
AUDIO_NOT_FOUND(HttpStatus.NOT_FOUND, "QUIZ404_2", "๋…น์Œ๋ณธ ๊ธฐ๋ฐ˜ ํ€ด์ฆˆ๋Š” ์„œ๋น„์Šค ๋‚ด์—์„œ ๊ฐ•์˜ ์‹œ์ž‘ ํ›„ ๋…น์Œ์ด ์™„๋ฃŒ๋œ ๊ฒฝ์šฐ์—๋งŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."),
QUIZ_NOT_GENERATED_YET(HttpStatus.NOT_FOUND, "QUIZ404_3", "ํ€ด์ฆˆ๊ฐ€ ์•„์ง ์—…๋กœ๋“œ๋˜์ง€ ์•Š์•˜์–ด์š”!"),
QUIZ_ANSWER_NOT_FOUND(HttpStatus.NOT_FOUND, "QUIZ404_4", "ํ€ด์ฆˆ๋ฅผ ์ œ์ถœํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค."),
AI_CALL_FAILED(HttpStatus.INTERNAL_SERVER_ERROR, "AI_500", "AI ํ˜ธ์ถœ ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.");

private final HttpStatus httpStatus;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,13 @@
import lombok.RequiredArgsConstructor;
import org.example.backend.domain.quizAnswer.dto.request.QuizSubmitRequestDTO;
import org.example.backend.domain.quizAnswer.dto.response.QuizInfoResponseDTO;
import org.example.backend.domain.quizAnswer.dto.response.QuizResultStudentResponseDTO;
import org.example.backend.domain.quizAnswer.dto.response.QuizSubmitListResponseDTO;
import org.example.backend.domain.quiz.exception.QuizException;
import org.example.backend.domain.quizAnswer.dto.response.QuizSubmitResponseDTO;
import org.example.backend.domain.quizAnswer.service.QuizAnswerService;
import org.example.backend.domain.quizAnswer.service.QuizInfoService;
import org.example.backend.domain.quizAnswer.service.QuizResultStudentService;
import org.example.backend.domain.quizAnswer.service.QuizSubmitService;
import org.example.backend.global.ApiResponse;
import org.example.backend.global.code.base.FailureCode;
Expand All @@ -25,6 +27,7 @@ public class QuizAnswerController {
private final QuizAnswerService quizAnswerService;
private final QuizInfoService quizInfoService;
private final QuizSubmitService quizSubmitService;
private final QuizResultStudentService quizResultStudentService;


// ํ€ด์ฆˆ ์ œ์ถœ ํ•™์ƒ ๋ชฉ๋ก ์กฐํšŒ
Expand Down Expand Up @@ -73,7 +76,23 @@ public ResponseEntity<ApiResponse<QuizSubmitResponseDTO>> submitQuiz(
.status(e.getErrorCode().getReasonHttpStatus().getHttpStatus())
.body(ApiResponse.onFailure(e.getErrorCode()));
} catch (Exception e) {
e.printStackTrace(); // ์ฝ˜์†”์— ์ „์ฒด ์ŠคํƒํŠธ๋ ˆ์ด์Šค ์ถœ๋ ฅ
return ResponseEntity
.status(FailureCode._INTERNAL_SERVER_ERROR.getReasonHttpStatus().getHttpStatus())
.body(ApiResponse.onFailure(FailureCode._INTERNAL_SERVER_ERROR));
}
}

// ํ•™์ƒ ๋ณ„ ํ€ด์ฆˆ ์„ ํƒ ๊ฒฐ๊ณผ
@GetMapping("/{lectureId}/result/student")
public ResponseEntity<ApiResponse<QuizResultStudentResponseDTO>> getQuizResult(@PathVariable("lectureId") UUID lectureId) {
try{
QuizResultStudentResponseDTO result = quizResultStudentService.getQuizResult(lectureId);
return ResponseEntity.ok(ApiResponse.onSuccess(result));
} catch (QuizException e) {
return ResponseEntity
.status(e.getErrorCode().getReasonHttpStatus().getHttpStatus())
.body(ApiResponse.onFailure(e.getErrorCode()));
} catch (Exception e) {
return ResponseEntity
.status(FailureCode._INTERNAL_SERVER_ERROR.getReasonHttpStatus().getHttpStatus())
.body(ApiResponse.onFailure(FailureCode._INTERNAL_SERVER_ERROR));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,18 @@
package org.example.backend.domain.quizAnswer.converter;

import org.example.backend.domain.option.entity.Option;
import org.example.backend.domain.quiz.entity.Quiz;
import org.example.backend.domain.quizAnswer.dto.response.QuizResultStudentResponseDTO;
import org.example.backend.domain.quizAnswer.dto.response.QuizSubmitResponseDTO;
import org.example.backend.domain.quizAnswer.entity.QuizAnswer;
import org.example.backend.domain.user.repository.UserRepository;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.UUID;
import java.util.stream.Collectors;

@Component
public class QuizAnswerConverter {
Expand All @@ -26,6 +32,4 @@ public static QuizSubmitResponseDTO toSubmitResponse(UUID userId, int savedCount
.savedCount(savedCount)
.build();
}


}
Loading