Skip to content

Commit

Permalink
JJDZR14KA-50-dto wersja 1
Browse files Browse the repository at this point in the history
  • Loading branch information
Camillo1002 committed Sep 14, 2024
1 parent d2c7cc7 commit 9d49f10
Show file tree
Hide file tree
Showing 12 changed files with 253 additions and 165 deletions.
Original file line number Diff line number Diff line change
@@ -1,24 +1,19 @@
package com.travel.BizTravel360.delegation;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.travel.BizTravel360.delegation.annotation.ValidDateRangeDelegation;
import com.travel.BizTravel360.accommodation.model.entity.Accommodation;
import com.travel.BizTravel360.employee.Employee;
import com.travel.BizTravel360.transport.model.Transport;
import com.travel.BizTravel360.transport.model.dto.TransportDTO;
import jakarta.persistence.*;
import jakarta.validation.constraints.*;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.format.annotation.DateTimeFormat;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;

@Data
@Entity
Expand All @@ -40,7 +35,7 @@ public class Delegation {

@NotEmpty(message = "Transport list is a required field!")
@OneToMany(mappedBy = "delegation", cascade = CascadeType.ALL)
private List<Transport> transports;
private List<TransportDTO> transports;

@NotEmpty(message = "Accommodation list is a required field!")
@OneToMany(mappedBy = "delegation", cascade = CascadeType.ALL)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,28 +1,20 @@
package com.travel.BizTravel360.delegation;

import com.fasterxml.jackson.core.type.TypeReference;
import com.travel.BizTravel360.accommodation.model.entity.Accommodation;
import com.travel.BizTravel360.accommodation.domain.AccommodationService;
import com.travel.BizTravel360.delegation.exeptions.DelegationSaveException;
import com.travel.BizTravel360.employee.EmployeeService;
import com.travel.BizTravel360.file.FileService;
import com.travel.BizTravel360.transport.model.Transport;
import com.travel.BizTravel360.transport.model.dto.TransportDTO;
import com.travel.BizTravel360.transport.domain.TransportService;
import jakarta.transaction.Transactional;
import jakarta.validation.ConstraintViolation;
import jakarta.validation.Validator;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;

import java.io.IOException;
import java.math.BigDecimal;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
Expand Down Expand Up @@ -73,7 +65,7 @@ private void trimDelegation(Delegation delegation) {
delegation.setNameDelegation(delegation.getNameDelegation().trim());
}

private BigDecimal calculatorTotalPrice(List<Transport> transports, List<Accommodation> accommodations) {
private BigDecimal calculatorTotalPrice(List<TransportDTO> transports, List<Accommodation> accommodations) {
BigDecimal transportPrice = transports.stream()
.map(transport -> BigDecimal.valueOf(transport.getPrice()))
.reduce(BigDecimal.ZERO, BigDecimal::add);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
package com.travel.BizTravel360.delegation.conversions;

import com.travel.BizTravel360.transport.model.Transport;
import com.travel.BizTravel360.transport.model.dto.TransportDTO;
import com.travel.BizTravel360.transport.domain.TransportService;
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;

import java.io.IOException;

@Component
public class StringToTransportConverter implements Converter<String, Transport> {
public class StringToTransportConverter implements Converter<String, TransportDTO> {

private final TransportService transportService;

Expand All @@ -17,7 +15,7 @@ public StringToTransportConverter(TransportService transportService) {
}

@Override
public Transport convert(String source) {
public TransportDTO convert(String source) {
Long transportId = Long.parseLong(source);
try {
return transportService.findTransportById(transportId);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.travel.BizTravel360.transport;


import com.travel.BizTravel360.transport.model.Transport;
import com.travel.BizTravel360.transport.model.dto.TransportDTO;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;
Expand All @@ -14,16 +14,16 @@ public class DataGeneratorTransport {

private static final Random RANDOM = new Random();

public static List<Transport> generateRandomTransportList(int count) {
List<Transport> transportList = new ArrayList<>();
public static List<TransportDTO> generateRandomTransportList(int count) {
List<TransportDTO> transportList = new ArrayList<>();
for (int i = 0; i < count; i++) {
transportList.add(generateRandomTransport());
}
return transportList;
}

private static Transport generateRandomTransport() {
Transport transport = new Transport();
private static TransportDTO generateRandomTransport() {
TransportDTO transport = new TransportDTO();
// transport.setTransportId((long) RANDOM.nextLong(100000));
transport.setTypeTransport(TypeTransport.values()[RANDOM.nextInt(TypeTransport.values().length)]);
transport.setTransportIdentifier("Identifier" + RANDOM.nextLong(1000));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.travel.BizTravel360.transport;

import com.travel.BizTravel360.transport.domain.TransportService;
import com.travel.BizTravel360.transport.model.Transport;
import com.travel.BizTravel360.transport.model.dto.TransportDTO;
import jakarta.validation.Valid;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Page;
Expand All @@ -14,6 +14,7 @@
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import java.io.IOException;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
Expand All @@ -37,7 +38,7 @@ public TransportController(TransportService transportService) {
public String getAllTransports(@RequestParam(value = "page", defaultValue = PAGE_DEFAULT_VALUE) int page,
@RequestParam(value = "size", defaultValue = SIZE_DEFAULT_VALUE) int size,
Model model) throws IOException {
Page<Transport> transports = transportService.findAll(PageRequest.of(page, size));
Page<TransportDTO> transports = transportService.findAll(PageRequest.of(page, size));
log.info("Fetched {} transport", transports.getTotalElements());
model.addAttribute("transports", transports);

Expand All @@ -53,56 +54,58 @@ public String getAllTransports(@RequestParam(value = "page", defaultValue = PAGE

@GetMapping("/transport/employee")
public String showSaveTransportForm(Model model) {
model.addAttribute("transport", new Transport());
model.addAttribute("transport", new TransportDTO());
return "transport/createTransportForm";
}

@PostMapping("/transport")
public String saveTransport(@Valid @ModelAttribute("transport") Transport transport,
BindingResult bindingResult, RedirectAttributes redirectAttributes) throws IOException {
public String saveTransport(@Valid @ModelAttribute("transport") TransportDTO transportDTO,
BindingResult bindingResult, RedirectAttributes redirectAttributes) {
if (bindingResult.hasErrors()) {
return "transport/createTransportForm";
}
transportService.save(transport);
redirectAttributes.addFlashAttribute("successMessage", renderSuccessMessage(transport, "created"));

transportService.save(transportDTO);//accDTO -> acc map acc save to DB
redirectAttributes.addFlashAttribute("successMessage", renderSuccessMessage(transportDTO, "created"));
return "redirect:/transports/employee";
}


@GetMapping("/transport/{transport/{id}}")
public String showUpdateTransportForm(@PathVariable("id") Long transportId, Model model) throws IOException {
Optional<Transport> transport = transportService.getById(transportId);
public String showUpdateTransportForm(@PathVariable("id") Long transportId, Model model) {
TransportDTO transport = transportService.getById(transportId);


DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
model.addAttribute("formattedDepartureDateTime", formatter.format(transport.getDepartureDateTime()));
model.addAttribute("formattedArrivalDateTime", formatter.format(transport.getArrivalDateTime()));
model.addAttribute("transport", transport);


return "transport/updateTransportForm";
}


@PostMapping("/update-transport")
public String updateTransport(@Valid @ModelAttribute("transport") Transport transport,
public String updateTransport(@Valid @ModelAttribute("transport") TransportDTO transportDTO,
BindingResult bindingResult, RedirectAttributes redirectAttributes) throws IOException {
if (bindingResult.hasErrors()) {
return "transport/updateTransportForm";
}
transportService.updateTransport(transport);
redirectAttributes.addFlashAttribute("successMessage", renderSuccessMessage(transport, "updated"));
transportService.updateTransport(transportDTO);
redirectAttributes.addFlashAttribute("successMessage", renderSuccessMessage(transportDTO, "updated"));
return "redirect:/transports/employee";
}


@PostMapping("/delete-transport/{transportId}")
public String deleteTransport(@PathVariable("transportId") Transport transportId,
RedirectAttributes redirectAttributes) throws IOException {
transportService.deleteById(transportId.getId());
redirectAttributes.addFlashAttribute("successMessage", renderSuccessMessage(transportId, "deleted"));
public String deleteTransport(@PathVariable("transportId") Long transportId,
RedirectAttributes redirectAttributes) {
transportService.deleteById(transportId);
redirectAttributes.addFlashAttribute("successMessage", String.format("Successfully deleted trasport with ID: %s", "deleted with ID: %s", transportId));
return "redirect:/transports/employee";
}

@PostMapping("/generate-random-transport")
public String generateRandomTransport(RedirectAttributes redirectAttributes) throws IOException {
// transportService.generateAndSaveRandomTransport(GENERATE_RANDOM_TRANSPORT);
redirectAttributes.addFlashAttribute("message", "Random transports generated successfully!");
return "redirect:/transports/employee";
}

@GetMapping("/search-transport")
public String searchAccommodation(@RequestParam(value = "page", defaultValue = PAGE_DEFAULT_VALUE) int page,
Expand All @@ -112,22 +115,29 @@ public String searchAccommodation(@RequestParam(value = "page", defaultValue = P
Model model) {

Pageable pageable = PageRequest.of(page, size);
Page<Transport> transports = transportService.searchATransport(keyword, pageable);
Page<TransportDTO> transports = transportService.searchTransport(keyword,type, pageable);

model.addAttribute("accommodations", transports);
model.addAttribute("transports", transports);
model.addAttribute("type", type);
model.addAttribute("keyword", keyword);
model.addAttribute("totalPages", transports.getTotalPages());

model.addAttribute("currentPage", page);
int totalPages = transports.getTotalPages();
if (totalPages > 0) {
List<Integer> pageNumbers = IntStream.range(0, totalPages)
.boxed()
.collect(Collectors.toList());
model.addAttribute("pageNumbers", pageNumbers);
}
return "transport/transportsForEmployee";
}

private String renderSuccessMessage(Transport transport, String action) {
private String renderSuccessMessage(TransportDTO transportDTO, String action) {
String successMessage = String.format("Successfully %s transport. Type: %s, Departure: %s Arrival: %s.",
action,
transport.getTypeTransport(),
transport.getDeparture(),
transport.getArrival());
transportDTO.getTypeTransport(),
transportDTO.getDeparture(),
transportDTO.getArrival());
log.info(successMessage);
return successMessage;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
package com.travel.BizTravel360.transport.annotation;

import com.travel.BizTravel360.transport.model.Transport;
import com.travel.BizTravel360.transport.model.dto.TransportDTO;
import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;

public class DateRangeValidatorTransport implements ConstraintValidator <ValidDateRangeTransport, Transport>{
public class DateRangeValidatorTransport implements ConstraintValidator <ValidDateRangeTransport, TransportDTO>{

@Override
public void initialize(ValidDateRangeTransport constraintAnnotation) {
ConstraintValidator.super.initialize(constraintAnnotation);
}

@Override
public boolean isValid(Transport transport, ConstraintValidatorContext constraint) {
public boolean isValid(TransportDTO transport, ConstraintValidatorContext constraint) {
if (transport == null) {
return true; // or false if you want to validate non-null objects
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
package com.travel.BizTravel360.transport.domain;

import com.travel.BizTravel360.transport.model.Transport;
import com.travel.BizTravel360.accommodation.model.entity.Accommodation;
import com.travel.BizTravel360.transport.TypeTransport;
import com.travel.BizTravel360.transport.model.dto.TransportDTO;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.util.Optional;


@Repository
public interface TransportRepository extends JpaRepository<Transport, Long> {

Page<Transport> findByKeyword(@Param("keyword") String keyword, Pageable pageable);
public interface TransportRepository extends JpaRepository<TransportDTO, Long> {

@Query(value = "SELECT * FROM transport tra WHERE (tra.name LIKE %:keyword% or tra.address LIKE %:keyword%) and (:type IS NULL OR tra.type = :type)", nativeQuery = true)
Page<Accommodation> findByKeywordAndType(@Param("keyword") String keyword, @Param("type") TypeTransport type, Pageable pageable);
}
Loading

0 comments on commit 9d49f10

Please sign in to comment.