Skip to content

Commit 6c651fc

Browse files
authored
Merge pull request #2 from NameSolver/feat/member
Feat/member
2 parents 2bae7d2 + 7aaebe3 commit 6c651fc

File tree

12 files changed

+299
-0
lines changed

12 files changed

+299
-0
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.dongdong.nameSolver.domain.match.domain.constant;
2+
3+
public enum MatchRequestResponse {
4+
NONE, ACCEPT, DECLINE
5+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.dongdong.nameSolver.domain.match.domain.constant;
2+
3+
public enum MatchType {
4+
SAME_FULL_NAME, SAME_LAST_NAME, SAME_FIRST_CONSONANT
5+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.dongdong.nameSolver.domain.match.domain.entity;
2+
3+
import com.dongdong.nameSolver.domain.match.domain.constant.MatchType;
4+
import com.dongdong.nameSolver.domain.member.domain.entity.Member;
5+
import jakarta.persistence.*;
6+
7+
import java.time.LocalDateTime;
8+
9+
@Entity
10+
public class Match {
11+
@Id
12+
@GeneratedValue(strategy = GenerationType.IDENTITY)
13+
private Long matchId;
14+
15+
private LocalDateTime startedAt;
16+
private LocalDateTime endAt;
17+
18+
@Enumerated(value = EnumType.STRING)
19+
private MatchType matchType;
20+
21+
private int requesterStartRating;
22+
private int accepterStartRating;
23+
24+
@ManyToOne(fetch = FetchType.LAZY)
25+
@JoinColumn(name = "member_id")
26+
private Member requester;
27+
28+
@ManyToOne(fetch = FetchType.LAZY)
29+
@JoinColumn(name = "member_id")
30+
private Member accepter;
31+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.dongdong.nameSolver.domain.match.domain.entity;
2+
3+
import com.dongdong.nameSolver.domain.match.domain.constant.MatchType;
4+
import com.dongdong.nameSolver.domain.member.domain.entity.Member;
5+
import jakarta.persistence.*;
6+
7+
import java.time.LocalDateTime;
8+
9+
@Entity
10+
public class MatchRecord {
11+
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
12+
private Long matchRecordId;
13+
14+
private LocalDateTime startedAt;
15+
private LocalDateTime endAt;
16+
17+
@Enumerated(value = EnumType.STRING)
18+
private MatchType matchType;
19+
20+
private int winnerIncreaseRating;
21+
private int loserIncreaseRating;
22+
23+
@ManyToOne(fetch = FetchType.LAZY)
24+
@JoinColumn(name = "member_id")
25+
private Member winner;
26+
27+
@ManyToOne(fetch = FetchType.LAZY)
28+
@JoinColumn(name = "member_id")
29+
private Member loser;
30+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.dongdong.nameSolver.domain.match.domain.entity;
2+
3+
import com.dongdong.nameSolver.domain.match.domain.constant.MatchType;
4+
import com.dongdong.nameSolver.domain.member.domain.entity.Member;
5+
import jakarta.persistence.*;
6+
import org.springframework.data.annotation.CreatedDate;
7+
8+
import java.time.LocalDateTime;
9+
10+
@Entity
11+
public class MatchRequest {
12+
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
13+
private Long matchRequestId;
14+
15+
@CreatedDate
16+
private LocalDateTime createdAt;
17+
18+
@Enumerated(value = EnumType.STRING)
19+
private MatchType matchType;
20+
21+
@ManyToOne
22+
@JoinColumn(name = "member_id")
23+
private Member requester;
24+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.dongdong.nameSolver.domain.match.domain.entity;
2+
3+
import com.dongdong.nameSolver.domain.match.domain.constant.MatchRequestResponse;
4+
import com.dongdong.nameSolver.domain.member.domain.entity.Member;
5+
import jakarta.persistence.*;
6+
7+
@Entity
8+
public class MatchRequestCandidate {
9+
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
10+
private Long id;
11+
12+
@ManyToOne
13+
@JoinColumn(name = "member_id")
14+
private Member member;
15+
16+
@ManyToOne
17+
@JoinColumn(name = "match_request_id")
18+
private MatchRequest match;
19+
20+
@Enumerated(value = EnumType.STRING)
21+
private MatchRequestResponse response;
22+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.dongdong.nameSolver.domain.member.application.dto.response;
2+
3+
import com.dongdong.nameSolver.domain.member.domain.entity.Member;
4+
import lombok.AllArgsConstructor;
5+
import lombok.Data;
6+
7+
@Data
8+
@AllArgsConstructor
9+
public class MemberResponse {
10+
private String solvedacName;
11+
private String name;
12+
private String email;
13+
14+
public static MemberResponse from(Member member) {
15+
return new MemberResponse(member.getSolvedacName(), member.getName(), member.getEmail());
16+
}
17+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.dongdong.nameSolver.domain.member.application.service;
2+
3+
import com.dongdong.nameSolver.domain.member.application.dto.response.MemberResponse;
4+
import com.dongdong.nameSolver.domain.member.domain.entity.Member;
5+
import com.dongdong.nameSolver.domain.member.domain.repository.MemberRepository;
6+
import lombok.RequiredArgsConstructor;
7+
import org.springframework.stereotype.Service;
8+
import org.springframework.transaction.annotation.Transactional;
9+
10+
import java.util.UUID;
11+
12+
@Service
13+
@RequiredArgsConstructor
14+
public class MemberService {
15+
16+
private final MemberRepository memberRepository;
17+
18+
/**
19+
* 멤버 정보 가져오는 메서드
20+
*/
21+
public MemberResponse findMember(UUID memberId) {
22+
Member member = memberRepository.findByMemberId(memberId).orElseThrow(() -> new RuntimeException("존재하지 않는 유저입니다."));
23+
return MemberResponse.from(member);
24+
}
25+
26+
/**
27+
* 로그아웃 메서드
28+
*/
29+
@Transactional
30+
public Boolean signOut(UUID memberId) {
31+
// 멤버 가져오기
32+
Member member = memberRepository.findByMemberId(memberId).orElseThrow(() -> new RuntimeException("존재하지 않는 유저입니다."));
33+
34+
// 리프레시 토큰 삭제
35+
member.removeRefreshToken();
36+
37+
return true;
38+
}
39+
}

src/main/java/com/dongdong/nameSolver/domain/member/domain/entity/Member.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,4 +49,8 @@ public static Member join(SignUpCommand signUpCommand, String hashedPassword) {
4949
public void storeRefreshToken(String refreshToken) {
5050
this.refreshToken = refreshToken;
5151
}
52+
53+
public void removeRefreshToken() {
54+
this.refreshToken = null;
55+
}
5256
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.dongdong.nameSolver.domain.member.presentation;
2+
3+
import com.dongdong.nameSolver.domain.member.application.dto.response.MemberResponse;
4+
import com.dongdong.nameSolver.domain.member.application.service.MemberService;
5+
import com.dongdong.nameSolver.global.response.ApiResponse;
6+
import lombok.RequiredArgsConstructor;
7+
import org.springframework.security.core.annotation.AuthenticationPrincipal;
8+
import org.springframework.web.bind.annotation.DeleteMapping;
9+
import org.springframework.web.bind.annotation.GetMapping;
10+
import org.springframework.web.bind.annotation.RequestMapping;
11+
import org.springframework.web.bind.annotation.RestController;
12+
13+
import java.util.UUID;
14+
15+
@RestController
16+
@RequestMapping("/member")
17+
@RequiredArgsConstructor
18+
public class MemberController {
19+
20+
private final MemberService memberService;
21+
22+
@GetMapping("")
23+
public ApiResponse<MemberResponse> getMember(@AuthenticationPrincipal UUID memberId) {
24+
return ApiResponse.success(memberService.findMember(memberId));
25+
}
26+
27+
@DeleteMapping("")
28+
public ApiResponse<Boolean> signOut(@AuthenticationPrincipal UUID memberId) {
29+
return ApiResponse.success(memberService.signOut(memberId));
30+
}
31+
}

0 commit comments

Comments
 (0)