Exemplo n.º 1
0
 public static NewFiveThreeOneRoutineInfo MapPublicDTOToBLLEntity(RoutineGenerationInfo dto,
                                                                  BLL.App.DTO.WorkoutRoutine baseRoutine)
 {
     return(new NewFiveThreeOneRoutineInfo
     {
         BaseRoutine = baseRoutine,
         StartingDate = dto.StartingDate,
         CycleInfo = new NewFiveThreeOneCycleInfo
         {
             AddDeloadWeek = dto.AddDeloadWeek,
             BenchPressMax = dto.BenchPressMax,
             DeadliftMax = dto.DeadliftMax,
             OverHeadPressMax = dto.OverHeadPressMax,
             SquatMax = dto.SquatMax
         }
     });
 }
        public async Task <ActionResult <FullWorkoutRoutine> > GenerateRoutine(RoutineGenerationInfo dto)
        {
            if (await _bll.WorkoutRoutines.UserWithIdHasActiveRoutineAsync(User.UserId()))
            {
                return(BadRequest(new { Message = "User already has an active workout routine" }));
            }

            if (await _bll.WorkoutRoutines.BaseRoutineWithIdExistsAsync(dto.BaseRoutineId))
            {
                var workoutRoutine = await _bll.WorkoutRoutines.FindFullRoutineWithIdAsync(dto.BaseRoutineId);

                if (!workoutRoutine.IsPublished)
                {
                    return(BadRequest());
                }

                if (dto.StartingDate < DateTime.Now.AddDays(-1))
                {
                    return(BadRequest(new { Message = "Routine starting date was more than 24 hours in the past" }));
                }

                if (dto.StartingDate > DateTime.Now.AddDays(14))
                {
                    return(BadRequest(new { Message = "Routine starting date was more than 14 days in the future" }));
                }

                var newRoutineInfo   = RoutineInfoMapper.MapPublicDTOToBLLEntity(dto, workoutRoutine);
                var generatedRoutine = _bll.WorkoutRoutines.GenerateNewFiveThreeOneRoutine(newRoutineInfo);
                generatedRoutine.AppUserId = User.UserId();
                _bll.WorkoutRoutines.Add(generatedRoutine);
                var translations = await
                                   _bll.WorkoutRoutines.AllTranslationsForWorkoutRoutineWithIdAsync(newRoutineInfo.BaseRoutine.Id);

                AddTranslationsToRoutine(generatedRoutine.Id, translations);
                await _bll.SaveChangesAsync();

                var routineFromDatabase = await _bll.WorkoutRoutines.FindFullRoutineWithIdAsync(generatedRoutine.Id);

                return(Ok(RoutineMapper.MapBLLEntityToFullWorkoutRoutine(routineFromDatabase)));
            }

            return(BadRequest());
        }