Ignore:
Timestamp:
12/24/21 23:31:23 (3 years ago)
Author:
andrejTavchioski <andrej.tavchioski@…>
Branches:
master
Children:
9dd526f
Parents:
8588fcb
Message:

Fixed some functionalities related to parkingSessions and parkingZones

Location:
sources/app/src/main/java/parkup/services
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • sources/app/src/main/java/parkup/services/AdministratorService.java

    r8588fcb r9ff45d6  
    137137
    138138        String token = UUID.randomUUID().toString();
    139 <<<<<<< HEAD
    140 //        ConfirmationTokenRP confirmationToken = new ConfirmationTokenRP(
    141 //                token,
    142 //                LocalDateTime.now(),
    143 //                LocalDateTime.now().plusMinutes(15),
    144 //                administrator
    145 //        );
    146 =======
    147         //ConfirmationTokenRP confirmationToken = new ConfirmationTokenRP(
    148         //        token,
    149         //        LocalDateTime.now(),
    150         //        LocalDateTime.now().plusMinutes(15),
    151         //        administrator
    152         //);
    153 >>>>>>> 9504a097ce80831ea7e7130dff7215d5fbf8e939
    154139
    155         //confirmationTokenService.saveConfirmationToken(confirmationToken);
    156140
    157141        // TODO: SEND EMAIL
  • sources/app/src/main/java/parkup/services/ParkingSessionService.java

    r8588fcb r9ff45d6  
    44import org.springframework.stereotype.Service;
    55import parkup.data.Tablicka;
     6import parkup.data.enumarations.SessionStatus;
    67import parkup.entities.ParkingSession;
     8import parkup.entities.ParkingSpace;
     9import parkup.entities.ParkingZone;
    710import parkup.repositories.ParkingSessionRepository;
     11import parkup.repositories.ParkingSpaceRepository;
     12import parkup.repositories.ParkingZoneRepository;
     13import parkup.repositories.TablickaRepository;
    814
    915import javax.transaction.Transactional;
     16import java.time.Duration;
     17import java.time.LocalDateTime;
    1018import java.util.List;
    11 import java.util.Objects;
    1219import java.util.Optional;
     20import java.util.stream.Collectors;
    1321
    1422@Service
    1523public class ParkingSessionService {
    1624    private final ParkingSessionRepository parkingSessionRepository;
     25    private final ParkingZoneRepository parkingZoneRepository;
     26    private final ParkingSpaceRepository parkingSpaceRepository;
     27    private final TablickaRepository tablickaRepository;
    1728
    1829    @Autowired
    19     public ParkingSessionService(ParkingSessionRepository parkingSessionRepository) {
     30    public ParkingSessionService(ParkingSessionRepository parkingSessionRepository, ParkingZoneRepository parkingZoneRepository, ParkingSpaceRepository parkingSpaceRepository, TablickaRepository tablickaRepository) {
    2031        this.parkingSessionRepository = parkingSessionRepository;
     32        this.parkingZoneRepository = parkingZoneRepository;
     33        this.parkingSpaceRepository = parkingSpaceRepository;
     34        this.tablickaRepository = tablickaRepository;
    2135    }
    2236
     37    //TODO add getMethod for paid sessions or all sessions
     38
    2339    public List<ParkingSession> getAllParkingSessions() {
    24         return parkingSessionRepository.findAll();
     40        //Get all sessions that arent paid
     41        return parkingSessionRepository.findAll().stream()
     42                .filter(s->!s.getStatus().equals(SessionStatus.ENDED_PAID))
     43                .collect(Collectors.toList());
    2544    }
    2645
     
    3049    }
    3150
    32     @Transactional
     51   /* @Transactional
    3352    public void updateParkingSession(int parkingSessionId, String timeStart, String timeEnd, Tablicka tablicka) {
    3453        Optional<ParkingSession> parkingSessionOpt = Optional.ofNullable(parkingSessionRepository.findByPssId(parkingSessionId));
     
    4867            throw new IllegalStateException("The ParkingSession does not exist");
    4968        }
    50     }
    51 
     69    }*/
     70    @Transactional
    5271    public Optional<ParkingSession> deleteParkingSession(int parkingSessionId) {
    5372        Optional<ParkingSession> parkingSessionOpt = Optional.ofNullable(parkingSessionRepository.findByPssId(parkingSessionId));
    5473        if (parkingSessionOpt.isPresent()) {
     74            parkingSessionOpt.get().getParkingSpace().setTaken(false);
    5575            parkingSessionRepository.deleteByPssId(parkingSessionId);
    5676            return parkingSessionOpt;
     
    6080    }
    6181
    62     public Optional<ParkingSession> addParkingSession(ParkingSession parkingSession) {
    63         Optional<ParkingSession> parkingSessionOpt = Optional.ofNullable(parkingSessionRepository.findByPssId(parkingSession.getPssId()));
    64         if (parkingSessionOpt.isPresent()) {
    65             throw new IllegalStateException("ID already taken, ParkingSession cannot be added");
    66         } else {
    67             System.out.println(parkingSession);
    68             parkingSessionRepository.save(parkingSession);
    69             return parkingSessionOpt;
     82    @Transactional
     83    public Optional<ParkingSession> startParkingSession(String tablica, int parkingZoneId) {
     84        ParkingZone parkingZone = parkingZoneRepository.findByPzId(parkingZoneId);
     85        Tablicka tablicka = tablickaRepository.findByTablica(tablica);
     86        if(tablicka==null) {
     87            tablickaRepository.save(new Tablicka(tablica));
    7088        }
     89        tablicka=tablickaRepository.findByTablica(tablica);
     90        ParkingSession sessionToAdd = new ParkingSession(tablicka);
     91        sessionToAdd.setParkingZone(parkingZone);
     92        parkingSessionRepository.save(sessionToAdd);
     93        return Optional.of(sessionToAdd);
     94
     95    }
     96
     97//    public void executePayment(int id){
     98//        ParkingSession session = parkingSessionRepository.findByPssId(id);
     99//        if(session==null){
     100//            throw new IllegalStateException("No such session exists");
     101//        }
     102//        else if(session.getStatus()== SessionStatus.ENDED_UNPAID){
     103//            throw new IllegalStateException("Cannot execute payment on an ended session");
     104//        }
     105//        session.setStatus(SessionStatus.ENDED_PAID);
     106//    }
     107
     108    public int calculatePayment(int id){
     109        ParkingSession session = parkingSessionRepository.findByPssId(id);
     110        if(session==null){
     111            throw new IllegalStateException("No such session exists");
     112        }
     113        else if(session.getStatus()== SessionStatus.ENDED_UNPAID){
     114            throw new IllegalStateException("Cannot calculate payment on an ended session");
     115        }
     116        int price = session.getParkingZone().getPrice();
     117        return (int) (Math.ceil(Duration.between(session.getTimeEnd(),session.getTimeStart()).toMinutes()/60.0)*price);
     118    }
     119    @Transactional
     120    public ParkingSession verifyParkingSession(int id,String parkingSpaceName,int parkingZoneId){
     121        ParkingSession parkingSession = parkingSessionRepository.findByPssId(id);
     122        ParkingZone parkingZone = parkingZoneRepository.findByPzId(parkingZoneId);
     123        if(parkingSession==null){
     124            throw new IllegalStateException("No such session exists");
     125        }
     126        else if(parkingSession.getStatus()==SessionStatus.STARTED_VERIFIED){
     127            throw new IllegalStateException("The session you are trying to verify has already been verified");
     128        }
     129//        else if(parkingSession.getStatus()!=SessionStatus.STARTED_)
     130        if(!parkingZone.getParkingSpaces().contains(parkingSpaceRepository.findByPsName(parkingSpaceName))){
     131            throw new IllegalStateException("Ivalid parking space inserted. Type in a new parking space or let the admin know that they should add the parking space to this zone");
     132        }
     133        parkingSession.setStatus(SessionStatus.STARTED_VERIFIED);
     134        ParkingSpace parkingSpace = parkingZoneRepository.findByPzId(parkingZoneId).getParkingSpaces().stream().filter(ps->ps.getPsName().equals(parkingSpaceName)).findFirst().get();
     135        parkingSpace.setTaken(true);
     136        parkingSession.setParkingSpace(parkingSpace);
     137        return parkingSession;
     138    }
     139    @Transactional
     140    public ParkingSession endParkingSession(int id){
     141        ParkingSession parkingSession = parkingSessionRepository.findByPssId(id);
     142        if(parkingSession==null){
     143            throw new IllegalStateException("No such session exists");
     144        }
     145        else if(parkingSession.getStatus()==SessionStatus.ENDED_UNPAID){
     146            throw new IllegalStateException("The session you are trying to end has already been ended");
     147        }
     148        parkingSession.setStatus(SessionStatus.ENDED_UNPAID);
     149        parkingSession.setTimeEnd(LocalDateTime.now());
     150        return parkingSession;
     151    }
     152    @Transactional
     153    public boolean payParkingSession(int id,String date){
     154        ParkingSession parkingSession = parkingSessionRepository.findByPssId(id);
     155        String expMonthString=date.split("/")[0];
     156        String expYearString=date.split("/")[1];
     157        if(expMonthString.startsWith("0"))
     158            expMonthString=expYearString.substring(1);
     159        if(expYearString.startsWith("0"))
     160            expYearString=expYearString.substring(1);
     161        int expMonth=Integer.parseInt(expMonthString);
     162        int expYear=Integer.parseInt(expYearString);
     163        int month = LocalDateTime.now().getMonth().getValue();
     164        int year = LocalDateTime.now().getYear()%100;
     165        if(year>expYear){
     166            throw new IllegalStateException("Your card has expired or the date that you have entered is incorrect");
     167        }
     168        else if(year==expYear){
     169            if(month>=expMonth)
     170                throw new IllegalStateException("Your card has expired or the date that you have entered is incorrect");
     171        }
     172        if(parkingSession==null){
     173            throw new IllegalStateException("No such session exists");
     174        }
     175        else if(parkingSession.getStatus()==SessionStatus.ENDED_PAID){
     176            throw new IllegalStateException("The session has already been paid for");
     177        }
     178        parkingSession.setStatus(SessionStatus.ENDED_PAID);
     179        parkingSession.getParkingSpace().setTaken(false);
     180        return true;
    71181    }
    72182}
  • sources/app/src/main/java/parkup/services/ParkingSpaceService.java

    r8588fcb r9ff45d6  
    55import parkup.entities.ParkingSpace;
    66import parkup.repositories.ParkingSpaceRepository;
     7import parkup.repositories.ParkingZoneRepository;
    78
    89import javax.transaction.Transactional;
     
    1011import java.util.Objects;
    1112import java.util.Optional;
     13import java.util.stream.Collectors;
    1214
    1315@Service
    1416public class ParkingSpaceService {
    1517    private final ParkingSpaceRepository parkingSpaceRepository;
     18    private final ParkingZoneRepository parkingZoneRepository;
    1619
    1720    @Autowired
    18     public ParkingSpaceService(ParkingSpaceRepository parkingSpaceRepository) {
     21    public ParkingSpaceService(ParkingSpaceRepository parkingSpaceRepository, ParkingZoneRepository parkingZoneRepository) {
    1922        this.parkingSpaceRepository = parkingSpaceRepository;
     23        this.parkingZoneRepository = parkingZoneRepository;
    2024    }
    2125
     
    2933    }
    3034
    31     public Optional<ParkingSpace> addParkingSpace(ParkingSpace parkingSpace) {
    32         Optional<ParkingSpace> parkingSpaceOpt = Optional.ofNullable(parkingSpaceRepository.findByPsName(parkingSpace.getPsName()));
    33         if (parkingSpaceOpt.isPresent()) {
    34             throw new IllegalStateException("Name already taken, try adding a ParkingZone with a different name");
     35    public Optional<ParkingSpace> addParkingSpace(ParkingSpace parkingSpace,int parkingZoneId) {
     36        List<String> names = parkingZoneRepository.findByPzId(parkingZoneId).getParkingSpaces().stream().map(ParkingSpace::getPsName).collect(Collectors.toList());
     37        if (names.contains(parkingSpace.getPsName())) {
     38            throw new IllegalStateException("Name already taken, try adding a ParkingSpace with a different name");
    3539        } else {
    3640            System.out.println(parkingSpace);
    3741            parkingSpaceRepository.save(parkingSpace);
    3842        }
    39         return parkingSpaceOpt;
     43        return Optional.of(parkingSpace);
    4044    }
    4145
    4246    @Transactional
    43     public ParkingSpace updateParkingSpace(int parkingSpaceId, String psName, boolean taken, boolean handicaped, float lat, float lng) {
     47    public ParkingSpace updateParkingSpace(int parkingSpaceId, String psName, boolean taken, float lat, float lng) {
    4448        Optional<ParkingSpace> ParkingSpaceOpt = Optional.ofNullable(parkingSpaceRepository.findByPsId(parkingSpaceId));
    4549        if (ParkingSpaceOpt.isPresent()) {
     
    5862            }
    5963
    60             if (!Objects.equals(ParkingSpaceNov.isHandicaped(), handicaped)) {
    61                 ParkingSpaceNov.setHandicaped(handicaped);
    62             }
    6364
    6465            if(lat!=0 && !Objects.equals(ParkingSpaceNov.getLat(), lat)){
     
    8586        return parkingSpaceOpt;
    8687    }
     88    public long getNumberOfTakenSpaces(){
     89        return parkingSpaceRepository.findAll().stream().filter(ParkingSpace::isTaken).count();
     90    }
    8791}
  • sources/app/src/main/java/parkup/services/ParkingZoneService.java

    r8588fcb r9ff45d6  
    22
    33import org.springframework.beans.factory.annotation.Autowired;
    4 import org.springframework.data.jpa.repository.Modifying;
    54import org.springframework.stereotype.Service;
    65import parkup.data.ParkingZoneLocation;
     6import parkup.entities.ParkingSession;
    77import parkup.entities.ParkingSpace;
    88import parkup.entities.ParkingZone;
    99import parkup.entities.Vraboten;
     10import parkup.repositories.ParkingSessionRepository;
     11import parkup.repositories.ParkingSpaceRepository;
    1012import parkup.repositories.ParkingZoneRepository;
     13import parkup.repositories.VrabotenRepository;
    1114
    1215import javax.transaction.Transactional;
     
    1922public class ParkingZoneService {
    2023    private final ParkingZoneRepository parkingZoneRepository;
     24    private final ParkingSpaceRepository parkingSpaceRepository;
     25    private final VrabotenRepository vrabotenRepository;
     26    private final ParkingSessionRepository parkingSessionRepository;
    2127
    2228    @Autowired
    23     public ParkingZoneService(ParkingZoneRepository parkingZoneRepository) {
     29    public ParkingZoneService(ParkingZoneRepository parkingZoneRepository, ParkingSpaceRepository parkingSpaceRepository, VrabotenRepository vrabotenRepository, ParkingSessionRepository parkingSessionRepository) {
    2430        this.parkingZoneRepository = parkingZoneRepository;
     31        this.parkingSpaceRepository = parkingSpaceRepository;
     32        this.parkingSessionRepository = parkingSessionRepository;
     33        this.vrabotenRepository = vrabotenRepository;
    2534    }
    2635
     
    3746        List<ParkingZone> parkingZones = this.parkingZoneRepository.findAll();
    3847        List<String> parkingZonesNames = new ArrayList<>();
    39         for (ParkingZone pz : parkingZones){
     48        for (ParkingZone pz : parkingZones) {
    4049            parkingZonesNames.add(pz.getPzName());
    4150        }
     
    6574    }
    6675
    67 <<<<<<< HEAD
    6876    //TODO proveri dali ima odgovorni i dokolku ima dali postojat vo bazata
    6977    @Transactional
    70     public ParkingZone updateParkingZone(int parkingZoneId, String pzName, int price, int capacity,
     78    public ParkingZone updateParkingZone(int parkingZoneId, String pzName, int price,
    7179                                         String location, int from, int to, String color,
    72                                          List<ParkingSpace> parkingSpaces, ParkingZoneLocation parkingZoneLocation, List<Vraboten> odgovorniLica) {
     80                                         List<ParkingSpace> parkingSpaces, ParkingZoneLocation parkingZoneLocation, List<Integer> odgovorniLica) {
    7381
    74         for(ParkingSpace space:parkingSpaces){
    75             System.out.println(space);
    76         }
    77         for(Vraboten v : odgovorniLica){
    78             System.out.println(v.toString());
    79         }
    80 =======
    81     //TODO prati niza od objekti ParkingSpaces i prati objekt ParkingZoneLocation
    82     @Transactional
    83     public ParkingZone updateParkingZone(int parkingZoneId, String pzName, int price, int capacity,
    84                                          String location, int from, int to, String color,
    85                                          List<ParkingSpace> parkingSpaces, ParkingZoneLocation parkingZoneLocation) {
    86 >>>>>>> 9504a097ce80831ea7e7130dff7215d5fbf8e939
    87         Optional<ParkingZone> parkingZoneOpt = Optional.ofNullable(parkingZoneRepository.findByPzId(parkingZoneId));
    88         if (parkingZoneOpt.isPresent()) {
     82        //TODO prati niza od objekti ParkingSpaces i prati objekt ParkingZoneLocation
     83
    8984            ParkingZone parkingZoneNov = parkingZoneRepository.findByPzId(parkingZoneId);
    90             if (pzName != null && pzName.length() > 1 && !Objects.equals(parkingZoneNov.getPzName(), pzName)) {
    91                 Optional<ParkingZone> parkingZoneOpt1 = Optional.ofNullable(parkingZoneRepository.findByPzName(pzName));
    92                 if (parkingZoneOpt1.isPresent()) {
    93                     throw new IllegalStateException("There is already a ParkingZone with the same name");
     85            if (parkingZoneNov!=null) {
     86                if (pzName != null && pzName.length() > 1) { ;
     87                    if (parkingZoneNov.getPzName().equals(pzName)&&parkingZoneNov.getId()!=parkingZoneId) {
     88                        throw new IllegalStateException("There is already a ParkingZone with the same name");
     89                    }
     90
     91                    parkingZoneNov.setPzName(pzName);
    9492                }
    9593
    96                 parkingZoneNov.setPzName(pzName);
     94                if (price != 0 && !Objects.equals(parkingZoneNov.getPrice(), price)) {
     95                    parkingZoneNov.setPrice(price);
     96                }
     97
     98                if (location != null && location.length() > 0 && !Objects.equals(parkingZoneNov.getAddress(), location)) {
     99                    parkingZoneNov.setAddress(location);
     100                }
     101
     102                if (from != 0 && !Objects.equals(parkingZoneNov.getFrom(), from)) {
     103                    parkingZoneNov.setFrom(from);
     104                }
     105
     106                if (to != 0 && !Objects.equals(parkingZoneNov.getTo(), to)) {
     107                    parkingZoneNov.setTo(to);
     108                }
     109
     110                if (color != null && color.length() > 0 && !Objects.equals(parkingZoneNov.getColor(), color)) {
     111                    parkingZoneNov.setColor(color);
     112                }
     113
     114                if (parkingZoneLocation != null) {
     115                    parkingZoneNov.setParkingZoneLocation(parkingZoneLocation);
     116                }
     117
     118                if (!parkingSpaces.isEmpty()) {
     119                    ParkingZone parkingZone = parkingZoneRepository.findByPzId(parkingZoneId);
     120//                    for(ParkingSpace space :parkingZone.getParkingSpaces()){
     121//                        if(!parkingSpaces.contains(space)){
     122//                            for(ParkingSession session: parkingSessionRepository.findByParkingZonePzName(pzName)){
     123//                                if(session.getParkingSpace().getPsId()==space.getPsId())
     124//                                    throw new IllegalStateException("Vlegov vo iffot");
     125//                            }
     126//                        }
     127//                    }
     128                    //TODO: treba da se opravi
     129                    parkingZone.setParkingSpaces(null);
     130                    List<ParkingSpace> spacesToAdd = new ArrayList<>(parkingSpaces);
     131                    parkingZone.setParkingSpaces(spacesToAdd);
     132                }
     133                if (!odgovorniLica.isEmpty()) {
     134                    ParkingZone parkingZone = parkingZoneRepository.findByPzId(parkingZoneId);
     135                    for (Integer vrabotenId : odgovorniLica) {
     136                        Vraboten vrabotenToAdd = vrabotenRepository.findByVrabotenId(vrabotenId);
     137                        if(vrabotenToAdd!=null)
     138                        vrabotenToAdd.getParkingZones().add(parkingZone);
     139                    }
     140                }
     141
     142
     143                return parkingZoneNov;
     144            } else {
     145                throw new IllegalStateException("There ParkingZone does not exist");
    97146            }
     147        }
    98148
    99             if (price != 0 && !Objects.equals(parkingZoneNov.getPrice(), price)) {
    100                 parkingZoneNov.setPrice(price);
     149
     150        @Transactional
     151        public Optional<ParkingZone> deleteParkingZone ( int parkingZoneId){
     152            Optional<ParkingZone> parkingZoneOpt = Optional.ofNullable(parkingZoneRepository.findByPzId(parkingZoneId));
     153            if (parkingZoneOpt.isPresent()) {
     154                parkingZoneRepository.deleteByPzId(parkingZoneId);
     155            } else {
     156                throw new IllegalStateException("ParkingZone doesn't exist, therefore can't be deleted");
    101157            }
    102 
    103             if (capacity != 0 && !Objects.equals(parkingZoneNov.getCapacity(), capacity)) {
    104                 parkingZoneNov.setCapacity(capacity);
    105             }
    106 
    107             if (location != null && location.length() > 0 && !Objects.equals(parkingZoneNov.getLocation(), location)) {
    108                 parkingZoneNov.setLocation(location);
    109             }
    110 
    111             if (from != 0 && !Objects.equals(parkingZoneNov.getFrom(), from)) {
    112                 parkingZoneNov.setFrom(from);
    113             }
    114 
    115             if (to != 0 && !Objects.equals(parkingZoneNov.getTo(), to)) {
    116                 parkingZoneNov.setTo(to);
    117             }
    118 
    119             if (color != null && color.length() > 0 && !Objects.equals(parkingZoneNov.getColor(), color)) {
    120                 parkingZoneNov.setColor(color);
    121             }
    122 
    123             if(parkingZoneLocation!=null){
    124                 parkingZoneNov.setParkingZoneLocation(parkingZoneLocation);
    125             }
    126 
    127             if(!parkingSpaces.isEmpty()){
    128                 //TODO kreiraj lista od parkingSpaces, ni gi prakja false isHandicaped i isTaken
    129                 parkingZoneNov.setParkingSpaces(parkingSpaces);
    130             }
    131 <<<<<<< HEAD
    132             if(!odgovorniLica.isEmpty()){
    133 
    134                 parkingZoneNov.setOdgovorniLica(odgovorniLica);
    135             }
    136 =======
    137 >>>>>>> 9504a097ce80831ea7e7130dff7215d5fbf8e939
    138 
    139             return parkingZoneNov;
    140         } else {
    141             throw new IllegalStateException("There ParkingZone does not exist");
     158            return parkingZoneOpt;
    142159        }
    143160    }
    144161
    145     @Transactional
    146     public Optional<ParkingZone> deleteParkingZone(int parkingZoneId) {
    147         Optional<ParkingZone> parkingZoneOpt = Optional.ofNullable(parkingZoneRepository.findByPzId(parkingZoneId));
    148         if (parkingZoneOpt.isPresent()) {
    149             parkingZoneRepository.deleteByPzId(parkingZoneId);
    150         } else {
    151             throw new IllegalStateException("ParkingZone doesn't exist, therefore can't be deleted");
    152         }
    153         return parkingZoneOpt;
    154     }
    155 }
  • sources/app/src/main/java/parkup/services/VrabotenService.java

    r8588fcb r9ff45d6  
    33import java.time.LocalDateTime;
    44import java.util.*;
     5import java.util.stream.Collectors;
    56import javax.transaction.Transactional;
    67import org.springframework.beans.factory.annotation.Autowired;
    7 import org.springframework.data.jpa.repository.Modifying;
    88import org.springframework.security.core.userdetails.UserDetails;
    99import org.springframework.security.core.userdetails.UserDetailsService;
     
    1313import parkup.configs.token.ConfirmationTokenW;
    1414import parkup.configs.token.ConfirmationTokenService;
     15import parkup.data.enumarations.EmployeeStatus;
     16import parkup.entities.ParkingZone;
    1517import parkup.entities.Vraboten;
     18import parkup.repositories.ParkingZoneRepository;
    1619import parkup.repositories.VrabotenRepository;
    1720import parkup.data.VrabotenDemo;
     
    2023public class VrabotenService implements UserDetailsService {
    2124    private final VrabotenRepository vrabotenRepository;
     25    private final ParkingZoneRepository parkingZoneRepository;
    2226    private final BCryptPasswordEncoder bCryptPasswordEncoder;
    2327    private final ConfirmationTokenService confirmationTokenService;
    2428
    2529    @Autowired
    26     public VrabotenService(VrabotenRepository vrabotenRepository, BCryptPasswordEncoder bCryptPasswordEncoder, ConfirmationTokenService confirmationTokenService) {
     30    public VrabotenService(VrabotenRepository vrabotenRepository, ParkingZoneRepository parkingZoneRepository, BCryptPasswordEncoder bCryptPasswordEncoder, ConfirmationTokenService confirmationTokenService) {
    2731        this.vrabotenRepository = vrabotenRepository;
     32        this.parkingZoneRepository = parkingZoneRepository;
    2833        this.bCryptPasswordEncoder = bCryptPasswordEncoder;
    2934        this.confirmationTokenService = confirmationTokenService;
     
    4348        List<VrabotenDemo> vrabotenDemos = new ArrayList<>();
    4449        for (Vraboten v : vraboteni){
    45             VrabotenDemo vd = new VrabotenDemo(v.getFirstName(), v.getLastName(), v.getEmail());
     50            VrabotenDemo vd = new VrabotenDemo(v.getVrabotenId(),v.getFirstName(), v.getLastName(), v.getEmail());
    4651            vrabotenDemos.add(vd);
    4752        }
     
    4954    }
    5055
    51     public Optional<Vraboten> addVraboten(Vraboten vraboten) {
    52         Optional<Vraboten> vrabotenOpt = this.vrabotenRepository.findVrabotenByEmail(vraboten.getEmail());
    53         if (vrabotenOpt.isPresent()) {
    54             throw new IllegalStateException("Email already taken, try adding a vraboten with a different valid email address");
     56    public Optional<Vraboten> addVraboten(String password,String confirmPass,boolean locked, String firstName, String lastName, String mobile, String email, EmployeeStatus status,List<String> parkingZones) {
     57        Optional<Vraboten> vrabotenOpt = this.vrabotenRepository.findVrabotenByEmail(email);
     58        if (vrabotenOpt.isPresent()){
     59            throw new IllegalArgumentException("User with that mail already exists");
     60        }
     61        Vraboten vrabotenToAdd=new Vraboten();
     62        if (email != null && email.length() > 1 && email.contains("@") ) {
     63            vrabotenToAdd.setEmail(email);
    5564        } else {
    56             if (vraboten.getEmail() != null && vraboten.getEmail().length() > 1 && vraboten.getEmail().contains("@")) {
    57                 //System.out.println(vraboten);
    58                 this.vrabotenRepository.save(vraboten);
    59             }
    60             else{
    61                 throw new IllegalStateException("email not valid");
    62             }
    63         }
    64         return vrabotenOpt;
     65            throw new IllegalStateException("email not valid");
     66        }
     67        if(password.equals(confirmPass)){
     68            vrabotenToAdd.setPassword(bCryptPasswordEncoder.encode(password));
     69        }
     70        vrabotenToAdd.setLocked(locked);
     71
     72        if (firstName != null && firstName.length() > 1) {
     73            vrabotenToAdd.setFirstName(firstName);
     74        }
     75
     76        if (lastName != null && lastName.length() > 1 ) {
     77            vrabotenToAdd.setLastName(lastName);
     78        }
     79
     80        if (mobile != null && mobile.length() > 0 ) {
     81            vrabotenToAdd.setMobile(mobile);
     82        }
     83
     84        vrabotenToAdd.setStatus(status);
     85
     86        if(parkingZones!=null){
     87            List<ParkingZone> parkingZonesAvailable =parkingZoneRepository.findAll();
     88            List<ParkingZone> zonesToAdd= new ArrayList<>();
     89            vrabotenToAdd.setParkingZones(null);
     90            for(String pzName:parkingZones){
     91                for(ParkingZone pz :parkingZonesAvailable){
     92                    if(pzName.equals(pz.getPzName())) {
     93                        zonesToAdd.add(pz);
     94//                            pz.getOdgovorniLica().add(vrabotenRepository.findByVrabotenId(vrabotenId));
     95                    }
     96                }
     97            }
     98            vrabotenToAdd.setParkingZones(zonesToAdd);
     99        }
     100        String token = UUID.randomUUID().toString();
     101        ConfirmationTokenW confirmationTokenW = new ConfirmationTokenW(
     102                token,
     103                LocalDateTime.now(),
     104                LocalDateTime.now().plusMinutes(15),
     105                vrabotenToAdd
     106        );
     107
     108        confirmationTokenService.saveConfirmationTokenW(confirmationTokenW);
     109
     110        return Optional.of(vrabotenToAdd);
     111//        Optional<Vraboten> vrabotenOpt = this.vrabotenRepository.findVrabotenByEmail(vraboten.getEmail());
     112//        if (vrabotenOpt.isPresent()) {
     113//            throw new IllegalStateException("Email already taken, try adding a vraboten with a different valid email address");
     114//        } else {
     115//            if (vraboten.getEmail() != null && vraboten.getEmail().length() > 1 && vraboten.getEmail().contains("@")) {
     116//                //System.out.println(vraboten);
     117//                this.vrabotenRepository.save(vraboten);
     118//            }
     119//            else{
     120//                throw new IllegalStateException("email not valid");
     121//            }
     122//        }
     123//        return vrabotenOpt;
    65124    }
    66125
    67126    @Transactional
    68     public Vraboten updateVraboten(int vrabotenId, String firstName, String lastName, String mobile, String email, String status) {
     127    public Vraboten updateVraboten(int vrabotenId,String password,String confirmPass,boolean locked, String firstName, String lastName, String mobile, String email, EmployeeStatus status,List<String> parkingZones) {
    69128        Optional<Vraboten> vrabotenOpt = Optional.ofNullable(this.vrabotenRepository.findByVrabotenId(vrabotenId));
    70129        if (vrabotenOpt.isPresent()) {
    71             Vraboten vrabotenNov = this.vrabotenRepository.findByVrabotenId(vrabotenId);
    72             if (email != null && email.length() > 1 && email.contains("@") && !Objects.equals(vrabotenNov.getEmail(), email)) {
    73                 Optional<Vraboten> userOpt1 = this.vrabotenRepository.findVrabotenByEmail(email);
    74                 if (userOpt1.isPresent()) {
     130
     131            if (email != null && email.length() > 1 && email.contains("@") ) {
     132                List<String> emails = vrabotenRepository.findAll().stream().map(Vraboten::getEmail).collect(Collectors.toList());
     133                for(String mailToCheck :emails)
     134                if (email.equals(mailToCheck)&&vrabotenOpt.get().getVrabotenId()!=vrabotenId) {
    75135                    throw new IllegalStateException("email taken");
    76136                }
    77                 vrabotenNov.setEmail(email);
     137                vrabotenOpt.get().setEmail(email);
    78138            } else {
    79139                throw new IllegalStateException("email not valid");
    80140            }
    81 
    82             if (firstName != null && firstName.length() > 1 && !Objects.equals(vrabotenNov.getFirstName(), firstName)) {
    83                 vrabotenNov.setFirstName(firstName);
    84             }
    85 
    86             if (lastName != null && lastName.length() > 1 && !Objects.equals(vrabotenNov.getLastName(), lastName)) {
    87                 vrabotenNov.setLastName(lastName);
    88             }
    89 
    90             if (mobile != null && mobile.length() > 0 && !Objects.equals(vrabotenNov.getMobile(), mobile)) {
    91                 vrabotenNov.setMobile(mobile);
    92             }
    93 
    94             if (mobile != null && status.length() > 0 && !Objects.equals(vrabotenNov.getStatus(), status)) {
    95                 if(status.equals("raboti") || status.equals("ne raboti") || status.equals("na odmor") || status.equals("na boleduvanje")){
    96                     vrabotenNov.setStatus(status);
    97                 }else{
    98                     throw new IllegalStateException("Please enter one of the following statuses: 'raboti', 'ne raboti', 'na odmor', 'na boleduvanje'");
     141            if(password.equals(confirmPass)){
     142                vrabotenOpt.get().setPassword(bCryptPasswordEncoder.encode(password));
     143            }
     144            vrabotenOpt.get().setLocked(locked);
     145
     146            if (firstName != null && firstName.length() > 1 && !Objects.equals(vrabotenOpt.get().getFirstName(), firstName)) {
     147                vrabotenOpt.get().setFirstName(firstName);
     148            }
     149
     150            if (lastName != null && lastName.length() > 1 && !Objects.equals(vrabotenOpt.get().getLastName(), lastName)) {
     151                vrabotenOpt.get().setLastName(lastName);
     152            }
     153
     154            if (mobile != null && mobile.length() > 0 && !Objects.equals(vrabotenOpt.get().getMobile(), mobile)) {
     155                vrabotenOpt.get().setMobile(mobile);
     156            }
     157
     158//            if (status != null && status.toString().length() > 0) {
     159//                if(Arrays.stream(EmployeeStatus.values()).toList().contains(EmployeeStatus.valueOf(status))){
     160            vrabotenOpt.get().setStatus(status);
     161//                }else{
     162//                    throw new IllegalStateException("Please enter one of the following statuses: 'raboti', 'ne raboti', 'na odmor', 'na boleduvanje'");
     163//                }
     164//            }
     165            if(parkingZones!=null){
     166                List<ParkingZone> parkingZonesAvailable =parkingZoneRepository.findAll();
     167                List<ParkingZone> zonesToAdd= new ArrayList<>();
     168                vrabotenOpt.get().setParkingZones(null);
     169                for(String pzName:parkingZones){
     170                    for(ParkingZone pz :parkingZonesAvailable){
     171                        if(pzName.equals(pz.getPzName())) {
     172                            zonesToAdd.add(pz);
     173//                            pz.getOdgovorniLica().add(vrabotenRepository.findByVrabotenId(vrabotenId));
     174                        }
     175                    }
    99176                }
    100             }
    101 
    102             return vrabotenNov;
     177                vrabotenOpt.get().setParkingZones(zonesToAdd);
     178            }
     179            return vrabotenOpt.get();
    103180        }
    104181        else{
     
    107184    }//za menjanje password da se implementira
    108185
    109     @Modifying
    110186    @Transactional
    111187    public Optional<Vraboten> deleteVraboten(int vrabotenId) {
    112188        Optional<Vraboten> vrabotenOpt = Optional.ofNullable(this.vrabotenRepository.findByVrabotenId(vrabotenId));
    113189        if (vrabotenOpt.isPresent()) {
    114             //TODO da povikamo metod od ConfirmationTokenService za brisenje na ConfirmationTokenW
    115190            this.confirmationTokenService.deleteByVraboten_VrabotenId(vrabotenId);
    116191            this.vrabotenRepository.deleteByVrabotenId(vrabotenId);
     
    129204            throw new IllegalStateException("Vraboten doesn't exist, therefore his account can't be locked/unlocked");
    130205        }
    131     }//dali treba da stoi @Transactional gore nad funkcijata?
     206    }
    132207
    133208    @Override
     
    176251    }
    177252
     253//    @Transactional
     254//    public void setVrabotenStatus(int vrabotenId,String vrabotenStatus) {
     255//        Vraboten vraboten = vrabotenRepository.findByVrabotenId(vrabotenId);
     256//        if(vraboten!=null && value){
     257//            vraboten.setStatus(valuee);
     258//        }
     259//        else {
     260//            throw new IllegalStateException(String.format("Vraboten with id %d does not exist.",vrabotenId));
     261//        }
     262//    }
    178263}
Note: See TracChangeset for help on using the changeset viewer.