From 54f9c9d510b0bc49db81cdb4a9d3c0bb84ff81e5 Mon Sep 17 00:00:00 2001 From: ipcarepi Date: Thu, 7 Aug 2025 18:03:45 +0900 Subject: [PATCH] =?UTF-8?q?DTO,=20API=20=EC=9E=91=EC=84=B1.=20User=20?= =?UTF-8?q?=EC=97=94=ED=8B=B0=ED=8B=B0=20=ED=95=84=EB=93=9C=20=EC=88=9C?= =?UTF-8?q?=EC=84=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 전체 유저 목록 조회 2. ID로 유저 조회 3. 유저 등록 4. ID로 유저 삭제 1. UserRequestDto 2. UserResponseDto --- .../sc/secondHandMarket/TestUserDataInit.java | 38 +++++++++++++++ .../domain/sale/entity/Sale.java | 1 + .../user/controller/UserController.java | 42 +++++++++++++++- .../user/dto/request/UserRequestDto.java | 23 +++++++++ .../user/dto/response/UserResponseDto.java | 24 ++++++++++ .../domain/user/entity/User.java | 10 ++-- .../domain/user/service/UserService.java | 15 ++++-- .../domain/user/service/UserServiceImpl.java | 48 +++++++++++++++++++ 8 files changed, 191 insertions(+), 10 deletions(-) create mode 100644 src/main/java/com/sc/secondHandMarket/TestUserDataInit.java create mode 100644 src/main/java/com/sc/secondHandMarket/domain/user/dto/request/UserRequestDto.java create mode 100644 src/main/java/com/sc/secondHandMarket/domain/user/dto/response/UserResponseDto.java create mode 100644 src/main/java/com/sc/secondHandMarket/domain/user/service/UserServiceImpl.java diff --git a/src/main/java/com/sc/secondHandMarket/TestUserDataInit.java b/src/main/java/com/sc/secondHandMarket/TestUserDataInit.java new file mode 100644 index 0000000..ecec927 --- /dev/null +++ b/src/main/java/com/sc/secondHandMarket/TestUserDataInit.java @@ -0,0 +1,38 @@ +package com.sc.secondHandMarket; + +import com.sc.secondHandMarket.domain.user.entity.User; +import com.sc.secondHandMarket.domain.user.repository.UserRepository; +import jakarta.annotation.PostConstruct; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +/** + * User 데이터 넣는 코드 + * + * 주석화 해놓은 @Component와 @PostConstruct를 주석화 헤제한 뒤 + * 메인 코드를 실행시키면 자동으로 들어감. + * + * 이후에는 다시 두 어노테이션을 주석화할 것. + * + * * 마음대로 더 추가 가능 + */ + +//@Component +@RequiredArgsConstructor +public class TestUserDataInit { + + private final UserRepository userRepository; + +// @PostConstruct + public void testUserData() throws InterruptedException { + User user1 = new User("user1", "123123", "random1@naver.com", "010-1254-2314"); + Thread.sleep(1000); + User user2 = new User("user2", "456456", "random2@naver.com", "010-1459-0897"); + Thread.sleep(1000); + User user3 = new User("user3", "789789", "random3@naver.com", "010-9854-0283"); + + userRepository.save(user1); + userRepository.save(user2); + userRepository.save(user3); + } +} diff --git a/src/main/java/com/sc/secondHandMarket/domain/sale/entity/Sale.java b/src/main/java/com/sc/secondHandMarket/domain/sale/entity/Sale.java index b131a2b..ede0f56 100644 --- a/src/main/java/com/sc/secondHandMarket/domain/sale/entity/Sale.java +++ b/src/main/java/com/sc/secondHandMarket/domain/sale/entity/Sale.java @@ -19,6 +19,7 @@ public class Sale { @ManyToOne(fetch= LAZY) @JoinColumn(name = "user_id") private User user; + @ManyToOne(fetch = LAZY) @JoinColumn(name = "product_id") private Product product; diff --git a/src/main/java/com/sc/secondHandMarket/domain/user/controller/UserController.java b/src/main/java/com/sc/secondHandMarket/domain/user/controller/UserController.java index 0d67b3b..7a2595a 100644 --- a/src/main/java/com/sc/secondHandMarket/domain/user/controller/UserController.java +++ b/src/main/java/com/sc/secondHandMarket/domain/user/controller/UserController.java @@ -1,7 +1,45 @@ package com.sc.secondHandMarket.domain.user.controller; -import org.springframework.stereotype.Controller; +import com.sc.secondHandMarket.domain.user.dto.request.UserRequestDto; +import com.sc.secondHandMarket.domain.user.dto.response.UserResponseDto; +import com.sc.secondHandMarket.domain.user.service.UserService; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; -@Controller +import java.util.List; + +@RestController +@RequestMapping("/api/users") +@RequiredArgsConstructor public class UserController { + + private final UserService userService; + + // 전체 User 조회 + @GetMapping + public ResponseEntity> findAll() { + return ResponseEntity.ok(userService.findAll()); + } + + // ID로 User 조회 + @GetMapping("/{userId}") + public ResponseEntity findById(@PathVariable Long userId) { + return ResponseEntity.ok(userService.findById(userId)); + } + + // User 저장 + @PostMapping + public ResponseEntity saveUser(@RequestBody UserRequestDto userDto) { + userService.save(userDto.toUser()); + return ResponseEntity.ok("User saved"); + } + + //ID로 User 삭제 + @DeleteMapping("/{userId}") + public ResponseEntity deleteUser(@PathVariable Long userId) { + userService.deleteById(userId); + return ResponseEntity.ok("User deleted"); + } + } diff --git a/src/main/java/com/sc/secondHandMarket/domain/user/dto/request/UserRequestDto.java b/src/main/java/com/sc/secondHandMarket/domain/user/dto/request/UserRequestDto.java new file mode 100644 index 0000000..643e309 --- /dev/null +++ b/src/main/java/com/sc/secondHandMarket/domain/user/dto/request/UserRequestDto.java @@ -0,0 +1,23 @@ +package com.sc.secondHandMarket.domain.user.dto.request; + +import com.sc.secondHandMarket.domain.user.entity.User; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +public class UserRequestDto { + private String nickname; + private String password; + private String email; + private String phone; + + public User toUser() { + return new User( + nickname, + password, + email, + phone); + } + +} diff --git a/src/main/java/com/sc/secondHandMarket/domain/user/dto/response/UserResponseDto.java b/src/main/java/com/sc/secondHandMarket/domain/user/dto/response/UserResponseDto.java new file mode 100644 index 0000000..59e75a2 --- /dev/null +++ b/src/main/java/com/sc/secondHandMarket/domain/user/dto/response/UserResponseDto.java @@ -0,0 +1,24 @@ +package com.sc.secondHandMarket.domain.user.dto.response; + +import com.sc.secondHandMarket.domain.user.entity.User; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +@Getter +@NoArgsConstructor +public class UserResponseDto { + + private String nickname; + private String email; + private String phone; + private LocalDateTime created_at; + + public UserResponseDto(User user) { + this.nickname = user.getNickname(); + this.email = user.getEmail(); + this.phone = user.getPhone(); + this.created_at = user.getCreated_at(); + } +} diff --git a/src/main/java/com/sc/secondHandMarket/domain/user/entity/User.java b/src/main/java/com/sc/secondHandMarket/domain/user/entity/User.java index 5bd5250..a7abf77 100644 --- a/src/main/java/com/sc/secondHandMarket/domain/user/entity/User.java +++ b/src/main/java/com/sc/secondHandMarket/domain/user/entity/User.java @@ -19,16 +19,16 @@ public class User { @GeneratedValue private Long id; - private String email; - private String password; private String nickname; + private String password; + private String email; private String phone; private LocalDateTime created_at; - public User(String email, String password, String nickname, String phone) { - this.email = email; - this.password = password; + public User(String nickname, String password, String email, String phone) { this.nickname = nickname; + this.password = password; + this.email = email; this.phone = phone; this.created_at = LocalDateTime.now(); } diff --git a/src/main/java/com/sc/secondHandMarket/domain/user/service/UserService.java b/src/main/java/com/sc/secondHandMarket/domain/user/service/UserService.java index be8e0ec..9387a89 100644 --- a/src/main/java/com/sc/secondHandMarket/domain/user/service/UserService.java +++ b/src/main/java/com/sc/secondHandMarket/domain/user/service/UserService.java @@ -1,7 +1,16 @@ package com.sc.secondHandMarket.domain.user.service; -import org.springframework.stereotype.Service; +import com.sc.secondHandMarket.domain.user.dto.response.UserResponseDto; +import com.sc.secondHandMarket.domain.user.entity.User; -@Service -public class UserService { +import java.util.List; + +public interface UserService { + List findAll(); + + UserResponseDto findById(Long userId); + + User save(User user); + + User deleteById(Long userId); } diff --git a/src/main/java/com/sc/secondHandMarket/domain/user/service/UserServiceImpl.java b/src/main/java/com/sc/secondHandMarket/domain/user/service/UserServiceImpl.java new file mode 100644 index 0000000..0e850dd --- /dev/null +++ b/src/main/java/com/sc/secondHandMarket/domain/user/service/UserServiceImpl.java @@ -0,0 +1,48 @@ +package com.sc.secondHandMarket.domain.user.service; + +import com.sc.secondHandMarket.domain.user.dto.response.UserResponseDto; +import com.sc.secondHandMarket.domain.user.entity.User; +import com.sc.secondHandMarket.domain.user.repository.UserRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +@RequiredArgsConstructor +public class UserServiceImpl implements UserService{ + + private final UserRepository userRepository; + + @Override + public List findAll() { + List dtoList = new ArrayList<>(); + for (User user : userRepository.findAll()) { + dtoList.add(toDto(user)); + } + return dtoList; + } + + @Override + public UserResponseDto findById(Long userId) { + return toDto(userRepository.findById(userId).orElseThrow()); + } + + @Override + public User save(User user) { + return userRepository.save(user); + } + + // DTO로 변환 + private UserResponseDto toDto(User user) { + return new UserResponseDto(user); + } + + @Override + public User deleteById(Long userId) { + User user = userRepository.findById(userId).orElseThrow(); + userRepository.deleteById(userId); + return user; + } +}