public async Task <IActionResult> PostBooking(
            [FromRoute] int year,
            [FromRoute] int month,
            [FromRoute] int day,
            [FromBody] BookingInputModel input)
        {
            var bookingMonthId = BookingMonthId.From(new DateTime(year, month, day));
            var bookingMonth   = await _repository.Find(bookingMonthId);

            if (bookingMonth == null)
            {
                bookingMonth = new BookingMonth(bookingMonthId, year, month, new Dictionary <int, BookingDay>());
            }

            var userId = UserId.With(HttpContext.GetUserId().Value);
            var slot   = (Slot)input.Slot;

            bookingMonth.AddBooking(userId, day, slot);

            await _repository.Upsert(bookingMonth);

            var responseModel = await _factory.From(bookingMonth.BookingDays[day].Bookings[slot], input.Slot);

            return(CreatedAtAction("GetBookingSlot", new { year = year, month = month, day = day, slot = input.Slot, }, responseModel));
        }
Beispiel #2
0
 public async Task <BookingMonthResponseModel> From(BookingMonth aggregate)
 {
     return(new BookingMonthResponseModel
     {
         Year = aggregate.Year,
         Month = aggregate.Month,
         BookingDays = await From(aggregate.BookingDays)
     });
 }
Beispiel #3
0
 public static BookingMonthDataModel From(BookingMonth aggregate)
 {
     return(new BookingMonthDataModel
     {
         Id = aggregate.Id.Value,
         Month = aggregate.Month,
         Year = aggregate.Year,
         BookingDays = From(aggregate.BookingDays)
     });
 }
        public async Task Upsert(BookingMonth aggregate)
        {
            var upsertCommand = $@"
                INSERT INTO laundry.bookings(
                    id,
                    booking)
                VALUES(
                    @id,
                    @booking::jsonb)
                ON CONFLICT(id) DO UPDATE SET booking = excluded.booking;";

            var dataModel = BookingMonthMapper.From(aggregate);

            var booking = JsonConvert.SerializeObject(dataModel);

            using (var connection = new NpgsqlConnection(_options.ConnectionString))
            {
                await connection.ExecuteAsync(upsertCommand, new BookingMonthPostgresDocument { Id = aggregate.Id.Value, Booking = booking });
            }
        }