diff --git a/src/main/generated/com/moplus/moplus_server/domain/publish/domain/QPublish.java b/src/main/generated/com/moplus/moplus_server/admin/publish/domain/QPublish.java similarity index 92% rename from src/main/generated/com/moplus/moplus_server/domain/publish/domain/QPublish.java rename to src/main/generated/com/moplus/moplus_server/admin/publish/domain/QPublish.java index 41676a4..5e60737 100644 --- a/src/main/generated/com/moplus/moplus_server/domain/publish/domain/QPublish.java +++ b/src/main/generated/com/moplus/moplus_server/admin/publish/domain/QPublish.java @@ -1,4 +1,4 @@ -package com.moplus.moplus_server.domain.publish.domain; +package com.moplus.moplus_server.admin.publish.domain; import static com.querydsl.core.types.PathMetadataFactory.*; @@ -15,7 +15,7 @@ @Generated("com.querydsl.codegen.DefaultEntitySerializer") public class QPublish extends EntityPathBase { - private static final long serialVersionUID = 1565569153L; + private static final long serialVersionUID = 1641302032L; public static final QPublish publish = new QPublish("publish"); diff --git a/src/main/generated/com/moplus/moplus_server/client/submit/domain/QChildProblemSubmit.java b/src/main/generated/com/moplus/moplus_server/client/submit/domain/QChildProblemSubmit.java new file mode 100644 index 0000000..1d70b64 --- /dev/null +++ b/src/main/generated/com/moplus/moplus_server/client/submit/domain/QChildProblemSubmit.java @@ -0,0 +1,53 @@ +package com.moplus.moplus_server.client.submit.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; + + +/** + * QChildProblemSubmit is a Querydsl query type for ChildProblemSubmit + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QChildProblemSubmit extends EntityPathBase { + + private static final long serialVersionUID = -1656142683L; + + public static final QChildProblemSubmit childProblemSubmit = new QChildProblemSubmit("childProblemSubmit"); + + public final com.moplus.moplus_server.global.common.QBaseEntity _super = new com.moplus.moplus_server.global.common.QBaseEntity(this); + + public final NumberPath childProblemId = createNumber("childProblemId", Long.class); + + //inherited + public final DateTimePath createdDate = _super.createdDate; + + public final NumberPath id = createNumber("id", Long.class); + + public final NumberPath memberId = createNumber("memberId", Long.class); + + public final NumberPath publishId = createNumber("publishId", Long.class); + + public final EnumPath status = createEnum("status", ChildProblemSubmitStatus.class); + + //inherited + public final DateTimePath updatedDate = _super.updatedDate; + + public QChildProblemSubmit(String variable) { + super(ChildProblemSubmit.class, forVariable(variable)); + } + + public QChildProblemSubmit(Path path) { + super(path.getType(), path.getMetadata()); + } + + public QChildProblemSubmit(PathMetadata metadata) { + super(ChildProblemSubmit.class, metadata); + } + +} + diff --git a/src/main/generated/com/moplus/moplus_server/client/submit/domain/QProblemSubmit.java b/src/main/generated/com/moplus/moplus_server/client/submit/domain/QProblemSubmit.java new file mode 100644 index 0000000..e573b01 --- /dev/null +++ b/src/main/generated/com/moplus/moplus_server/client/submit/domain/QProblemSubmit.java @@ -0,0 +1,53 @@ +package com.moplus.moplus_server.client.submit.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; + + +/** + * QProblemSubmit is a Querydsl query type for ProblemSubmit + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QProblemSubmit extends EntityPathBase { + + private static final long serialVersionUID = 1682818189L; + + public static final QProblemSubmit problemSubmit = new QProblemSubmit("problemSubmit"); + + public final com.moplus.moplus_server.global.common.QBaseEntity _super = new com.moplus.moplus_server.global.common.QBaseEntity(this); + + //inherited + public final DateTimePath createdDate = _super.createdDate; + + public final NumberPath id = createNumber("id", Long.class); + + public final NumberPath memberId = createNumber("memberId", Long.class); + + public final NumberPath problemId = createNumber("problemId", Long.class); + + public final NumberPath publishId = createNumber("publishId", Long.class); + + public final EnumPath status = createEnum("status", ProblemSubmitStatus.class); + + //inherited + public final DateTimePath updatedDate = _super.updatedDate; + + public QProblemSubmit(String variable) { + super(ProblemSubmit.class, forVariable(variable)); + } + + public QProblemSubmit(Path path) { + super(path.getType(), path.getMetadata()); + } + + public QProblemSubmit(PathMetadata metadata) { + super(ProblemSubmit.class, metadata); + } + +} + diff --git a/src/main/generated/com/moplus/moplus_server/domain/problem/service/mapper/ChildProblemMapperImpl.java b/src/main/generated/com/moplus/moplus_server/domain/problem/service/mapper/ChildProblemMapperImpl.java index f872cbc..d528b5c 100644 --- a/src/main/generated/com/moplus/moplus_server/domain/problem/service/mapper/ChildProblemMapperImpl.java +++ b/src/main/generated/com/moplus/moplus_server/domain/problem/service/mapper/ChildProblemMapperImpl.java @@ -1,7 +1,7 @@ package com.moplus.moplus_server.domain.problem.service.mapper; +import com.moplus.moplus_server.admin.problem.dto.request.ChildProblemUpdateRequest; import com.moplus.moplus_server.domain.problem.domain.childProblem.ChildProblem; -import com.moplus.moplus_server.domain.problem.dto.request.ChildProblemUpdateRequest; import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; @@ -11,7 +11,7 @@ @Generated( value = "org.mapstruct.ap.MappingProcessor", - date = "2025-03-03T17:28:35+0900", + date = "2025-03-14T20:25:51+0900", comments = "version: 1.6.3, compiler: javac, environment: Java 17.0.10 (JetBrains s.r.o.)" ) @Component diff --git a/src/main/generated/com/moplus/moplus_server/domain/problem/service/mapper/ProblemMapperImpl.java b/src/main/generated/com/moplus/moplus_server/domain/problem/service/mapper/ProblemMapperImpl.java index e2bc255..b3e294c 100644 --- a/src/main/generated/com/moplus/moplus_server/domain/problem/service/mapper/ProblemMapperImpl.java +++ b/src/main/generated/com/moplus/moplus_server/domain/problem/service/mapper/ProblemMapperImpl.java @@ -1,11 +1,11 @@ package com.moplus.moplus_server.domain.problem.service.mapper; +import com.moplus.moplus_server.admin.problem.dto.request.ProblemPostRequest; +import com.moplus.moplus_server.admin.problem.dto.request.ProblemUpdateRequest; import com.moplus.moplus_server.domain.problem.domain.practiceTest.PracticeTestTag; import com.moplus.moplus_server.domain.problem.domain.problem.Problem; import com.moplus.moplus_server.domain.problem.domain.problem.ProblemCustomId; import com.moplus.moplus_server.domain.problem.domain.problem.ProblemType; -import com.moplus.moplus_server.domain.problem.dto.request.ProblemPostRequest; -import com.moplus.moplus_server.domain.problem.dto.request.ProblemUpdateRequest; import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; @@ -15,7 +15,7 @@ @Generated( value = "org.mapstruct.ap.MappingProcessor", - date = "2025-03-03T17:28:35+0900", + date = "2025-03-15T21:23:23+0900", comments = "version: 1.6.3, compiler: javac, environment: Java 17.0.10 (JetBrains s.r.o.)" ) @Component diff --git a/src/main/generated/com/moplus/moplus_server/domain/v0/TestResult/entity/QIncorrectProblem.java b/src/main/generated/com/moplus/moplus_server/domain/v0/TestResult/entity/QIncorrectProblem.java index 9f3b995..b73be8c 100644 --- a/src/main/generated/com/moplus/moplus_server/domain/v0/TestResult/entity/QIncorrectProblem.java +++ b/src/main/generated/com/moplus/moplus_server/domain/v0/TestResult/entity/QIncorrectProblem.java @@ -37,7 +37,7 @@ public class QIncorrectProblem extends EntityPathBase { public final NumberPath practiceTestId = createNumber("practiceTestId", Long.class); - public final NumberPath problemId = createNumber("problemCustomId", Long.class); + public final NumberPath problemId = createNumber("problemId", Long.class); public final StringPath problemNumber = createString("problemNumber"); diff --git a/src/main/generated/com/moplus/moplus_server/domain/v0/practiceTest/domain/QProblemImageForTest.java b/src/main/generated/com/moplus/moplus_server/domain/v0/practiceTest/domain/QProblemImageForTest.java index 67b69aa..b7e7668 100644 --- a/src/main/generated/com/moplus/moplus_server/domain/v0/practiceTest/domain/QProblemImageForTest.java +++ b/src/main/generated/com/moplus/moplus_server/domain/v0/practiceTest/domain/QProblemImageForTest.java @@ -25,7 +25,7 @@ public class QProblemImageForTest extends EntityPathBase { public final StringPath imageUrl = createString("imageUrl"); - public final NumberPath problemId = createNumber("problemCustomId", Long.class); + public final NumberPath problemId = createNumber("problemId", Long.class); public QProblemImageForTest(String variable) { super(ProblemImageForTest.class, forVariable(variable)); diff --git a/src/main/generated/com/moplus/moplus_server/domain/member/domain/QMember.java b/src/main/generated/com/moplus/moplus_server/member/domain/QMember.java similarity index 92% rename from src/main/generated/com/moplus/moplus_server/domain/member/domain/QMember.java rename to src/main/generated/com/moplus/moplus_server/member/domain/QMember.java index ad5aeae..a4dee67 100644 --- a/src/main/generated/com/moplus/moplus_server/domain/member/domain/QMember.java +++ b/src/main/generated/com/moplus/moplus_server/member/domain/QMember.java @@ -1,4 +1,4 @@ -package com.moplus.moplus_server.domain.member.domain; +package com.moplus.moplus_server.member.domain; import static com.querydsl.core.types.PathMetadataFactory.*; @@ -15,7 +15,7 @@ @Generated("com.querydsl.codegen.DefaultEntitySerializer") public class QMember extends EntityPathBase { - private static final long serialVersionUID = -705761779L; + private static final long serialVersionUID = -1541748259L; public static final QMember member = new QMember("member1"); diff --git a/src/main/generated/com/moplus/moplus_server/statistic/member/QCorrectConceptTagStatistics.java b/src/main/generated/com/moplus/moplus_server/statistic/member/QCorrectConceptTagStatistics.java new file mode 100644 index 0000000..1c5c5f9 --- /dev/null +++ b/src/main/generated/com/moplus/moplus_server/statistic/member/QCorrectConceptTagStatistics.java @@ -0,0 +1,49 @@ +package com.moplus.moplus_server.statistic.member; + +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; + + +/** + * QCorrectConceptTagStatistics is a Querydsl query type for CorrectConceptTagStatistics + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QCorrectConceptTagStatistics extends EntityPathBase { + + private static final long serialVersionUID = -313521578L; + + public static final QCorrectConceptTagStatistics correctConceptTagStatistics = new QCorrectConceptTagStatistics("correctConceptTagStatistics"); + + public final com.moplus.moplus_server.global.common.QBaseEntity _super = new com.moplus.moplus_server.global.common.QBaseEntity(this); + + public final NumberPath conceptTagId = createNumber("conceptTagId", Long.class); + + public final NumberPath correctCount = createNumber("correctCount", Integer.class); + + //inherited + public final DateTimePath createdDate = _super.createdDate; + + public final NumberPath id = createNumber("id", Long.class); + + //inherited + public final DateTimePath updatedDate = _super.updatedDate; + + public QCorrectConceptTagStatistics(String variable) { + super(CorrectConceptTagStatistics.class, forVariable(variable)); + } + + public QCorrectConceptTagStatistics(Path path) { + super(path.getType(), path.getMetadata()); + } + + public QCorrectConceptTagStatistics(PathMetadata metadata) { + super(CorrectConceptTagStatistics.class, metadata); + } + +} + diff --git a/src/main/generated/com/moplus/moplus_server/statistic/member/QIncorrectConceptTagStatistics.java b/src/main/generated/com/moplus/moplus_server/statistic/member/QIncorrectConceptTagStatistics.java new file mode 100644 index 0000000..7222e57 --- /dev/null +++ b/src/main/generated/com/moplus/moplus_server/statistic/member/QIncorrectConceptTagStatistics.java @@ -0,0 +1,49 @@ +package com.moplus.moplus_server.statistic.member; + +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; + + +/** + * QIncorrectConceptTagStatistics is a Querydsl query type for IncorrectConceptTagStatistics + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QIncorrectConceptTagStatistics extends EntityPathBase { + + private static final long serialVersionUID = 1288752209L; + + public static final QIncorrectConceptTagStatistics incorrectConceptTagStatistics = new QIncorrectConceptTagStatistics("incorrectConceptTagStatistics"); + + public final com.moplus.moplus_server.global.common.QBaseEntity _super = new com.moplus.moplus_server.global.common.QBaseEntity(this); + + public final NumberPath conceptTagId = createNumber("conceptTagId", Long.class); + + //inherited + public final DateTimePath createdDate = _super.createdDate; + + public final NumberPath id = createNumber("id", Long.class); + + public final NumberPath incorrectCount = createNumber("incorrectCount", Integer.class); + + //inherited + public final DateTimePath updatedDate = _super.updatedDate; + + public QIncorrectConceptTagStatistics(String variable) { + super(IncorrectConceptTagStatistics.class, forVariable(variable)); + } + + public QIncorrectConceptTagStatistics(Path path) { + super(path.getType(), path.getMetadata()); + } + + public QIncorrectConceptTagStatistics(PathMetadata metadata) { + super(IncorrectConceptTagStatistics.class, metadata); + } + +} + diff --git a/src/main/java/com/moplus/moplus_server/domain/problem/domain/childProblem/ChildProblem.java b/src/main/java/com/moplus/moplus_server/domain/problem/domain/childProblem/ChildProblem.java index 52bda4f..07e1c12 100644 --- a/src/main/java/com/moplus/moplus_server/domain/problem/domain/childProblem/ChildProblem.java +++ b/src/main/java/com/moplus/moplus_server/domain/problem/domain/childProblem/ChildProblem.java @@ -24,6 +24,7 @@ import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; +import org.hibernate.annotations.BatchSize; @Getter @Entity @@ -34,6 +35,7 @@ public class ChildProblem extends BaseEntity { @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "child_problem_id") Long id; + @BatchSize(size = 100) @ElementCollection @CollectionTable(name = "child_problem_concept", joinColumns = @JoinColumn(name = "child_problem_id")) @Column(name = "concept_tag_id") diff --git a/src/main/java/com/moplus/moplus_server/domain/problem/domain/problem/Problem.java b/src/main/java/com/moplus/moplus_server/domain/problem/domain/problem/Problem.java index 2719d2e..43ad242 100644 --- a/src/main/java/com/moplus/moplus_server/domain/problem/domain/problem/Problem.java +++ b/src/main/java/com/moplus/moplus_server/domain/problem/domain/problem/Problem.java @@ -60,6 +60,7 @@ public class Problem extends BaseEntity { @Convert(converter = StringListConverter.class) @Column(columnDefinition = "TEXT") List prescriptionImageUrls; + @ElementCollection @CollectionTable(name = "problem_concept", joinColumns = @JoinColumn(name = "problem_id")) @Column(name = "concept_tag_id") diff --git a/src/main/java/com/moplus/moplus_server/domain/problem/domain/problem/ProblemType.java b/src/main/java/com/moplus/moplus_server/domain/problem/domain/problem/ProblemType.java index e02d101..baec84a 100644 --- a/src/main/java/com/moplus/moplus_server/domain/problem/domain/problem/ProblemType.java +++ b/src/main/java/com/moplus/moplus_server/domain/problem/domain/problem/ProblemType.java @@ -13,4 +13,12 @@ public enum ProblemType { private final String name; private final int code; + + public boolean isCreationProblem() { + return this == CREATION_PROBLEM; + } + + public boolean requiresPracticeTest() { + return !isCreationProblem(); + } } diff --git a/src/main/java/com/moplus/moplus_server/domain/problem/repository/ProblemRepository.java b/src/main/java/com/moplus/moplus_server/domain/problem/repository/ProblemRepository.java index 3779f0f..0a959fc 100644 --- a/src/main/java/com/moplus/moplus_server/domain/problem/repository/ProblemRepository.java +++ b/src/main/java/com/moplus/moplus_server/domain/problem/repository/ProblemRepository.java @@ -4,7 +4,10 @@ import com.moplus.moplus_server.domain.problem.domain.problem.ProblemCustomId; import com.moplus.moplus_server.global.error.exception.ErrorCode; import com.moplus.moplus_server.global.error.exception.NotFoundException; +import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; public interface ProblemRepository extends JpaRepository { @@ -16,14 +19,16 @@ default void existsByIdElseThrow(Long id) { } } - default void existsByProblemAdminIdElseThrow(ProblemCustomId problemCustomId) { - if (!existsByProblemCustomId(problemCustomId)) { - throw new NotFoundException(ErrorCode.PROBLEM_NOT_FOUND); - } - } + @Query("SELECT DISTINCT p FROM Problem p " + + "LEFT JOIN FETCH p.childProblems c " + + "WHERE p.id = :id") + Optional findByIdWithFetchJoin(@Param("id") Long id); default Problem findByIdElseThrow(Long id) { return findById(id).orElseThrow(() -> new NotFoundException(ErrorCode.PROBLEM_NOT_FOUND)); } + default Problem findByIdWithFetchJoinElseThrow(Long id) { + return findByIdWithFetchJoin(id).orElseThrow(() -> new NotFoundException(ErrorCode.PROBLEM_NOT_FOUND)); + } } diff --git a/src/main/java/com/moplus/moplus_server/domain/problem/service/ChildProblemService.java b/src/main/java/com/moplus/moplus_server/domain/problem/service/ChildProblemService.java index 7cf4753..86dcee3 100644 --- a/src/main/java/com/moplus/moplus_server/domain/problem/service/ChildProblemService.java +++ b/src/main/java/com/moplus/moplus_server/domain/problem/service/ChildProblemService.java @@ -17,23 +17,30 @@ public class ChildProblemService { @Transactional public Long createChildProblem(Long problemId) { - Problem problem = problemRepository.findByIdElseThrow(problemId); - if (problem.isConfirmed()) { - throw new InvalidValueException(ErrorCode.CHILD_PROBLEM_UPDATE_AFTER_CONFIRMED); - } - - problem.addChildProblem(ChildProblem.createEmptyChildProblem()); - - return problemRepository.save(problem).getChildProblems().get(problem.getChildProblems().size() - 1).getId(); + Problem problem = findAndValidateProblem(problemId); + ChildProblem newChildProblem = ChildProblem.createEmptyChildProblem(); + problem.addChildProblem(newChildProblem); + + return getCreatedChildProblemId(problem); } @Transactional public void deleteChildProblem(Long problemId, Long childProblemId) { + Problem problem = findAndValidateProblem(problemId); + problem.deleteChildProblem(childProblemId); + } + + private Problem findAndValidateProblem(Long problemId) { Problem problem = problemRepository.findByIdElseThrow(problemId); if (problem.isConfirmed()) { throw new InvalidValueException(ErrorCode.CHILD_PROBLEM_UPDATE_AFTER_CONFIRMED); } - problem.deleteChildProblem(childProblemId); - problemRepository.save(problem); + return problem; + } + + private Long getCreatedChildProblemId(Problem problem) { + return problem.getChildProblems() + .get(problem.getChildProblems().size() - 1) + .getId(); } } diff --git a/src/main/java/com/moplus/moplus_server/domain/problem/service/ProblemGetService.java b/src/main/java/com/moplus/moplus_server/domain/problem/service/ProblemGetService.java index 762fc2a..ed3bb70 100644 --- a/src/main/java/com/moplus/moplus_server/domain/problem/service/ProblemGetService.java +++ b/src/main/java/com/moplus/moplus_server/domain/problem/service/ProblemGetService.java @@ -1,7 +1,7 @@ package com.moplus.moplus_server.domain.problem.service; -import com.moplus.moplus_server.domain.problem.domain.problem.Problem; import com.moplus.moplus_server.admin.problem.dto.response.ProblemGetResponse; +import com.moplus.moplus_server.domain.problem.domain.problem.Problem; import com.moplus.moplus_server.domain.problem.repository.ProblemRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -15,7 +15,7 @@ public class ProblemGetService { @Transactional(readOnly = true) public ProblemGetResponse getProblem(Long problemId) { - Problem problem = problemRepository.findByIdElseThrow(problemId); + Problem problem = problemRepository.findByIdWithFetchJoinElseThrow(problemId); return ProblemGetResponse.of(problem); } } diff --git a/src/main/java/com/moplus/moplus_server/domain/problem/service/ProblemSaveService.java b/src/main/java/com/moplus/moplus_server/domain/problem/service/ProblemSaveService.java index 71dc0fd..0cbc11d 100644 --- a/src/main/java/com/moplus/moplus_server/domain/problem/service/ProblemSaveService.java +++ b/src/main/java/com/moplus/moplus_server/domain/problem/service/ProblemSaveService.java @@ -25,19 +25,32 @@ public class ProblemSaveService { @Transactional public ProblemPostResponse createProblem(ProblemPostRequest request) { - Problem problem; - if (request.problemType() != ProblemType.CREATION_PROBLEM) { - PracticeTestTag practiceTestTag = practiceTestRepository.findByIdElseThrow(request.practiceTestId()); - ProblemCustomId problemCustomId = problemAdminIdService.nextId(request.number(), practiceTestTag, - request.problemType()); + PracticeTestTag practiceTestTag = getPracticeTestTag(request); + ProblemCustomId problemCustomId = createProblemCustomId(request); + Problem problem = createProblem(request, problemCustomId, practiceTestTag); + + return ProblemPostResponse.of(problemRepository.save(problem)); + } - problem = problemMapper.from(request, problemCustomId, practiceTestTag); - } else { - ProblemCustomId problemCustomId = problemAdminIdService.nextId(request.problemType()); - problem = problemMapper.from(request.problemType(), problemCustomId); + private Problem createProblem(ProblemPostRequest request, ProblemCustomId problemCustomId, PracticeTestTag practiceTestTag) { + if (request.problemType().isCreationProblem()) { + return problemMapper.from(request, problemCustomId, practiceTestTag); } + return problemMapper.from(request.problemType(), problemCustomId); + } - return ProblemPostResponse.of(problemRepository.save(problem)); + private ProblemCustomId createProblemCustomId(ProblemPostRequest request) { + if (request.problemType().requiresPracticeTest()) { + PracticeTestTag practiceTestTag = practiceTestRepository.findByIdElseThrow(request.practiceTestId()); + return problemAdminIdService.nextId(request.number(), practiceTestTag, request.problemType()); + } + return problemAdminIdService.nextId(request.problemType()); } + private PracticeTestTag getPracticeTestTag(ProblemPostRequest request) { + if (request.problemType().requiresPracticeTest()) { + return practiceTestRepository.findByIdElseThrow(request.practiceTestId()); + } + return null; + } } diff --git a/src/main/java/com/moplus/moplus_server/domain/problem/service/ProblemUpdateService.java b/src/main/java/com/moplus/moplus_server/domain/problem/service/ProblemUpdateService.java index 248bf11..9583454 100644 --- a/src/main/java/com/moplus/moplus_server/domain/problem/service/ProblemUpdateService.java +++ b/src/main/java/com/moplus/moplus_server/domain/problem/service/ProblemUpdateService.java @@ -1,14 +1,13 @@ package com.moplus.moplus_server.domain.problem.service; +import com.moplus.moplus_server.admin.problem.dto.request.ProblemUpdateRequest; +import com.moplus.moplus_server.admin.problem.dto.response.ProblemGetResponse; import com.moplus.moplus_server.domain.concept.repository.ConceptTagRepository; import com.moplus.moplus_server.domain.problem.domain.childProblem.ChildProblem; import com.moplus.moplus_server.domain.problem.domain.practiceTest.PracticeTestTag; import com.moplus.moplus_server.domain.problem.domain.problem.Problem; import com.moplus.moplus_server.domain.problem.domain.problem.ProblemAdminIdService; import com.moplus.moplus_server.domain.problem.domain.problem.ProblemCustomId; -import com.moplus.moplus_server.admin.problem.dto.request.ProblemUpdateRequest; -import com.moplus.moplus_server.admin.problem.dto.response.ProblemGetResponse; -import com.moplus.moplus_server.domain.problem.domain.problem.ProblemType; import com.moplus.moplus_server.domain.problem.repository.PracticeTestTagRepository; import com.moplus.moplus_server.domain.problem.repository.ProblemRepository; import com.moplus.moplus_server.domain.problem.service.mapper.ChildProblemMapper; @@ -33,15 +32,8 @@ public class ProblemUpdateService { public ProblemGetResponse updateProblem(Long problemId, ProblemUpdateRequest request) { conceptTagRepository.existsByIdElseThrow(request.conceptTagIds()); Problem problem = problemRepository.findByIdElseThrow(problemId); - PracticeTestTag practiceTestTag = null; - ProblemCustomId problemCustomId = null; - if (request.problemType() != ProblemType.CREATION_PROBLEM) { - practiceTestTag = practiceTestRepository.findByIdElseThrow(request.practiceTestId()); - problemCustomId = problemAdminIdService.nextId(request.number(), practiceTestTag, - request.problemType()); - } else { - problemCustomId = problemAdminIdService.nextId(request.problemType()); - } + PracticeTestTag practiceTestTag = getPracticeTestTag(request); + ProblemCustomId problemCustomId = createProblemCustomId(request); Problem inputProblem = problemMapper.from(request, problemCustomId, practiceTestTag); problem.update(inputProblem); @@ -57,4 +49,19 @@ private List changeToChildProblems(ProblemUpdateRequest request) { .map(childProblemMapper::from) .toList(); } + + private ProblemCustomId createProblemCustomId(ProblemUpdateRequest request) { + if (request.problemType().requiresPracticeTest()) { + PracticeTestTag practiceTestTag = practiceTestRepository.findByIdElseThrow(request.practiceTestId()); + return problemAdminIdService.nextId(request.number(), practiceTestTag, request.problemType()); + } + return problemAdminIdService.nextId(request.problemType()); + } + + private PracticeTestTag getPracticeTestTag(ProblemUpdateRequest request) { + if (request.problemType().requiresPracticeTest()) { + return practiceTestRepository.findByIdElseThrow(request.practiceTestId()); + } + return null; + } } diff --git a/src/main/resources/application-datasource.yml b/src/main/resources/application-datasource.yml index 1876f67..f90f75c 100644 --- a/src/main/resources/application-datasource.yml +++ b/src/main/resources/application-datasource.yml @@ -2,18 +2,13 @@ spring: config: activate: on-profile: "datasource" - datasource: - url: jdbc:mysql://${MYSQL_HOST}:${MYSQL_PORT}/${MYSQL_DATABASE}?useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Seoul&allowPublicKeyRetrieval=true&tinyInt1isBit=false - driver-class-name: com.mysql.cj.jdbc.Driver - password: ${MYSQL_PASSWORD} - username: ${MYSQL_USERNAME} - hikari: - maximum-pool-size: 10 # default - connection-timeout: 3000 # 30 seconds in milliseconds - keepalive-time: 600000 # 5 minutes in milliseconds + jpa: properties: hibernate: dialect: org.hibernate.dialect.MySQLDialect - default_batch_fetch_size: 1000 + default_batch_fetch_size: 100 + + + diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index f113266..e0b372c 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -8,9 +8,18 @@ spring: show_sql: true format_sql: true use_sql_comments: true + highlight_sql: true hibernate: ddl-auto: update - + datasource: + url: jdbc:mysql://${MYSQL_HOST}:${MYSQL_PORT}/${MYSQL_DATABASE}?useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Seoul&allowPublicKeyRetrieval=true&tinyInt1isBit=false + driver-class-name: com.mysql.cj.jdbc.Driver + password: ${MYSQL_PASSWORD} + username: ${MYSQL_USERNAME} + hikari: + maximum-pool-size: 10 # default + connection-timeout: 3000 # 30 seconds in milliseconds + keepalive-time: 600000 # 5 minutes in milliseconds swagger: servers: - url: http://localhost:8080 diff --git a/src/main/resources/application-server.yml b/src/main/resources/application-server.yml new file mode 100644 index 0000000..268b5f5 --- /dev/null +++ b/src/main/resources/application-server.yml @@ -0,0 +1,8 @@ +server: + tomcat: + accept-count: 100 + max-connections: 8192 + + threads: + max: 200 + min-spare: 10 \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 913c2a8..8db8774 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -3,11 +3,12 @@ spring: active: ${profile} group: local: "local, datasource" - dev: "dev" - prod: "prod" + dev: "dev, datasource" + prod: "prod, datasource" include: - aws - security + - server mvc: ignore-default-favicon: true