public async Task <ActionResult <WorkoutInvitationForReturnDto> > AcceptPendingInvitationAsync(int id) { var woInv = await workoutInvitationRepository.GetByIdAsync(id); if (woInv == null) { return(NotFound()); } if (woInv.InviteeId != int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value)) { return(Unauthorized(new ProblemDetailsWithErrors("You cannot accept this invitation.", 401, Request))); } if (woInv.Accepted || woInv.Declined) { return(BadRequest(new ProblemDetailsWithErrors("This invitation has already been responded to.", 400, Request))); } var user = await userRepository.GetByIdAsync(woInv.InviteeId); woInv.Accepted = true; woInv.Declined = false; woInv.RespondedAtDateTime = DateTimeOffset.UtcNow; var schWo = await scheduledWorkoutRepository.GetByIdAsync(woInv.ScheduledWorkoutId, wo => wo.Attendees); schWo.Attendees.Add(new ScheduledWorkoutUser { User = user, ScheduledWorkout = schWo }); var schWoSaveResult = await scheduledWorkoutRepository.SaveAllAsync(); if (!schWoSaveResult) { return(BadRequest(new ProblemDetailsWithErrors("Unable to save invitation.", 400, Request))); } var invitationToReturn = mapper.Map <WorkoutInvitationForReturnDto>(woInv); return(Ok(invitationToReturn)); }
public async Task <ActionResult <ScheduledWorkoutForReturnDto> > CreateScheduledWorkoutAsync([FromBody] ScheduledWorkoutForCreationDto newWorkoutDto) { var workoutToSchedule = await workoutRepository.GetByIdAsync(newWorkoutDto.WorkoutId); if (workoutToSchedule == null) { return(BadRequest(new ProblemDetailsWithErrors("Invalid workout id.", 400, Request))); } var userId = int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value); var user = await userRepository.GetByIdAsync(userId); var newWorkout = mapper.Map <ScheduledWorkout>(newWorkoutDto); newWorkout.Workout = workoutToSchedule; newWorkout.ScheduledByUserId = userId; newWorkout.ScheduledByUser = user; newWorkout.Attendees = new List <ScheduledWorkoutUser> { new ScheduledWorkoutUser { User = user } }; scheduledWorkoutRepository.Add(newWorkout); var saveResults = await scheduledWorkoutRepository.SaveAllAsync(); if (!saveResults) { return(BadRequest(new ProblemDetailsWithErrors("Could not save the new workout.", 400, Request))); } var workoutToReturn = mapper.Map <ScheduledWorkoutForReturnDto>(newWorkout); return(CreatedAtRoute("GetScheduledWorkout", new { id = newWorkout.Id }, workoutToReturn)); }