feat(user-service): 엔티티 양식 변경, userDetailService 구현
- User 엔티티 abstract로 변경 - UserService UserDetailService 구현
This commit is contained in:
@@ -12,7 +12,7 @@ public class CustomerDto extends UserDto {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Builder
|
@Builder
|
||||||
public CustomerDto(Long id, String password, String name, String phoneNumber) {
|
public CustomerDto(Long id, String email, String password, String name, String phoneNumber, String dtype) {
|
||||||
super(id, password, name, phoneNumber);
|
super(id, email, password, name, phoneNumber, dtype);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package com.justpickup.userservice.domain.user.dto;
|
||||||
|
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
public class StoreOwnerDto extends UserDto {
|
||||||
|
private String businessNumber;
|
||||||
|
|
||||||
|
@Builder
|
||||||
|
public StoreOwnerDto(Long id, String email, String password, String name,
|
||||||
|
String phoneNumber, String dtype, String businessNumber) {
|
||||||
|
super(id, email, password, name, phoneNumber, dtype);
|
||||||
|
this.businessNumber = businessNumber;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,15 +1,16 @@
|
|||||||
package com.justpickup.userservice.domain.user.dto;
|
package com.justpickup.userservice.domain.user.dto;
|
||||||
|
|
||||||
import com.justpickup.userservice.domain.user.entity.Customer;
|
import com.justpickup.userservice.domain.user.entity.Customer;
|
||||||
import lombok.Builder;
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
public class UserDto {
|
public abstract class UserDto {
|
||||||
private Long id;
|
private Long id;
|
||||||
|
private String email;
|
||||||
private String password;
|
private String password;
|
||||||
private String name;
|
private String name;
|
||||||
private String phoneNumber;
|
private String phoneNumber;
|
||||||
|
private String dtype;
|
||||||
|
|
||||||
// == 생성 메소드 == //
|
// == 생성 메소드 == //
|
||||||
public UserDto(Customer customer) {
|
public UserDto(Customer customer) {
|
||||||
@@ -19,10 +20,12 @@ public class UserDto {
|
|||||||
this.phoneNumber = customer.getPhoneNumber();
|
this.phoneNumber = customer.getPhoneNumber();
|
||||||
}
|
}
|
||||||
|
|
||||||
public UserDto(Long id, String password, String name, String phoneNumber) {
|
public UserDto(Long id, String email, String password, String name, String phoneNumber, String dtype) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
|
this.email = email;
|
||||||
this.password = password;
|
this.password = password;
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.phoneNumber = phoneNumber;
|
this.phoneNumber = phoneNumber;
|
||||||
|
this.dtype = dtype;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.justpickup.userservice.domain.user.entity;
|
package com.justpickup.userservice.domain.user.entity;
|
||||||
|
|
||||||
|
import com.justpickup.userservice.domain.user.dto.StoreOwnerDto;
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
@@ -12,4 +13,9 @@ import javax.persistence.Table;
|
|||||||
@Getter @NoArgsConstructor(access = AccessLevel.PROTECTED)
|
@Getter @NoArgsConstructor(access = AccessLevel.PROTECTED)
|
||||||
public class StoreOwner extends User {
|
public class StoreOwner extends User {
|
||||||
private String businessNumber;
|
private String businessNumber;
|
||||||
|
|
||||||
|
public StoreOwner(String email, String password, String name, String phoneNumber, String businessNumber) {
|
||||||
|
super(email, password, name, phoneNumber);
|
||||||
|
this.businessNumber = businessNumber;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,15 +12,27 @@ import javax.persistence.*;
|
|||||||
@Inheritance(strategy = InheritanceType.JOINED)
|
@Inheritance(strategy = InheritanceType.JOINED)
|
||||||
@DiscriminatorColumn(name = "DTYPE")
|
@DiscriminatorColumn(name = "DTYPE")
|
||||||
@Getter @NoArgsConstructor(access = AccessLevel.PROTECTED)
|
@Getter @NoArgsConstructor(access = AccessLevel.PROTECTED)
|
||||||
public class User extends BaseEntity {
|
public abstract class User extends BaseEntity {
|
||||||
|
|
||||||
@Id @GeneratedValue
|
@Id @GeneratedValue
|
||||||
@Column(name = "user_id")
|
@Column(name = "user_id")
|
||||||
private Long id;
|
private Long id;
|
||||||
|
|
||||||
|
private String email;
|
||||||
|
|
||||||
private String password;
|
private String password;
|
||||||
|
|
||||||
private String name;
|
private String name;
|
||||||
|
|
||||||
private String phoneNumber;
|
private String phoneNumber;
|
||||||
|
|
||||||
|
@Column(insertable = false, updatable = false)
|
||||||
|
private String dtype;
|
||||||
|
|
||||||
|
public User(String email, String password, String name, String phoneNumber) {
|
||||||
|
this.email = email;
|
||||||
|
this.password = password;
|
||||||
|
this.name = name;
|
||||||
|
this.phoneNumber = phoneNumber;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
package com.justpickup.userservice.domain.user.repository;
|
||||||
|
|
||||||
|
import com.justpickup.userservice.domain.user.entity.User;
|
||||||
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
public interface UserRepository extends JpaRepository<User, Long> {
|
||||||
|
Optional<User> findByEmail(String username);
|
||||||
|
}
|
||||||
@@ -1,7 +1,10 @@
|
|||||||
package com.justpickup.userservice.domain.user.service;
|
package com.justpickup.userservice.domain.user.service;
|
||||||
|
|
||||||
import com.justpickup.userservice.domain.user.dto.CustomerDto;
|
import com.justpickup.userservice.domain.user.dto.CustomerDto;
|
||||||
|
import com.justpickup.userservice.domain.user.dto.StoreOwnerDto;
|
||||||
|
import com.justpickup.userservice.domain.user.entity.StoreOwner;
|
||||||
|
|
||||||
public interface UserService {
|
public interface UserService {
|
||||||
CustomerDto findCustomerByUserId(Long userId);
|
CustomerDto findCustomerByUserId(Long userId);
|
||||||
|
StoreOwner saveStoreOwner(StoreOwnerDto storeOwnerDto);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,21 +1,45 @@
|
|||||||
package com.justpickup.userservice.domain.user.service;
|
package com.justpickup.userservice.domain.user.service;
|
||||||
|
|
||||||
import com.justpickup.userservice.domain.user.dto.CustomerDto;
|
import com.justpickup.userservice.domain.user.dto.CustomerDto;
|
||||||
|
import com.justpickup.userservice.domain.user.dto.StoreOwnerDto;
|
||||||
import com.justpickup.userservice.domain.user.entity.Customer;
|
import com.justpickup.userservice.domain.user.entity.Customer;
|
||||||
|
import com.justpickup.userservice.domain.user.entity.StoreOwner;
|
||||||
|
import com.justpickup.userservice.domain.user.entity.User;
|
||||||
import com.justpickup.userservice.domain.user.exception.NotExistUserException;
|
import com.justpickup.userservice.domain.user.exception.NotExistUserException;
|
||||||
import com.justpickup.userservice.domain.user.repository.CustomerRepository;
|
import com.justpickup.userservice.domain.user.repository.CustomerRepository;
|
||||||
|
import com.justpickup.userservice.domain.user.repository.UserRepository;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.security.core.authority.SimpleGrantedAuthority;
|
||||||
|
import org.springframework.security.core.userdetails.UserDetails;
|
||||||
|
import org.springframework.security.core.userdetails.UserDetailsService;
|
||||||
|
import org.springframework.security.core.userdetails.UsernameNotFoundException;
|
||||||
|
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@Transactional(readOnly = true)
|
@Transactional(readOnly = true)
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class UserServiceImpl implements UserService {
|
public class UserServiceImpl implements UserService, UserDetailsService {
|
||||||
|
|
||||||
private final CustomerRepository customerRepository;
|
private final CustomerRepository customerRepository;
|
||||||
|
private final UserRepository userRepository;
|
||||||
|
private final PasswordEncoder passwordEncoder;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
|
||||||
|
User user = userRepository.findByEmail(username)
|
||||||
|
.orElseThrow(() -> new UsernameNotFoundException("User not found in the database"));
|
||||||
|
|
||||||
|
Collection<SimpleGrantedAuthority> authorities = new ArrayList<>();
|
||||||
|
authorities.add(new SimpleGrantedAuthority(user.getDtype()));
|
||||||
|
return new org.springframework.security.core.userdetails.User(user.getId().toString(), user.getPassword(), authorities);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CustomerDto findCustomerByUserId(Long userId) {
|
public CustomerDto findCustomerByUserId(Long userId) {
|
||||||
@@ -24,4 +48,15 @@ public class UserServiceImpl implements UserService {
|
|||||||
|
|
||||||
return new CustomerDto(customer);
|
return new CustomerDto(customer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional
|
||||||
|
public StoreOwner saveStoreOwner(StoreOwnerDto storeOwnerDto) {
|
||||||
|
String encode = passwordEncoder.encode(storeOwnerDto.getPassword());
|
||||||
|
|
||||||
|
StoreOwner storeOwner = new StoreOwner(storeOwnerDto.getEmail(), encode, storeOwnerDto.getName(),
|
||||||
|
storeOwnerDto.getPhoneNumber(), storeOwnerDto.getBusinessNumber());
|
||||||
|
|
||||||
|
return userRepository.save(storeOwner);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user