source: src/main/java/com/example/rezevirajmasa/demo/service/impl/UserServiceImpl.java

main
Last change on this file was b67dfd3, checked in by Aleksandar Panovski <apano77@…>, 13 days ago

Normalization needed to continue, till here done

  • Property mode set to 100644
File size: 4.0 KB
Line 
1package com.example.rezevirajmasa.demo.service.impl;
2
3import com.example.rezevirajmasa.demo.dto.CredentialsDto;
4import com.example.rezevirajmasa.demo.dto.SignUpDto;
5import com.example.rezevirajmasa.demo.dto.UserDto;
6import com.example.rezevirajmasa.demo.mappers.UserMapper;
7import com.example.rezevirajmasa.demo.mappers.UserMapperImpl;
8import com.example.rezevirajmasa.demo.model.MembershipLevel;
9import com.example.rezevirajmasa.demo.model.Role;
10import com.example.rezevirajmasa.demo.model.User;
11import com.example.rezevirajmasa.demo.model.exceptions.AppException;
12import com.example.rezevirajmasa.demo.repository.UserRepository;
13import com.example.rezevirajmasa.demo.service.UserService;
14import lombok.RequiredArgsConstructor;
15import org.mapstruct.control.MappingControl;
16import org.openqa.selenium.InvalidArgumentException;
17import org.springframework.http.HttpStatus;
18import org.springframework.security.core.userdetails.UserDetails;
19import org.springframework.security.core.userdetails.UserDetailsService;
20import org.springframework.security.core.userdetails.UsernameNotFoundException;
21import org.springframework.security.crypto.password.PasswordEncoder;
22import org.springframework.stereotype.Service;
23import java.nio.CharBuffer;
24import java.sql.Date;
25import java.time.LocalDate;
26import java.util.Optional;
27
28@RequiredArgsConstructor
29@Service
30public class UserServiceImpl implements UserService, UserDetailsService {
31 private final UserRepository userRepository;
32 private final UserMapperImpl userMapper;
33 private final PasswordEncoder passwordEncoder;
34 @Override
35 public UserDto findByEmail(String email) {
36 User user = userRepository.findByEmail(email).orElseThrow(() -> new AppException(("Unknown user"), HttpStatus.NOT_FOUND));
37 return userMapper.toUserDto(user);
38 }
39
40 @Override
41 public User findByMail(String email) {
42 return userRepository.findByEmail(email).orElseThrow(() -> new AppException(("Unknown user"), HttpStatus.NOT_FOUND));
43 }
44
45 public UserDto login(CredentialsDto credentialsDto) {
46 User user = userRepository.findByEmail(credentialsDto.getEmail())
47 .orElseThrow(() -> new AppException("Unknown user", HttpStatus.NOT_FOUND));
48
49 if(passwordEncoder.matches(CharBuffer.wrap(credentialsDto.getPassword()), user.getPassword())) {
50 return userMapper.toUserDto(user);
51 }
52
53 throw new AppException("Invalid password", HttpStatus.BAD_REQUEST);
54 }
55
56 public UserDto register(SignUpDto userDto) {
57 Optional<User> optionalUser = userRepository.findByEmail(userDto.getEmail());
58 if(optionalUser.isPresent()) {
59 throw new AppException("Login already exists", HttpStatus.BAD_REQUEST);
60 }
61
62 User user = userMapper.signUpToUser(userDto);
63
64 user.setPassword(passwordEncoder.encode(CharBuffer.wrap(userDto.getPassword())));
65
66 user.setFirstName(userDto.getFirstName());
67 user.setLastName(userDto.getLastName());
68 user.setAddress(userDto.getAddress());
69 user.setPhone(userDto.getPhone());
70 user.setMembershipLevel(MembershipLevel.valueOf(userDto.getMembershipLevel()));
71 user.setRegistrationDate(Date.valueOf(LocalDate.now()));
72 user.setRole(Role.ROLE_USER);
73
74 User savedUser = userRepository.save(user);
75
76 return userMapper.toUserDto(savedUser);
77 }
78
79 @Override
80 public User findUserById(Long userId) {
81 return userRepository.findById(userId).orElseThrow(()->new InvalidArgumentException("Invalid user Id"));
82 }
83
84 @Override
85 public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
86 User user = userRepository.findByEmail(email)
87 .orElseThrow(()-> new UsernameNotFoundException("User not found"));
88 return org.springframework.security.core.userdetails.User
89 .withUsername(user.getEmail())
90 .password(user.getPassword())
91 .authorities(user.getRole().name()) // adjust if needed
92 .build();
93 }
94}
Note: See TracBrowser for help on using the repository browser.