Skip to content
Snippets Groups Projects
Commit a0d7b33a authored by migudel's avatar migudel :speech_balloon:
Browse files

Modificación en la arquitectura del monolito

parent cdebbf4a
Branches master
No related tags found
2 merge requests!26Revert "Funciona register",!20Fix/monolith arquitecture
Showing
with 80 additions and 55 deletions
package com.uva.roomBooking;
package com.uva.monolith;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
......
package com.uva.roomBooking.exceptions;
package com.uva.monolith.exceptions;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
......
package com.uva.roomBooking.exceptions;
package com.uva.monolith.exceptions;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;
......
package com.uva.roomBooking.exceptions;
package com.uva.monolith.exceptions;
public class InvalidDateRangeException extends RuntimeException {
public InvalidDateRangeException(String message) {
......
package com.uva.roomBooking.exceptions;
package com.uva.monolith.exceptions;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;
......
// BookingController.java
package com.uva.roomBooking.controllers;
import com.uva.roomBooking.models.Booking;
import com.uva.roomBooking.models.Room;
import com.uva.roomBooking.models.User;
import com.uva.roomBooking.repositories.BookingRepository;
import com.uva.roomBooking.repositories.RoomRepository;
import com.uva.roomBooking.repositories.UserRepository;
package com.uva.monolith.services.bookings.controllers;
import jakarta.transaction.Transactional;
import org.springframework.http.HttpStatus;
import org.springframework.http.HttpStatusCode;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import com.uva.monolith.services.bookings.models.Booking;
import com.uva.monolith.services.bookings.repositories.BookingRepository;
import com.uva.monolith.services.hotels.models.Room;
import com.uva.monolith.services.hotels.repositories.RoomRepository;
import com.uva.monolith.services.users.models.User;
import com.uva.monolith.services.users.repositories.UserRepository;
import java.time.LocalDate;
import java.util.List;
@RestController
......@@ -33,9 +33,29 @@ public class BookingController {
this.roomRepository = roomRepository;
}
@GetMapping
public List<Booking> getAllBookings() {
return bookingRepository.findAll();
@GetMapping(params = { "start", "end", "roomId" })
public List<Booking> getAllBookings(
@RequestParam(required = false) LocalDate start,
@RequestParam(required = false) LocalDate end,
@RequestParam(required = false) Integer roomId) {
List<Booking> bookings = null;
if (start != null && end != null) {
bookings = bookingRepository.findByDateRange(start, end);
}
if (roomId != null) {
if (bookings == null) {
bookings = bookingRepository.findByRoomId(roomId);
} else {
bookings = bookings.stream()
.filter(booking -> booking.getRoomId().getId() == roomId)
.toList();
}
}
if (start == null & end == null && roomId == null) {
bookings = bookingRepository.findAll();
}
return bookings;
}
@PostMapping
......
package com.uva.roomBooking.models;
package com.uva.monolith.services.bookings.models;
import jakarta.persistence.Basic;
import jakarta.persistence.CascadeType;
......@@ -13,6 +13,9 @@ import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
import java.time.LocalDate;
import com.uva.monolith.services.hotels.models.Room;
import com.uva.monolith.services.users.models.User;
@Entity
@Table(name = "bookings")
public class Booking {
......
// BookingRepository.java
package com.uva.roomBooking.repositories;
package com.uva.monolith.services.bookings.repositories;
import jakarta.transaction.Transactional;
......@@ -11,9 +11,15 @@ import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import com.uva.roomBooking.models.Booking;
import com.uva.monolith.services.bookings.models.Booking;
public interface BookingRepository extends JpaRepository<Booking, Integer> {
@Query("SELECT b FROM Booking b WHERE b.roomId.id = ?1")
List<Booking> findByRoomId(int roomId);
@Query("SELECT b FROM Booking b WHERE b.startDate < ?1 AND b.endDate > ?2")
List<Booking> findByDateRange(@Param("startDate") LocalDate startDate,
@Param("endDate") LocalDate endDate);
@Query("SELECT b FROM Booking b WHERE b.roomId.id = ?1 AND b.startDate < ?2 AND b.endDate > ?3")
List<Booking> findByRoomIdAndDateRange(@Param("roomId") int roomId, @Param("startDate") LocalDate startDate,
......
package com.uva.roomBooking.controllers;
package com.uva.monolith.services.hotels.controllers;
import java.util.List;
import java.util.Map;
import java.time.LocalDate;
import com.uva.roomBooking.exceptions.HotelNotFoundException;
import com.uva.roomBooking.exceptions.InvalidDateRangeException;
import com.uva.roomBooking.exceptions.InvalidRequestException;
import com.uva.roomBooking.models.Booking;
import com.uva.roomBooking.models.Hotel;
import com.uva.roomBooking.models.Room;
import com.uva.roomBooking.repositories.BookingRepository;
import com.uva.roomBooking.repositories.HotelRepository;
import com.uva.roomBooking.repositories.RoomRepository;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import com.uva.monolith.exceptions.HotelNotFoundException;
import com.uva.monolith.exceptions.InvalidDateRangeException;
import com.uva.monolith.exceptions.InvalidRequestException;
import com.uva.monolith.services.bookings.repositories.BookingRepository;
import com.uva.monolith.services.hotels.models.Hotel;
import com.uva.monolith.services.hotels.models.Room;
import com.uva.monolith.services.hotels.repositories.HotelRepository;
import com.uva.monolith.services.hotels.repositories.RoomRepository;
@RestController
@RequestMapping("hotels")
@CrossOrigin(origins = "*")
......
package com.uva.roomBooking.models;
package com.uva.monolith.services.hotels.models;
import com.fasterxml.jackson.annotation.JsonIgnore;
......
package com.uva.roomBooking.models;
package com.uva.monolith.services.hotels.models;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
import jakarta.persistence.Basic;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Entity;
......
package com.uva.roomBooking.models;
package com.uva.monolith.services.hotels.models;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
import com.uva.monolith.services.bookings.models.Booking;
import com.uva.monolith.services.users.models.Tipo;
import jakarta.persistence.Basic;
import jakarta.persistence.CascadeType;
......
package com.uva.roomBooking.repositories;
package com.uva.monolith.services.hotels.repositories;
import org.springframework.data.jpa.repository.JpaRepository;
import com.uva.roomBooking.models.Hotel;
import com.uva.monolith.services.hotels.models.Hotel;
public interface HotelRepository extends JpaRepository<Hotel, Integer> {
......
package com.uva.roomBooking.repositories;
package com.uva.monolith.services.hotels.repositories;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import com.uva.roomBooking.models.Room;
import com.uva.monolith.services.hotels.models.Room;
import java.time.LocalDate;
import java.util.List;
......
package com.uva.roomBooking.controllers;
package com.uva.monolith.services.users.controllers;
import java.time.LocalDate;
import java.util.List;
......@@ -18,10 +18,10 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.uva.roomBooking.models.Booking;
import com.uva.roomBooking.models.User;
import com.uva.roomBooking.models.UserStatus;
import com.uva.roomBooking.repositories.UserRepository;
import com.uva.monolith.services.bookings.models.Booking;
import com.uva.monolith.services.users.models.User;
import com.uva.monolith.services.users.models.UserStatus;
import com.uva.monolith.services.users.repositories.UserRepository;
@RestController
@RequestMapping("users")
......
package com.uva.roomBooking.models;
package com.uva.monolith.services.users.models;
public enum Tipo {
SINGLE,
......
package com.uva.roomBooking.models;
package com.uva.monolith.services.users.models;
import java.time.LocalDate;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.uva.monolith.services.bookings.models.Booking;
import jakarta.persistence.Basic;
import jakarta.persistence.CascadeType;
......
package com.uva.roomBooking.models;
package com.uva.monolith.services.users.models;
public enum UserRol {
HOTEL_ADMIN, CONSUMER
......
package com.uva.roomBooking.models;
package com.uva.monolith.services.users.models;
public enum UserStatus {
NO_BOOKINGS, WITH_ACTIVE_BOOKINGS, WITH_INACTIVE_BOOKINGS;
......
package com.uva.roomBooking.repositories;
package com.uva.monolith.services.users.repositories;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;
import com.uva.roomBooking.models.User;
import com.uva.monolith.services.users.models.User;
public interface UserRepository extends JpaRepository<User, Integer> {
Optional<User> findByEmail(String email);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment