[ce6ad22] | 1 | package parkup.services;
|
---|
| 2 |
|
---|
| 3 | import java.util.List;
|
---|
| 4 | import java.util.Objects;
|
---|
| 5 | import java.util.Optional;
|
---|
| 6 | import java.util.UUID;
|
---|
| 7 | import javax.transaction.Transactional;
|
---|
| 8 | import org.springframework.beans.factory.annotation.Autowired;
|
---|
| 9 | import org.springframework.security.core.userdetails.UserDetails;
|
---|
| 10 | import org.springframework.security.core.userdetails.UserDetailsService;
|
---|
| 11 | import org.springframework.security.core.userdetails.UsernameNotFoundException;
|
---|
| 12 | import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
---|
| 13 | import org.springframework.stereotype.Service;
|
---|
| 14 | import parkup.configs.email.EmailValidator;
|
---|
| 15 | import parkup.configs.token.ConfirmationTokenService;
|
---|
| 16 | import parkup.entities.Administrator;
|
---|
| 17 | import parkup.repositories.AdministratorRepository;
|
---|
| 18 |
|
---|
| 19 | @Service
|
---|
| 20 | public class AdministratorService implements UserDetailsService {
|
---|
| 21 | private final AdministratorRepository administratorRepository;
|
---|
| 22 | private final BCryptPasswordEncoder bCryptPasswordEncoder;
|
---|
| 23 | private final ConfirmationTokenService confirmationTokenService;
|
---|
| 24 | private EmailValidator emailValidator;
|
---|
| 25 |
|
---|
| 26 | @Autowired
|
---|
| 27 | public AdministratorService(AdministratorRepository administratorRepository, BCryptPasswordEncoder bCryptPasswordEncoder, ConfirmationTokenService confirmationTokenService) {
|
---|
| 28 | this.administratorRepository = administratorRepository;
|
---|
| 29 | this.bCryptPasswordEncoder = bCryptPasswordEncoder;
|
---|
| 30 | this.confirmationTokenService = confirmationTokenService;
|
---|
| 31 | }
|
---|
| 32 |
|
---|
| 33 | public List<Administrator> getAllAdministrators() {
|
---|
| 34 | return this.administratorRepository.findAll();
|
---|
| 35 | }
|
---|
| 36 |
|
---|
| 37 | public Administrator findById(int administratorId) {
|
---|
| 38 | Optional<Administrator> administrator = Optional.ofNullable(this.administratorRepository.findByAdministratorId(administratorId));
|
---|
| 39 | return administrator.orElse(null);
|
---|
| 40 | }
|
---|
| 41 |
|
---|
[97fbc67] | 42 | public Optional<Administrator> addAdministrator(Administrator administrator) {
|
---|
[ce6ad22] | 43 | Optional<Administrator> administratorOpt = this.administratorRepository.findAdministratorByEmail(administrator.getEmail());
|
---|
| 44 | if (administratorOpt.isPresent()) {
|
---|
| 45 | throw new IllegalStateException("Email already taken, try adding an administrator with a different valid email address");
|
---|
| 46 | } else {
|
---|
[97fbc67] | 47 | if (administrator.getEmail() != null && administrator.getEmail().length() > 1 && administrator.getEmail().contains("@")) {
|
---|
| 48 | //System.out.println(regPark);
|
---|
| 49 | this.administratorRepository.save(administrator);
|
---|
| 50 | }
|
---|
| 51 | else {
|
---|
| 52 | throw new IllegalStateException("email not valid");
|
---|
| 53 | }
|
---|
[ce6ad22] | 54 | }
|
---|
[97fbc67] | 55 | return administratorOpt;
|
---|
[ce6ad22] | 56 | }
|
---|
| 57 |
|
---|
| 58 | @Transactional
|
---|
[97fbc67] | 59 | public Administrator updateAdministrator(int administratorId, String firstName, String lastName, String mobile, String email) {
|
---|
[ce6ad22] | 60 | Optional<Administrator> administratorOpt = Optional.ofNullable(this.administratorRepository.findByAdministratorId(administratorId));
|
---|
| 61 | if (administratorOpt.isPresent()) {
|
---|
| 62 | Administrator administratorNov = this.administratorRepository.findByAdministratorId(administratorId);
|
---|
| 63 | if (email != null && email.length() > 1 && email.contains("@") && !Objects.equals(administratorNov.getEmail(), email)) {
|
---|
| 64 | Optional<Administrator> userOpt1 = this.administratorRepository.findAdministratorByEmail(email);
|
---|
| 65 | if (userOpt1.isPresent()) {
|
---|
| 66 | throw new IllegalStateException("email taken");
|
---|
| 67 | }
|
---|
| 68 | administratorNov.setEmail(email);
|
---|
[97fbc67] | 69 | }else{
|
---|
| 70 | throw new IllegalStateException("email not valid");
|
---|
[ce6ad22] | 71 | }
|
---|
| 72 |
|
---|
| 73 | if (firstName != null && firstName.length() > 1 && !Objects.equals(administratorNov.getFirstName(), firstName)) {
|
---|
| 74 | administratorNov.setFirstName(firstName);
|
---|
| 75 | }
|
---|
| 76 |
|
---|
| 77 | if (lastName != null && lastName.length() > 1 && !Objects.equals(administratorNov.getLastName(), lastName)) {
|
---|
| 78 | administratorNov.setLastName(lastName);
|
---|
| 79 | }
|
---|
| 80 |
|
---|
| 81 | if (mobile != null && mobile.length() > 0 && !Objects.equals(administratorNov.getMobile(), mobile)) {
|
---|
| 82 | administratorNov.setMobile(mobile);
|
---|
| 83 | }
|
---|
[97fbc67] | 84 | return administratorNov;
|
---|
[ce6ad22] | 85 | }
|
---|
[97fbc67] | 86 | else {
|
---|
| 87 | throw new IllegalStateException("Administrator doesn't exist, therefore can't be updated");
|
---|
| 88 | }
|
---|
| 89 |
|
---|
[ce6ad22] | 90 | }
|
---|
| 91 |
|
---|
[97fbc67] | 92 | public Optional<Administrator> deleteAdministrator(int administratorId) {
|
---|
[ce6ad22] | 93 | Optional<Administrator> administratorOpt = Optional.ofNullable(this.administratorRepository.findByAdministratorId(administratorId));
|
---|
| 94 | if (administratorOpt.isPresent()) {
|
---|
| 95 | this.administratorRepository.deleteByAdministratorId(administratorId);
|
---|
| 96 | } else {
|
---|
| 97 | throw new IllegalStateException("Administrator doesn't exist, therefore can't be deleted");
|
---|
| 98 | }
|
---|
[97fbc67] | 99 | return administratorOpt;
|
---|
[ce6ad22] | 100 | }
|
---|
| 101 |
|
---|
| 102 | @Override
|
---|
| 103 | public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
|
---|
| 104 | return administratorRepository.findAdministratorByEmail(email)
|
---|
| 105 | .orElseThrow(() ->
|
---|
| 106 | new UsernameNotFoundException("Email not found"));
|
---|
| 107 |
|
---|
| 108 | }
|
---|
| 109 |
|
---|
| 110 | //public String register(RegistrationRequest request) {
|
---|
| 111 | // boolean isValidEmail = emailValidator.test(request.getEmail());
|
---|
| 112 | // if (!isValidEmail){
|
---|
| 113 | // throw new IllegalStateException("Email not valid");
|
---|
| 114 | // }
|
---|
| 115 | // return "it works";
|
---|
| 116 | //}
|
---|
| 117 |
|
---|
| 118 | public String signUpAdministrator(Administrator administrator){
|
---|
| 119 | boolean administratorExists = administratorRepository
|
---|
| 120 | .findAdministratorByEmail(administrator.getEmail())
|
---|
| 121 | .isPresent();
|
---|
| 122 | if(administratorExists){
|
---|
| 123 | // TODO check if attributes are the same and
|
---|
| 124 | // TODO if email not confirmed send confirmation email
|
---|
| 125 |
|
---|
| 126 | throw new IllegalStateException("Email already taken");
|
---|
| 127 | }
|
---|
| 128 |
|
---|
| 129 | String encodedPassword = bCryptPasswordEncoder
|
---|
| 130 | .encode(administrator.getPassword());
|
---|
| 131 |
|
---|
| 132 | administrator.setPassword(encodedPassword);
|
---|
| 133 |
|
---|
| 134 | administratorRepository.save(administrator);
|
---|
| 135 |
|
---|
| 136 | // TODO: Send confirmation token
|
---|
| 137 |
|
---|
| 138 | String token = UUID.randomUUID().toString();
|
---|
[97fbc67] | 139 | // ConfirmationTokenRP confirmationToken = new ConfirmationTokenRP(
|
---|
| 140 | // token,
|
---|
| 141 | // LocalDateTime.now(),
|
---|
| 142 | // LocalDateTime.now().plusMinutes(15),
|
---|
| 143 | // administrator
|
---|
| 144 | // );
|
---|
| 145 |
|
---|
| 146 | //confirmationTokenService.saveConfirmationToken(confirmationToken);
|
---|
[ce6ad22] | 147 |
|
---|
| 148 | // TODO: SEND EMAIL
|
---|
| 149 |
|
---|
| 150 | return token;
|
---|
| 151 | }
|
---|
| 152 |
|
---|
| 153 | public int enableAdministrator(String email) {
|
---|
| 154 | return administratorRepository.enableAdministrator(email);
|
---|
| 155 | }
|
---|
| 156 | } |
---|