[850b344] | 1 | package com.project.beautycenter.service.impl;
|
---|
| 2 |
|
---|
| 3 | import com.project.beautycenter.model.*;
|
---|
| 4 | import com.project.beautycenter.model.exceptions.InvalidAppointmentIdException;
|
---|
| 5 | import com.project.beautycenter.repository.*;
|
---|
| 6 | import com.project.beautycenter.service.RezervacijaService;
|
---|
| 7 | import org.springframework.stereotype.Service;
|
---|
| 8 |
|
---|
| 9 | import javax.transaction.Transactional;
|
---|
| 10 | import java.util.List;
|
---|
| 11 |
|
---|
| 12 | @Service
|
---|
| 13 | public class RezervacijaServiceImpl implements RezervacijaService {
|
---|
| 14 | private final RezervacijaRepository rezervacijaRepository;
|
---|
| 15 | private final TerminiRepository terminiRepository;
|
---|
| 16 | private final KlientiRepository klientiRepository;
|
---|
| 17 | private final RezervacijaUslugiRepository repository;
|
---|
| 18 | private final UslugiRepository uslugiRepository;
|
---|
| 19 |
|
---|
| 20 | public RezervacijaServiceImpl(RezervacijaRepository rezervacijaRepository,
|
---|
| 21 | TerminiRepository terminiRepository,
|
---|
| 22 | KlientiRepository klientiRepository,
|
---|
| 23 | RezervacijaUslugiRepository repository,
|
---|
| 24 | UslugiRepository uslugiRepository) {
|
---|
| 25 | this.rezervacijaRepository = rezervacijaRepository;
|
---|
| 26 | this.terminiRepository = terminiRepository;
|
---|
| 27 | this.klientiRepository = klientiRepository;
|
---|
| 28 | this.repository = repository;
|
---|
| 29 | this.uslugiRepository = uslugiRepository;
|
---|
| 30 | }
|
---|
| 31 |
|
---|
| 32 | @Override
|
---|
| 33 | public List<Rezervacija> listAll() {
|
---|
| 34 | return this.rezervacijaRepository.findAll();
|
---|
| 35 | }
|
---|
| 36 |
|
---|
| 37 | @Override
|
---|
| 38 | public Rezervacija findbyId(Integer id) {
|
---|
| 39 | return this.rezervacijaRepository.findById(id).orElseThrow(InvalidAppointmentIdException::new);
|
---|
| 40 | }
|
---|
| 41 |
|
---|
| 42 | @Override
|
---|
| 43 | public Rezervacija create(Klienti klient, Termini termin, Uplata uplata) {
|
---|
| 44 | Rezervacija rezervacija = new Rezervacija(klient, termin, uplata);
|
---|
| 45 | return this.rezervacijaRepository.save(rezervacija);
|
---|
| 46 | }
|
---|
| 47 |
|
---|
| 48 | @Override
|
---|
| 49 | public Rezervacija create(Integer klientId, Integer terminId, List<Uslugi> uslugi) {
|
---|
| 50 | Klienti klient = this.klientiRepository.getById(klientId);
|
---|
| 51 | Termini termin = this.terminiRepository.getById(terminId);
|
---|
| 52 | Rezervacija rezervacija = new Rezervacija();
|
---|
| 53 | rezervacija.setKlienti(klient);
|
---|
| 54 | rezervacija.setTermini(termin);
|
---|
| 55 | this.rezervacijaRepository.save(rezervacija);
|
---|
| 56 | for (int i = 0; i < uslugi.size(); i++) {
|
---|
| 57 | RezervacijaUslugiId rUid = new RezervacijaUslugiId(rezervacija.getId(), uslugi.get(i).getId());
|
---|
| 58 | RezervacijaUslugi rezU = new RezervacijaUslugi(rUid, rezervacija, uslugi.get(i));
|
---|
| 59 | this.repository.save(rezU);
|
---|
| 60 | }
|
---|
| 61 | return rezervacija;
|
---|
| 62 | }
|
---|
| 63 |
|
---|
| 64 | @Override
|
---|
| 65 | @Transactional
|
---|
| 66 | public Rezervacija update(Integer id, List<String> uslugiIds, Integer klientId, Integer terminId) {
|
---|
| 67 | Rezervacija rezervacija = this.findbyId(id);
|
---|
| 68 | Klienti klient = this.klientiRepository.getById(klientId);
|
---|
| 69 | Termini termin = this.terminiRepository.getById(terminId);
|
---|
| 70 | rezervacija.setKlienti(klient);
|
---|
| 71 | rezervacija.setTermini(termin);
|
---|
| 72 | this.repository.deleteAllByBrRez(rezervacija);
|
---|
| 73 | rezervacija = this.rezervacijaRepository.save(rezervacija);
|
---|
| 74 | this.addUslugiForRezervacija(rezervacija, uslugiIds);
|
---|
| 75 | return rezervacija;
|
---|
| 76 | }
|
---|
| 77 |
|
---|
| 78 | @Override
|
---|
| 79 | @Transactional
|
---|
| 80 | public Rezervacija delete(Integer id) {
|
---|
| 81 | Rezervacija rezervacija = this.findbyId(id);
|
---|
| 82 | this.repository.deleteAllByBrRez(rezervacija);
|
---|
| 83 | this.rezervacijaRepository.delete(rezervacija);
|
---|
| 84 | return rezervacija;
|
---|
| 85 | }
|
---|
| 86 |
|
---|
| 87 | @Transactional
|
---|
| 88 | protected void addUslugiForRezervacija(Rezervacija rezervacija, List<String> uslugiIds) {
|
---|
| 89 | if (uslugiIds != null) {
|
---|
| 90 | uslugiIds.stream()
|
---|
| 91 | .map(this::findUslugaById)
|
---|
| 92 | .forEach(usluga -> this.repository
|
---|
| 93 | .save(new RezervacijaUslugi((new RezervacijaUslugiId(rezervacija.getId(), usluga.getId()))
|
---|
| 94 | , rezervacija, usluga)));
|
---|
| 95 | }
|
---|
| 96 | }
|
---|
| 97 |
|
---|
| 98 | private Uslugi findUslugaById(String id) {
|
---|
| 99 | return this.uslugiRepository.getById(id);
|
---|
| 100 | }
|
---|
| 101 |
|
---|
| 102 | }
|
---|