public async Task <IActionResult> CreateAppointment([FromBody] RequestAppointment appointmentRequest)
        {
            try
            {
                var appointmentId = appointmentRequest.AppointmentReference.ID;
                var workOrderId   = int.Parse(appointmentRequest.WorkOrderReference.ID);
                await _createAppointmentUseCase.Execute(appointmentId, workOrderId, appointmentRequest.Notes);

                return(Ok());
            }
            catch (FormatException)
            {
                return(BadRequest("Invalid Id formats. they must be integers"));
            }
        }
        public async Task BookSlotAppointment()
        {
            const string contractor          = "contractor";
            var          woRef               = AddWorkOrder(contractor);
            var          expectedAppointment = new AppointmentSeedModel("AM", DateTime.UtcNow, DateTime.UtcNow.AddHours(1));

            var(code, appointments) = await GetAppointments(contractor, woRef, expectedAppointment);

            code.Should().Be(HttpStatusCode.OK);
            var          appointment   = appointments.Single().Slots.Single();
            const string expectedNotes = "notes";

            var request = new RequestAppointment
            {
                WorkOrderReference = new Reference
                {
                    ID = woRef.ToString()
                },
                AppointmentReference = new Reference
                {
                    ID = appointment.Reference
                },
                Notes = expectedNotes
            };

            code = await Post($"/api/v2/appointments", request);

            code.Should().Be(HttpStatusCode.OK);

            using var ctx = GetContext();
            var db = ctx.DB;
            var bookedAppointment = await db.Appointments.SingleAsync(a => a.WorkOrderId == woRef);

            bookedAppointment.StartTime.Should().Be(expectedAppointment.StartTime);
            bookedAppointment.EndTime.Should().Be(expectedAppointment.EndTime);
            bookedAppointment.AppointmentNote.Should().Be(expectedNotes);

            var notes = await db.JobStatusUpdates.SingleAsync(jsu => jsu.RelatedWorkOrderId == woRef);

            notes.TypeCode.Should().Be(JobStatusUpdateTypeCode.Other_0);
            notes.OtherType.Should().Be(CustomJobStatusUpdates.AddNote);
            notes.Comments.Should().Be(expectedNotes);

            var(woCode, workOrderResponse) = await Get <RepairsApi.V2.Boundary.WorkOrderResponse>($"/api/v2/workOrders/{woRef}");

            woCode.Should().Be(HttpStatusCode.OK);
            workOrderResponse.Appointment.Note.Should().Be(expectedNotes);
        }
        public async Task NotFoundWhenBookSlotAppointmentWithUnknownWorkOrderId()
        {
            var request = new RequestAppointment
            {
                WorkOrderReference = new Reference
                {
                    ID = "1337"
                },
                AppointmentReference = new Reference
                {
                    ID = "string"
                }
            };
            var code = await Post($"/api/v2/appointments", request);

            code.Should().Be(HttpStatusCode.NotFound);
        }
        public async Task BadRequestWhenBookSlotAppointmentWithBadWorkOrderId()
        {
            var request = new RequestAppointment
            {
                WorkOrderReference = new Reference
                {
                    ID = "notANumber"
                },
                AppointmentReference = new Reference
                {
                    ID = "string"
                }
            };
            var code = await Post($"/api/v2/appointments", request);

            code.Should().Be(HttpStatusCode.BadRequest);
        }
        private async Task RequestAppointment(int woRef, string appointmentReference)
        {
            var request = new RequestAppointment
            {
                WorkOrderReference = new Reference
                {
                    ID = woRef.ToString()
                },
                AppointmentReference = new Reference
                {
                    ID = appointmentReference
                }
            };
            var code = await Post($"/api/v2/appointments", request);

            code.Should().Be(HttpStatusCode.OK);
        }