Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,77 +1,45 @@
package com.example.ReMap.domain.auth.entity;


import com.example.ReMap.domain.member.Member;
import jakarta.persistence.*;
import lombok.*;
import java.time.LocalDateTime;


@Entity
@Table(name = "refresh_token")
@Getter @Setter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@Builder
public class RefreshToken {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "member_id", nullable = false)
// Member 삭제 시 토큰도 함께 삭제
@OneToOne(fetch = FetchType.LAZY, optional = false, cascade = CascadeType.REMOVE)
@JoinColumn(name = "member_id", nullable = false, unique = true)
private Member member;

@Column(name = "refresh_token", nullable = false)
@Column(name = "refresh_token", nullable = false, length = 512)
private String refreshToken;

@Column(name = "created_at")
@Column(name = "created_at", nullable = false)
private LocalDateTime createdAt;

@Column(name = "updated_at")
@Column(name = "updated_at", nullable = false)
private LocalDateTime updatedAt;

// 기본 생성자
public RefreshToken() {}

// 생성자
public RefreshToken(Member member, String refreshToken, LocalDateTime createdAt, LocalDateTime updatedAt) {
this.member = member;
this.refreshToken = refreshToken;
this.createdAt = createdAt;
this.updatedAt = updatedAt;
}

// Getter / Setter
public Long getId() {
return id;
}

public Member getMember() {
return member;
}

public void setMember(Member member) {
this.member = member;
}

public String getRefreshToken() {
return refreshToken;
}

public void setRefreshToken(String refreshToken) {
this.refreshToken = refreshToken;
}

public LocalDateTime getCreatedAt() {
return createdAt;
}

public void setCreatedAt(LocalDateTime createdAt) {
this.createdAt = createdAt;
}

