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
@@ -0,0 +1,31 @@
package dmu.dasom.miniproject.controller;

import dmu.dasom.miniproject.dto.UserDto;
import dmu.dasom.miniproject.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/user")
public class UserController {
private final UserService userService;

@Autowired
public UserController(UserService userService) {
this.userService = userService;
}

@PostMapping("/register")
public UserDto registerUser(UserDto userDto) {
return userService.registerUser(userDto);
}

@PostMapping("/login")
public boolean login(UserDto userDto) {
return userService.login(userDto);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package dmu.dasom.miniproject.domain;

import jakarta.persistence.EntityListeners;
import jakarta.persistence.MappedSuperclass;
import lombok.Getter;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import java.time.LocalDateTime;

@Getter
@MappedSuperclass
// JPA에서 Entity 클래스들이 BaseTimeEntity을 상속할 경우 필드들도 칼럼으로 인식하도록 설정
@EntityListeners(AuditingEntityListener.class)
public class AutoTimestamp {
@CreatedDate
private LocalDateTime createdDate;

@LastModifiedDate
private LocalDateTime modifiedDate;

}
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,12 @@
import java.util.Date;

@Entity
@Data
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Post {
public class Post extends AutoTimestamp {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
Expand All @@ -25,9 +26,6 @@ public class Post {
@Column(nullable = false)
private String content;

@CreationTimestamp
private LocalDateTime registerDate;

@CreationTimestamp
private LocalDateTime updateDate;
@Column(nullable = false)
private String author;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package dmu.dasom.miniproject.domain;

public enum UserRole {
USER,
ADMIN
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package dmu.dasom.miniproject.domain;

import jakarta.persistence.*;
import lombok.*;

import java.time.LocalDateTime;

@Entity
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Users extends AutoTimestamp {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(nullable = false)
private String userName;

@Column(nullable = false)
private String userEmail;

@Column(nullable = false)
private String userPassword;

@Enumerated(EnumType.STRING)
@Column(nullable = false)
private UserRole userRole;
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,23 +16,25 @@ public class PostDto {
private Long id;
private String title;
private String content;
private LocalDateTime registerDate;
private LocalDateTime updateDate;
private String author;
private LocalDateTime createdDate;
private LocalDateTime modifiedDate;

public static PostDto fromEntity(Post post){
return PostDto.builder()
.id(post.getId())
.title(post.getTitle())
.content(post.getContent())
.registerDate(post.getRegisterDate())
.updateDate(post.getUpdateDate())
.createdDate(post.getCreatedDate())
.modifiedDate(post.getModifiedDate())
.build();
}

public Post toEntity(){
return Post.builder()
.title(this.title)
.content(this.content)
.author(this.author)
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package dmu.dasom.miniproject.dto;

import dmu.dasom.miniproject.domain.UserRole;
import dmu.dasom.miniproject.domain.Users;
import lombok.*;

import java.time.LocalDateTime;

@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class UserDto {
private Long id;
private String userName;
private String userEmail;
private String userPassword;
private UserRole userRole;
private LocalDateTime createdDate;
private LocalDateTime modifiedDate;

public static UserDto fromEntity(Users user){
return UserDto.builder()
.id(user.getId())
.userName(user.getUserName())
.userEmail(user.getUserEmail())
.userPassword(user.getUserPassword())
.userRole(user.getUserRole())
.createdDate(user.getCreatedDate())
.modifiedDate(user.getModifiedDate())
.build();
}

public Users toEntity(){
return Users.builder()
.userName(this.userName)
.userEmail(this.userEmail)
.userPassword(this.userPassword)
.userRole(this.userRole)
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package dmu.dasom.miniproject.exception;

public class UserNotFoundException extends RuntimeException{
public UserNotFoundException(String message) {
super(message);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package dmu.dasom.miniproject.repository;

import dmu.dasom.miniproject.domain.Users;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import java.util.Optional;

@Repository
public interface UserRepository extends JpaRepository<Users, Long> {
Optional<Users> findByEmail(String userEmail);

boolean existsByEmail(String email);
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import dmu.dasom.miniproject.domain.Post;
import dmu.dasom.miniproject.dto.PostDto;
import dmu.dasom.miniproject.repository.PostRepository;
import jakarta.transaction.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

Expand Down Expand Up @@ -37,14 +38,13 @@ public PostDto createPost(PostDto postDto){
return PostDto.fromEntity(postRepository.save(post));
}

@Transactional
public PostDto updatePost(Long id, PostDto postDto){
Post post = postRepository.findById(id)
.orElseThrow(() -> new RuntimeException("Post not found"));

post.setTitle(postDto.getTitle());
post.setContent(postDto.getContent());
post.setUpdateDate(LocalDateTime.now());
postRepository.save(post);

return PostDto.fromEntity(post);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package dmu.dasom.miniproject.service;

import dmu.dasom.miniproject.domain.Users;
import dmu.dasom.miniproject.dto.UserDto;
import dmu.dasom.miniproject.exception.UserNotFoundException;
import dmu.dasom.miniproject.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.stream.Collectors;

@Service
public class UserService {
private final UserRepository userRepository;

@Autowired
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}

public List<UserDto> getAllUser(){
return userRepository.findAll()
.stream()
.map(UserDto::fromEntity)
.collect(Collectors.toList());
}

public UserDto getUserById(Long id){
return userRepository.findById(id)
.map(UserDto::fromEntity)
.orElseThrow(() -> new UserNotFoundException("User not found with id" + id));
}

public UserDto getUserByEmail(String email){
return userRepository.findByEmail(email)
.map(UserDto::fromEntity)
.orElseThrow(() -> new UserNotFoundException("User not found with email" + email));
}

public boolean isEmailDuplicate(String email){
return userRepository.existsByEmail(email);
}

public UserDto registerUser(UserDto userDto){
if(isEmailDuplicate(userDto.getUserEmail())){
// 유저 Email이 중복
throw new IllegalArgumentException("Email already exists" + userDto.getUserEmail());
}
Users user = userDto.toEntity();
return UserDto.fromEntity(userRepository.save(user));
}

public boolean login(UserDto userDto){
return userRepository.findByEmail(userDto.getUserEmail())
.map(user -> user.getUserPassword().equals(userDto.getUserPassword()))
.orElse(false);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,7 @@ spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

spring.datasource.url=jdbc:mysql://localhost:3306/makers_miniproject?&autoReconnect=true&allowMultiQueries=true&characterEncoding=UTF-8



spring.datasource.username=root


spring.datasource.password=admin

spring.jpa.hibernate.ddl-auto=create
Expand Down