Beispiel #1
0
        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));
        }