Skip to content

Commit

Permalink
Merge pull request #140 from Gamegoo-repo/feat/139
Browse files Browse the repository at this point in the history
[Feat/139] λ§€λ„ˆν‰κ°€ 쑰회 API κ΅¬ν˜„
  • Loading branch information
rimi3226 authored Aug 10, 2024
2 parents 4e44176 + 08e7742 commit d92ccb8
Show file tree
Hide file tree
Showing 5 changed files with 191 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
package com.gamegoo.domain.matching;

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;
import com.querydsl.core.types.dsl.PathInits;


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

private static final long serialVersionUID = 1978268795L;

private static final PathInits INITS = PathInits.DIRECT2;

public static final QMatchingRecord matchingRecord = new QMatchingRecord("matchingRecord");

public final com.gamegoo.domain.common.QBaseDateTimeEntity _super = new com.gamegoo.domain.common.QBaseDateTimeEntity(this);

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

public final NumberPath<Integer> gameMode = createNumber("gameMode", Integer.class);

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

public final NumberPath<Integer> mainPosition = createNumber("mainPosition", Integer.class);

public final NumberPath<Integer> mannerLevel = createNumber("mannerLevel", Integer.class);

public final EnumPath<MatchingType> matchingType = createEnum("matchingType", MatchingType.class);

public final com.gamegoo.domain.member.QMember member;

public final BooleanPath mike = createBoolean("mike");

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

public final EnumPath<MatchingStatus> status = createEnum("status", MatchingStatus.class);

public final NumberPath<Integer> subPosition = createNumber("subPosition", Integer.class);

public final EnumPath<com.gamegoo.domain.member.Tier> tier = createEnum("tier", com.gamegoo.domain.member.Tier.class);

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

public final NumberPath<Integer> wantPosition = createNumber("wantPosition", Integer.class);

public final NumberPath<Double> winRate = createNumber("winRate", Double.class);

public QMatchingRecord(String variable) {
this(MatchingRecord.class, forVariable(variable), INITS);
}

public QMatchingRecord(Path<? extends MatchingRecord> path) {
this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS));
}

public QMatchingRecord(PathMetadata metadata) {
this(metadata, PathInits.getFor(metadata, INITS));
}

public QMatchingRecord(PathMetadata metadata, PathInits inits) {
this(MatchingRecord.class, metadata, inits);
}

public QMatchingRecord(Class<? extends MatchingRecord> type, PathMetadata metadata, PathInits inits) {
super(type, metadata, inits);
this.member = inits.isInitialized("member") ? new com.gamegoo.domain.member.QMember(forProperty("member")) : null;
}

}

