Skip to content

Commit

Permalink
JJDZR14KA-49 fix_1 Accommodation DTO
Browse files Browse the repository at this point in the history
  • Loading branch information
Marakra committed Sep 3, 2024
1 parent 149a8b0 commit f47d42a
Show file tree
Hide file tree
Showing 29 changed files with 167 additions and 533 deletions.
19 changes: 0 additions & 19 deletions BizTravel360/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -61,13 +61,6 @@
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>

<!-- Jakarta Persistence API -->
<dependency>
<groupId>jakarta.persistence</groupId>
<artifactId>jakarta.persistence-api</artifactId>
<version>3.2.0</version>
</dependency>

<!-- MySQL Connector -->
<dependency>
<groupId>mysql</groupId>
Expand All @@ -83,23 +76,11 @@
</dependency>

<!-- Flyway for database migrations -->
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>10.17.2</version>
</dependency>
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-mysql</artifactId>
</dependency>

<!-- H2 Database (for testing purposes) -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>2.3.232</version>
</dependency>

<!-- Jackson for JSON handling -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@SpringBootApplication
public class BizTravel360Application {

public static void main(String[] args) {
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
public class AccommodationController {

private static final String PAGE_DEFAULT_VALUE = "0";
private static final String SIZE_DEFAULT_VALUE = "10";
private static final String SIZE_DEFAULT_VALUE = "1";
private static final int GENERATE_RANDOM_ACCOMMODATIONS = 15;

private final AccommodationService accommodationService;
Expand All @@ -35,7 +35,7 @@ public class AccommodationController {
public String getAllAccommodations(@RequestParam(value = "page", defaultValue = PAGE_DEFAULT_VALUE) int page,
@RequestParam(value = "size", defaultValue = SIZE_DEFAULT_VALUE) int size,
Model model) {
Page<Accommodation> accommodations = accommodationService.fetchAccommodationPage(PageRequest.of(page, size));
Page<Accommodation> accommodations = accommodationService.findAll(PageRequest.of(page, size));
log.info("Fetched accommodationList: {}", accommodations.getTotalElements());
model.addAttribute("accommodations", accommodations);

Expand All @@ -61,16 +61,16 @@ public String saveAccommodation(@Valid @ModelAttribute("accommodation") Accommod
if (bindingResult.hasErrors()) {
return "accommodation/createAccommodationForm";
}
accommodationService.saveAccommodation(accommodation);
accommodationService.save(accommodation);
redirectAttributes.addFlashAttribute("successMessage", renderSuccessMessage(accommodation, "created"));

return "redirect:/accommodations/employee";
}

@GetMapping("/accommodation/employee/{id}")
public String showUpdateAccommodationForm(@PathVariable("id") Long accommodationId, Model model) {
Optional<Accommodation> optionalAccommodation = accommodationService.findAccommodationById(accommodationId);
Accommodation accommodation = optionalAccommodation.get();
Optional<Accommodation> accommodations = accommodationService.getById(accommodationId);
Accommodation accommodation = accommodations.get();

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
model.addAttribute("formattedCheckIn", formatter.format(accommodation.getCheckIn()));
Expand All @@ -86,17 +86,16 @@ public String updateAccommodation(@Valid @ModelAttribute("accommodation") Accomm
if (bindingResult.hasErrors()) {
return "accommodation/updateAccommodationForm";
}
accommodationService.updateAccommodation(accommodation, accommodation.getId());
accommodationService.updateAccommodation(accommodation);
redirectAttributes.addFlashAttribute("successMessage", renderSuccessMessage(accommodation, "updated"));
return "redirect:/accommodations/employee";
}

@PostMapping("/delete-accommodation/{accommodationId}")
public String deleteAccommodation(@PathVariable("accommodationId") Long accommodationId,
public String deleteAccommodation(@PathVariable("accommodationId") Accommodation accommodationId,
RedirectAttributes redirectAttributes) {
Optional<Accommodation> accommodation = accommodationService.findAccommodationById(accommodationId);
accommodationService.deleteAccommodationById(accommodationId);
redirectAttributes.addFlashAttribute("successMessage", renderSuccessMessage(accommodation.orElse(null), "deleted"));
accommodationService.deleteById(accommodationId.getId());
redirectAttributes.addFlashAttribute("successMessage", renderSuccessMessage(accommodationId, "deleted"));
return "redirect:/accommodations/employee";
}

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,10 @@
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import java.util.Optional;


@Repository
public interface AccommodationRepository extends JpaRepository<Accommodation, Long> {
Accommodation save(Accommodation accommodation);
void deleteById(Long accommodationId);
Page<Accommodation> findByNameAccommodationContainingIgnoreCaseAndTypeAccommodation(String query, TypeAccommodation type, Pageable pageable);
Page<Accommodation> findAll(Pageable pageable);
@Override
Optional<Accommodation> findById(Long id);
Page<Accommodation> findByNameAccommodation(String name, TypeAccommodation type, Pageable pageable);

}
Original file line number Diff line number Diff line change
@@ -1,17 +1,21 @@
package com.travel.BizTravel360.accommodation.domain;

import com.travel.BizTravel360.accommodation.DataGeneratorAccommodation;
import com.travel.BizTravel360.accommodation.TypeAccommodation;
import com.travel.BizTravel360.accommodation.exeptions.AccommodationSaveException;
import com.travel.BizTravel360.accommodation.model.entity.Accommodation;
import jakarta.transaction.Transactional;
import jakarta.validation.ConstraintViolation;
import jakarta.validation.Validator;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.dao.DataAccessException;
import org.springframework.data.domain.*;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.stereotype.Service;

import java.util.*;
import java.util.stream.Collectors;

@Slf4j
@Service
Expand All @@ -22,43 +26,51 @@ public class AccommodationService{
private final AccommodationRepository accommodationRepository;
private final Validator validator;

public Accommodation saveAccommodation(Accommodation accommodation) {
public Accommodation save(Accommodation accommodation) throws DataAccessException {
try {
trimAccommodation(accommodation);
validateAccommodation(accommodation);
accommodation.setId(UUID.randomUUID().getMostSignificantBits() & Long.MAX_VALUE);
return accommodationRepository.save(accommodation);
} catch (Exception e) {
log.error("Failed to save accommodation {}", accommodation, e);
throw new RuntimeException(String.format("Failed to save accommodation %s.", accommodation), e); }
} catch (DataAccessException exp) {
log.error("Failed to save accommodation {}", accommodation, exp);
throw new AccommodationSaveException(
String.format("Failed to save accommodation: %s, message: %s.", accommodation, exp.getMessage()));
}
}

public Page<Accommodation> fetchAccommodationPage(Pageable pageable) {
public Page<Accommodation> findAll(Pageable pageable) {
return accommodationRepository.findAll(pageable);
}

public Accommodation updateAccommodation(Accommodation updateAccommodation, Long accommodationId) {
accommodationRepository.existsById(accommodationId);
updateAccommodation.setId(accommodationId);
return accommodationRepository.save(updateAccommodation);
public void updateAccommodation(Accommodation updateAccommodation) {
Accommodation accommodation = accommodationRepository.findById(updateAccommodation.getId())
.orElseThrow(() -> new NoSuchElementException("Accommodation not found"));

accommodation.setNameAccommodation(updateAccommodation.getNameAccommodation());
accommodation.setTypeAccommodation(updateAccommodation.getTypeAccommodation());
accommodation.setAddress(updateAccommodation.getAddress());
accommodation.setCheckIn(updateAccommodation.getCheckIn());
accommodation.setCheckOut(updateAccommodation.getCheckOut());
accommodation.setPrice(updateAccommodation.getPrice());

accommodationRepository.save(accommodation);
}

public void deleteAccommodationById(Long accommodationId) {
public void deleteById(Long accommodationId) {
accommodationRepository.deleteById(accommodationId);
}

public Optional<Accommodation> findAccommodationById(Long accommodationId) {
return accommodationRepository.findById(accommodationId);
}

//TODO create new generator with correct data to DB
//TODO create new generator with correct data to DB in the new task
// public List<Accommodation> generateAndSaveRandomAccommodation(int count) {
// List<Accommodation> randomAccommodations = DataGeneratorAccommodation.generateRandomAccommodationsList(count);
// return accommodationRepository.saveAll(randomAccommodations);
// }

public Page<Accommodation> searchAccommodation(String query, TypeAccommodation type, Pageable pageable) {
return accommodationRepository.findByNameAccommodationContainingIgnoreCaseAndTypeAccommodation(query, type, pageable);
if (query == null || query.isEmpty()) {
return accommodationRepository.findAll(pageable);
}
return accommodationRepository.findByNameAccommodation(query, type, pageable);
}

private void validateAccommodation(Accommodation accommodation){
Expand All @@ -73,5 +85,9 @@ private void trimAccommodation(Accommodation accommodation) {
accommodation.setNameAccommodation(accommodation.getNameAccommodation().trim());
accommodation.setAddress(accommodation.getAddress().trim());
}

public Optional<Accommodation> getById(Long accommodationId) {
return accommodationRepository.findById(accommodationId);
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

import java.io.IOException;

public class AccommodationSaveException extends IOException {
public AccommodationSaveException(String message, Throwable cause) {
super(message, cause);
public class AccommodationSaveException extends RuntimeException {
public AccommodationSaveException(String message) {
super(message);
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
package com.travel.BizTravel360.accommodation.model.dto;

import com.travel.BizTravel360.accommodation.TypeAccommodation;
import lombok.Data;

import java.time.LocalDateTime;


@Data
public class AccommodationDTO {
private Long id;
private String name;
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;


import java.time.LocalDateTime;
Expand Down Expand Up @@ -41,11 +42,13 @@ public class Accommodation extends BaseEntity {
@NotNull(message = "CheckIn is a required field!")
@Future(message = "CheckIn must be in the future")
@Column(name = "CHECK_IN")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
private LocalDateTime checkIn;

@NotNull(message = "CheckOut is a required field!")
@Future(message = "checkOut must be in the future")
@Column(name = "CHECK_OUT")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
private LocalDateTime checkOut;

@NotNull(message = "Price is a required field!")
Expand Down
Loading

0 comments on commit f47d42a

Please sign in to comment.