Skip to content

Commit

Permalink
Merge pull request #119 from Gamegoo-repo/feat/110
Browse files Browse the repository at this point in the history
[Feat/110] 친ꡬ μš”μ²­ 등둝 API κ΅¬ν˜„
  • Loading branch information
Eunjin3395 authored Aug 8, 2024
2 parents 7459b1d + 67f0dd7 commit 50f34c2
Show file tree
Hide file tree
Showing 17 changed files with 324 additions and 138 deletions.
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.gamegoo.domain;
package com.gamegoo.domain.friend;

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

Expand All @@ -16,7 +16,7 @@
@Generated("com.querydsl.codegen.DefaultEntitySerializer")
public class QFriend extends EntityPathBase<Friend> {

private static final long serialVersionUID = -762196062L;
private static final long serialVersionUID = -138403158L;

private static final PathInits INITS = PathInits.DIRECT2;

Expand All @@ -27,13 +27,13 @@ public class QFriend extends EntityPathBase<Friend> {
//inherited
public final DateTimePath<java.time.LocalDateTime> createdAt = _super.createdAt;

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

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

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

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

//inherited
public final DateTimePath<java.time.LocalDateTime> updatedAt = _super.updatedAt;
Expand All @@ -56,8 +56,8 @@ public QFriend(PathMetadata metadata, PathInits inits) {

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

}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.gamegoo.domain;
package com.gamegoo.domain.friend;

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

Expand All @@ -16,7 +16,7 @@
@Generated("com.querydsl.codegen.DefaultEntitySerializer")
public class QFriendRequests extends EntityPathBase<FriendRequests> {

private static final long serialVersionUID = -955592314L;
private static final long serialVersionUID = -1336304498L;

private static final PathInits INITS = PathInits.DIRECT2;

Expand All @@ -27,13 +27,13 @@ public class QFriendRequests extends EntityPathBase<FriendRequests> {
//inherited
public final DateTimePath<java.time.LocalDateTime> createdAt = _super.createdAt;

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

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

public final BooleanPath isApproved = createBoolean("isApproved");
public final EnumPath<FriendRequestStatus> status = createEnum("status", FriendRequestStatus.class);

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

//inherited
public final DateTimePath<java.time.LocalDateTime> updatedAt = _super.updatedAt;
Expand All @@ -56,8 +56,8 @@ public QFriendRequests(PathMetadata metadata, PathInits inits) {

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

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ public class QMannerRating extends EntityPathBase<MannerRating> {

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

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

public final ListPath<MannerRatingKeyword, QMannerRatingKeyword> mannerRatingKeywordList = this.<MannerRatingKeyword, QMannerRatingKeyword>createList("mannerRatingKeywordList", MannerRatingKeyword.class, QMannerRatingKeyword.class, PathInits.DIRECT2);

public final com.gamegoo.domain.QMember toMember;
Expand Down
56 changes: 36 additions & 20 deletions src/main/java/com/gamegoo/apiPayload/code/status/ErrorStatus.java
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,8 @@ public enum ErrorStatus implements BaseErrorCode {
POSITION_NOT_FOUND(HttpStatus.NOT_FOUND, "POSITION404", "ν•΄λ‹Ή Position을 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."),

// Profile_Image κ΄€λ ¨ μ—λŸ¬
PROFILE_IMAGE_BAD_REQUEST(HttpStatus.BAD_REQUEST, "PROFILE_IMAGE400", "profile_imageκ°€ 30자λ₯Ό μ΄ˆκ³Όν–ˆμŠ΅λ‹ˆλ‹€."),
PROFILE_IMAGE_BAD_REQUEST(HttpStatus.BAD_REQUEST, "PROFILE_IMAGE400",
"profile_imageκ°€ 30자λ₯Ό μ΄ˆκ³Όν–ˆμŠ΅λ‹ˆλ‹€."),

// Email 인증 κ΄€λ ¨ μ—λŸ¬
EMAIL_SEND_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "EMAIL500", "이메일 전솑 도쀑, μ—λŸ¬κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€."),
Expand All @@ -50,32 +51,37 @@ public enum ErrorStatus implements BaseErrorCode {
EMAIL_INVALID_TIME(HttpStatus.BAD_REQUEST, "EMAIL400", "이메일 인증 μ‹œκ°„μ΄ 3λΆ„ μ΄ˆκ³Όν–ˆμŠ΅λ‹ˆλ‹€."),

// 맀칭 κ΄€λ ¨ μ—λŸ¬
MATCHING_STATUS_BAD_REQUEST(HttpStatus.BAD_REQUEST, "MATCH400", "statusλŠ” SUCCESS, QUIT λ‘˜ 쀑 ν•˜λ‚˜λ‘œλ§Œ 변경이 κ°€λŠ₯ν•©λ‹ˆλ‹€."),
MATCHING_STATUS_BAD_REQUEST(HttpStatus.BAD_REQUEST, "MATCH400",
"statusλŠ” SUCCESS, QUIT λ‘˜ 쀑 ν•˜λ‚˜λ‘œλ§Œ 변경이 κ°€λŠ₯ν•©λ‹ˆλ‹€."),
MATCHING_NOT_FOUND(HttpStatus.NOT_FOUND, "MATCH404", "ν•΄λ‹Ή μ‚¬μš©μžμ˜ 맀칭 정보가 μ—†μŠ΅λ‹ˆλ‹€."),


// Riot κ΄€λ ¨ μ—λŸ¬
RIOT_NOT_FOUND(HttpStatus.NOT_FOUND, "RIOT404", "ν•΄λ‹Ή Riot 계정이 μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€."),
RIOT_MATCH_NOT_FOUND(HttpStatus.NOT_FOUND, "RIOTMATCH404", "ν•΄λ‹Ή Riot κ³„μ •μ˜ 맀칭을 λΆˆλŸ¬μ˜€λŠ” 도쀑 μ—λŸ¬κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. 졜근 100판 이내 이벀트 맀칭 μ œμ™Έ, 일반 맀칭(μΌλ°˜κ²Œμž„,λž­ν¬κ²Œμž„,μΉΌλ°”λžŒ)을 많이 ν•œ κ³„μ •μœΌλ‘œ λ‹€μ‹œ μ‹œλ„ν•˜μ„Έμš”."),
RIOT_PREFER_CHAMPION_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "RIOTCHAMPION500", "μ„ ν˜Έ 챔피언을 μ—°λ™ν•˜λŠ” 도쀑 μ—λŸ¬κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€"),
RIOT_MATCH_NOT_FOUND(HttpStatus.NOT_FOUND, "RIOTMATCH404",
"ν•΄λ‹Ή Riot κ³„μ •μ˜ 맀칭을 λΆˆλŸ¬μ˜€λŠ” 도쀑 μ—λŸ¬κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. 졜근 100판 이내 이벀트 맀칭 μ œμ™Έ, 일반 맀칭(μΌλ°˜κ²Œμž„,λž­ν¬κ²Œμž„,μΉΌλ°”λžŒ)을 많이 ν•œ κ³„μ •μœΌλ‘œ λ‹€μ‹œ μ‹œλ„ν•˜μ„Έμš”."),
RIOT_PREFER_CHAMPION_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "RIOTCHAMPION500",
"μ„ ν˜Έ 챔피언을 μ—°λ™ν•˜λŠ” 도쀑 μ—λŸ¬κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€"),
CHAMPION_NOT_FOUND(HttpStatus.NOT_FOUND, "CHAMPION404", "ν•΄λ‹Ή 챔피언이 μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€."),
RIOT_MEMBER_CONFLICT(HttpStatus.CONFLICT, "RIOT409", "ν•΄λ‹Ή 이메일 계정은 이미 λ‹€λ₯Έ RIOT 계정과 μ—°λ™λ˜μ—ˆμŠ΅λ‹ˆλ‹€."),
RIOT_ACCOUNT_CONFLICT(HttpStatus.CONFLICT, "RIOT409", "ν•΄λ‹Ή RIOT 계정은 이미 λ‹€λ₯Έ 이메일과 μ—°λ™λ˜μ–΄μžˆμŠ΅λ‹ˆλ‹€."),
RIOT_INSUFFICIENT_MATCHES(HttpStatus.NOT_FOUND, "RIOT404",
"ν•΄λ‹Ή RIOT 계정은 졜근 100판 이내에 μ†”λ‘œλž­ν¬, 자유랭크, μΌλ°˜κ²Œμž„, μΉΌλ°”λžŒμ„ ν”Œλ ˆμ΄ν•œ 적이 μ—†κΈ° λ•Œλ¬Έμ— μ„ ν˜Έν•˜λŠ” μ±”ν”Όμ–Έ 3λͺ…을 μ •ν•  수 μ—†μŠ΅λ‹ˆλ‹€."),
"ν•΄λ‹Ή RIOT 계정은 졜근 100판 이내에 μ†”λ‘œλž­ν¬, 자유랭크, μΌλ°˜κ²Œμž„, μΉΌλ°”λžŒμ„ ν”Œλ ˆμ΄ν•œ 적이 μ—†κΈ° λ•Œλ¬Έμ— μ„ ν˜Έν•˜λŠ” μ±”ν”Όμ–Έ 3λͺ…을 μ •ν•  수 μ—†μŠ΅λ‹ˆλ‹€."),
RIOT_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "RIOT500", "RIOT API 연동 쀑 μ—λŸ¬κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€."),

// 차단 κ΄€λ ¨ μ—λŸ¬
TARGET_MEMBER_NOT_FOUND(HttpStatus.NOT_FOUND, "BLOCK401", "차단 λŒ€μƒ νšŒμ›μ„ 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."),
ALREADY_BLOCKED(HttpStatus.BAD_REQUEST, "BLOCK402", "이미 μ°¨λ‹¨ν•œ νšŒμ›μž…λ‹ˆλ‹€."),
TARGET_MEMBER_NOT_BLOCKED(HttpStatus.BAD_REQUEST, "BLOCK403", "차단 λͺ©λ‘μ— μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” νšŒμ›μž…λ‹ˆλ‹€."),
BLOCK_MEMBER_BAD_REQUEST(HttpStatus.BAD_REQUEST, "BLOCK404", "잘λͺ»λœ 친ꡬ 차단 μš”μ²­μž…λ‹ˆλ‹€."),

// μ‹ κ³  κ΄€λ ¨ μ—λŸ¬
REPORT_TARGET_MEMBER_NOT_FOUND(HttpStatus.NOT_FOUND, "REPORT401", "μ‹ κ³  λŒ€μƒ νšŒμ›μ„ 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."),
MEMBER_AND_TARGET_MEMBER_SAME(HttpStatus.BAD_REQUEST, "REPORT402", "νšŒμ›κ³Ό μ‹ κ³  λŒ€μƒ νšŒμ›μ΄ κ°™μŠ΅λ‹ˆλ‹€."),

// κ²Œμ‹œνŒ κΈ€ μž‘μ„± κ΄€λ ¨ μ—λŸ¬
BOARD_GAME_STYLE_BAD_REQUEST(HttpStatus.BAD_REQUEST, "BOARD400", "κ²Œμž„ μŠ€νƒ€μΌ 선택 개수(μ΅œλŒ€ 3개)λ₯Ό μ΄ˆκ³Όν–ˆμŠ΅λ‹ˆλ‹€."),
BOARD_GAME_STYLE_BAD_REQUEST(HttpStatus.BAD_REQUEST, "BOARD400",
"κ²Œμž„ μŠ€νƒ€μΌ 선택 개수(μ΅œλŒ€ 3개)λ₯Ό μ΄ˆκ³Όν–ˆμŠ΅λ‹ˆλ‹€."),
GAME_MODE_INVALID(HttpStatus.BAD_REQUEST, "BOARD401", "κ²Œμž„λͺ¨λ“œ 값은 1~4만 κ°€λŠ₯ν•©λ‹ˆλ‹€."),
MAIN_POSITION_INVALID(HttpStatus.BAD_REQUEST, "BOARD401", "μ£Όν¬μ§€μ…˜ 값은 1~5만 κ°€λŠ₯ν•©λ‹ˆλ‹€."),
SUB_POSITION_INVALID(HttpStatus.BAD_REQUEST, "BOARD401", "λΆ€ν¬μ§€μ…˜ 값은 1~5만 κ°€λŠ₯ν•©λ‹ˆλ‹€."),
Expand All @@ -91,16 +97,26 @@ public enum ErrorStatus implements BaseErrorCode {
// λ§€λ„ˆν‰κ°€ κ΄€λ ¨ μ—λŸ¬
MANNER_TARGET_MEMBER_NOT_FOUND(HttpStatus.NOT_FOUND, "MANNER401", "λ§€λ„ˆ 평가 λŒ€μƒ νšŒμ›μ„ 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."),
MANNER_KEYWORD_TYPE_INVALID(HttpStatus.BAD_REQUEST, "MANNER401", "λ§€λ„ˆ ν‚€μ›Œλ“œ μœ ν˜•μ€ 1~6만 κ°€λŠ₯ν•©λ‹ˆλ‹€."),
BAD_MANNER_KEYWORD_TYPE_INVALID(HttpStatus.BAD_REQUEST, "MANNER401", "λΉ„λ§€λ„ˆ ν‚€μ›Œλ“œ μœ ν˜•μ€ 7~12만 κ°€λŠ₯ν•©λ‹ˆλ‹€."),
BAD_MANNER_KEYWORD_TYPE_INVALID(HttpStatus.BAD_REQUEST, "MANNER401",
"λΉ„λ§€λ„ˆ ν‚€μ›Œλ“œ μœ ν˜•μ€ 7~12만 κ°€λŠ₯ν•©λ‹ˆλ‹€."),
MANNER_KEYWORD_NOT_FOUND(HttpStatus.NOT_FOUND, "MANNER404", "ν•΄λ‹Ή λ§€λ„ˆ ν‚€μ›Œλ“œλ₯Ό 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."),
MANNER_CONFLICT(HttpStatus.CONFLICT, "MANNER409", "λ§€λ„ˆ ν‰κ°€λŠ” 졜초 1회만 κ°€λŠ₯ν•©λ‹ˆλ‹€."),
BAD_MANNER_CONFLICT(HttpStatus.CONFLICT, "MANNER409", "λΉ„λ§€λ„ˆ ν‰κ°€λŠ” 졜초 1회만 κ°€λŠ₯ν•©λ‹ˆλ‹€."),

// μ±„νŒ… κ΄€λ ¨ μ—λŸ¬
CHAT_TARGET_NOT_FOUND(HttpStatus.NOT_FOUND, "CHAT4001", "μ±„νŒ… λŒ€μƒ νšŒμ›μ„ 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."),
CHATROOM_NOT_EXIST(HttpStatus.NOT_FOUND, "CHAT4002", "μ±„νŒ…λ°©μ„ 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."),
CHATROOM_ACCESS_DENIED(HttpStatus.BAD_REQUEST, "CHAT4003", "μ ‘κ·Όν•  수 μ—†λŠ” μ±„νŒ…λ°© μž…λ‹ˆλ‹€."),
CHAT_MESSAGE_NOT_FOUND(HttpStatus.NOT_FOUND, "CHAT4004", "ν•΄λ‹Ή λ©”μ‹œμ§€λ₯Ό 찾을 수 μ—†μŠ΅λ‹ˆλ‹€");
CHAT_TARGET_NOT_FOUND(HttpStatus.NOT_FOUND, "CHAT401", "μ±„νŒ… λŒ€μƒ νšŒμ›μ„ 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."),
CHATROOM_NOT_EXIST(HttpStatus.NOT_FOUND, "CHAT402", "μ±„νŒ…λ°©μ„ 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."),
CHATROOM_ACCESS_DENIED(HttpStatus.BAD_REQUEST, "CHAT403", "μ ‘κ·Όν•  수 μ—†λŠ” μ±„νŒ…λ°© μž…λ‹ˆλ‹€."),
CHAT_MESSAGE_NOT_FOUND(HttpStatus.NOT_FOUND, "CHAT404", "ν•΄λ‹Ή λ©”μ‹œμ§€λ₯Ό 찾을 수 μ—†μŠ΅λ‹ˆλ‹€"),

// 친ꡬ κ΄€λ ¨ μ—λŸ¬
FRIEND_BAD_REQUEST(HttpStatus.BAD_REQUEST, "FRIEND401", "잘λͺ»λœ 친ꡬ μš”μ²­μž…λ‹ˆλ‹€."),
FRIEND_TARGET_IS_BLOCKED(HttpStatus.BAD_REQUEST, "FRIEND402",
"λ‚΄κ°€ μ°¨λ‹¨ν•œ νšŒμ›μž…λ‹ˆλ‹€. 친ꡬ μš”μ²­μ„ 보낼 수 μ—†μŠ΅λ‹ˆλ‹€."),
BLOCKED_BY_FRIEND_TARGET(HttpStatus.BAD_REQUEST, "FRIEND403",
"λ‚˜λ₯Ό μ°¨λ‹¨ν•œ νšŒμ›μž…λ‹ˆλ‹€. 친ꡬ μš”μ²­μ„ 보낼 수 μ—†μŠ΅λ‹ˆλ‹€."),

;

private final HttpStatus httpStatus;
private final String code;
Expand All @@ -109,19 +125,19 @@ public enum ErrorStatus implements BaseErrorCode {
@Override
public ErrorReasonDTO getReason() {
return ErrorReasonDTO.builder()
.message(message)
.code(code)
.isSuccess(false)
.build();
.message(message)
.code(code)
.isSuccess(false)
.build();
}

@Override
public ErrorReasonDTO getReasonHttpStatus() {
return ErrorReasonDTO.builder()
.message(message)
.code(code)
.isSuccess(false)
.httpStatus(httpStatus)
.build();
.message(message)
.code(code)
.isSuccess(false)
.httpStatus(httpStatus)
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.gamegoo.apiPayload.exception.handler;

import com.gamegoo.apiPayload.code.BaseErrorCode;
import com.gamegoo.apiPayload.exception.GeneralException;

public class FriendHandler extends GeneralException {

public FriendHandler(BaseErrorCode code) {
super(code);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,13 @@

import com.gamegoo.apiPayload.ApiResponse;
import com.gamegoo.converter.MemberConverter;
import com.gamegoo.domain.Friend;
import com.gamegoo.domain.Member;
import com.gamegoo.dto.member.MemberResponse;
import com.gamegoo.service.member.MemberService;
import com.gamegoo.service.member.BlockService;
import com.gamegoo.util.JWTUtil;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import java.util.List;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Page;
Expand All @@ -24,58 +21,45 @@
import org.springframework.web.bind.annotation.RestController;

@Slf4j
@Tag(name = "Member", description = "νšŒμ› κ΄€λ ¨ API")
@Tag(name = "Block", description = "νšŒμ› 차단 κ΄€λ ¨ API")
@RestController
@RequiredArgsConstructor
@RequestMapping("/v1/member")
public class MemberController {
@RequestMapping("/v1/member/block")
public class BlockController {

private final MemberService memberService;
private final BlockService blockService;


@Operation(summary = "νšŒμ› 차단 API", description = "λŒ€μƒ νšŒμ›μ„ μ°¨λ‹¨ν•˜λŠ” API μž…λ‹ˆλ‹€.")
@Parameter(name = "memberId", description = "차단할 λŒ€μƒ νšŒμ›μ˜ id μž…λ‹ˆλ‹€.")
@PostMapping("/block/{memberId}")
@PostMapping("/{memberId}")
public ApiResponse<String> blockMember(@PathVariable(name = "memberId") Long targetMemberId) {
Long memberId = JWTUtil.getCurrentUserId(); //헀더에 μžˆλŠ” jwt ν† ν°μ—μ„œ idλ₯Ό κ°€μ Έμ˜€λŠ” μ½”λ“œ
memberService.blockMember(memberId, targetMemberId);
blockService.blockMember(memberId, targetMemberId);

return ApiResponse.onSuccess("νšŒμ› 차단 성곡");
}

@Operation(summary = "μ°¨λ‹¨ν•œ νšŒμ› λͺ©λ‘ 쑰회 API", description = "λ‚΄κ°€ μ°¨λ‹¨ν•œ νšŒμ›μ˜ λͺ©λ‘μ„ μ‘°νšŒν•˜λŠ” API μž…λ‹ˆλ‹€.")
@Parameter(name = "page", description = "νŽ˜μ΄μ§€ 번호, 1 μ΄μƒμ˜ 숫자λ₯Ό μž…λ ₯ν•΄ μ£Όμ„Έμš”.")
@GetMapping("/block")
@GetMapping
public ApiResponse<MemberResponse.blockListDTO> getBlockList(
@RequestParam(name = "page") Integer page) {
Long memberId = JWTUtil.getCurrentUserId();

Page<Member> blockList = memberService.getBlockList(memberId, page - 1);
Page<Member> blockList = blockService.getBlockList(memberId, page - 1);

return ApiResponse.onSuccess(MemberConverter.toBlockListDTO(blockList));
}

@Operation(summary = "νšŒμ› 차단 ν•΄μ œ API", description = "ν•΄λ‹Ή νšŒμ›μ— λŒ€ν•œ 차단을 ν•΄μ œν•˜λŠ” API μž…λ‹ˆλ‹€.")
@Parameter(name = "memberId", description = "차단을 ν•΄μ œν•  λŒ€μƒ νšŒμ›μ˜ id μž…λ‹ˆλ‹€.")
@DeleteMapping("/block/{memberId}")
@DeleteMapping("/{memberId}")
public ApiResponse<String> unBlockMember(@PathVariable(name = "memberId") Long targetMemberId) {
Long memberId = JWTUtil.getCurrentUserId();
memberService.unBlockMember(memberId, targetMemberId);
blockService.unBlockMember(memberId, targetMemberId);

return ApiResponse.onSuccess("차단 ν•΄μ œ 성곡");
}

@Operation(summary = "친ꡬ λͺ©λ‘ 쑰회 API", description = "ν•΄λ‹Ή νšŒμ›μ˜ 친ꡬ λͺ©λ‘μ„ μ‘°νšŒν•˜λŠ” API μž…λ‹ˆλ‹€.")
@GetMapping("/friends")
public ApiResponse<Object> getFriendList() {
Long memberId = JWTUtil.getCurrentUserId();
List<Friend> friends = memberService.getFriends(memberId);

List<MemberResponse.friendInfoDTO> friendInfoDTOList = friends.stream()
.map(MemberConverter::toFriendInfoDto).collect(
Collectors.toList());

return ApiResponse.onSuccess(friendInfoDTOList);

}
}
61 changes: 61 additions & 0 deletions src/main/java/com/gamegoo/controller/member/FriendController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package com.gamegoo.controller.member;

import com.gamegoo.apiPayload.ApiResponse;
import com.gamegoo.converter.MemberConverter;
import com.gamegoo.domain.friend.Friend;
import com.gamegoo.domain.friend.FriendRequests;
import com.gamegoo.dto.member.MemberResponse;
import com.gamegoo.service.member.FriendService;
import com.gamegoo.util.JWTUtil;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import java.util.List;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@Slf4j
@Tag(name = "Friend", description = "친ꡬ κ΄€λ ¨ API")
@RestController
@RequiredArgsConstructor
@RequestMapping("/v1/friends")
public class FriendController {

private final FriendService friendService;

@Operation(summary = "친ꡬ λͺ©λ‘ 쑰회 API", description = "ν•΄λ‹Ή νšŒμ›μ˜ 친ꡬ λͺ©λ‘μ„ μ‘°νšŒν•˜λŠ” API μž…λ‹ˆλ‹€.")
@GetMapping
public ApiResponse<List<MemberResponse.friendInfoDTO>> getFriendList() {
Long memberId = JWTUtil.getCurrentUserId();
List<Friend> friends = friendService.getFriends(memberId);

List<MemberResponse.friendInfoDTO> friendInfoDTOList = friends.stream()
.map(MemberConverter::toFriendInfoDto).collect(
Collectors.toList());

return ApiResponse.onSuccess(friendInfoDTOList);

}

@Operation(summary = "친ꡬ μš”μ²­ 전솑 API", description = "λŒ€μƒ νšŒμ›μ—κ²Œ 친ꡬ μš”μ²­μ„ μ „μ†‘ν•˜λŠ” API μž…λ‹ˆλ‹€."
+ "λŒ€μƒ νšŒμ›μ—κ²Œ 친ꡬ μš”μ²­ μ•Œλ¦Όμ„ μ „μ†‘ν•˜λ©°, λŒ€μƒ νšŒμ›μ΄ ν˜„μž¬ 접속 쀑인 경우 socket을 톡해 μ‹€μ‹œκ°„ μ•Œλ¦Όμ„ μ „μ†‘ν•©λ‹ˆλ‹€.")
@Parameter(name = "memberId", description = "친ꡬ μš”μ²­μ„ 전솑할 λŒ€μƒ νšŒμ›μ˜ id μž…λ‹ˆλ‹€.")
@PostMapping("/send/{memberId}")
public ApiResponse<String> sendFriendRequest(
@PathVariable(name = "memberId") Long targetMemberId) {
Long memberId = JWTUtil.getCurrentUserId();

FriendRequests friendRequests = friendService.sendFriendRequest(memberId, targetMemberId);

return ApiResponse.onSuccess("친ꡬ μš”μ²­ 전솑 성곡");

}


}
Loading

0 comments on commit 50f34c2

Please sign in to comment.