Original file line number Diff line number Diff line change
Expand Up @@ -94,12 +94,14 @@ public enum ErrorStatus implements BaseErrorCode {

// λ§€λ„ˆν‰κ°€ κ΄€λ ¨ μ—λŸ¬
MANNER_TARGET_MEMBER_NOT_FOUND(HttpStatus.NOT_FOUND, "MANNER401", "λ§€λ„ˆ 평가 λŒ€μƒ νšŒμ›μ„ 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."),
BAD_MANNER_TARGET_MEMBER_NOT_FOUND(HttpStatus.NOT_FOUND, "MANNER401", "λΉ„λ§€λ„ˆ 평가 λŒ€μƒ νšŒμ›μ„ 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."),
MANNER_UNAUTHORIZED(HttpStatus.UNAUTHORIZED, "MANNER401", "λ§€λ„ˆν‰κ°€ μž‘μ„±μžλ§Œ μˆ˜μ • κ°€λŠ₯ν•©λ‹ˆλ‹€."),
MANNER_KEYWORD_TYPE_INVALID(HttpStatus.BAD_REQUEST, "MANNER401", "λ§€λ„ˆ ν‚€μ›Œλ“œ μœ ν˜•μ€ 1~6만 κ°€λŠ₯ν•©λ‹ˆλ‹€."),
BAD_MANNER_KEYWORD_TYPE_INVALID(HttpStatus.BAD_REQUEST, "MANNER401",
"λΉ„λ§€λ„ˆ ν‚€μ›Œλ“œ μœ ν˜•μ€ 7~12만 κ°€λŠ₯ν•©λ‹ˆλ‹€."),
MANNER_KEYWORD_NOT_FOUND(HttpStatus.NOT_FOUND, "MANNER404", "ν•΄λ‹Ή λ§€λ„ˆ ν‚€μ›Œλ“œλ₯Ό 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."),
MANNER_NOT_FOUND(HttpStatus.NOT_FOUND, "MANNER404", "ν•΄λ‹Ή λ§€λ„ˆν‰κ°€λ₯Ό 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."),
BAD_MANNER_NOT_FOUND(HttpStatus.NOT_FOUND, "MANNER404", "ν•΄λ‹Ή λΉ„λ§€λ„ˆν‰κ°€λ₯Ό 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."),
MANNER_CONFLICT(HttpStatus.CONFLICT, "MANNER409", "λ§€λ„ˆ ν‰κ°€λŠ” 졜초 1회만 κ°€λŠ₯ν•©λ‹ˆλ‹€."),
BAD_MANNER_CONFLICT(HttpStatus.CONFLICT, "MANNER409", "λΉ„λ§€λ„ˆ ν‰κ°€λŠ” 졜초 1회만 κ°€λŠ₯ν•©λ‹ˆλ‹€."),

Expand Down
24 changes: 24 additions & 0 deletions src/main/java/com/gamegoo/controller/mannner/MannerController.java
Original file line number Diff line number Diff line change
Expand Up @@ -93,4 +93,28 @@ public ApiResponse<MannerResponse.mannerUpdateResponseDTO> mannerUpdate(
return ApiResponse.onSuccess(result);

}

@GetMapping("good/{memberId}")
@Operation(summary = "λ§€λ„ˆ 평가 쑰회 API", description = "νšŒμ›μ΄ μ‹€μ‹œν•œ λ§€λ„ˆ 평가λ₯Ό μ‘°νšŒν•˜λŠ” API μž…λ‹ˆλ‹€.")
@Parameter(name = "memberId", description = "νšŒμ›μ΄ μ‹€μ‹œν•œ λ§€λ„ˆν‰κ°€ λŒ€μƒμ˜ id μž…λ‹ˆλ‹€.")
public ApiResponse<MannerResponse.mannerKeywordResponseDTO> getMannerKeyword(@PathVariable(name = "memberId") Long targetMemberId){

Long memberId = JWTUtil.getCurrentUserId();

MannerResponse.mannerKeywordResponseDTO result = mannerService.getMannerKeyword(memberId, targetMemberId);

return ApiResponse.onSuccess(result);
}

@GetMapping("bad/{memberId}")
@Operation(summary = "λΉ„λ§€λ„ˆ 평가 쑰회 API", description = "νšŒμ›μ΄ μ‹€μ‹œν•œ λΉ„λ§€λ„ˆ 평가λ₯Ό μ‘°νšŒν•˜λŠ” API μž…λ‹ˆλ‹€.")
@Parameter(name = "memberId", description = "νšŒμ›μ΄ μ‹€μ‹œν•œ λΉ„λ§€λ„ˆν‰κ°€ λŒ€μƒμ˜ id μž…λ‹ˆλ‹€.")
public ApiResponse<MannerResponse.badMannerKeywordResponseDTO> getBadMannerKeyword(@PathVariable(name = "memberId") Long targetMemberId){

Long memberId = JWTUtil.getCurrentUserId();

MannerResponse.badMannerKeywordResponseDTO result = mannerService.getBadMannerKeyword(memberId, targetMemberId);

return ApiResponse.onSuccess(result);
}
}
18 changes: 18 additions & 0 deletions src/main/java/com/gamegoo/dto/manner/MannerResponse.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,22 @@ public static class mannerUpdateResponseDTO{
Long mannerId;
List<Long> mannerRatingKeywordList;
}

@Getter
@Builder
@Setter
@NoArgsConstructor
@AllArgsConstructor
public static class mannerKeywordResponseDTO{
List<Long> mannerRatingKeywordList;
}

