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)); }
public async Task <BookingMonthResponseModel> From(BookingMonth aggregate) { return(new BookingMonthResponseModel { Year = aggregate.Year, Month = aggregate.Month, BookingDays = await From(aggregate.BookingDays) }); }
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 }); } }