diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..c4d21e5 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/DemoApplication.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/DemoApplication.java index 8e8eefb..19c3e96 100644 --- a/Nadogradnja-demoa/src/main/java/vezbe/demo/DemoApplication.java +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/DemoApplication.java @@ -3,6 +3,7 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; + @SpringBootApplication public class DemoApplication { diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/configuration/CorsRunner.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/configuration/CorsRunner.java new file mode 100644 index 0000000..c1327e8 --- /dev/null +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/configuration/CorsRunner.java @@ -0,0 +1,23 @@ +package vezbe.demo.configuration; + +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +public class CorsRunner implements WebMvcConfigurer { + + @Override + public void addCorsMappings(CorsRegistry registry){ + registry.addMapping("/**") + .allowCredentials(true) + // Which primitive fields to release + .allowedOriginPatterns("*") + .allowedMethods(new String[]{ + "GET", "POST", "PUT", "DELETE"}) + .allowedHeaders("*"); + } + +} + + diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/configuration/DatabaseConfiguration.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/configuration/DatabaseConfiguration.java index 36431ea..898aaa3 100644 --- a/Nadogradnja-demoa/src/main/java/vezbe/demo/configuration/DatabaseConfiguration.java +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/configuration/DatabaseConfiguration.java @@ -71,12 +71,13 @@ public boolean instantiate(){ tipKupcaRepository.saveAll(List.of(bronzani, srebrni, zlatni, platinum, dijamant)); - Artikal artikal1 = new Artikal("naziv1", 123, TipArtikla.Jelo, 100, "opis1"); + Artikal artikal1 = new Artikal("pica mala", 250, TipArtikla.Jelo, 100, "pica cipriciossa, 23cm, pelat, sir, šunka, šampinjoni "); + artikal1.setSlika("/src/main/resources/static/images/kapricoza.jpg"); artikalRepository.save(artikal1); - Artikal artikal2 = new Artikal("naziv2", 321, TipArtikla.Pice, 210, "opis2"); + Artikal artikal2 = new Artikal("pica normalna", 520, TipArtikla.Jelo, 210, "pica cipriciossa, 35cm, pelat, sir, šunka, šampinjoni"); artikalRepository.save(artikal2); - Artikal artikal3 = new Artikal("naziv3", 500, TipArtikla.Jelo, 10, "opis3"); + Artikal artikal3 = new Artikal("pica velika", 900, TipArtikla.Jelo, 100, "pica cipriciossa, 50cm, pelat, sir, šunka, šampinjoni"); artikalRepository.save(artikal3); Artikal artikal4 = new Artikal("naziv4", 123, TipArtikla.Pice, 100, "opis4"); artikalRepository.save(artikal4); @@ -95,13 +96,13 @@ public boolean instantiate(){ Artikal artikal11= new Artikal("naziv11", 500, TipArtikla.Jelo, 10, "opis11"); artikalRepository.save(artikal11); - StavkaPorudzbine stavkaPorudzbine1 = new StavkaPorudzbine(artikal1,100); - StavkaPorudzbine stavkaPorudzbine2 = new StavkaPorudzbine(artikal2,100); - StavkaPorudzbine stavkaPorudzbine3 = new StavkaPorudzbine(artikal3,100); - StavkaPorudzbine stavkaPorudzbine4 = new StavkaPorudzbine(artikal4,100); - StavkaPorudzbine stavkaPorudzbine5 = new StavkaPorudzbine(artikal5,100); - StavkaPorudzbine stavkaPorudzbine6 = new StavkaPorudzbine(artikal6,100); - StavkaPorudzbine stavkaPorudzbine7 = new StavkaPorudzbine(artikal1,100); + StavkaPorudzbine stavkaPorudzbine1 = new StavkaPorudzbine(artikal1,1); + StavkaPorudzbine stavkaPorudzbine2 = new StavkaPorudzbine(artikal2,2); + StavkaPorudzbine stavkaPorudzbine3 = new StavkaPorudzbine(artikal3,3); + StavkaPorudzbine stavkaPorudzbine4 = new StavkaPorudzbine(artikal4,4); + StavkaPorudzbine stavkaPorudzbine5 = new StavkaPorudzbine(artikal5,5); + StavkaPorudzbine stavkaPorudzbine6 = new StavkaPorudzbine(artikal6,6); + StavkaPorudzbine stavkaPorudzbine7 = new StavkaPorudzbine(artikal1,7); /* StavkaPorudzbine stavkaPorudzbine8 = new StavkaPorudzbine(artikal8,100); StavkaPorudzbine stavkaPorudzbine9 = new StavkaPorudzbine(artikal9,100); StavkaPorudzbine stavkaPorudzbine10 = new StavkaPorudzbine(artikal10,100); @@ -180,18 +181,20 @@ public boolean instantiate(){ Kupac kupac2= new Kupac("korisnickoIme2", "lozinka2", "Predrag", "Nenadic",Pol.muski,new Date(100, Calendar.JANUARY, 10), novaListaPorudzbina, 1100, srebrni); kupacRepository.save(kupac2); + Porudzbina porudzbina2 = new Porudzbina(); porudzbina2.setPoruceniArtikli(lista_artikala2); porudzbina2.setRestoran(restoran); porudzbina2.setDatumIVreme(date1); - porudzbina2.setCena(10000); + porudzbina2.setCena(2000); porudzbina2.setKupac(kupac2); - porudzbina2.setStatus(StatusPorudzbine.UPripremi); + porudzbina2.setStatus(StatusPorudzbine.Obrada); porudzbinaRepository.save(porudzbina2); + kupacRepository.save(kupac2); kupac2.getListaPorudzbina().add(porudzbina2); - Porudzbina porudzbina = new Porudzbina( lista_artikala, restoran, date1 , 123000,kupac2, StatusPorudzbine.UPripremi); + Porudzbina porudzbina = new Porudzbina( lista_artikala, restoran, date1 , 5000,kupac2, StatusPorudzbine.CekaDostavljača); porudzbinaRepository.save(porudzbina); - + kupacRepository.save(kupac2); Date date = new Date(); Menadzer menadzer = new Menadzer("menadzer123", "lozinka", "Milos", "Subotic", Pol.muski,date , restoran); menadzerRepository.save(menadzer); @@ -226,6 +229,9 @@ public boolean instantiate(){ komentarRepository.save(komentar); Komentar komentar2 = new Komentar(kupac, restoran2, "Me likey, very nice", 5); komentarRepository.save(komentar2); + + Korisnik admin = new Korisnik("admin", "sifra", "Admin", "Adminovski" , Pol.muski,new Date(101, Calendar.SEPTEMBER, 10), Uloga.Admin); + korisnikRepository.save(admin); /*Department department1 = new Department("first department"); Department department2 = new Department("second department"); diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/configuration/MvcConfig.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/configuration/MvcConfig.java new file mode 100644 index 0000000..2ee8ede --- /dev/null +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/configuration/MvcConfig.java @@ -0,0 +1,28 @@ +package vezbe.demo.configuration; + + +import java.nio.file.Path; +import java.nio.file.Paths; + +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +public class MvcConfig implements WebMvcConfigurer { + + + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + exposeDirectory("images", registry); + } + + private void exposeDirectory(String dirName, ResourceHandlerRegistry registry) { + Path uploadDir = Paths.get(dirName); + //String uploadPath = uploadDir.toFile().getAbsolutePath(); + String uploadPath = uploadDir.toFile().getAbsolutePath() + "Nadogradnja-demoa/src/main/resources/static/images"; + if (dirName.startsWith("../")) dirName = dirName.replace("../", ""); + + registry.addResourceHandler("/" + dirName + "/**").addResourceLocations("file:/"+ uploadPath + "/"); + } +} \ No newline at end of file diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/controller/ArtikalRestController.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/controller/ArtikalRestController.java new file mode 100644 index 0000000..9f88ad4 --- /dev/null +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/controller/ArtikalRestController.java @@ -0,0 +1,23 @@ +package vezbe.demo.controller; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import vezbe.demo.dto.ArtikalDto; +import vezbe.demo.model.*; +import vezbe.demo.service.ArtikalService; + +import javax.servlet.http.HttpSession; +import java.util.List; +import java.util.Set; + +@RestController +public class ArtikalRestController { + + @Autowired + private ArtikalService artikalService; + + + +} diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/controller/DostavljacRestController.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/controller/DostavljacRestController.java new file mode 100644 index 0000000..4e5212b --- /dev/null +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/controller/DostavljacRestController.java @@ -0,0 +1,70 @@ +package vezbe.demo.controller; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import vezbe.demo.dto.DostavljacDto; +import vezbe.demo.dto.MenadzerDto; +import vezbe.demo.model.*; +import vezbe.demo.service.DostavljacService; +import vezbe.demo.service.KorisnikService; +import vezbe.demo.service.MenadzerService; +import javax.servlet.http.HttpSession; +import java.text.ParseException; +import java.util.ArrayList; +import java.util.Date; +import java.text.SimpleDateFormat; +import java.util.List; +import java.util.Set; + +@RestController +@RequestMapping(value = "/api/") +@CrossOrigin(origins = "http://localhost:8080") +public class DostavljacRestController { + + private final DostavljacService dostavljacService; + + @Autowired + public DostavljacRestController(DostavljacService dostavljacService) { + this.dostavljacService = dostavljacService; + } + + + + @PostMapping("kreiraj-dostavljaca") + public ResponseEntity kreirajDostavljaca(@RequestBody DostavljacDto dostavljacDto, HttpSession session) throws ParseException { + Korisnik loggedKorisnik = (Korisnik) session.getAttribute("logovaniKorsinik"); + if (loggedKorisnik == null){ + return new ResponseEntity<>("Forbidden", HttpStatus.OK); + } + if(loggedKorisnik.getUloga()!= Uloga.Admin){ + return new ResponseEntity<>("Nemate dozvolu za ovu funkciju", HttpStatus.OK); + } + String sDate1=dostavljacDto.getDatumRodjenja(); + Date date1= null; + date1 = new SimpleDateFormat("yyyy-MM-dd").parse(sDate1); + + Pol pol = Pol.valueOf(dostavljacDto.getPol()); + + Dostavljac dostavljac = new Dostavljac(dostavljacDto.getKorisnickoIme(), dostavljacDto.getLozinka(), dostavljacDto.getIme(), dostavljacDto.getPrezime(),pol, date1); + this.dostavljacService.save(dostavljac); + + return new ResponseEntity<>("", HttpStatus.OK); + + } + + @GetMapping("/api/dostavljac/pregled-porudzbina") + public ResponseEntity> pregledPorudzbina(HttpSession session) { + + Korisnik loggedKorisnik = (Korisnik) session.getAttribute("logovaniKorsinik"); + if (loggedKorisnik.getUloga() != Uloga.Dostavljac ) {//Da li treba dodati i mogucnost da admin moze da pristupa ovom edpointu + return new ResponseEntity("Nemate pristupa ovim podacima", HttpStatus.BAD_REQUEST); + } + + + + return ResponseEntity.ok(dostavljacService.findAllById(loggedKorisnik.getId())); + + } +} diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/controller/KorisnikRestController.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/controller/KorisnikRestController.java new file mode 100644 index 0000000..f883098 --- /dev/null +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/controller/KorisnikRestController.java @@ -0,0 +1,76 @@ +package vezbe.demo.controller; + + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import vezbe.demo.dto.KorisnikDto; +import vezbe.demo.dto.LoginDto; +import vezbe.demo.model.*; +import vezbe.demo.service.KorisnikService; +import vezbe.demo.service.RestoranService; + +import javax.servlet.http.HttpSession; +import java.util.ArrayList; +import java.util.List; + +@RestController +@RequestMapping(value = "/api/") +@CrossOrigin(origins = "http://localhost:8080") +public class KorisnikRestController { + private final KorisnikService korisnikService; + + @Autowired + public KorisnikRestController(KorisnikService korisnikService) { + this.korisnikService = korisnikService; + } + + + @PostMapping( + value="login", + consumes = MediaType.APPLICATION_JSON_VALUE, + produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity login(@RequestBody KorisnikDto loginDto, HttpSession session) throws Exception{ + if(loginDto.getKorisnickoIme().isEmpty() || loginDto.getLozinka().isEmpty()){ + return new ResponseEntity<>(new LoginDto(), HttpStatus.OK); + } + Korisnik loggedKorisnik = korisnikService.login(loginDto.getKorisnickoIme(), loginDto.getLozinka()); + if (loggedKorisnik == null){ + return new ResponseEntity<>(new LoginDto(), HttpStatus.OK);} + session.setAttribute("logovaniKorsinik", loggedKorisnik); + + KorisnikDto korisnikDto= new KorisnikDto(loggedKorisnik.getKorisnickoIme(), loggedKorisnik.getLozinka(), loggedKorisnik.getIme(), loggedKorisnik.getPrezime(), loggedKorisnik.getDatumRodjenja(), loggedKorisnik.getPol(), loggedKorisnik.getUloga()); + LoginDto dto = new LoginDto(loggedKorisnik.getKorisnickoIme(), loggedKorisnik.getLozinka(), loggedKorisnik.getIme(), loggedKorisnik.getPrezime(), loggedKorisnik.getDatumRodjenja(), loggedKorisnik.getPol(), loggedKorisnik.getUloga()); + dto.setSessionId(session.getId()); + return new ResponseEntity<>(dto, HttpStatus.OK); + } + + @GetMapping(value = "profil", + produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity getProfil(HttpSession session){ + + Korisnik loggedKorisnik = (Korisnik) session.getAttribute("logovaniKorsinik"); + + if(loggedKorisnik == null) { + System.out.println("Nema sesije"); + } else { + System.out.println(loggedKorisnik); + } + return ResponseEntity.ok(loggedKorisnik); + + } + @GetMapping(value = "korisnici", + produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity> getSveKorisnike(HttpSession session){ + List listaKorisnika = new ArrayList<>(); + Korisnik loggedKorisnik = (Korisnik) session.getAttribute("logovaniKorsinik"); + if(loggedKorisnik.getUloga()!=Uloga.Admin){ + return new ResponseEntity("Nemate pristupa ovim podacima", HttpStatus.BAD_REQUEST); + } + List dtoList = korisnikService.findAll(); + return new ResponseEntity<>(dtoList, HttpStatus.OK); + + } +} diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/controller/KupacRestController.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/controller/KupacRestController.java index 2204e05..2e8a62a 100644 --- a/Nadogradnja-demoa/src/main/java/vezbe/demo/controller/KupacRestController.java +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/controller/KupacRestController.java @@ -1,55 +1,82 @@ package vezbe.demo.controller; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; -import vezbe.demo.model.Kupac; +import vezbe.demo.dto.KorisnikDto; +import vezbe.demo.dto.KupacDto; +import vezbe.demo.dto.LoginDto; +import vezbe.demo.model.*; import vezbe.demo.service.KupacService; +import vezbe.demo.service.RestoranService; +import javax.servlet.http.HttpSession; +import java.text.ParseException; import java.util.Date; import java.util.List; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Set; @RestController +@CrossOrigin("http://localhost:8080") +@RequestMapping(value = "/api/") public class KupacRestController { - @Autowired - private KupacService kupacService; + private final KupacService kupacService; - @GetMapping("/api/") - public String welcome(){ - return "Hello from api!"; + @Autowired + public KupacRestController(KupacService kupacService) { + this.kupacService = kupacService; } - @PostMapping("/api/registracija") - public String registracijaKupca(@RequestBody Kupac kupac) { + + + @PostMapping( + value = "/registracija", + consumes = MediaType.APPLICATION_JSON_VALUE, + produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity registracija(@RequestBody KorisnikDto korisnikDto) throws ParseException { + +// if(!kupacService.checkIfUsernameIsAvailable(korisnikDto.getKorisnickoIme())){ +// return new ResponseEntity<>("korisnicko ime nije slobodno", HttpStatus.OK); +// } + + String sDate1=korisnikDto.getDatumRodjenja(); + Date date1= null; + date1 = new SimpleDateFormat("yyyy-MM-dd").parse(sDate1); + + Pol pol = Pol.valueOf(korisnikDto.getPol()); + + Kupac kupac = new Kupac(korisnikDto.getKorisnickoIme(), korisnikDto.getLozinka(), korisnikDto.getIme(), korisnikDto.getPrezime(),pol, date1); this.kupacService.save(kupac); - return "Uspesna registracija!"; - } -/* - @GetMapping("/api/employees") - public List getKupci(){ - List employeeList = kupacService.findAll(); - return employeeList; - } + return new ResponseEntity<>("", HttpStatus.OK); - @GetMapping("/api/employees/{id}") - public Kupac getEmployee(@PathVariable(name = "id") Long id){ - Kupac employee = employeeService.findOne(id); - return employee; } + @GetMapping(value="/sve-porudzbine", + produces = MediaType.APPLICATION_JSON_VALUE + ) + public ResponseEntity> sveProduzbine(HttpSession session){ + Korisnik loggedKorisnik = (Korisnik) session.getAttribute("logovaniKorsinik"); + + if (loggedKorisnik == null){ + return new ResponseEntity("Forbidden", HttpStatus.FORBIDDEN); + } + if(loggedKorisnik.getUloga()!= Uloga.Kupac){ + return new ResponseEntity("Nemate dozvolu za ovu funkciju", HttpStatus.BAD_REQUEST); + } + //Kupac kupac = (Kupac) loggedKorisnik; + if(kupacService.findAllPorudzbineByID(loggedKorisnik.getId()).isEmpty()){ + System.out.println("PRAZNA LISTA"); + ResponseEntity.noContent(); + } +// return new ResponseEntity( kupacService.findAllPorudzbineByID(loggedKorisnik.getId()), HttpStatus.OK); + return new ResponseEntity( kupacService.findAllPorudzbineByID(loggedKorisnik.getId()), HttpStatus.OK); - @PostMapping("/api/save-employee") - public String saveEmployee(@RequestBody Employee employee) { - this.employeeService.save(employee); - return "Successfully saved an employee!"; - } - @GetMapping("/api/delById/{id}") - public String deleteEmployee(@PathVariable(name = "id") Long id){ - Employee employee = employeeService.findOne(id); - this.employeeService.delete(employee); - return "Sucessfully deleted and employee!"; } -*/ } diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/controller/LokacijaRestController.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/controller/LokacijaRestController.java new file mode 100644 index 0000000..ab31feb --- /dev/null +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/controller/LokacijaRestController.java @@ -0,0 +1,14 @@ +package vezbe.demo.controller; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RestController; +import vezbe.demo.service.LokacijaService; + +@RestController +public class LokacijaRestController { + @Autowired + private LokacijaService lokacijaService; + + + +} diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/controller/MenadzerRestController.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/controller/MenadzerRestController.java new file mode 100644 index 0000000..4b50592 --- /dev/null +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/controller/MenadzerRestController.java @@ -0,0 +1,69 @@ +package vezbe.demo.controller; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import vezbe.demo.dto.MenadzerDto; +import vezbe.demo.model.*; +import vezbe.demo.service.DostavljacService; +import vezbe.demo.service.MenadzerService; +import javax.servlet.http.HttpSession; +import java.text.ParseException; +import java.util.ArrayList; +import java.util.Date; +import java.text.SimpleDateFormat; +import java.util.List; + +@RestController +@RequestMapping(value = "/api/") +@CrossOrigin(origins = "http://localhost:8080") +public class MenadzerRestController { + + private final MenadzerService menadzerService; + + @Autowired + public MenadzerRestController(MenadzerService menadzerService) { + this.menadzerService = menadzerService; + } + + + @PostMapping(value = "kreiraj-menadzera" + ) + public ResponseEntity kreirajMenadzera(@RequestBody MenadzerDto menadzerDto, HttpSession session) throws ParseException { + Korisnik loggedKorisnik = (Korisnik) session.getAttribute("logovaniKorsinik"); + + if (loggedKorisnik == null){ + return new ResponseEntity("Forbidden", HttpStatus.FORBIDDEN); + } + if(loggedKorisnik.getUloga()!= Uloga.Admin){ + return new ResponseEntity("Nemate dozvolu za ovu funkciju", HttpStatus.BAD_REQUEST); + } + + String sDate1=menadzerDto.getDatumRodjenja(); + Date date1= null; + date1 = new SimpleDateFormat("yyyy-MM-dd").parse(sDate1); + + Pol pol = Pol.valueOf(menadzerDto.getPol()); + + Menadzer menadzer = new Menadzer(menadzerDto.getKorisnickoIme(), menadzerDto.getLozinka(), menadzerDto.getIme(), menadzerDto.getPrezime(),pol, date1); + this.menadzerService.save(menadzer); + + return ResponseEntity.ok("Uspesno kreiranje menadzera!"); + + } + @GetMapping("/api/pregled-restorana") + public ResponseEntity getRestoran(HttpSession session){ + + Korisnik loggedKorisnik = (Korisnik) session.getAttribute("logovaniKorsinik"); + if(loggedKorisnik.getUloga()!= Uloga.Menadzer){ + return new ResponseEntity("Nemate pristupa ovim podacima", HttpStatus.BAD_REQUEST); + } + + Restoran restoran = menadzerService.findRestoran(loggedKorisnik.getId()); + return ResponseEntity.ok(restoran); + + } + +} diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/controller/PorudzbinaRestController.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/controller/PorudzbinaRestController.java new file mode 100644 index 0000000..ea7d3ad --- /dev/null +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/controller/PorudzbinaRestController.java @@ -0,0 +1,197 @@ +package vezbe.demo.controller; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import vezbe.demo.dto.PorudzbinaDto; +import vezbe.demo.dto.RestoranImeDto; +import vezbe.demo.model.*; +import vezbe.demo.service.PorudzbinaService; +import vezbe.demo.dto.KorpaDto; + + +import javax.servlet.http.HttpSession; +import java.util.*; + +@RestController +@CrossOrigin("http://localhost:8080") +@RequestMapping(value = "/api/") +public class PorudzbinaRestController { + + @Autowired + private PorudzbinaService porudzbinaService; + + + @GetMapping(value = "/pregled-porudzbina", + produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity> getPorudzbine(HttpSession session) { + List listaPorudzbina = new ArrayList<>(); + Korisnik loggedKorisnik = (Korisnik) session.getAttribute("logovaniKorsinik"); + if (loggedKorisnik.getUloga() != Uloga.Menadzer) { + return new ResponseEntity("Nemate pristupa ovim podacima", HttpStatus.BAD_REQUEST); + } + + Restoran r = ((Menadzer) loggedKorisnik).getRestoran(); + List dtoList = porudzbinaService.getListaPorudzbina(r); + + return ResponseEntity.ok(dtoList); + + } + + @GetMapping(value = "ceka-dostavljaca", + produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity> porudzbineStanjeCekaDostavljaca(HttpSession session) { + List listaPorudzbina = new ArrayList<>(); + Korisnik loggedKorisnik = (Korisnik) session.getAttribute("logovaniKorsinik"); + if (loggedKorisnik == null) { + return new ResponseEntity("Nemate pristupa ovim podacima", HttpStatus.BAD_REQUEST); + } + if (loggedKorisnik.getUloga() != Uloga.Dostavljac) { + return new ResponseEntity("Nemate pristupa ovim podacima", HttpStatus.BAD_REQUEST); + } + + + return ResponseEntity.ok(porudzbinaService.findCekaDostavljaca()); + + } + + @PostMapping("/api/izaberi-restoran") + public ResponseEntity izaberRestoran(@RequestBody RestoranImeDto restoranImeDto, HttpSession session) { + Korisnik loggedKorisnik = (Korisnik) session.getAttribute("logovaniKorsinik"); + if (loggedKorisnik == null) { + return new ResponseEntity("Forbidden", HttpStatus.FORBIDDEN); + } + if (loggedKorisnik.getUloga() != Uloga.Kupac) { + return new ResponseEntity("Nemate dozvolu za ovu funkciju", HttpStatus.BAD_REQUEST); + } + Kupac kupac = (Kupac) loggedKorisnik; + + porudzbinaService.makePorudzbina(kupac, restoranImeDto.getNaziv()); + + return ResponseEntity.ok(porudzbinaService.getAll()); + + } + + @PostMapping( + value = "dodaj-u-korpu", + consumes = MediaType.APPLICATION_JSON_VALUE, + produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity dodajUKorpu(@RequestBody KorpaDto korpaDto, HttpSession session) { + + Korisnik loggedKorisnik = (Korisnik) session.getAttribute("logovaniKorsinik"); + if (loggedKorisnik == null) { + return new ResponseEntity("Forbidden", HttpStatus.FORBIDDEN); + } + if (loggedKorisnik.getUloga() != Uloga.Kupac) { + return new ResponseEntity("Nemate dozvolu za ovu funkciju", HttpStatus.BAD_REQUEST); + } + Kupac kupac = (Kupac) loggedKorisnik; + + Porudzbina porudzbina = porudzbinaService.findPorduzbinaUSastavljanju(kupac); + + return new ResponseEntity<>(porudzbinaService.kreirajStavkuPorudzbine(korpaDto.getArtikal(), korpaDto.getKolicina(), porudzbina), HttpStatus.OK); + + + } + + @PostMapping("/api/ukloni-iz-korpe") + public ResponseEntity ukloniIzKorpe(@RequestBody KorpaDto korpaDto, HttpSession session) { + + Korisnik loggedKorisnik = (Korisnik) session.getAttribute("logovaniKorsinik"); + if (loggedKorisnik == null) { + return new ResponseEntity("Forbidden", HttpStatus.FORBIDDEN); + } + if (loggedKorisnik.getUloga() != Uloga.Kupac) { + return new ResponseEntity("Nemate dozvolu za ovu funkciju", HttpStatus.BAD_REQUEST); + } + Kupac kupac = (Kupac) loggedKorisnik; + + Porudzbina porudzbina = porudzbinaService.findPorduzbinaUSastavljanju(kupac); + + return ResponseEntity.ok(porudzbinaService.ukloniStavkuPorudzbine(korpaDto.getArtikal(), korpaDto.getKolicina(), porudzbina)); + + } + + @PostMapping("/api/poruci") + public ResponseEntity poruci(HttpSession session) { + Korisnik loggedKorisnik = (Korisnik) session.getAttribute("logovaniKorsinik"); + if (loggedKorisnik == null) { + return new ResponseEntity("Forbidden", HttpStatus.FORBIDDEN); + } + if (loggedKorisnik.getUloga() != Uloga.Kupac) { + return new ResponseEntity("Nemate dozvolu za ovu funkciju", HttpStatus.BAD_REQUEST); + } + Kupac kupac = (Kupac) loggedKorisnik; + Porudzbina porudzbina = porudzbinaService.findPorduzbinaUSastavljanju(kupac); + porudzbinaService.checkIfEmpty(porudzbina); + if (porudzbina.getPoruceniArtikli().isEmpty()) { + return new ResponseEntity("Porudzbina je prazna", HttpStatus.BAD_REQUEST); + } else { + return ResponseEntity.ok(porudzbina); + } + + } + + @PutMapping("/api/menadzer/promeni-status/{id}") + public ResponseEntity uPripremi(@PathVariable(name = "id") String id, HttpSession session) { + Korisnik loggedKorisnik = (Korisnik) session.getAttribute("logovaniKorsinik"); + if (loggedKorisnik == null) { + return new ResponseEntity("Forbidden", HttpStatus.FORBIDDEN); + } + + if (loggedKorisnik.getUloga() != Uloga.Menadzer) { + return new ResponseEntity("Nemate pristupa ovim podacima", HttpStatus.BAD_REQUEST); + } + + Menadzer menadzer = (Menadzer) loggedKorisnik; + Porudzbina porudzbina = porudzbinaService.promeniStatusMenadzer(menadzer.getRestoran(), id); + + + return ResponseEntity.ok(porudzbina); + } + + @PutMapping(value = "dostavljac/promeni-status/{id}", + produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity uTransportu(@PathVariable(name = "id") String id, HttpSession session) { + Korisnik loggedKorisnik = (Korisnik) session.getAttribute("logovaniKorsinik"); + if (loggedKorisnik == null) { + return new ResponseEntity("Forbidden", HttpStatus.FORBIDDEN); + } + + if (loggedKorisnik.getUloga() != Uloga.Dostavljac) { + return new ResponseEntity("Nemate pristupa ovim podacima", HttpStatus.BAD_REQUEST); + } + + Dostavljac dostavljac = (Dostavljac) loggedKorisnik; + Porudzbina porudzbina = porudzbinaService.promeniStatusDostavljac(dostavljac, id); + if (porudzbina == null) { + return new ResponseEntity("Nemate pristup ovoj porudzbini", HttpStatus.BAD_REQUEST); + } + PorudzbinaDto porudzbinaDto = new PorudzbinaDto(porudzbina.getUUID().toString(), porudzbina.getCena(), porudzbina.getDatumIVreme().toString(), porudzbina.getStatus()); + + return new ResponseEntity<>("", HttpStatus.OK); + } + @GetMapping(value = "dostavljac/porudzbine/", + produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity> porudzbineDostavljaca(HttpSession session) { + Korisnik loggedKorisnik = (Korisnik) session.getAttribute("logovaniKorsinik"); + if (loggedKorisnik == null) { + return new ResponseEntity("Forbidden", HttpStatus.FORBIDDEN); + } + + if (loggedKorisnik.getUloga() != Uloga.Dostavljac) { + return new ResponseEntity("Nemate pristupa ovim podacima", HttpStatus.BAD_REQUEST); + } + Dostavljac dostavljac = (Dostavljac) loggedKorisnik; + Set set = new HashSet<>(); + for(Porudzbina porudzbina: dostavljac.getPorudzbineZaDostavu()){ + PorudzbinaDto dto = new PorudzbinaDto(porudzbina.getUUID().toString(), porudzbina.getCena(), porudzbina.getDatumIVreme().toString(), porudzbina.getStatus()); + set.add(dto); + } + + return new ResponseEntity<>(set, HttpStatus.OK); + + } +} diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/controller/RestoranRestController.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/controller/RestoranRestController.java new file mode 100644 index 0000000..35fedec --- /dev/null +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/controller/RestoranRestController.java @@ -0,0 +1,182 @@ +package vezbe.demo.controller; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import vezbe.demo.dto.*; +import vezbe.demo.model.*; +import vezbe.demo.service.RestoranService; + +import javax.servlet.http.HttpSession; +import java.io.IOException; +import java.util.*; + +@RestController +@CrossOrigin("http://localhost:8080") +@RequestMapping(value = "/api/") +public class RestoranRestController { + + private final RestoranService restoranService; + + @Autowired + public RestoranRestController(RestoranService restoranService) { + this.restoranService = restoranService; + } + + + @GetMapping( + value = "/restorani", + produces = MediaType.APPLICATION_JSON_VALUE + ) + public ResponseEntity> api(){ + + return ResponseEntity.ok(restoranService.getAllBasicInfo()); + } + + + @PostMapping("/api/kreiraj-restoran") + public ResponseEntity kreirajRestoran(@RequestBody RestoranDto restoranDto, HttpSession session){ + Korisnik loggedKorisnik = (Korisnik) session.getAttribute("logovaniKorsinik"); + if (loggedKorisnik == null){ + return new ResponseEntity("Forbidden", HttpStatus.FORBIDDEN); + } + if(loggedKorisnik.getUloga()!= Uloga.Admin){ + return new ResponseEntity("Nemate dozvolu za ovu funkciju", HttpStatus.BAD_REQUEST); + } + + Restoran restoran = new Restoran(restoranDto.getNaziv(), restoranDto.getTipRestorana()); + Lokacija lokacija = new Lokacija(restoranDto.getGeoSirina(), restoranDto.getGeoDuzina(), restoranDto.getAdresa()); + restoran.setLokacija(lokacija); + this.restoranService.save(restoran); + + return ResponseEntity.ok("Uspesno kreiranje restorana!"); + } + + @GetMapping("/pretraga") + public ResponseEntity> pretragaRestorana(@RequestBody String input){ + Set restorani = restoranService.pronadjiRestorane(input); + return ResponseEntity.ok(restorani); + + } + + @GetMapping( + value = "/restorani/{naziv}", + produces = MediaType.APPLICATION_JSON_VALUE + ) + public ResponseEntity prikazJednogRestorana(@PathVariable(name = "naziv") String naziv){ + Restoran restoran = restoranService.findByName(naziv); + double prosecnaOcena = restoranService.getProsecnaOcena(restoran.getId()); + Set komentari = restoranService.getKomentari(restoran.getId()); + if (restoran == null) + return new ResponseEntity<>(new RestoranIspisDto(), HttpStatus.OK); + + return new ResponseEntity<>(restoranService.spremiZaIspis(restoran, prosecnaOcena, komentari), HttpStatus.OK); + } + + @PostMapping("/api/dodaj-artikal") + public ResponseEntity> dodajArtikal(@RequestParam("image") MultipartFile multipartFile,ArtikalDto artikalDto, HttpSession session) throws IOException { + Menadzer loggedKorisnik = (Menadzer) session.getAttribute("logovaniKorsinik"); + + if(loggedKorisnik.getRestoran()== null){ + return new ResponseEntity("ne mozes ovako loggedKorinsik", HttpStatus.BAD_REQUEST); + } + if(loggedKorisnik.getUloga()!= Uloga.Menadzer){ + return new ResponseEntity("Nemate pristupa ovim podacima", HttpStatus.BAD_REQUEST); + } + if(artikalDto.getNaziv().isEmpty()){ + return new ResponseEntity("Polje naziv je obavezno!", HttpStatus.BAD_REQUEST); + } + if(artikalDto.getTipArtikla().isEmpty()){ + return new ResponseEntity("Polje tipArtikla je obavezno!", HttpStatus.BAD_REQUEST); + } + if(artikalDto.getCena() == 0){ + return new ResponseEntity("Polje cena je obavezno!", HttpStatus.BAD_REQUEST); + } + if(multipartFile.isEmpty()){ + return new ResponseEntity("Polje slika je obavezno!", HttpStatus.BAD_REQUEST); + } + TipArtikla tipArtikla = TipArtikla.valueOf(artikalDto.getTipArtikla()); + + Artikal artikal = new Artikal(artikalDto.getNaziv(), artikalDto.getCena(), tipArtikla); + + String fileName = StringUtils.cleanPath(multipartFile.getOriginalFilename()); + artikal.setSlika(fileName); + + //String uploadDir = "artikal-slike/" + artikal.getId(); + String uploadDir = "src/main/resources/static/images/" + artikal.getId(); + + FileUploadUtil.saveFile(uploadDir, fileName, multipartFile); + + + Set listaArtikala = restoranService.dodajArtikal(artikal, loggedKorisnik.getRestoran()); + + + return ResponseEntity.ok(listaArtikala); + + } + + + @PutMapping("/api/restoran/promeni-menadzera") + public ResponseEntity promeniMenadzera(@RequestBody NoviMenadzerDto dto, HttpSession session){ + Korisnik loggedKorisnik = (Korisnik) session.getAttribute("logovaniKorsinik"); + if (loggedKorisnik == null){ + return new ResponseEntity("Forbidden", HttpStatus.FORBIDDEN); + } + if(loggedKorisnik.getUloga()!= Uloga.Admin){ + return new ResponseEntity("Nemate dozvolu za ovu funkciju", HttpStatus.BAD_REQUEST); + } + + Menadzer menadzer= restoranService.findByNaziv(dto.getNaziv(), dto.getKorisnickoIme()); + + return ResponseEntity.ok(menadzer); + } + @DeleteMapping("/ukloni-artikal/{id}") + public ResponseEntity> ukloniArtikal(@PathVariable(name = "id") Long id, HttpSession session){ + Menadzer loggedKorisnik = (Menadzer) session.getAttribute("logovaniKorsinik"); + + if(loggedKorisnik.getRestoran()== null){ + return new ResponseEntity("ne mozes ovako loggedKorinsik", HttpStatus.BAD_REQUEST); + } + + if(loggedKorisnik.getUloga()!= Uloga.Menadzer){ + return new ResponseEntity("Nemate pristupa ovim podacima", HttpStatus.BAD_REQUEST); + } + if(!restoranService.pronadjiArtikal(id, loggedKorisnik.getRestoran())){ + return new ResponseEntity("U vasoj ponudi nema ovog artikla", HttpStatus.BAD_REQUEST); + } + + + + List l = restoranService.removeArtikal(id, loggedKorisnik.getRestoran()); + return ResponseEntity.ok(l); + } + @PutMapping("/api/promeni-artikal/{id}") + public ResponseEntity promeniArtikal(@PathVariable(name = "id") Long id, @RequestBody Artikal artikal, HttpSession session){ + Menadzer loggedKorisnik = (Menadzer) session.getAttribute("logovaniKorsinik"); + + if(loggedKorisnik.getRestoran()== null){ + return new ResponseEntity("ne mozes ovako loggedKorinsik", HttpStatus.BAD_REQUEST); + } + + if(loggedKorisnik.getUloga()!= Uloga.Menadzer){ + return new ResponseEntity("Nemate pristupa ovim podacima", HttpStatus.BAD_REQUEST); + } + if(!restoranService.pronadjiArtikal(id, loggedKorisnik.getRestoran())){ + return new ResponseEntity("U vasoj ponudi nema ovog artikla", HttpStatus.BAD_REQUEST); + } + + //SLIKU NISI MENJAOOOOOOOOOOOOOOOOOOOOOOOOO + return ResponseEntity.ok(restoranService.promeniArtikal(artikal, loggedKorisnik.getRestoran(), id)); + + } + + + + + + +} diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/dto/ArtikalDto.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/dto/ArtikalDto.java new file mode 100644 index 0000000..42f3d57 --- /dev/null +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/dto/ArtikalDto.java @@ -0,0 +1,119 @@ +package vezbe.demo.dto; + +import com.fasterxml.jackson.annotation.JsonSetter; +import vezbe.demo.model.TipArtikla; + +import javax.persistence.Column; +import javax.persistence.Lob; +import java.io.UnsupportedEncodingException; +import java.util.Base64; + + +public class ArtikalDto { + private String naziv; + private double cena; + + private String tipArtikla; + + private double kolicina; + + private String opis; + + /*@Lob + @Column(name = "slika") + private byte[] slika; + + @JsonSetter("slika") + public void setSlika(String content) { + try { + this.slika = Base64.getDecoder().decode(content.getBytes("UTF-8")); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } + + public byte[] getSlika() { + return slika; + } + */ + + //SLIKU?????????????????? + //OPCIONI????????????? + + public ArtikalDto(String naziv, double cena, String tipArtikla, double kolicina, String opis) { + this.naziv = naziv; + this.cena = cena; + this.tipArtikla = tipArtikla; + this.kolicina = kolicina; + this.opis = opis; + } + + /*public ArtikalDto(String naziv, double cena, String tipArtikla, double kolicina, String opis, byte[] slika) { + this.naziv = naziv; + this.cena = cena; + this.tipArtikla = tipArtikla; + this.kolicina = kolicina; + this.opis = opis; + this.slika = slika; + } + */ + + public ArtikalDto() { + } + + public ArtikalDto(String naziv, double cena, String tipArtikla) { + + this.naziv = naziv; + this.cena = cena; + this.tipArtikla = tipArtikla; + } + /* + + public ArtikalDto(String naziv, double cena, String tipArtikla, byte[] slika) { + this.naziv = naziv; + this.cena = cena; + this.tipArtikla = tipArtikla; + this.slika = slika; + } + */ + + public String getNaziv() { + return naziv; + } + + public void setNaziv(String naziv) { + this.naziv = naziv; + } + + public double getCena() { + return cena; + } + + public void setCena(double cena) { + this.cena = cena; + } + + public String getTipArtikla() { + return tipArtikla; + } + + public void setTipArtikla(String tipArtikla) { + this.tipArtikla = tipArtikla; + } + + public double getKolicina() { + return kolicina; + } + + public void setKolicina(double kolicina) { + this.kolicina = kolicina; + } + + public String getOpis() { + return opis; + } + + public void setOpis(String opis) { + this.opis = opis; + } +} diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/dto/DostavljacDto.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/dto/DostavljacDto.java new file mode 100644 index 0000000..4cf665e --- /dev/null +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/dto/DostavljacDto.java @@ -0,0 +1,114 @@ +package vezbe.demo.dto; + +import vezbe.demo.model.*; + +import javax.persistence.*; +import java.io.Serializable; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashSet; +import java.util.Set; + +import static javax.persistence.EnumType.STRING; + +public class DostavljacDto { + + private Long id; + + private String korisnickoIme; + + private String lozinka; + + private String ime; + + private String prezime; + + private String pol; + + private String datumRodjenja; + + private Uloga uloga; + + public DostavljacDto(Long id, String korisnickoIme, String lozinka, String ime, String prezime, String pol, String datumRodjenja) { + + this.uloga = Uloga.Kupac; + } + public DostavljacDto(Kupac kupac) { + this.id = kupac.getId(); + this.korisnickoIme = kupac.getKorisnickoIme(); + this.lozinka = kupac.getLozinka(); + this.ime = kupac.getIme(); + this.prezime = kupac.getPrezime(); + this.pol = kupac.getPol().name(); + this.datumRodjenja = kupac.getDatumRodjenja().toString(); + this.uloga = Uloga.Kupac; + } + + public DostavljacDto() { + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getKorisnickoIme() { + return korisnickoIme; + } + + public void setKorisnickoIme(String korisnickoIme) { + this.korisnickoIme = korisnickoIme; + } + + public String getLozinka() { + return lozinka; + } + + public void setLozinka(String lozinka) { + this.lozinka = lozinka; + } + + public String getIme() { + return ime; + } + + public void setIme(String ime) { + this.ime = ime; + } + + public String getPrezime() { + return prezime; + } + + public void setPrezime(String prezime) { + this.prezime = prezime; + } + + public String getPol() { + return pol; + } + + public void setPol(String pol) { + this.pol = pol; + } + + public String getDatumRodjenja() { + return datumRodjenja; + } + + public void setDatumRodjenja(String datumRodjenja) { + this.datumRodjenja = datumRodjenja; + } + + public Uloga getUloga() { + return uloga; + } + + public void setUloga(Uloga uloga) { + this.uloga = uloga; + } +} diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/dto/KomentarDto.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/dto/KomentarDto.java new file mode 100644 index 0000000..02c6b00 --- /dev/null +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/dto/KomentarDto.java @@ -0,0 +1,40 @@ +package vezbe.demo.dto; + +public class KomentarDto { + private String korisnickoIme; + private String tekst; + private int ocena; + + public KomentarDto() { + } + + public KomentarDto(String korisnickoIme, String tekst, int ocena) { + this.korisnickoIme = korisnickoIme; + this.tekst = tekst; + this.ocena = ocena; + } + + public String getKorisnickoIme() { + return korisnickoIme; + } + + public void setKorisnickoIme(String korisnickoIme) { + this.korisnickoIme = korisnickoIme; + } + + public String getTekst() { + return tekst; + } + + public void setTekst(String tekst) { + this.tekst = tekst; + } + + public int getOcena() { + return ocena; + } + + public void setOcena(int ocena) { + this.ocena = ocena; + } +} diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/dto/KorisnikDto.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/dto/KorisnikDto.java new file mode 100644 index 0000000..bbaa90e --- /dev/null +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/dto/KorisnikDto.java @@ -0,0 +1,109 @@ +package vezbe.demo.dto; + +import vezbe.demo.model.Korisnik; +import vezbe.demo.model.Pol; +import vezbe.demo.model.Uloga; + +import javax.persistence.*; +import java.util.Date; + +import static javax.persistence.EnumType.STRING; + +public class KorisnikDto { + + private String korisnickoIme; + private String lozinka; + private String ime; + private String prezime; + private String datumRodjenja; + private String pol; + private String uloga; + + public KorisnikDto() { + } + public KorisnikDto(Korisnik korisnik) { + this.korisnickoIme = korisnik.getKorisnickoIme(); + this.lozinka = korisnik.getLozinka(); + this.ime = korisnik.getIme(); + this.prezime = korisnik.getPrezime(); + this.datumRodjenja = korisnik.getDatumRodjenja().toString(); + this.pol = korisnik.getPol().toString(); + this.uloga = korisnik.getUloga().toString(); + } + + public KorisnikDto(String korisnickoIme, String lozinka, String ime, String prezime, String datumRodjenja,String pol,String uloga) { + this.korisnickoIme = korisnickoIme; + this.lozinka = lozinka; + this.ime = ime; + this.prezime = prezime; + this.datumRodjenja = datumRodjenja; + this.pol = pol; + this.uloga = uloga; + } + public KorisnikDto(String korisnickoIme, String lozinka, String ime, String prezime, Date datumRodjenja,Pol pol,Uloga uloga) { + + this.korisnickoIme = korisnickoIme; + this.lozinka = lozinka; + this.ime = ime; + this.prezime = prezime; + this.datumRodjenja = datumRodjenja.toString(); + this.pol = pol.name(); + this.uloga = uloga.name(); + } + + public String getLozinka() { + return lozinka; + } + + public void setLozinka(String lozinka) { + this.lozinka = lozinka; + } + + public String getIme() { + return ime; + } + + public void setIme(String ime) { + this.ime = ime; + } + + public String getPrezime() { + return prezime; + } + + public void setPrezime(String prezime) { + this.prezime = prezime; + } + + public String getDatumRodjenja() { + return datumRodjenja; + } + + public void setDatumRodjenja(String datumRodjenja) { + this.datumRodjenja = datumRodjenja; + } + + public String getPol() { + return pol; + } + + public void setPol(String pol) { + this.pol = pol; + } + + public String getKorisnickoIme() { + return korisnickoIme; + } + + public void setKorisnickoIme(String korisnickoIme) { + this.korisnickoIme = korisnickoIme; + } + + public String getUloga() { + return uloga; + } + + public void setUloga(String uloga) { + this.uloga = uloga; + } +} diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/dto/KorpaDto.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/dto/KorpaDto.java new file mode 100644 index 0000000..1ce91f9 --- /dev/null +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/dto/KorpaDto.java @@ -0,0 +1,33 @@ +package vezbe.demo.dto; + +import vezbe.demo.model.Artikal; + +public class KorpaDto { + private String artikal; + private int kolicina; + + public KorpaDto() { + + } + + public KorpaDto( String artikal, int kolicina) { + this.artikal = artikal; + this.kolicina = kolicina; + } + + public String getArtikal() { + return artikal; + } + + public void setArtikal(String artikal) { + this.artikal = artikal; + } + + public int getKolicina() { + return kolicina; + } + + public void setKolicina(int kolicina) { + this.kolicina = kolicina; + } +} diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/dto/KupacDto.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/dto/KupacDto.java new file mode 100644 index 0000000..d324f31 --- /dev/null +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/dto/KupacDto.java @@ -0,0 +1,114 @@ +package vezbe.demo.dto; + +import vezbe.demo.model.*; + +import javax.persistence.*; +import java.io.Serializable; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashSet; +import java.util.Set; + +import static javax.persistence.EnumType.STRING; + +public class KupacDto { + + private Long id; + + private String korisnickoIme; + + private String lozinka; + + private String ime; + + private String prezime; + + private String pol; + + private String datumRodjenja; + + private Uloga uloga; + + public KupacDto(Long id, String korisnickoIme, String lozinka, String ime, String prezime, String pol, String datumRodjenja) { + + this.uloga = Uloga.Kupac; + } + public KupacDto(Kupac kupac) { + this.id = kupac.getId(); + this.korisnickoIme = kupac.getKorisnickoIme(); + this.lozinka = kupac.getLozinka(); + this.ime = kupac.getIme(); + this.prezime = kupac.getPrezime(); + this.pol = kupac.getPol().name(); + this.datumRodjenja = kupac.getDatumRodjenja().toString(); + this.uloga = Uloga.Kupac; + } + + public KupacDto() { + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getKorisnickoIme() { + return korisnickoIme; + } + + public void setKorisnickoIme(String korisnickoIme) { + this.korisnickoIme = korisnickoIme; + } + + public String getLozinka() { + return lozinka; + } + + public void setLozinka(String lozinka) { + this.lozinka = lozinka; + } + + public String getIme() { + return ime; + } + + public void setIme(String ime) { + this.ime = ime; + } + + public String getPrezime() { + return prezime; + } + + public void setPrezime(String prezime) { + this.prezime = prezime; + } + + public String getPol() { + return pol; + } + + public void setPol(String pol) { + this.pol = pol; + } + + public String getDatumRodjenja() { + return datumRodjenja; + } + + public void setDatumRodjenja(String datumRodjenja) { + this.datumRodjenja = datumRodjenja; + } + + public Uloga getUloga() { + return uloga; + } + + public void setUloga(Uloga uloga) { + this.uloga = uloga; + } +} diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/dto/LoginDto.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/dto/LoginDto.java new file mode 100644 index 0000000..3bd54ab --- /dev/null +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/dto/LoginDto.java @@ -0,0 +1,107 @@ +package vezbe.demo.dto; + +import vezbe.demo.model.Pol; +import vezbe.demo.model.Uloga; + +import javax.persistence.*; +import java.util.Date; + +import static javax.persistence.EnumType.STRING; + +public class LoginDto { + private String korisnickoIme; + private String lozinka; + private String ime; + private String prezime; + private String datumRodjenja; + private String pol; + private String uloga; + private String sessionId; + + public LoginDto() { + } + + public LoginDto(String korisnickoIme, String lozinka, String ime, String prezime, String datumRodjenja,String pol,String uloga) { + this.korisnickoIme = korisnickoIme; + this.lozinka = lozinka; + this.ime = ime; + this.prezime = prezime; + this.datumRodjenja = datumRodjenja; + this.pol = pol; + this.uloga = uloga; + } + public LoginDto(String korisnickoIme, String lozinka, String ime, String prezime, Date datumRodjenja,Pol pol,Uloga uloga) { + + this.korisnickoIme = korisnickoIme; + this.lozinka = lozinka; + this.ime = ime; + this.prezime = prezime; + this.datumRodjenja = datumRodjenja.toString(); + this.pol = pol.name(); + this.uloga = uloga.name(); + } + + public String getSessionId() { + return sessionId; + } + + public void setSessionId(String sessionId) { + this.sessionId = sessionId; + } + + public String getLozinka() { + return lozinka; + } + + public void setLozinka(String lozinka) { + this.lozinka = lozinka; + } + + public String getIme() { + return ime; + } + + public void setIme(String ime) { + this.ime = ime; + } + + public String getPrezime() { + return prezime; + } + + public void setPrezime(String prezime) { + this.prezime = prezime; + } + + public String getDatumRodjenja() { + return datumRodjenja; + } + + public void setDatumRodjenja(String datumRodjenja) { + this.datumRodjenja = datumRodjenja; + } + + public String getPol() { + return pol; + } + + public void setPol(String pol) { + this.pol = pol; + } + + public String getKorisnickoIme() { + return korisnickoIme; + } + + public void setKorisnickoIme(String korisnickoIme) { + this.korisnickoIme = korisnickoIme; + } + + public String getUloga() { + return uloga; + } + + public void setUloga(String uloga) { + this.uloga = uloga; + } +} diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/dto/MenadzerDto.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/dto/MenadzerDto.java new file mode 100644 index 0000000..c0b1970 --- /dev/null +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/dto/MenadzerDto.java @@ -0,0 +1,114 @@ +package vezbe.demo.dto; + +import vezbe.demo.model.*; + +import javax.persistence.*; +import java.io.Serializable; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashSet; +import java.util.Set; + +import static javax.persistence.EnumType.STRING; + +public class MenadzerDto { + + private Long id; + + private String korisnickoIme; + + private String lozinka; + + private String ime; + + private String prezime; + + private String pol; + + private String datumRodjenja; + + private Uloga uloga; + + public MenadzerDto(Long id, String korisnickoIme, String lozinka, String ime, String prezime, String pol, String datumRodjenja) { + + this.uloga = Uloga.Kupac; + } + public MenadzerDto(Kupac kupac) { + this.id = kupac.getId(); + this.korisnickoIme = kupac.getKorisnickoIme(); + this.lozinka = kupac.getLozinka(); + this.ime = kupac.getIme(); + this.prezime = kupac.getPrezime(); + this.pol = kupac.getPol().name(); + this.datumRodjenja = kupac.getDatumRodjenja().toString(); + this.uloga = Uloga.Kupac; + } + + public MenadzerDto() { + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getKorisnickoIme() { + return korisnickoIme; + } + + public void setKorisnickoIme(String korisnickoIme) { + this.korisnickoIme = korisnickoIme; + } + + public String getLozinka() { + return lozinka; + } + + public void setLozinka(String lozinka) { + this.lozinka = lozinka; + } + + public String getIme() { + return ime; + } + + public void setIme(String ime) { + this.ime = ime; + } + + public String getPrezime() { + return prezime; + } + + public void setPrezime(String prezime) { + this.prezime = prezime; + } + + public String getPol() { + return pol; + } + + public void setPol(String pol) { + this.pol = pol; + } + + public String getDatumRodjenja() { + return datumRodjenja; + } + + public void setDatumRodjenja(String datumRodjenja) { + this.datumRodjenja = datumRodjenja; + } + + public Uloga getUloga() { + return uloga; + } + + public void setUloga(Uloga uloga) { + this.uloga = uloga; + } +} diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/dto/NoviMenadzerDto.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/dto/NoviMenadzerDto.java new file mode 100644 index 0000000..1bd6d3a --- /dev/null +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/dto/NoviMenadzerDto.java @@ -0,0 +1,30 @@ +package vezbe.demo.dto; + +public class NoviMenadzerDto { + private String korisnickoIme; + private String naziv; + + public String getKorisnickoIme() { + return korisnickoIme; + } + + public void setKorisnickoIme(String korisnickoIme) { + this.korisnickoIme = korisnickoIme; + } + + public NoviMenadzerDto() { + } + + public String getNaziv() { + return naziv; + } + + public void setNaziv(String naziv) { + this.naziv = naziv; + } + + public NoviMenadzerDto(String korisnickoIme, String naziv) { + this.korisnickoIme = korisnickoIme; + this.naziv = naziv; + } +} diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/dto/PorudzbinaDto.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/dto/PorudzbinaDto.java new file mode 100644 index 0000000..375b02e --- /dev/null +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/dto/PorudzbinaDto.java @@ -0,0 +1,58 @@ +package vezbe.demo.dto; + +import vezbe.demo.model.StatusPorudzbine; + +public class PorudzbinaDto { + private String id; + private double cena; + private String datum; + private String status; + + public PorudzbinaDto(String id, double cena, String datum) { + this.id = id; + this.cena = cena; + this.datum = datum; + } + + public PorudzbinaDto(String id, double cena, String datum, StatusPorudzbine status) { + this.id = id; + this.cena = cena; + this.datum = datum; + this.status = status.toString(); + } + + public String getStatus() { + return status; + } + + public void setStatus(StatusPorudzbine status) { + this.status = status.toString(); + } + + public PorudzbinaDto() { + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public double getCena() { + return cena; + } + + public void setCena(double cena) { + this.cena = cena; + } + + public String getDatum() { + return datum; + } + + public void setDatum(String datum) { + this.datum = datum; + } +} diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/dto/RestoranBasicInfoDto.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/dto/RestoranBasicInfoDto.java new file mode 100644 index 0000000..fc4e6cc --- /dev/null +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/dto/RestoranBasicInfoDto.java @@ -0,0 +1,43 @@ +package vezbe.demo.dto; + +import vezbe.demo.model.Lokacija; + +public class RestoranBasicInfoDto { + private String naziv; + private String tip; + private String adresa; + + public RestoranBasicInfoDto() { + + } + + public RestoranBasicInfoDto(String naziv, String tip, String adresa) { + this.naziv = naziv; + this.tip = tip; + this.adresa = adresa; + } + + public String getNaziv() { + return naziv; + } + + public void setNaziv(String naziv) { + this.naziv = naziv; + } + + public String getTip() { + return tip; + } + + public void setTip(String tip) { + this.tip = tip; + } + + public String getAdresa() { + return adresa; + } + + public void setAdresa(String adresa) { + this.adresa = adresa; + } +} diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/dto/RestoranDto.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/dto/RestoranDto.java new file mode 100644 index 0000000..15bc83e --- /dev/null +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/dto/RestoranDto.java @@ -0,0 +1,62 @@ +package vezbe.demo.dto; + + +public class RestoranDto { + private String naziv; + private String tipRestorana; + private double geoDuzina; + private double geoSirina; + private String adresa; + + public RestoranDto() { + } + + + public double getGeoDuzina() { + return geoDuzina; + } + + public void setGeoDuzina(double geoDuzina) { + this.geoDuzina = geoDuzina; + } + + public double getGeoSirina() { + return geoSirina; + } + + public void setGeoSirina(double geoSirina) { + this.geoSirina = geoSirina; + } + + public String getAdresa() { + return adresa; + } + + public void setAdresa(String adresa) { + this.adresa = adresa; + } + + public RestoranDto(String naziv, String tipRestorana, double geoDuzina, double geoSirina, String adresa) { + this.naziv = naziv; + this.tipRestorana = tipRestorana; + this.geoDuzina = geoDuzina; + this.geoSirina = geoSirina; + this.adresa = adresa; + } + + public String getNaziv() { + return naziv; + } + + public void setNaziv(String naziv) { + this.naziv = naziv; + } + + public String getTipRestorana() { + return tipRestorana; + } + + public void setTipRestorana(String tipRestorana) { + this.tipRestorana = tipRestorana; + } +} diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/dto/RestoranImeDto.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/dto/RestoranImeDto.java new file mode 100644 index 0000000..533fac6 --- /dev/null +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/dto/RestoranImeDto.java @@ -0,0 +1,20 @@ +package vezbe.demo.dto; + +public class RestoranImeDto { + private String naziv; + + public RestoranImeDto() { + } + + public RestoranImeDto(String naziv) { + this.naziv = naziv; + } + + public String getNaziv() { + return naziv; + } + + public void setNaziv(String naziv) { + this.naziv = naziv; + } +} diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/dto/RestoranIspisDto.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/dto/RestoranIspisDto.java new file mode 100644 index 0000000..eef439e --- /dev/null +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/dto/RestoranIspisDto.java @@ -0,0 +1,77 @@ +package vezbe.demo.dto; + +import vezbe.demo.model.Artikal; +import vezbe.demo.model.Komentar; +import vezbe.demo.model.Lokacija; + +import java.util.List; +import java.util.Set; + +public class RestoranIspisDto { + private String naziv; + private String tip; + private Lokacija lokacija; + private double prosecnaOcena; + private Set komentari; + private Set ponuda; + + public RestoranIspisDto() { + } + + public RestoranIspisDto(String naziv, String tip, Lokacija lokacija, double prosecnaOcena, Set komentari, Set ponuda) { + this.naziv = naziv; + this.tip = tip; + this.lokacija = lokacija; + this.prosecnaOcena = prosecnaOcena; + this.komentari = komentari; + this.ponuda = ponuda; + } + + public String getNaziv() { + return naziv; + } + + public void setNaziv(String naziv) { + this.naziv = naziv; + } + + public String getTip() { + return tip; + } + + public void setTip(String tip) { + this.tip = tip; + } + + public Lokacija getLokacija() { + return lokacija; + } + + public void setLokacija(Lokacija lokacija) { + this.lokacija = lokacija; + } + + public double getProsecnaOcena() { + return prosecnaOcena; + } + + public void setProsecnaOcena(double prosecnaOcena) { + this.prosecnaOcena = prosecnaOcena; + } + + public Set getKomentari() { + return komentari; + } + + public void setKomentari(Set komentari) { + this.komentari = komentari; + } + + public Set getPonuda() { + return ponuda; + } + + public void setPonuda(Set ponuda) { + this.ponuda = ponuda; + } +} diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/dto/RestoranPretragaDto.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/dto/RestoranPretragaDto.java new file mode 100644 index 0000000..e9a36d1 --- /dev/null +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/dto/RestoranPretragaDto.java @@ -0,0 +1,40 @@ +package vezbe.demo.dto; + +public class RestoranPretragaDto { + private String naziv; + private String tip; + private String adresa; + + public RestoranPretragaDto() { + } + + public RestoranPretragaDto(String naziv, String tip, String adresa) { + this.naziv = naziv; + this.tip = tip; + this.adresa = adresa; + } + + public String getNaziv() { + return naziv; + } + + public void setNaziv(String naziv) { + this.naziv = naziv; + } + + public String getTip() { + return tip; + } + + public void setTip(String tip) { + this.tip = tip; + } + + public String getAdresa() { + return adresa; + } + + public void setAdresa(String adresa) { + this.adresa = adresa; + } +} diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/model/Artikal.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/model/Artikal.java index 09274b7..54ebfab 100644 --- a/Nadogradnja-demoa/src/main/java/vezbe/demo/model/Artikal.java +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/model/Artikal.java @@ -1,7 +1,11 @@ package vezbe.demo.model; +import com.fasterxml.jackson.annotation.JsonSetter; + import javax.persistence.*; import java.io.Serializable; +import java.io.UnsupportedEncodingException; +import java.util.Base64; @Entity public class Artikal implements Serializable { @@ -20,9 +24,48 @@ public class Artikal implements Serializable { private String opis; + @Column(nullable = true, length = 64) + private String slika; + + @Transient + public String SlikaImagePath() { + if (slika == null || id == null) return null; + + //return "/artikal-slike/" + id + "/" + slika; + return "/src/main/resources/static/images/"+ id + "/" + slika; + } + + + /*@Lob + @Column(name = "slika") + private byte[] slika; + + @JsonSetter("slika") + public void setSlika(String content) { + try { + this.slika = Base64.getDecoder().decode(content.getBytes("UTF-8")); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } + + public byte[] getSlika() { + return slika; + } +*/ public Artikal() { } + public Artikal(Long id, String naziv, double cena, TipArtikla tipArtikla, double kolicina, String opis, String slika) { + this.id = id; + this.naziv = naziv; + this.cena = cena; + this.tipArtikla = tipArtikla; + this.kolicina = kolicina; + this.opis = opis; + this.slika = slika; + } + public Artikal(String naziv, int cena, TipArtikla tipArtikla, int kolicina, String opis) { this.naziv = naziv; this.cena = cena; @@ -31,6 +74,28 @@ public Artikal(String naziv, int cena, TipArtikla tipArtikla, int kolicina, Stri this.opis = opis; } + public String getSlika() { + return slika; + } + + public void setSlika(String slika) { + this.slika = slika; + } + + + public Artikal(String naziv, double cena, TipArtikla tipArtikla) { + this.naziv = naziv; + this.cena = cena; + this.tipArtikla = tipArtikla; + } + /* public Artikal(String naziv, double cena, TipArtikla tipArtikla, byte[] slika) { + this.naziv = naziv; + this.cena = cena; + this.tipArtikla = tipArtikla; + this.slika = slika; + } + + */ public Long getId() { return id; } diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/model/Dostavljac.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/model/Dostavljac.java index b7362e3..7c235d7 100644 --- a/Nadogradnja-demoa/src/main/java/vezbe/demo/model/Dostavljac.java +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/model/Dostavljac.java @@ -1,5 +1,7 @@ package vezbe.demo.model; +import com.fasterxml.jackson.annotation.JsonIgnore; + import javax.persistence.*; import java.io.Serializable; import java.util.HashSet; @@ -8,14 +10,19 @@ @Entity public class Dostavljac extends Korisnik implements Serializable { - @OneToMany + @OneToMany(fetch = FetchType.EAGER) @JoinColumn(name ="dostavljac_id") + @JsonIgnore private Set porudzbineZaDostavu= new HashSet<>(); public Dostavljac(String korisnickoIme, String lozinka, String ime, String prezime, Pol pol, Date datumRodjenja, Set porudzbineZaDostavu) { super(korisnickoIme, lozinka, ime, prezime, pol, datumRodjenja, Uloga.Dostavljac); this.porudzbineZaDostavu = porudzbineZaDostavu; } + public Dostavljac(String korisnickoIme, String lozinka, String ime, String prezime, Pol pol, Date datumRodjenja) { + super(korisnickoIme, lozinka, ime, prezime, pol, datumRodjenja, Uloga.Dostavljac); + this.porudzbineZaDostavu = new HashSet<>(); + } public Dostavljac() { super(); diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/model/FileUploadUtil.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/model/FileUploadUtil.java new file mode 100644 index 0000000..2c4c282 --- /dev/null +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/model/FileUploadUtil.java @@ -0,0 +1,26 @@ +package vezbe.demo.model; + +import java.io.*; +import java.nio.file.*; + +import org.springframework.web.multipart.MultipartFile; + +public class FileUploadUtil { + + public static void saveFile(String uploadDir, String fileName, + MultipartFile multipartFile) throws IOException { + Path uploadPath = Paths.get(uploadDir); + + if (!Files.exists(uploadPath)) { + Files.createDirectories(uploadPath); + } + + + try (InputStream inputStream = multipartFile.getInputStream()) { + Path filePath = uploadPath.resolve(fileName); + Files.copy(inputStream, filePath, StandardCopyOption.REPLACE_EXISTING); + } catch (IOException ioe) { + throw new IOException("Could not save image file: " + fileName, ioe); + } + } +} diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/model/Korisnik.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/model/Korisnik.java index a3f2ae6..841907d 100644 --- a/Nadogradnja-demoa/src/main/java/vezbe/demo/model/Korisnik.java +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/model/Korisnik.java @@ -8,7 +8,7 @@ @Entity @Inheritance(strategy = InheritanceType.JOINED) -public abstract class Korisnik implements Serializable { +public class Korisnik implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -43,6 +43,13 @@ public Korisnik(String korisnickoIme, String lozinka, String ime, String prezime public Korisnik() { } + public Korisnik(String username, String password, String ime, String prezime) { + this.korisnickoIme = korisnickoIme; + this.lozinka = lozinka; + this.ime = ime; + this.prezime = prezime; + this.uloga = Uloga.Admin; + } public String getKorisnickoIme() { return korisnickoIme; @@ -107,4 +114,5 @@ public Uloga getUloga() { public void setUloga(Uloga uloga) { this.uloga = uloga; } + } diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/model/Kupac.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/model/Kupac.java index 13ae568..b63ee74 100644 --- a/Nadogradnja-demoa/src/main/java/vezbe/demo/model/Kupac.java +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/model/Kupac.java @@ -1,5 +1,7 @@ package vezbe.demo.model; +import com.fasterxml.jackson.annotation.JsonIgnore; + import javax.persistence.*; import java.io.Serializable; import java.util.HashSet; @@ -9,7 +11,7 @@ @Entity public class Kupac extends Korisnik implements Serializable { @Column(name = "porudzbina_id") - @OneToMany(cascade = CascadeType.ALL, mappedBy="kupac") + @OneToMany(cascade = CascadeType.ALL,fetch = FetchType.EAGER, mappedBy="kupac") private Set listaPorudzbina = new HashSet<>(); private int bodovi; @OneToOne @@ -18,15 +20,51 @@ public class Kupac extends Korisnik implements Serializable { public Kupac(String korisnickoIme, String lozinka, String ime, String prezime, Pol pol, Date datumRodjenja, Set listaPorudzbina, int bodovi, TipKupca tipKupca) { super(korisnickoIme, lozinka, ime, prezime, pol, datumRodjenja, Uloga.Kupac); - this.listaPorudzbina = listaPorudzbina; + Porudzbina porudzbina = new Porudzbina(); + boolean sadrziKorpu = false; + porudzbina.setKupac(Kupac.this); + porudzbina.setStatusPorudzbine(StatusPorudzbine.USastavljanu); + Set noviSetPorudzbina = new HashSet<>(); + if(listaPorudzbina==null){ + noviSetPorudzbina.add(porudzbina); + this.listaPorudzbina = noviSetPorudzbina; + }else{ + for(Porudzbina p: listaPorudzbina){ + if(p.getStatus().equals(StatusPorudzbine.USastavljanu)){ + sadrziKorpu = true; + break; + } + } + if(sadrziKorpu){ + this.listaPorudzbina = listaPorudzbina; + }else{ + listaPorudzbina.add(porudzbina); + this.listaPorudzbina = listaPorudzbina; + } + } this.bodovi = bodovi; this.tipKupca =tipKupca ; } - public Kupac() { + public Kupac(String korisnickoIme, String lozinka, String ime, String prezime, Pol pol, Date datumRodjenja){ + super(korisnickoIme, lozinka, ime, prezime, pol,datumRodjenja, Uloga.Kupac); + this.bodovi = 0; + this.tipKupca = null; + Porudzbina porudzbina = new Porudzbina(); + porudzbina.setKupac(Kupac.this); + porudzbina.setStatusPorudzbine(StatusPorudzbine.USastavljanu); + this.listaPorudzbina.add(porudzbina); + } + public Kupac() { + Porudzbina porudzbina = new Porudzbina(); + porudzbina.setKupac(Kupac.this); + porudzbina.setStatusPorudzbine(StatusPorudzbine.USastavljanu); + this.listaPorudzbina.add(porudzbina); + } + public int getBodovi() { return bodovi; } diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/model/Lokacija.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/model/Lokacija.java index ff6d483..e272e3a 100644 --- a/Nadogradnja-demoa/src/main/java/vezbe/demo/model/Lokacija.java +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/model/Lokacija.java @@ -9,7 +9,7 @@ public class Lokacija implements Serializable { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private double geoDuzina; - private double geoSirina;//double + private double geoSirina; @Column(nullable = false) private String adresa; diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/model/Menadzer.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/model/Menadzer.java index d777e61..f5aadc6 100644 --- a/Nadogradnja-demoa/src/main/java/vezbe/demo/model/Menadzer.java +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/model/Menadzer.java @@ -14,6 +14,10 @@ public Menadzer(String korisnickoIme, String lozinka, String ime, String prezime super(korisnickoIme, lozinka, ime, prezime, pol, datumRodjenja, Uloga.Menadzer); this.restoran = restoran; } + public Menadzer(String korisnickoIme, String lozinka, String ime, String prezime, Pol pol, Date datumRodjenja) { + super(korisnickoIme, lozinka, ime, prezime, pol, datumRodjenja, Uloga.Menadzer); + this.restoran = null; + } public Menadzer() { } diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/model/Porudzbina.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/model/Porudzbina.java index 67579e6..012fc42 100644 --- a/Nadogradnja-demoa/src/main/java/vezbe/demo/model/Porudzbina.java +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/model/Porudzbina.java @@ -1,6 +1,8 @@ package vezbe.demo.model; +import com.fasterxml.jackson.annotation.JsonIgnore; import org.hibernate.annotations.GenericGenerator; +import org.springframework.data.repository.cdi.Eager; import javax.persistence.*; import java.io.Serializable; @@ -20,10 +22,11 @@ public class Porudzbina implements Serializable { @GeneratedValue( strategy = GenerationType.AUTO) private UUID id; - @OneToMany //ManyToMany nova klasa stavka pordurdzbine artikal i kolicina polja + @OneToMany(fetch = FetchType.EAGER) @JoinColumn(name = "porudzbina_id") private Set poruceniArtikli = new HashSet<>(); @ManyToOne + @JsonIgnore private Restoran restoran; @Column(name = "datum_i_vreme") @@ -31,6 +34,7 @@ public class Porudzbina implements Serializable { private double cena; @ManyToOne @JoinColumn(name = "kupac_id") + @JsonIgnore private Kupac kupac; @Enumerated(EnumType.STRING) private StatusPorudzbine statusPorudzbine; @@ -41,8 +45,16 @@ public UUID getUUID() { } public Porudzbina() { + this.cena = 0; + } + public Porudzbina(StatusPorudzbine statusPorudzbine, Kupac kupac) + { + this.cena = 0; + this.statusPorudzbine = statusPorudzbine; + this.kupac = kupac; } + public Porudzbina( Set poruceniArtikli, Restoran restoran, Date datumIVreme, long cena, Kupac kupac, StatusPorudzbine statusPorudzbine) { this.poruceniArtikli = poruceniArtikli; this.restoran = restoran; @@ -51,6 +63,13 @@ public Porudzbina( Set poruceniArtikli, Restoran restoran, Dat this.kupac =kupac; this.statusPorudzbine = statusPorudzbine; } + public Porudzbina(Kupac kupac,Restoran restoran, StatusPorudzbine statusPorudzbine,Date datumIVreme) { + this.datumIVreme = datumIVreme; + this.statusPorudzbine = statusPorudzbine; + this.kupac = kupac; + this.restoran = restoran; + this.cena = 0; + } public void setUUID(UUID id) { this.id = id; diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/model/Restoran.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/model/Restoran.java index c51e5bb..1dbcec3 100644 --- a/Nadogradnja-demoa/src/main/java/vezbe/demo/model/Restoran.java +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/model/Restoran.java @@ -17,7 +17,7 @@ public class Restoran implements Serializable { @Column(nullable = false) private String tipRestorana; - @OneToMany + @OneToMany(fetch = FetchType.EAGER) @JoinColumn(name = "restoran_id") private Set ponuda = new HashSet<>(); @@ -41,6 +41,11 @@ public Restoran(String naziv, String tipRestorana, Lokacija lokacija) { this.lokacija = lokacija; } + public Restoran(String naziv, String tipRestorana) { + this.naziv = naziv; + this.tipRestorana = tipRestorana; + } + public Long getId() { return id; } diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/model/StatusPorudzbine.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/model/StatusPorudzbine.java index 321c023..5ee4373 100644 --- a/Nadogradnja-demoa/src/main/java/vezbe/demo/model/StatusPorudzbine.java +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/model/StatusPorudzbine.java @@ -6,5 +6,6 @@ public enum StatusPorudzbine { CekaDostavljača, UTransportu, Dostavljena, + USastavljanu, Otkazana; } diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/repository/MenadzerRepository.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/repository/MenadzerRepository.java index ce08fdf..49d7d10 100644 --- a/Nadogradnja-demoa/src/main/java/vezbe/demo/repository/MenadzerRepository.java +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/repository/MenadzerRepository.java @@ -4,4 +4,5 @@ import vezbe.demo.model.Menadzer; public interface MenadzerRepository extends JpaRepository { + } diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/service/ArtikalService.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/service/ArtikalService.java new file mode 100644 index 0000000..7ab02ae --- /dev/null +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/service/ArtikalService.java @@ -0,0 +1,43 @@ +package vezbe.demo.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import vezbe.demo.model.Artikal; +import vezbe.demo.model.Restoran; +import vezbe.demo.repository.ArtikalRepository; + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +@Service +public class ArtikalService { + + @Autowired + private ArtikalRepository artikalRepository; + + public Set dodajArtikal(Artikal artikal, Restoran restoran){ + artikalRepository.save(artikal); + restoran.getPonuda().add(artikal); + + /* List lista = new ArrayList<>(); + for(Artikal artikal: restoran.getPonuda()){ + lista.add(artikal); + } +*/ + return restoran.getPonuda(); + + } + public Artikal findById(Long id){ + Artikal a = null; + for(Artikal artikal: artikalRepository.findAll()){ + if(artikal.getId().equals(id)) { + a = artikal; + } + } + return a; + } + public void save(Artikal artikal){ + artikalRepository.save(artikal); + } +} diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/service/DostavljacService.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/service/DostavljacService.java new file mode 100644 index 0000000..7b1307b --- /dev/null +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/service/DostavljacService.java @@ -0,0 +1,69 @@ +package vezbe.demo.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import vezbe.demo.model.*; +import vezbe.demo.repository.DostavljacRepository; +import vezbe.demo.repository.MenadzerRepository; + +import java.util.List; +import java.util.Optional; +import java.util.Set; + +@Service +public class DostavljacService { + + @Autowired + private DostavljacRepository dostavljacRepository; + + public Dostavljac findOne(Long id){ + Optional foundDostavljac = dostavljacRepository.findById(id); + if (foundDostavljac.isPresent()) + return foundDostavljac.get(); + + return null; + } + + public List findAll(){ + return dostavljacRepository.findAll(); + } + + public void save(Dostavljac dostavljac){ + dostavljacRepository.save(dostavljac); + } + + public void delete(Dostavljac dostavljac){dostavljacRepository.delete(dostavljac);} + + public Set findAllById(Long id){ + return dostavljacRepository.getById(id).getPorudzbineZaDostavu(); + } + + public void addPorudzbina(Dostavljac dostavljac, Porudzbina porudzbina){ +// for(Porudzbina porudzbina1: dostavljac.getPorudzbineZaDostavu()){ +// if(porudzbina1.getUUID().equals(porudzbina.getUUID())){ +// dostavljac.getPorudzbineZaDostavu().remove(porudzbina1); +// } +// } + dostavljac.getPorudzbineZaDostavu().add(porudzbina); + dostavljacRepository.save(dostavljac); + } + public Dostavljac findDostavljac(String korisnickoIme){ + for(Dostavljac dostavljac: dostavljacRepository.findAll()){ + if(dostavljac.getKorisnickoIme().equals(korisnickoIme)){ + return dostavljac; + } + } + return null; + } + public void addCondition(Dostavljac dostavljac, Porudzbina porudzbina){ + for(Porudzbina p: dostavljac.getPorudzbineZaDostavu()){ + if(p.getUUID().equals(porudzbina.getUUID())){ + p.setStatusPorudzbine(StatusPorudzbine.UTransportu); + dostavljacRepository.save(dostavljac); + return; + } + } + dostavljac.getPorudzbineZaDostavu().add(porudzbina); + dostavljacRepository.save(dostavljac); + } +} diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/service/KomentarService.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/service/KomentarService.java new file mode 100644 index 0000000..30981fb --- /dev/null +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/service/KomentarService.java @@ -0,0 +1,41 @@ +package vezbe.demo.service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import java.util.HashSet; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import vezbe.demo.dto.KomentarDto; +import vezbe.demo.model.Komentar; +import vezbe.demo.model.Restoran; +import vezbe.demo.repository.KomentarRepository; + + +@Service +public class KomentarService { + @Autowired + KomentarRepository komentarRepository; + + public double getProsecnaOcena(Long restoranId) { + double ocena = 0; + for (Komentar komentar : komentarRepository.findAll()) { + if (komentar.getRestoran().getId().equals(restoranId)) { + ocena += komentar.getOcena(); + } + } + return ocena; + } + + public Set getByRestoran(Long restoranId) { + Set komentarList = new HashSet<>(); + for (Komentar komentar : komentarRepository.findAll()) { + if (komentar.getRestoran().getId().equals(restoranId)) { + KomentarDto komentarDto = new KomentarDto(komentar.getKupac().getKorisnickoIme(), komentar.getTekst(), komentar.getOcena()); + komentarList.add(komentarDto); + } + } + return komentarList; + } +} \ No newline at end of file diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/service/KorisnikService.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/service/KorisnikService.java new file mode 100644 index 0000000..7cb7029 --- /dev/null +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/service/KorisnikService.java @@ -0,0 +1,45 @@ +package vezbe.demo.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import vezbe.demo.dto.KorisnikDto; +import vezbe.demo.model.*; +import vezbe.demo.repository.KorisnikRepository; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class KorisnikService { + + @Autowired + private KorisnikRepository korisnikRepository; + + public Korisnik login(String username, String password) { + List listaKorisnika = new ArrayList<>(); + + + listaKorisnika = korisnikRepository.findAll(); + Korisnik korisnik = null; + for (Korisnik k : listaKorisnika) { + if (k.getKorisnickoIme().equals(username) && k.getLozinka().equals(password)) { + korisnik = k; + } + } + + return korisnik; + + } + public List findAll(){ + List listaKorisnika= new ArrayList<>(); + for(Korisnik korisnik: korisnikRepository.findAll()){ + KorisnikDto korisnikDto = new KorisnikDto(korisnik); + listaKorisnika.add(korisnikDto); + } + return listaKorisnika; + } + + + + +} diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/service/KupacService.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/service/KupacService.java index df41abb..8c496ab 100644 --- a/Nadogradnja-demoa/src/main/java/vezbe/demo/service/KupacService.java +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/service/KupacService.java @@ -2,11 +2,15 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import vezbe.demo.dto.PorudzbinaDto; import vezbe.demo.model.Kupac; +import vezbe.demo.model.Porudzbina; +import vezbe.demo.model.StatusPorudzbine; import vezbe.demo.repository.KupacRepository; -import java.util.List; -import java.util.Optional; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; @Service public class KupacService { @@ -15,11 +19,13 @@ public class KupacService { private KupacRepository kupacRepository; public Kupac findOne(Long id){ - Optional foundKupac = kupacRepository.findById(id); - if (foundKupac.isPresent()) - return foundKupac.get(); - - return null; + Kupac k = null; + for(Kupac kupac: kupacRepository.findAll()){ + if(kupac.getId().equals(id)){ + k = kupac; + } + } + return k; } public List findAll(){ @@ -31,4 +37,56 @@ public Kupac save(Kupac kupac){ } public void delete(Kupac kupac){kupacRepository.delete(kupac);} + + public boolean checkIfUsernameIsAvailable(String korisnickoIme){ + for(Kupac kupac: kupacRepository.findAll()){ + if(korisnickoIme.equals(kupac.getKorisnickoIme())){ + return false; + } + } + return true; + } + + + public Set findAllPorudzbineByID(Long id){ + Set listaPorudzbina = kupacRepository.getById(id).getListaPorudzbina(); + Set bezPrazneListe = new HashSet<>(); + for(Porudzbina porudzbina: listaPorudzbina) { + if (porudzbina.getStatusPorudzbine().equals(StatusPorudzbine.USastavljanu)) { + continue; + } + bezPrazneListe.add(porudzbina); + } + return bezPrazneListe; + } + public void updateKupac(Kupac kupac, Porudzbina porudzbina){ + kupac.getListaPorudzbina().add(porudzbina); + kupacRepository.save(kupac); + } + public void dodajBodove(double cena, Kupac kupac){ + double noviBodovi = cena/1000 * 133; + kupac.setBodovi((int) (kupac.getBodovi() + noviBodovi)); + kupacRepository.save(kupac); + } + public Set svePorudzbineBasicInfo(Long id){ + Set porudzbine = kupacRepository.getById(id).getListaPorudzbina(); + + Set dto = new HashSet<>(); + for(Porudzbina porudzbina: porudzbine){ + if(porudzbina.getStatusPorudzbine().equals(StatusPorudzbine.USastavljanu)){ + continue; + } + Date date1 = porudzbina.getDatumIVreme(); + + + PorudzbinaDto item = new PorudzbinaDto(porudzbina.getUUID().toString(),porudzbina.getCena(),porudzbina.getDatumIVreme().toString()); + dto.add(item); + System.out.println(item.getId()); + System.out.println(item.getCena()); + System.out.println(item.getDatum()); + } + + return dto; + } + } diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/service/LokacijaService.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/service/LokacijaService.java new file mode 100644 index 0000000..ce75304 --- /dev/null +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/service/LokacijaService.java @@ -0,0 +1,16 @@ +package vezbe.demo.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import vezbe.demo.model.Lokacija; +import vezbe.demo.repository.LokacijaRepository; + +@Service +public class LokacijaService { + @Autowired + private LokacijaRepository lokacijaRepository; + + public void save(Lokacija lokacija){ + this.lokacijaRepository.save(lokacija); + } +} diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/service/MenadzerService.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/service/MenadzerService.java new file mode 100644 index 0000000..7707e37 --- /dev/null +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/service/MenadzerService.java @@ -0,0 +1,58 @@ +package vezbe.demo.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import vezbe.demo.model.*; +import vezbe.demo.repository.MenadzerRepository; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +@Service +public class MenadzerService { + + @Autowired + private MenadzerRepository menadzerRepository; + + public Menadzer findOne(Long id){ + Optional foundMenadzer = menadzerRepository.findById(id); + if (foundMenadzer.isPresent()) + return foundMenadzer.get(); + + return null; + } + + public List findAll(){ + return menadzerRepository.findAll(); + } + + public Menadzer save(Menadzer menadzer){ + return menadzerRepository.save(menadzer); + } + + public void delete(Menadzer menadzer){menadzerRepository.delete(menadzer);} + + public Restoran findRestoran(Long ID){ + for(Menadzer menadzer: menadzerRepository.findAll()){ + if(menadzer.getId().equals(ID)){ + return menadzer.getRestoran(); + + } + } + return null; + } + + public Menadzer postaviNovogMenadzera(String korisnickoIme, Restoran restoran){ + Menadzer m = null; + for(Menadzer menadzer: menadzerRepository.findAll()){ + if(menadzer.getKorisnickoIme().equals(korisnickoIme)){ + m = menadzer; + } + } + m.setRestoran(restoran); + menadzerRepository.save(m); + return m; + } + +} diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/service/PorudzbinaService.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/service/PorudzbinaService.java new file mode 100644 index 0000000..65cf970 --- /dev/null +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/service/PorudzbinaService.java @@ -0,0 +1,232 @@ +package vezbe.demo.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import vezbe.demo.dto.PorudzbinaDto; +import vezbe.demo.model.*; +import vezbe.demo.repository.PorudzbinaRepository; +import java.util.*; + +@Service +public class PorudzbinaService { + @Autowired + PorudzbinaRepository porudzbinaRepository; + + @Autowired + RestoranService restoranService; + + @Autowired + StavkaPorudzbineService stavkaPorudzbineService; + + @Autowired + KupacService kupacService; + + @Autowired + DostavljacService dostavljacService; + + + public List getListaPorudzbina(Restoran restoran) { + List listaPorudzbina = new ArrayList<>(); + for (Porudzbina porudzbina : porudzbinaRepository.findAll()) { + for (StavkaPorudzbine stavkaPorudzbine : porudzbina.getPoruceniArtikli()) { + for (Artikal artikal : restoran.getPonuda()) { + if (stavkaPorudzbine.getPoruceniArtikal().getId().equals(artikal.getId())) { + if(!listaPorudzbina.contains(porudzbina)) { + listaPorudzbina.add(porudzbina); + break; + } + } + + } + } + } + List dtoList = new ArrayList<>(); + for(Porudzbina porudzbina: listaPorudzbina){ + PorudzbinaDto dto = new PorudzbinaDto(porudzbina.getId().toString(), porudzbina.getCena(), porudzbina.getDatumIVreme().toString(), porudzbina.getStatus()); + dtoList.add(dto); + } + + return dtoList; + } + public Set findCekaDostavljaca(){ + Set setp = new HashSet<>(); + for(Porudzbina porudzbina: porudzbinaRepository.findAll()){ + if(porudzbina.getStatus().equals(StatusPorudzbine.CekaDostavljača)){ + PorudzbinaDto porudzbinaDto = new PorudzbinaDto(porudzbina.getUUID().toString(),porudzbina.getCena(), porudzbina.getDatumIVreme().toString(), porudzbina.getStatus()); + setp.add(porudzbinaDto); + } + } + return setp; + } + public void dodajStavku(StavkaPorudzbine stavkaPorudzbine, Porudzbina porudzbina){ + Set lista = new HashSet<>(); + lista = porudzbina.getPoruceniArtikli(); + lista.add(stavkaPorudzbine); + porudzbina.setPoruceniArtikli(lista); + porudzbinaRepository.save(porudzbina); + } + public void makePorudzbina(Kupac kupac, String restoranName){//TREBA FORMATIRATI OVE DATUME KAD ZAVRSIS + Restoran restoran = restoranService.findByRestoranIme(restoranName); + // Date date= null; + // date = new Date("yyyy/dd/MM"); + // Porudzbina porudzbina = new Porudzbina(kupac, restoran1, StatusPorudzbine.USastavljanu, new Date()); + Porudzbina porudzbina = null; + for(Porudzbina porudzbina1: porudzbinaRepository.findAll()){ + if(porudzbina1.getKupac().getId().equals(kupac.getId())){ + for(Porudzbina p: kupac.getListaPorudzbina()){ + if(p.getStatusPorudzbine().equals(StatusPorudzbine.USastavljanu)){ + porudzbina = p; + porudzbina.setRestoran(restoran); + porudzbina.setDatumIVreme(new Date()); + } + } + } + } + porudzbinaRepository.save(porudzbina); + restoranService.save(restoran); + kupacService.updateKupac(kupac, porudzbina); + + } + public Porudzbina getAll(){ + Porudzbina p = null; + for(Porudzbina porudzbina: porudzbinaRepository.findAll()){ + if(porudzbina.getStatus().equals(StatusPorudzbine.Obrada)){ + p = porudzbina; + } + } + return p; + } + public Porudzbina findByStatus(){ + Porudzbina p = null; + for(Porudzbina porudzbina: porudzbinaRepository.findAll()){ + if(porudzbina.getStatus().equals(StatusPorudzbine.Obrada)) { + p = porudzbina; + } + } + return p; + } + public Porudzbina findPorduzbinaUSastavljanju(Kupac kupac){ + Porudzbina p= null; + for(Porudzbina porudzbina: kupac.getListaPorudzbina()){ + if(porudzbina.getStatus().equals(StatusPorudzbine.USastavljanu)){ + p = porudzbina; + } + } + return p; + } + public Porudzbina kreirajStavkuPorudzbine(String naziv, int kolicina, Porudzbina porudzbina){ + StavkaPorudzbine stavkaPorudzbine = new StavkaPorudzbine(); + double temp = 0; + for(Artikal artikal: porudzbina.getRestoran().getPonuda()){ + if(artikal.getNaziv().equals(naziv)){ + stavkaPorudzbine.setPoruceniArtikal(artikal); + stavkaPorudzbine.setPorucenaKolicina(kolicina); + stavkaPorudzbineService.saveStavka(stavkaPorudzbine); + temp = artikal.getCena() * kolicina; + + } + } + porudzbina.getPoruceniArtikli().add(stavkaPorudzbine); + porudzbina.setCena(porudzbina.getCena() + temp); + + porudzbinaRepository.save(porudzbina); + + return porudzbina; + } + public Porudzbina ukloniStavkuPorudzbine(String naziv, int kolicina, Porudzbina porudzbina){ + double temp = 0; + for(StavkaPorudzbine stavkaPorudzbine: porudzbina.getPoruceniArtikli()){ + if(stavkaPorudzbine.getPoruceniArtikal().getNaziv().equals(naziv)){ + if(kolicina>=stavkaPorudzbine.getPorucenaKolicina()){ + temp = kolicina * stavkaPorudzbine.getPoruceniArtikal().getCena(); + stavkaPorudzbineService.removeStavka(stavkaPorudzbine); + porudzbina.getPoruceniArtikli().remove(stavkaPorudzbine); + break; + + }else{ + stavkaPorudzbine.setPorucenaKolicina(stavkaPorudzbine.getPorucenaKolicina() - kolicina); + temp = kolicina * stavkaPorudzbine.getPoruceniArtikal().getCena(); + break; + + } + } + } + + porudzbina.setCena(porudzbina.getCena() - temp); + porudzbinaRepository.save(porudzbina); + + return porudzbina; + } + public void checkIfEmpty(Porudzbina porudzbina){ + Kupac kupac = porudzbina.getKupac(); + if(!porudzbina.getPoruceniArtikli().isEmpty()){ + porudzbina.setStatusPorudzbine(StatusPorudzbine.Obrada); + Porudzbina porudzbina1 = new Porudzbina(StatusPorudzbine.USastavljanu, kupac); + kupac.getListaPorudzbina().add(porudzbina1); + porudzbinaRepository.save(porudzbina); + kupacService.save(kupac); + } + } + public Porudzbina promeniStatusMenadzer(Restoran restoran, String ID){ + Porudzbina p= null; + List listaPorudzbina = new ArrayList<>(); + listaPorudzbina = porudzbinaRepository.findAll(); + for(Porudzbina porudzbina: listaPorudzbina) { + String result = String.valueOf(porudzbina.getId()); + result = result.replaceAll("[-+.^:,]",""); //UUID daje string sa crticama u njemu koje se ne vide u bazi + + if (result.equals(ID)) { + if (porudzbina.getStatus().equals(StatusPorudzbine.Obrada)) { + p = porudzbina; + p.setStatusPorudzbine(StatusPorudzbine.UPripremi); + porudzbinaRepository.save(p); + restoranService.save(restoran); + return p; + }else if(porudzbina.getStatus().equals(StatusPorudzbine.UPripremi)){ + p = porudzbina; + p.setStatusPorudzbine(StatusPorudzbine.CekaDostavljača); + porudzbinaRepository.save(p); + restoranService.save(restoran); + return p; + } + } + } + return p; + } + public Porudzbina promeniStatusDostavljac(Dostavljac dostavljac, String id){ + List listaPorudzbina = new ArrayList<>(); + Porudzbina p = null; + listaPorudzbina = porudzbinaRepository.findAll(); + for(Porudzbina porudzbina: listaPorudzbina) { + if (porudzbina.getStatus().equals(StatusPorudzbine.CekaDostavljača)) { +// p = porudzbina; + porudzbina.setStatusPorudzbine(StatusPorudzbine.UTransportu); + porudzbinaRepository.save(porudzbina); + dostavljacService.addCondition(dostavljac,porudzbina); + return p; + } else if (porudzbina.getStatus().equals(StatusPorudzbine.UTransportu)) { + for (Porudzbina porudzbina1 : dostavljacService.findAllById(dostavljac.getId())) { + if (porudzbina1.getId().equals(porudzbina.getId())) { + + p = porudzbina; + p.setStatusPorudzbine(StatusPorudzbine.Dostavljena); + porudzbinaRepository.save(p); + dostavljacService.save(dostavljac); + kupacService.dodajBodove(porudzbina.getCena(), porudzbina.getKupac()); + + return p; + } + } + } + } +// Set ispis = new HashSet<>(); +// for(Porudzbina porudzbinaL p) + return p; + } + public Dostavljac findDostavljac(String korisnickoIme){ + return dostavljacService.findDostavljac(korisnickoIme); + } + + +} + diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/service/RestoranService.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/service/RestoranService.java new file mode 100644 index 0000000..b902a47 --- /dev/null +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/service/RestoranService.java @@ -0,0 +1,210 @@ +package vezbe.demo.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import vezbe.demo.dto.KomentarDto; +import vezbe.demo.dto.RestoranBasicInfoDto; +import vezbe.demo.dto.RestoranIspisDto; +import vezbe.demo.dto.RestoranPretragaDto; +import vezbe.demo.model.*; +import vezbe.demo.repository.RestoranRepository; + +import java.util.*; + +@Service +public class RestoranService { + @Autowired + private RestoranRepository restoranRepository; + + @Autowired + private MenadzerService menadzerService; + + @Autowired + private ArtikalService artikalService; + + @Autowired + private StavkaPorudzbineService stavkaPorudzbineService; + + @Autowired + private KomentarService komentarService; + + @Autowired + private LokacijaService lokacijaService; + + + /* @Autowired + private PorudzbinaService porudzbinaService; + */ + public List getAllBasicInfo(){ + List dtoList = new ArrayList<>(); + for(Restoran restoran: restoranRepository.findAll()){ + + RestoranBasicInfoDto dto = new RestoranBasicInfoDto(restoran.getNaziv(), restoran.getTipRestorana(), restoran.getLokacija().getAdresa()); + dtoList.add(dto); + } + return dtoList; + } + public Restoran save(Restoran restoran) { + lokacijaService.save(restoran.getLokacija()); + return restoranRepository.save(restoran); + } + + public List findAll() { + return restoranRepository.findAll(); + } + public RestoranIspisDto spremiZaIspis(Restoran restoran, double prosecnaOcena, Set komentari){ + RestoranIspisDto dto = new RestoranIspisDto(restoran.getNaziv(), restoran.getTipRestorana(), restoran.getLokacija(), prosecnaOcena, komentari, restoran.getPonuda()); + return dto; + } + + public Restoran findById(Long id){ + Restoran r= null; + for(Restoran restoran: restoranRepository.findAll()){ + if(restoran.getId().equals(id)){ + r = restoran; + } + } + return r; + } + + + public Restoran findByName(String naziv) { + Restoran r = null; + for (Restoran restoran : restoranRepository.findAll()) { + if (restoran.getNaziv().equals(naziv)) { + r = restoran; + } + } + return r; + } + + public List findByTip(String tipRestorana) { + List lista = new ArrayList<>(); + for (Restoran restoran : restoranRepository.findAll()) { + if (restoran.getTipRestorana().equals(tipRestorana)) { + lista.add(restoran); + } + } + return lista; + } + + public Restoran findByLokacija(String adresa) { + Restoran r = null; + for (Restoran restoran : restoranRepository.findAll()) { + if (restoran.getLokacija().getAdresa().equals(adresa)) { + r = restoran; + } + } + return r; + } + + + + public Set dodajArtikal(Artikal artikal, Restoran restoran) { + Set novaLista = new HashSet<>(); + novaLista = artikalService.dodajArtikal(artikal, restoran); + restoranRepository.save(restoran); + return novaLista; + } + + public Menadzer findByNaziv(String naziv, String KorisnickoIme) { + Restoran r = null; + for (Restoran restoran : restoranRepository.findAll()) { + if (restoran.getNaziv().equals(naziv)) { + r = restoran; + } + } + return menadzerService.postaviNovogMenadzera(KorisnickoIme, r);//IZMENI NAZIV OVE FUNKCIJE + + } + + public Restoran findByRestoranIme(String naziv) { + Restoran r = null; + for (Restoran restoran : restoranRepository.findAll()) { + if (restoran.getNaziv().equals(naziv)) { + r = restoran; + } + } + return r; + } + + public double getProsecnaOcena(Long restoranId){ + return komentarService.getProsecnaOcena(restoranId); + } + public Set getKomentari(Long restoranId){ + return komentarService.getByRestoran(restoranId); + } + public List SpremiZaIspis(List listaRestorana){ + List ispisLista = new ArrayList<>(); + for(Restoran restoran: listaRestorana){ + double prosecnaOcena = getProsecnaOcena(restoran.getId()); + Set komentari = getKomentari(restoran.getId()); + RestoranIspisDto dto = new RestoranIspisDto(restoran.getNaziv(), restoran.getTipRestorana(), restoran.getLokacija(), prosecnaOcena, komentari, restoran.getPonuda()); + ispisLista.add(dto); + } + return ispisLista; + } + public Set pronadjiRestorane(String input){ + Set lista = new HashSet<>(); + for(Restoran restoran: restoranRepository.findAll()){ + if(input.contains(restoran.getNaziv())){ + RestoranPretragaDto dto = new RestoranPretragaDto(restoran.getNaziv(), restoran.getTipRestorana(), restoran.getLokacija().getAdresa()); + lista.add(dto); + continue; + } + if(input.contains(restoran.getTipRestorana())){ + RestoranPretragaDto dto = new RestoranPretragaDto(restoran.getNaziv(), restoran.getTipRestorana(), restoran.getLokacija().getAdresa()); + lista.add(dto); + continue; + } + if(input.contains(restoran.getLokacija().getAdresa())){ + RestoranPretragaDto dto = new RestoranPretragaDto(restoran.getNaziv(), restoran.getTipRestorana(), restoran.getLokacija().getAdresa()); + lista.add(dto); + continue; + } + } + return lista; + } + public List removeArtikal(Long id, Restoran restoran) { + Artikal a = artikalService.findById(id); + + restoran.getPonuda().remove(a); + restoranRepository.save(restoran); + + List l= new ArrayList<>(); + for(Artikal artikal:restoran.getPonuda()){ + l.add(artikal); + } + return l; + } + public Artikal promeniArtikal(Artikal artikal, Restoran restoran,Long id){ + Artikal stariArtikal = artikalService.findById(id); + if(!artikal.getNaziv().isEmpty()){ + stariArtikal.setNaziv(artikal.getNaziv()); + } + if(artikal.getTipArtikla()!=null){ + stariArtikal.setTipArtikla(artikal.getTipArtikla()); + } + if(artikal.getCena() != 0){ + stariArtikal.setCena(artikal.getCena()); + } + if(artikal.getKolicina()!= 0){ + stariArtikal.setKolicina(artikal.getKolicina()); + } + if(!artikal.getOpis().isEmpty()){ + stariArtikal.setOpis(artikal.getOpis()); + } + artikalService.save(stariArtikal); + restoranRepository.save(restoran); + return stariArtikal; + + } + public Boolean pronadjiArtikal(Long id, Restoran restoran){ + for(Artikal artikal: restoran.getPonuda()){ + if(artikal.getId().equals(id)){ + return true; + } + } + return false; + } + } diff --git a/Nadogradnja-demoa/src/main/java/vezbe/demo/service/StavkaPorudzbineService.java b/Nadogradnja-demoa/src/main/java/vezbe/demo/service/StavkaPorudzbineService.java new file mode 100644 index 0000000..0dafd0e --- /dev/null +++ b/Nadogradnja-demoa/src/main/java/vezbe/demo/service/StavkaPorudzbineService.java @@ -0,0 +1,25 @@ +package vezbe.demo.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import vezbe.demo.model.Artikal; +import vezbe.demo.model.StavkaPorudzbine; +import vezbe.demo.repository.StavkaPorudzbineRepository; + +@Service +public class StavkaPorudzbineService { + @Autowired + StavkaPorudzbineRepository stavkaPorudzbineRepository; + + + public void addArtikal(Artikal artikal, int kolicina){ + StavkaPorudzbine stavkaPorudzbine = new StavkaPorudzbine(artikal, kolicina); + stavkaPorudzbineRepository.save(stavkaPorudzbine); + } + public void saveStavka(StavkaPorudzbine stavkaPorudzbine){ + stavkaPorudzbineRepository.save(stavkaPorudzbine); + } + public void removeStavka(StavkaPorudzbine stavkaPorudzbine){ + stavkaPorudzbineRepository.delete(stavkaPorudzbine); + } +} diff --git a/Nadogradnja-demoa/src/main/resources/application.properties b/Nadogradnja-demoa/src/main/resources/application.properties index 0e4848a..d2687de 100644 --- a/Nadogradnja-demoa/src/main/resources/application.properties +++ b/Nadogradnja-demoa/src/main/resources/application.properties @@ -4,6 +4,7 @@ spring.h2.console.enabled=true spring.h2.console.path=/h2 +server.port=8081 # Spring DataSource spring.datasource.url=jdbc:h2:file:~/test @@ -17,4 +18,7 @@ spring.jpa.show-sql=true spring.jpa.hibernate.ddl-auto=create-drop spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyHbmImpl spring.jpa.hibernate.naming.physical-strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy -spring.jackson.serialization.FAIL_ON_EMPTY_BEANS=false \ No newline at end of file +spring.jackson.serialization.FAIL_ON_EMPTY_BEANS=false +hibernate.jdbc.lob.non_contextual_creation=true + + diff --git a/Nadogradnja-demoa/src/main/resources/static/images/12/hamb.jpg b/Nadogradnja-demoa/src/main/resources/static/images/12/hamb.jpg new file mode 100644 index 0000000..3cab5ba Binary files /dev/null and b/Nadogradnja-demoa/src/main/resources/static/images/12/hamb.jpg differ diff --git a/Nadogradnja-demoa/src/main/resources/static/images/hamb.jpg b/Nadogradnja-demoa/src/main/resources/static/images/hamb.jpg new file mode 100644 index 0000000..3cab5ba Binary files /dev/null and b/Nadogradnja-demoa/src/main/resources/static/images/hamb.jpg differ diff --git a/Nadogradnja-demoa/src/main/resources/static/images/kapricoza.jpg b/Nadogradnja-demoa/src/main/resources/static/images/kapricoza.jpg new file mode 100644 index 0000000..7ee1d2f Binary files /dev/null and b/Nadogradnja-demoa/src/main/resources/static/images/kapricoza.jpg differ diff --git a/Nadogradnja-demoa/src/main/resources/static/images/null/hamb.jpg b/Nadogradnja-demoa/src/main/resources/static/images/null/hamb.jpg new file mode 100644 index 0000000..3cab5ba Binary files /dev/null and b/Nadogradnja-demoa/src/main/resources/static/images/null/hamb.jpg differ diff --git a/Nadogradnja-demoa/src/main/resources/static/images/sdasd.jpg b/Nadogradnja-demoa/src/main/resources/static/images/sdasd.jpg new file mode 100644 index 0000000..f424f42 Binary files /dev/null and b/Nadogradnja-demoa/src/main/resources/static/images/sdasd.jpg differ diff --git a/Nadogradnja-demoa/src/main/resources/static/images/user.jpg b/Nadogradnja-demoa/src/main/resources/static/images/user.jpg new file mode 100644 index 0000000..456666a Binary files /dev/null and b/Nadogradnja-demoa/src/main/resources/static/images/user.jpg differ diff --git a/Nadogradnja-demoa/src/main/resources/static/images/user.png b/Nadogradnja-demoa/src/main/resources/static/images/user.png deleted file mode 100644 index e69de29..0000000 diff --git a/Nadogradnja-demoa/src/main/resources/static/images12/hamb.jpg b/Nadogradnja-demoa/src/main/resources/static/images12/hamb.jpg new file mode 100644 index 0000000..3cab5ba Binary files /dev/null and b/Nadogradnja-demoa/src/main/resources/static/images12/hamb.jpg differ diff --git a/Nadogradnja-demoa/src/main/resources/static/images13/hamb.jpg b/Nadogradnja-demoa/src/main/resources/static/images13/hamb.jpg new file mode 100644 index 0000000..3cab5ba Binary files /dev/null and b/Nadogradnja-demoa/src/main/resources/static/images13/hamb.jpg differ