Skip to content
Snippets Groups Projects
BookingController.cs 2.25 KiB
Newer Older
using GatewayAPI.Clients.BookingService;
using GatewayAPI.Models;
using Microsoft.AspNetCore.Mvc;

namespace GatewayAPI.Controllers
{

    [ApiController]
    [Route("api/[Controller]")]
    public class BookingController : ControllerBase
    {
        private readonly IBookingServiceClient bookingServiceClient;

        public BookingController(IBookingServiceClient bookingServiceClient)
        {
            this.bookingServiceClient = bookingServiceClient;
        }

        [HttpGet("{id}")]
        public async Task<IActionResult> GetBooking(int id) 
        {
            HttpResponseMessage response = await bookingServiceClient.GetBookingAsync(id);
            return new HttpResponseMessageResult(response);
        }

        [HttpGet()]
        public async Task<IActionResult> GetBookings(int? flightId = null, int? userId = null, int? bookingClass = null)
        {
            HttpResponseMessage response = await bookingServiceClient.GetBookingsAsync(flightId, userId, bookingClass);
            return new HttpResponseMessageResult(response);
        }

        [HttpPost()]
        public async Task<IActionResult> MakeBooking([FromBody] BookingCreation bookingCreationModel)
        {
            HttpResponseMessage response = await bookingServiceClient.MakeBookingAsync(bookingCreationModel);
            return new HttpResponseMessageResult(response);
        }

        [HttpPut("{id}")]
        public async Task<IActionResult> UpdateBooking([FromRoute] int id, [FromBody] BookingUpdate bookingUpdateModel)
        {
            HttpResponseMessage response = await bookingServiceClient.UpdateBookingAsync(id, bookingUpdateModel);
            return new HttpResponseMessageResult(response);
        }

        [HttpGet("upcoming")]
        public async Task<IActionResult> GetUpcomingFlightBookings()
        {
            HttpResponseMessage response = await bookingServiceClient.GetUpcomingFlightBookingsAsync();
            return new HttpResponseMessageResult(response);
        }

        [HttpGet("history")]
        public async Task<IActionResult> GetPreviousFlightBookings()
        {
            HttpResponseMessage response = await bookingServiceClient.GetPreviousFlightBookingsAsync();
            return new HttpResponseMessageResult(response);
        }