Example #1
0
        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
            }));
        }
Example #2
0
        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));
        }
Example #3
0
        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());
        }