public LocalDateTime getUpdatedAt() {
return updatedAt;
@PrePersist
public void prePersist() {
LocalDateTime now = LocalDateTime.now();
this.createdAt = now;
this.updatedAt = now;
}

public void setUpdatedAt(LocalDateTime updatedAt) {
this.updatedAt = updatedAt;
@PreUpdate
public void preUpdate() {
this.updatedAt = LocalDateTime.now();
}
}
2 changes: 2 additions & 0 deletions src/main/java/com/example/ReMap/domain/cast/Cast.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.example.ReMap.domain.cast;

import com.example.ReMap.domain.member.Member;
import com.fasterxml.jackson.annotation.JsonIgnore;
import jakarta.persistence.*;

import java.time.LocalDateTime;
Expand All @@ -20,6 +21,7 @@ public class Cast {

@ManyToOne
@JoinColumn(name = "member_id")
@JsonIgnore
private Member member;

// 생성자, getter, setter
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/com/example/ReMap/domain/comment/Comment.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.example.ReMap.domain.cast.Cast;
import com.example.ReMap.domain.member.Member;
import com.fasterxml.jackson.annotation.JsonIgnore;
import jakarta.persistence.*;

import java.time.LocalDateTime;
Expand All @@ -19,6 +20,7 @@ public class Comment {

@ManyToOne
@JoinColumn(name = "member_id")
@JsonIgnore
private Member member;

@ManyToOne
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.example.ReMap.domain.member;

import jakarta.validation.constraints.NotNull;

public class ChangeMemberTypeRequest {

@NotNull(message = "회원 유형을 선택해주세요.")
private MemberType memberType;

public MemberType getMemberType() {
return memberType;
}

public void setMemberType(MemberType memberType) {
this.memberType = memberType;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.example.ReMap.domain.member;

import jakarta.validation.constraints.NotBlank;
import lombok.Getter;
import lombok.Setter;

@Getter @Setter
public class ChangePasswordRequest {

@NotBlank(message = "현재 비밀번호를 입력해주세요.")
private String currentPassword;

@NotBlank(message = "새 비밀번호를 입력해주세요.")
private String newPassword;
}
41 changes: 15 additions & 26 deletions src/main/java/com/example/ReMap/domain/member/Member.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,32 +2,25 @@

import com.example.ReMap.domain.cast.Cast;
import com.example.ReMap.domain.comment.Comment;
import com.example.ReMap.domain.auth.entity.RefreshToken;
import com.example.ReMap.domain.member.MemberType;
import com.fasterxml.jackson.annotation.JsonIgnore;
import jakarta.persistence.*;
import lombok.*;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

@Entity
@Getter
@Builder
@AllArgsConstructor
@Setter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@Builder
@Table(name = "member")
public class Member {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(nullable = false)
private String password;

private Integer phone;

private Long birth;

@Column(unique = true)
Expand All @@ -36,24 +29,20 @@ public class Member {
@Column(nullable = false, unique = true)
private String nickname;

@Column(name = "inactive_date")
private LocalDateTime inactiveDate;

@Column(name = "created_at")
private LocalDateTime createdAt;

@Column(name = "updated_at")
private LocalDateTime updatedAt;

@Builder.Default
@Enumerated(EnumType.STRING)
@Column(name = "memberType")
private MemberType memberType = MemberType.GENERAL;
@Column(name = "member_type")
private MemberType memberType = MemberType.USER;

// 관계 매핑
// 내가 올린 오디오
@OneToMany(mappedBy = "member", cascade = CascadeType.ALL, orphanRemoval = true)
@JsonIgnore
@Builder.Default
private List<Cast> casts = new ArrayList<>();

// 내가 쓴 댓글
@OneToMany(mappedBy = "member", cascade = CascadeType.ALL, orphanRemoval = true)
@JsonIgnore
@Builder.Default
private List<Comment> comments = new ArrayList<>();

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
package com.example.ReMap.domain.member;

import com.example.ReMap.domain.cast.Cast;
import com.example.ReMap.domain.comment.Comment;
import com.example.ReMap.domain.auth.util.JwtUtil; // 실제 JwtUtil 위치에 맞춰 수정
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/members")
@RequiredArgsConstructor
public class MemberController {

private final MemberService memberService;
private final JwtUtil jwtUtil;

/** 내 정보 조회 **/
@GetMapping("/setting")
public ResponseEntity<Member> getMember(
@RequestHeader("Authorization") String authorization) {
Long memberId = jwtUtil.extractMemberId(authorization);
return ResponseEntity.ok(memberService.getMemberById(memberId));
}

/** 내 정보 수정 **/
@PutMapping("/update")
public ResponseEntity<Member> updateMember(
@RequestHeader("Authorization") String authorization,
@Valid @RequestBody UpdateMemberRequest req) {
Long memberId = jwtUtil.extractMemberId(authorization);
return ResponseEntity.ok(memberService.updateMember(memberId, req));
}

/** 비밀번호 변경 **/
@PutMapping("/password")
public ResponseEntity<Void> changePassword(
@RequestHeader("Authorization") String authorization,
@Valid @RequestBody ChangePasswordRequest req) {
Long memberId = jwtUtil.extractMemberId(authorization);
memberService.changePassword(memberId, req);
return ResponseEntity.ok().build();
}

/** 내가 쓴 댓글 목록 **/
@GetMapping("/comments")
public ResponseEntity<List<Comment>> getComments(
@RequestHeader("Authorization") String authorization) {
Long memberId = jwtUtil.extractMemberId(authorization);
return ResponseEntity.ok(memberService.getMemberComments(memberId));
}

/** 내가 올린 오디오 목록 **/
@GetMapping("/casts")
public ResponseEntity<List<Cast>> getCasts(
@RequestHeader("Authorization") String authorization) {
Long memberId = jwtUtil.extractMemberId(authorization);
return ResponseEntity.ok(memberService.getMemberCasts(memberId));
}

/** USER ↔ RECORDER 역할 전환 **/
@PutMapping("/member-type")
public ResponseEntity<Member> changeRole(
@RequestHeader("Authorization") String authorization,
@Valid @RequestBody ChangeMemberTypeRequest req) {
Long memberId = jwtUtil.extractMemberId(authorization);
return ResponseEntity.ok(
memberService.changeOwnRole(memberId, req.getMemberType())
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.example.ReMap.domain.member;

import org.springframework.data.jpa.repository.JpaRepository;

import java.util.Optional;

public interface MemberRepository extends JpaRepository<Member, Long> {
boolean existsByNickname(String nickname);
}

Loading