1. Post 엔티티와 Member(회원가입 유저)엔티티 간 관계 매핑


Post : Member = N : 1 양방향 관계 매핑

⇒ 위 두 조건을 전부 만족시키기 위해서는 “Post : Member = N : 1” 의 다대일 양방향 관계 매핑을 진행해야겠다고 판단하였음.

체크해야 될 항목

@Getter
@Entity(name = "post")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Post extends BaseTimeEntity {

    // .. 코드 생략

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

    @Builder
    public Post(String title, RecruitType recruitType, String contact, String recruitIntroduction,
                String expectedPeriod, Boolean isCompleted, Member member) {

        this.title = title;
        this.recruitType = recruitType;
        this.contact = contact;
        this.recruitIntroduction = recruitIntroduction;
        this.expectedPeriod = expectedPeriod;
        this.isCompleted = isCompleted;
        this.member = member;

        // 글 작성 회원의 작성 리스트에 해당 게시글을 저장.
        this.member.addPost(this);
    }

		// .. 코드 생략
}
@Getter
@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Member extends BaseTimeEntity {

    @Id @Column(name = "member_id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false, unique = true)
    private String authId;

    @Column
    private String email;

    @Column
    private String name;

    @Column
    private String picture;

    @Column
    @Enumerated(EnumType.STRING)
    private RoleType roleType;

    @Column
    private String refreshToken;

    @OneToMany(mappedBy = "member", cascade = ALL, orphanRemoval = true)
    private final List<Post> postList = new ArrayList<>();

    @Builder
    public Member(String authId, String email, String name, String picture, RoleType roleType, String refreshToken) {
        this.authId = authId;
        this.email = email;
        this.name = name;
        this.picture = picture;
        this.roleType = roleType;
        this.refreshToken = refreshToken;
    }

    public void addPost(Post post) {
        postList.add(post);
    }

    public String getRoleTypeKey() {
        return roleType.getKey();
    }

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

}

2. CRUD에 현재 인증된 사용자 적용하기


글 작성

  1. 글 작성 요청을 보낸 현재 인증된 사용자의 정보를 컨트롤러에서 받을 수 있도록 한다.
@PostMapping("/recruitment")
public PostResponse recruitmentWrite(@Valid @RequestBody CreatePostRequest postDto,
                                     Authentication authentication) {

    return postService.createPost(postDto, authentication);
}
  1. PostService.createPost() 메서드에서 현재 인증된 사용자도 파라미터로 받을 수 있도록 수정한다.
public PostResponse createPost(CreatePostRequest postDto, 
															 Authentication authentication) {
		// 코드 생략
}