source: sources/app/src/main/java/parkup/services/RegistriranParkiracService.java@ 9ff45d6

Last change on this file since 9ff45d6 was 97fbc67, checked in by andrejTavchioski <andrej.tavchioski@…>, 3 years ago

fixed deleteVraboten and deleteRegistriranParkirac

  • Property mode set to 100644
File size: 6.8 KB
Line 
1package parkup.services;
2
3import java.time.LocalDateTime;
4import java.util.List;
5import java.util.Objects;
6import java.util.Optional;
7import java.util.UUID;
8import javax.transaction.Transactional;
9import org.springframework.beans.factory.annotation.Autowired;
10import org.springframework.data.jpa.repository.Modifying;
11import org.springframework.security.core.userdetails.UserDetails;
12import org.springframework.security.core.userdetails.UserDetailsService;
13import org.springframework.security.core.userdetails.UsernameNotFoundException;
14import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
15import org.springframework.stereotype.Service;
16import parkup.configs.email.EmailValidator;
17import parkup.configs.token.ConfirmationTokenRP;
18import parkup.configs.token.ConfirmationTokenService;
19import parkup.data.Tablicka;
20import parkup.entities.RegistriranParkirac;
21import parkup.repositories.RegistriranParkiracRepository;
22
23@Service
24public class RegistriranParkiracService implements UserDetailsService {
25 private final RegistriranParkiracRepository registriranParkiracRepository;
26 private final BCryptPasswordEncoder bCryptPasswordEncoder;
27 private final ConfirmationTokenService confirmationTokenService;
28 private EmailValidator emailValidator;
29
30 @Autowired
31 public RegistriranParkiracService(RegistriranParkiracRepository registriranParkiracRepository, BCryptPasswordEncoder bCryptPasswordEncoder, ConfirmationTokenService confirmationTokenService) {
32 this.registriranParkiracRepository = registriranParkiracRepository;
33 this.bCryptPasswordEncoder = bCryptPasswordEncoder;
34 this.confirmationTokenService = confirmationTokenService;
35 }
36
37 public List<RegistriranParkirac> getRegPark() {
38 return this.registriranParkiracRepository.findAll();
39 }
40
41 public Optional<RegistriranParkirac> addRegPark(RegistriranParkirac regPark) {
42 Optional<RegistriranParkirac> regParkOpt = this.registriranParkiracRepository.findRegistriranParkiracByEmail(regPark.getEmail());
43 if (regParkOpt.isPresent()) {
44 throw new IllegalStateException("Email already taken, try adding a registriranParkirac with a different valid email address");
45 } else {
46 if (regPark.getEmail() != null && regPark.getEmail().length() > 1 && regPark.getEmail().contains("@")) {
47 //System.out.println(regPark);
48 this.registriranParkiracRepository.save(regPark);
49 }
50 else {
51 throw new IllegalStateException("email not valid");
52 }
53 }
54 return regParkOpt;
55 }
56
57 @Transactional
58 public RegistriranParkirac updateRegPark(int regParkId, String name, String surname, String mobile, String email,List<Tablicka> regTablicki) {
59 Optional<RegistriranParkirac> regParkOpt = Optional.ofNullable(this.registriranParkiracRepository.findByRegParkId(regParkId));
60 if (regParkOpt.isPresent()) {
61 RegistriranParkirac regParkNov = this.registriranParkiracRepository.findByRegParkId(regParkId);
62 if (email != null && email.length() > 1 && email.contains("@") && !Objects.equals(regParkNov.getEmail(), email)) {
63 Optional<RegistriranParkirac> userOpt1 = this.registriranParkiracRepository.findRegistriranParkiracByEmail(email);
64 if (userOpt1.isPresent()) {
65 throw new IllegalStateException("email taken");
66 }
67
68 regParkNov.setEmail(email);
69 }
70
71 if (name != null && name.length() > 1 && !Objects.equals(regParkNov.getName(), name)) {
72 regParkNov.setName(name);
73 }
74
75 if (surname != null && surname.length() > 1 && !Objects.equals(regParkNov.getSurname(), surname)) {
76 regParkNov.setSurname(surname);
77 }
78
79 if (mobile != null && mobile.length() > 0 && !Objects.equals(regParkNov.getMobile(), mobile)) {
80 regParkNov.setMobile(mobile);
81 }
82 regParkNov.setRegTablicki(regTablicki);
83 return regParkNov;
84 }else{
85 throw new IllegalStateException("RegistriranParkirac doesn't exist, therefore can't be updated");
86 }
87 }
88
89 @Transactional
90 @Modifying
91 public Optional<RegistriranParkirac> deleteRegPark(int regParkId) {
92 Optional<RegistriranParkirac> regPark = Optional.ofNullable(this.registriranParkiracRepository.findByRegParkId(regParkId));
93 if (regPark.isPresent()) {
94 //TODO da povikamo metod od ConfirmationTokenService za brisenje na ConfirmationTokenRP *DONE
95 //TODO da se izbrisat tablicki i da ne se dupliraat istite tablicki pri update ili add na nov registriranParkirac
96 this.confirmationTokenService.deleteByRegistriranParkirac_RegParkId(regParkId);
97 this.registriranParkiracRepository.deleteByRegParkId(regParkId);
98 } else {
99 throw new IllegalStateException("RegistriranParkirac doesn't exist, therefore can't be deleted");
100 }
101 return regPark;
102 }
103
104 public RegistriranParkirac findById(int regParkId) {
105 Optional<RegistriranParkirac> regPark = Optional.ofNullable(this.registriranParkiracRepository.findByRegParkId(regParkId));
106 return regPark.orElse(null);
107 }
108
109 @Override
110 public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
111 return registriranParkiracRepository.findRegistriranParkiracByEmail(email)
112 .orElseThrow(() ->
113 new UsernameNotFoundException("Email not found"));
114
115 }
116
117 public String signUpRegistriranParkirac(RegistriranParkirac registriranParkirac){
118 boolean registriranParkiracExists = registriranParkiracRepository
119 .findRegistriranParkiracByEmail(registriranParkirac.getEmail())
120 .isPresent();
121 if(registriranParkiracExists){
122 // TODO check if attributes are the same and
123 // TODO if email not confirmed send confirmation email
124
125 throw new IllegalStateException("Email already taken");
126 }
127
128 String encodedPassword = bCryptPasswordEncoder
129 .encode(registriranParkirac.getPassword());
130
131 registriranParkirac.setPassword(encodedPassword);
132
133 registriranParkiracRepository.save(registriranParkirac);
134
135 // TODO: Send confirmation token
136
137 String token = UUID.randomUUID().toString();
138 ConfirmationTokenRP confirmationTokenRP = new ConfirmationTokenRP(
139 token,
140 LocalDateTime.now(),
141 LocalDateTime.now().plusMinutes(15),
142 registriranParkirac
143 );
144
145 confirmationTokenService.saveConfirmationTokenRP(confirmationTokenRP);
146
147 // TODO: SEND EMAIL
148
149 return token;
150 }
151
152 public int enableRegistriranParkirac(String email) {
153 return registriranParkiracRepository.enableRegistriranParkirac(email);
154 }
155}
Note: See TracBrowser for help on using the repository browser.