public async Task <IActionResult> SetAcceptedStatus(int id, [FromBody] Dto.AppointmentStatusChange appointmentStatusChange) { if (!ModelState.IsValid || (!appointmentStatusChange.Accepted && appointmentStatusChange.CancelMessage == null)) { return(BadRequest(ModelState)); } Appointment appointment = await _context.Appointment.FirstOrDefaultAsync(ap => ap.Id == id && ap.RelookeuseId == int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value)); if (appointment == null) { return(NotFound()); } if (appointment.Finished) { return(Conflict()); } if (!appointmentStatusChange.Accepted) { appointment.CancelRaison = appointmentStatusChange.CancelMessage; appointment.Finished = true; } else { appointment.Accepted = true; } _context.Entry(appointment).OriginalValues["RowVersion"] = appointmentStatusChange.RowVersion; try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { return(Conflict()); } return(Ok(new Dto.AppointmentRowVersion() { RowVersion = appointment.RowVersion })); }
public async Task <IActionResult> Get([FromBody] Dto.AppointmentRequest appointmentRequest) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } if (await _context.Appointment.CountAsync(ap => !ap.Finished && ap.RelookeuseId == appointmentRequest.RelookeuseId && ap.UserId == int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value)) > 0) { return(Conflict()); } Relookeuse relookeuse = await _context.Relookeuse.Include(rel => rel.User).FirstOrDefaultAsync(rel => rel.UserId == appointmentRequest.RelookeuseId); if (relookeuse == null) { return(NotFound()); } Appointment appointment = new Appointment { UserId = int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value), RelookeuseId = appointmentRequest.RelookeuseId, Date = DateTime.Now, Accepted = false, Makeup = appointmentRequest.MakeUp, Finished = false }; var result = await _context.AddAsync(appointment); await _context.SaveChangesAsync(); Dto.Appointment dtoAppointment = _mapper.Map <Appointment, Dto.Appointment>(result.Entity); dtoAppointment.RelookeuseFirstName = relookeuse.User.FirstName; dtoAppointment.RelookeuseLastName = relookeuse.User.LastName; return(Created("api/appointment/" + result.Entity.Id, dtoAppointment)); }
public async Task <IActionResult> Close(int id, [FromBody] Dto.Rating ratingRequest) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } Appointment appointment = await _context.Appointment.FirstOrDefaultAsync(ap => ap.Id == id && ap.UserId == int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value)); if (appointment == null) { return(NotFound()); } if (!appointment.Accepted) { return(BadRequest()); } if (appointment.Finished) { return(Conflict(ConflictErrorType.AppointmentAlreadyClose)); } appointment.Finished = true; appointment.Mark = ratingRequest.Value; _context.Entry(appointment).OriginalValues["RowVersion"] = ratingRequest.RowVersion; try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { return(Conflict(ConflictErrorType.AppointmentNewlyModified)); } return(NoContent()); }