@Getter
@Builder
@Setter
@NoArgsConstructor
@AllArgsConstructor
public static class badMannerKeywordResponseDTO{
List<Long> mannerRatingKeywordList;
}
}
66 changes: 66 additions & 0 deletions src/main/java/com/gamegoo/service/manner/MannerService.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import com.gamegoo.domain.manner.MannerRating;
import com.gamegoo.domain.manner.MannerRatingKeyword;
import com.gamegoo.dto.manner.MannerRequest;
import com.gamegoo.dto.manner.MannerResponse;
import com.gamegoo.repository.manner.MannerKeywordRepository;
import com.gamegoo.repository.manner.MannerRatingKeywordRepository;
import com.gamegoo.repository.manner.MannerRatingRepository;
Expand Down Expand Up @@ -255,4 +256,69 @@ public MannerRating update(MannerRequest.mannerUpdateDTO request, Long memberId,
}

}

// λ§€λ„ˆν‰κ°€ 쑰회
@Transactional(readOnly = true)
public MannerResponse.mannerKeywordResponseDTO getMannerKeyword(Long memberId, Long targetMemberId){

Member member = memberRepository.findById(memberId).orElseThrow(() -> new MemberHandler(ErrorStatus.MEMBER_NOT_FOUND));

// λ§€λ„ˆν‰κ°€λ₯Ό 받은 νšŒμ› 쑴재 μ—¬λΆ€ 검증.
Member targetMember = memberRepository.findById(targetMemberId).orElseThrow(() -> new MemberHandler(ErrorStatus.MANNER_TARGET_MEMBER_NOT_FOUND));

// λ§€λ„ˆν‰κ°€λ₯Ό 받은 νšŒμ› νƒˆν‡΄ μ—¬λΆ€ 검증.
if (targetMember.getBlind()) {
throw new MemberHandler(ErrorStatus.USER_DEACTIVATED);
}

// λ§€λ„ˆν‰κ°€ ID 쑰회
List<MannerRating> mannerRatings = mannerRatingRepository.findByFromMemberIdAndToMemberId(member.getId(), targetMember.getId());
List<MannerRating> positiveMannerRatings = mannerRatings.stream()
.filter(MannerRating::getIsPositive)
.collect(Collectors.toList());

if (positiveMannerRatings.isEmpty()) {
throw new MannerHandler(ErrorStatus.MANNER_NOT_FOUND);
}

MannerRating positiveMannerRating = positiveMannerRatings.get(0);

List<Long> mannerKeywordIds = positiveMannerRating.getMannerRatingKeywordList().stream()
.map(mannerRatingKeyword -> mannerRatingKeyword.getMannerKeyword().getId())
.collect(Collectors.toList());

return MannerResponse.mannerKeywordResponseDTO.builder()
.mannerRatingKeywordList(mannerKeywordIds)
.build();
}

// λΉ„λ§€λ„ˆν‰κ°€ 쑰회
@Transactional(readOnly = true)
public MannerResponse.badMannerKeywordResponseDTO getBadMannerKeyword(Long memberId, Long targetMemberId){

Member member = memberRepository.findById(memberId).orElseThrow(() -> new MemberHandler(ErrorStatus.MEMBER_NOT_FOUND));

// λΉ„λ§€λ„ˆν‰κ°€λ₯Ό 받은 νšŒμ› 쑴재 μ—¬λΆ€ 검증.
Member targetMember = memberRepository.findById(targetMemberId).orElseThrow(() -> new MemberHandler(ErrorStatus.BAD_MANNER_TARGET_MEMBER_NOT_FOUND));

// λΉ„λ§€λ„ˆν‰κ°€ ID 쑰회
List<MannerRating> mannerRatings = mannerRatingRepository.findByFromMemberIdAndToMemberId(member.getId(), targetMember.getId());
List<MannerRating> negativeMannerRatings = mannerRatings.stream()
.filter(mannerRating -> !mannerRating.getIsPositive())
.collect(Collectors.toList());

if (negativeMannerRatings.isEmpty()) {
throw new MannerHandler(ErrorStatus.BAD_MANNER_NOT_FOUND);
}

MannerRating negativeMannerRating = negativeMannerRatings.get(0);

List<Long> badMannerKeywordIds = negativeMannerRating.getMannerRatingKeywordList().stream()
.map(mannerRatingKeyword -> mannerRatingKeyword.getMannerKeyword().getId())
.collect(Collectors.toList());

return MannerResponse.badMannerKeywordResponseDTO.builder()
.mannerRatingKeywordList(badMannerKeywordIds)
.build();
}
}

0 comments on commit d92ccb8

Please sign in to comment.