feat(user-service): 엔티티 양식 변경, userDetailService 구현
- User 엔티티 abstract로 변경 - UserService UserDetailService 구현
This commit is contained in:
@@ -12,7 +12,7 @@ public class CustomerDto extends UserDto {
|
||||
}
|
||||
|
||||
@Builder
|
||||
public CustomerDto(Long id, String password, String name, String phoneNumber) {
|
||||
super(id, password, name, phoneNumber);
|
||||
public CustomerDto(Long id, String email, String password, String name, String phoneNumber, String dtype) {
|
||||
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;
|
||||
|
||||
import com.justpickup.userservice.domain.user.entity.Customer;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
public class UserDto {
|
||||
public abstract class UserDto {
|
||||
private Long id;
|
||||
private String email;
|
||||
private String password;
|
||||
private String name;
|
||||
private String phoneNumber;
|
||||
private String dtype;
|
||||
|
||||
// == 생성 메소드 == //
|
||||
public UserDto(Customer customer) {
|
||||
@@ -19,10 +20,12 @@ public class UserDto {
|
||||
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.email = email;
|
||||
this.password = password;
|
||||
this.name = name;
|
||||
this.phoneNumber = phoneNumber;
|
||||
this.dtype = dtype;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.justpickup.userservice.domain.user.entity;
|
||||
|
||||
import com.justpickup.userservice.domain.user.dto.StoreOwnerDto;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
@@ -12,4 +13,9 @@ import javax.persistence.Table;
|
||||
@Getter @NoArgsConstructor(access = AccessLevel.PROTECTED)
|
||||
public class StoreOwner extends User {
|
||||
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)
|
||||
@DiscriminatorColumn(name = "DTYPE")
|
||||
@Getter @NoArgsConstructor(access = AccessLevel.PROTECTED)
|
||||
public class User extends BaseEntity {
|
||||
public abstract class User extends BaseEntity {
|
||||
|
||||
@Id @GeneratedValue
|
||||
@Column(name = "user_id")
|
||||
private Long id;
|
||||
|
||||
private String email;
|
||||
|
||||
private String password;
|
||||
|
||||
private String name;
|
||||
|
||||
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;
|
||||
|
||||
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 {
|
||||
CustomerDto findCustomerByUserId(Long userId);
|
||||
StoreOwner saveStoreOwner(StoreOwnerDto storeOwnerDto);
|
||||
}
|
||||
|
||||
@@ -1,21 +1,45 @@
|
||||
package com.justpickup.userservice.domain.user.service;
|
||||
|
||||
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.StoreOwner;
|
||||
import com.justpickup.userservice.domain.user.entity.User;
|
||||
import com.justpickup.userservice.domain.user.exception.NotExistUserException;
|
||||
import com.justpickup.userservice.domain.user.repository.CustomerRepository;
|
||||
import com.justpickup.userservice.domain.user.repository.UserRepository;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
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.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
@Transactional(readOnly = true)
|
||||
@Slf4j
|
||||
public class UserServiceImpl implements UserService {
|
||||
public class UserServiceImpl implements UserService, UserDetailsService {
|
||||
|
||||
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
|
||||
public CustomerDto findCustomerByUserId(Long userId) {
|
||||
@@ -24,4 +48,15 @@ public class UserServiceImpl implements UserService {
|
||||
|
||||
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