Skip to content

Commit 0883a17

Browse files
authored
Merge pull request #95 from team-ppointer/refactor/#83
Refactor/#83 problem 조회 쿼리 개선 및 코드 리팩토링
2 parents 955a490 + dd0ed5e commit 0883a17

File tree

22 files changed

+323
-63
lines changed

22 files changed

+323
-63
lines changed

src/main/generated/com/moplus/moplus_server/domain/publish/domain/QPublish.java src/main/generated/com/moplus/moplus_server/admin/publish/domain/QPublish.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.moplus.moplus_server.domain.publish.domain;
1+
package com.moplus.moplus_server.admin.publish.domain;
22

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

@@ -15,7 +15,7 @@
1515
@Generated("com.querydsl.codegen.DefaultEntitySerializer")
1616
public class QPublish extends EntityPathBase<Publish> {
1717

18-
private static final long serialVersionUID = 1565569153L;
18+
private static final long serialVersionUID = 1641302032L;
1919

2020
public static final QPublish publish = new QPublish("publish");
2121

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package com.moplus.moplus_server.client.submit.domain;
2+
3+
import static com.querydsl.core.types.PathMetadataFactory.*;
4+
5+
import com.querydsl.core.types.dsl.*;
6+
7+
import com.querydsl.core.types.PathMetadata;
8+
import javax.annotation.processing.Generated;
9+
import com.querydsl.core.types.Path;
10+
11+
12+
/**
13+
* QChildProblemSubmit is a Querydsl query type for ChildProblemSubmit
14+
*/
15+
@Generated("com.querydsl.codegen.DefaultEntitySerializer")
16+
public class QChildProblemSubmit extends EntityPathBase<ChildProblemSubmit> {
17+
18+
private static final long serialVersionUID = -1656142683L;
19+
20+
public static final QChildProblemSubmit childProblemSubmit = new QChildProblemSubmit("childProblemSubmit");
21+
22+
public final com.moplus.moplus_server.global.common.QBaseEntity _super = new com.moplus.moplus_server.global.common.QBaseEntity(this);
23+
24+
public final NumberPath<Long> childProblemId = createNumber("childProblemId", Long.class);
25+
26+
//inherited
27+
public final DateTimePath<java.time.LocalDateTime> createdDate = _super.createdDate;
28+
29+
public final NumberPath<Long> id = createNumber("id", Long.class);
30+
31+
public final NumberPath<Long> memberId = createNumber("memberId", Long.class);
32+
33+
public final NumberPath<Long> publishId = createNumber("publishId", Long.class);
34+
35+
public final EnumPath<ChildProblemSubmitStatus> status = createEnum("status", ChildProblemSubmitStatus.class);
36+
37+
//inherited
38+
public final DateTimePath<java.time.LocalDateTime> updatedDate = _super.updatedDate;
39+
40+
public QChildProblemSubmit(String variable) {
41+
super(ChildProblemSubmit.class, forVariable(variable));
42+
}
43+
44+
public QChildProblemSubmit(Path<? extends ChildProblemSubmit> path) {
45+
super(path.getType(), path.getMetadata());
46+
}
47+
48+
public QChildProblemSubmit(PathMetadata metadata) {
49+
super(ChildProblemSubmit.class, metadata);
50+
}
51+
52+
}
53+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package com.moplus.moplus_server.client.submit.domain;
2+
3+
import static com.querydsl.core.types.PathMetadataFactory.*;
4+
5+
import com.querydsl.core.types.dsl.*;
6+
7+
import com.querydsl.core.types.PathMetadata;
8+
import javax.annotation.processing.Generated;
9+
import com.querydsl.core.types.Path;
10+
11+
12+
/**
13+
* QProblemSubmit is a Querydsl query type for ProblemSubmit
14+
*/
15+
@Generated("com.querydsl.codegen.DefaultEntitySerializer")
16+
public class QProblemSubmit extends EntityPathBase<ProblemSubmit> {
17+
18+
private static final long serialVersionUID = 1682818189L;
19+
20+
public static final QProblemSubmit problemSubmit = new QProblemSubmit("problemSubmit");
21+
22+
public final com.moplus.moplus_server.global.common.QBaseEntity _super = new com.moplus.moplus_server.global.common.QBaseEntity(this);
23+
24+
//inherited
25+
public final DateTimePath<java.time.LocalDateTime> createdDate = _super.createdDate;
26+
27+
public final NumberPath<Long> id = createNumber("id", Long.class);
28+
29+
public final NumberPath<Long> memberId = createNumber("memberId", Long.class);
30+
31+
public final NumberPath<Long> problemId = createNumber("problemId", Long.class);
32+
33+
public final NumberPath<Long> publishId = createNumber("publishId", Long.class);
34+
35+
public final EnumPath<ProblemSubmitStatus> status = createEnum("status", ProblemSubmitStatus.class);
36+
37+
//inherited
38+
public final DateTimePath<java.time.LocalDateTime> updatedDate = _super.updatedDate;
39+
40+
public QProblemSubmit(String variable) {
41+
super(ProblemSubmit.class, forVariable(variable));
42+
}
43+
44+
public QProblemSubmit(Path<? extends ProblemSubmit> path) {
45+
super(path.getType(), path.getMetadata());
46+
}
47+
48+
public QProblemSubmit(PathMetadata metadata) {
49+
super(ProblemSubmit.class, metadata);
50+
}
51+
52+
}
53+

src/main/generated/com/moplus/moplus_server/domain/problem/service/mapper/ChildProblemMapperImpl.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.moplus.moplus_server.domain.problem.service.mapper;
22

3+
import com.moplus.moplus_server.admin.problem.dto.request.ChildProblemUpdateRequest;
34
import com.moplus.moplus_server.domain.problem.domain.childProblem.ChildProblem;
4-
import com.moplus.moplus_server.domain.problem.dto.request.ChildProblemUpdateRequest;
55
import java.util.ArrayList;
66
import java.util.LinkedHashSet;
77
import java.util.List;
@@ -11,7 +11,7 @@
1111

1212
@Generated(
1313
value = "org.mapstruct.ap.MappingProcessor",
14-
date = "2025-03-03T17:28:35+0900",
14+
date = "2025-03-14T20:25:51+0900",
1515
comments = "version: 1.6.3, compiler: javac, environment: Java 17.0.10 (JetBrains s.r.o.)"
1616
)
1717
@Component

src/main/generated/com/moplus/moplus_server/domain/problem/service/mapper/ProblemMapperImpl.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package com.moplus.moplus_server.domain.problem.service.mapper;
22

3+
import com.moplus.moplus_server.admin.problem.dto.request.ProblemPostRequest;
4+
import com.moplus.moplus_server.admin.problem.dto.request.ProblemUpdateRequest;
35
import com.moplus.moplus_server.domain.problem.domain.practiceTest.PracticeTestTag;
46
import com.moplus.moplus_server.domain.problem.domain.problem.Problem;
57
import com.moplus.moplus_server.domain.problem.domain.problem.ProblemCustomId;
68
import com.moplus.moplus_server.domain.problem.domain.problem.ProblemType;
7-
import com.moplus.moplus_server.domain.problem.dto.request.ProblemPostRequest;
8-
import com.moplus.moplus_server.domain.problem.dto.request.ProblemUpdateRequest;
99
import java.util.ArrayList;
1010
import java.util.LinkedHashSet;
1111
import java.util.List;
@@ -15,7 +15,7 @@
1515

1616
@Generated(
1717
value = "org.mapstruct.ap.MappingProcessor",
18-
date = "2025-03-03T17:28:35+0900",
18+
date = "2025-03-15T21:23:23+0900",
1919
comments = "version: 1.6.3, compiler: javac, environment: Java 17.0.10 (JetBrains s.r.o.)"
2020
)
2121
@Component

src/main/generated/com/moplus/moplus_server/domain/v0/TestResult/entity/QIncorrectProblem.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public class QIncorrectProblem extends EntityPathBase<IncorrectProblem> {
3737

3838
public final NumberPath<Long> practiceTestId = createNumber("practiceTestId", Long.class);
3939

40-
public final NumberPath<Long> problemId = createNumber("problemCustomId", Long.class);
40+
public final NumberPath<Long> problemId = createNumber("problemId", Long.class);
4141

4242
public final StringPath problemNumber = createString("problemNumber");
4343

src/main/generated/com/moplus/moplus_server/domain/v0/practiceTest/domain/QProblemImageForTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public class QProblemImageForTest extends EntityPathBase<ProblemImageForTest> {
2525

2626
public final StringPath imageUrl = createString("imageUrl");
2727

28-
public final NumberPath<Long> problemId = createNumber("problemCustomId", Long.class);
28+
public final NumberPath<Long> problemId = createNumber("problemId", Long.class);
2929

3030
public QProblemImageForTest(String variable) {
3131
super(ProblemImageForTest.class, forVariable(variable));

src/main/generated/com/moplus/moplus_server/domain/member/domain/QMember.java src/main/generated/com/moplus/moplus_server/member/domain/QMember.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.moplus.moplus_server.domain.member.domain;
1+
package com.moplus.moplus_server.member.domain;
22

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

@@ -15,7 +15,7 @@
1515
@Generated("com.querydsl.codegen.DefaultEntitySerializer")
1616
public class QMember extends EntityPathBase<Member> {
1717

18-
private static final long serialVersionUID = -705761779L;
18+
private static final long serialVersionUID = -1541748259L;
1919

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

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package com.moplus.moplus_server.statistic.member;
2+
3+
import static com.querydsl.core.types.PathMetadataFactory.*;
4+
5+
import com.querydsl.core.types.dsl.*;
6+
7+
import com.querydsl.core.types.PathMetadata;
8+
import javax.annotation.processing.Generated;
9+
import com.querydsl.core.types.Path;
10+
11+
12+
/**
13+
* QCorrectConceptTagStatistics is a Querydsl query type for CorrectConceptTagStatistics
14+
*/
15+
@Generated("com.querydsl.codegen.DefaultEntitySerializer")
16+
public class QCorrectConceptTagStatistics extends EntityPathBase<CorrectConceptTagStatistics> {
17+
18+
private static final long serialVersionUID = -313521578L;
19+
20+
public static final QCorrectConceptTagStatistics correctConceptTagStatistics = new QCorrectConceptTagStatistics("correctConceptTagStatistics");
21+
22+
public final com.moplus.moplus_server.global.common.QBaseEntity _super = new com.moplus.moplus_server.global.common.QBaseEntity(this);
23+
24+
public final NumberPath<Long> conceptTagId = createNumber("conceptTagId", Long.class);
25+
26+
public final NumberPath<Integer> correctCount = createNumber("correctCount", Integer.class);
27+
28+
//inherited
29+
public final DateTimePath<java.time.LocalDateTime> createdDate = _super.createdDate;
30+
31+
public final NumberPath<Long> id = createNumber("id", Long.class);
32+
33+
//inherited
34+
public final DateTimePath<java.time.LocalDateTime> updatedDate = _super.updatedDate;
35+
36+
public QCorrectConceptTagStatistics(String variable) {
37+
super(CorrectConceptTagStatistics.class, forVariable(variable));
38+
}
39+
40+
public QCorrectConceptTagStatistics(Path<? extends CorrectConceptTagStatistics> path) {
41+
super(path.getType(), path.getMetadata());
42+
}
43+
44+
public QCorrectConceptTagStatistics(PathMetadata metadata) {
45+
super(CorrectConceptTagStatistics.class, metadata);
46+
}
47+
48+
}
49+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package com.moplus.moplus_server.statistic.member;
2+
3+
import static com.querydsl.core.types.PathMetadataFactory.*;
4+
5+
import com.querydsl.core.types.dsl.*;
6+
7+
import com.querydsl.core.types.PathMetadata;
8+
import javax.annotation.processing.Generated;
9+
import com.querydsl.core.types.Path;
10+
11+
12+
/**
13+
* QIncorrectConceptTagStatistics is a Querydsl query type for IncorrectConceptTagStatistics
14+
*/
15+
@Generated("com.querydsl.codegen.DefaultEntitySerializer")
16+
public class QIncorrectConceptTagStatistics extends EntityPathBase<IncorrectConceptTagStatistics> {
17+
18+
private static final long serialVersionUID = 1288752209L;
19+
20+
public static final QIncorrectConceptTagStatistics incorrectConceptTagStatistics = new QIncorrectConceptTagStatistics("incorrectConceptTagStatistics");
21+
22+
public final com.moplus.moplus_server.global.common.QBaseEntity _super = new com.moplus.moplus_server.global.common.QBaseEntity(this);
23+
24+
public final NumberPath<Long> conceptTagId = createNumber("conceptTagId", Long.class);
25+
26+
//inherited
27+
public final DateTimePath<java.time.LocalDateTime> createdDate = _super.createdDate;
28+
29+
public final NumberPath<Long> id = createNumber("id", Long.class);
30+
31+
public final NumberPath<Integer> incorrectCount = createNumber("incorrectCount", Integer.class);
32+
33+
//inherited
34+
public final DateTimePath<java.time.LocalDateTime> updatedDate = _super.updatedDate;
35+
36+
public QIncorrectConceptTagStatistics(String variable) {
37+
super(IncorrectConceptTagStatistics.class, forVariable(variable));
38+
}
39+
40+
public QIncorrectConceptTagStatistics(Path<? extends IncorrectConceptTagStatistics> path) {
41+
super(path.getType(), path.getMetadata());
42+
}
43+
44+
public QIncorrectConceptTagStatistics(PathMetadata metadata) {
45+
super(IncorrectConceptTagStatistics.class, metadata);
46+
}
47+
48+
}
49+

src/main/java/com/moplus/moplus_server/domain/problem/domain/childProblem/ChildProblem.java

+2
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import lombok.Builder;
2525
import lombok.Getter;
2626
import lombok.NoArgsConstructor;
27+
import org.hibernate.annotations.BatchSize;
2728

2829
@Getter
2930
@Entity
@@ -34,6 +35,7 @@ public class ChildProblem extends BaseEntity {
3435
@GeneratedValue(strategy = GenerationType.IDENTITY)
3536
@Column(name = "child_problem_id")
3637
Long id;
38+
@BatchSize(size = 100)
3739
@ElementCollection
3840
@CollectionTable(name = "child_problem_concept", joinColumns = @JoinColumn(name = "child_problem_id"))
3941
@Column(name = "concept_tag_id")

src/main/java/com/moplus/moplus_server/domain/problem/domain/problem/Problem.java

+1
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ public class Problem extends BaseEntity {
6060
@Convert(converter = StringListConverter.class)
6161
@Column(columnDefinition = "TEXT")
6262
List<String> prescriptionImageUrls;
63+
6364
@ElementCollection
6465
@CollectionTable(name = "problem_concept", joinColumns = @JoinColumn(name = "problem_id"))
6566
@Column(name = "concept_tag_id")

src/main/java/com/moplus/moplus_server/domain/problem/domain/problem/ProblemType.java

+8
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,12 @@ public enum ProblemType {
1313

1414
private final String name;
1515
private final int code;
16+
17+
public boolean isCreationProblem() {
18+
return this == CREATION_PROBLEM;
19+
}
20+
21+
public boolean requiresPracticeTest() {
22+
return !isCreationProblem();
23+
}
1624
}

src/main/java/com/moplus/moplus_server/domain/problem/repository/ProblemRepository.java

+10-5
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@
44
import com.moplus.moplus_server.domain.problem.domain.problem.ProblemCustomId;
55
import com.moplus.moplus_server.global.error.exception.ErrorCode;
66
import com.moplus.moplus_server.global.error.exception.NotFoundException;
7+
import java.util.Optional;
78
import org.springframework.data.jpa.repository.JpaRepository;
9+
import org.springframework.data.jpa.repository.Query;
10+
import org.springframework.data.repository.query.Param;
811

912
public interface ProblemRepository extends JpaRepository<Problem, Long> {
1013

@@ -16,14 +19,16 @@ default void existsByIdElseThrow(Long id) {
1619
}
1720
}
1821

19-
default void existsByProblemAdminIdElseThrow(ProblemCustomId problemCustomId) {
20-
if (!existsByProblemCustomId(problemCustomId)) {
21-
throw new NotFoundException(ErrorCode.PROBLEM_NOT_FOUND);
22-
}
23-
}
22+
@Query("SELECT DISTINCT p FROM Problem p " +
23+
"LEFT JOIN FETCH p.childProblems c " +
24+
"WHERE p.id = :id")
25+
Optional<Problem> findByIdWithFetchJoin(@Param("id") Long id);
2426

2527
default Problem findByIdElseThrow(Long id) {
2628
return findById(id).orElseThrow(() -> new NotFoundException(ErrorCode.PROBLEM_NOT_FOUND));
2729
}
2830

31+
default Problem findByIdWithFetchJoinElseThrow(Long id) {
32+
return findByIdWithFetchJoin(id).orElseThrow(() -> new NotFoundException(ErrorCode.PROBLEM_NOT_FOUND));
33+
}
2934
}

0 commit comments

Comments
 (0)