diff --git a/user-service/src/main/java/com/justpickup/userservice/domain/user/dto/CustomerDto.java b/user-service/src/main/java/com/justpickup/userservice/domain/user/dto/CustomerDto.java index ac60aa5..b129153 100644 --- a/user-service/src/main/java/com/justpickup/userservice/domain/user/dto/CustomerDto.java +++ b/user-service/src/main/java/com/justpickup/userservice/domain/user/dto/CustomerDto.java @@ -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); } } diff --git a/user-service/src/main/java/com/justpickup/userservice/domain/user/dto/StoreOwnerDto.java b/user-service/src/main/java/com/justpickup/userservice/domain/user/dto/StoreOwnerDto.java new file mode 100644 index 0000000..b5d2833 --- /dev/null +++ b/user-service/src/main/java/com/justpickup/userservice/domain/user/dto/StoreOwnerDto.java @@ -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; + } +} diff --git a/user-service/src/main/java/com/justpickup/userservice/domain/user/dto/UserDto.java b/user-service/src/main/java/com/justpickup/userservice/domain/user/dto/UserDto.java index 3fad831..32df2aa 100644 --- a/user-service/src/main/java/com/justpickup/userservice/domain/user/dto/UserDto.java +++ b/user-service/src/main/java/com/justpickup/userservice/domain/user/dto/UserDto.java @@ -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; } } diff --git a/user-service/src/main/java/com/justpickup/userservice/domain/user/entity/StoreOwner.java b/user-service/src/main/java/com/justpickup/userservice/domain/user/entity/StoreOwner.java index 94510df..644d493 100644 --- a/user-service/src/main/java/com/justpickup/userservice/domain/user/entity/StoreOwner.java +++ b/user-service/src/main/java/com/justpickup/userservice/domain/user/entity/StoreOwner.java @@ -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; + } } diff --git a/user-service/src/main/java/com/justpickup/userservice/domain/user/entity/User.java b/user-service/src/main/java/com/justpickup/userservice/domain/user/entity/User.java index 26b8a8b..a5f9b4c 100644 --- a/user-service/src/main/java/com/justpickup/userservice/domain/user/entity/User.java +++ b/user-service/src/main/java/com/justpickup/userservice/domain/user/entity/User.java @@ -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; + } } diff --git a/user-service/src/main/java/com/justpickup/userservice/domain/user/repository/UserRepository.java b/user-service/src/main/java/com/justpickup/userservice/domain/user/repository/UserRepository.java new file mode 100644 index 0000000..4b8113c --- /dev/null +++ b/user-service/src/main/java/com/justpickup/userservice/domain/user/repository/UserRepository.java @@ -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 { + Optional findByEmail(String username); +} diff --git a/user-service/src/main/java/com/justpickup/userservice/domain/user/service/UserService.java b/user-service/src/main/java/com/justpickup/userservice/domain/user/service/UserService.java index b246962..1b41662 100644 --- a/user-service/src/main/java/com/justpickup/userservice/domain/user/service/UserService.java +++ b/user-service/src/main/java/com/justpickup/userservice/domain/user/service/UserService.java @@ -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); } diff --git a/user-service/src/main/java/com/justpickup/userservice/domain/user/service/UserServiceImpl.java b/user-service/src/main/java/com/justpickup/userservice/domain/user/service/UserServiceImpl.java index 9ddb80a..9e8f561 100644 --- a/user-service/src/main/java/com/justpickup/userservice/domain/user/service/UserServiceImpl.java +++ b/user-service/src/main/java/com/justpickup/userservice/domain/user/service/UserServiceImpl.java @@ -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 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); + } }