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 | }
|
---|