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()); }