package com.sparta.blog.entity;
import com.sparta.blog.dto.PostRequestDto;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Entity
@Getter
@Setter
@NoArgsConstructor
@Table(name = "posts")
public class Post extends Timestamped {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String title;
@Column(nullable = false)
private String content;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id", nullable = false)
private User user;
public Post(PostRequestDto postRequestDto, User user) {
this.title = postRequestDto.getTitle();
this.content = postRequestDto.getContent();
this.user = user;
}
}
package com.sparta.blog.entity;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.util.ArrayList;
import java.util.List;
@Entity
@Getter
@Setter
@NoArgsConstructor
@Table(name="users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false, unique = true)
private String username;
@Column(nullable = false)
private String password;
@Column(nullable = false)
@Enumerated(value = EnumType.STRING)
private UserRoleEnum role;
@OneToMany(mappedBy = "user")
private List<Post> postList = new ArrayList<>();
public User(String username, String password, UserRoleEnum role) {
this.username = username;
this.password = password;
this.role = role;
}
}
@PutMapping("/post/{id}")
public PostResponseDto updatePost(@PathVariable Long id, @RequestBody PostRequestDto requestDto, @AuthenticationPrincipal UserDetailsImpl userDetails) {
return postService.updatePost(id, requestDto, userDetails.getUser());
}
@Transactional
public PostResponseDto updatePost(Long id, PostRequestDto requestDto, User user) {
Post post = findPost(id);
if (!post.getUser().getId().equals(user.getId())) {
throw new IllegalArgumentException("다른 회원의 글은 수정할 수 없습니다.");
} else {
post.setTitle(requestDto.getTitle());
post.setContent(requestDto.getContent());
postRepository.save(post);
}
return new PostResponseDto(post);
}
user entity의 postList도 업데이트 되도록 수정할 예정