public async Task <IActionResult> CreateTemplateVersion(long id, [FromBody] VersionCreateInputModel model) { if (!ModelState.IsValid) { return(JsonBadRequest("Invalid inputs.")); } if (model.PreprocessGitModel != null && !model.PreprocessGitModel.IsValid()) { return(JsonBadRequest($"The input about Preprocess Git is not valid.")); } if (model.TrainingGitModel != null && !model.TrainingGitModel.IsValid()) { return(JsonBadRequest($"The input about Training Git is not valid.")); } if (model.EvaluationGitModel != null && !model.EvaluationGitModel.IsValid()) { return(JsonBadRequest($"The input about Evaluation Git is not valid.")); } var template = await templateRepository.GetByIdAsync(id); if (template == null) { return(JsonNotFound($"Template ID {id} is not found.")); } template.LatestVersion += 1; templateRepository.Update(template); var templateVersion = new TemplateVersion(); var errorResult = await SetTemplateDetails(templateVersion, template, model); if (errorResult != null) { return(errorResult); } templateVersionRepository.Add(templateVersion); unitOfWork.Commit(); return(JsonCreated(new VersionIndexOutputModel(templateVersion))); }
public async Task <IActionResult> CreateDataSetVersion(long id, [FromBody] VersionCreateInputModel model) { if (!ModelState.IsValid) { return(JsonBadRequest("Invalid inputs.")); } var dataSet = await dataSetRepository.GetByIdAsync(model.DataSetId); if (dataSet == null) { return(JsonNotFound($"DataSet ID {model.DataSetId} is not found.")); } var aquariumDataSet = await aquariumDataSetRepository.GetByIdAsync(id); if (aquariumDataSet == null) { return(JsonNotFound($"AquariumDataSet ID {id} is not found.")); } aquariumDataSet.LatestVersion += 1; aquariumDataSetRepository.Update(aquariumDataSet); var dataSetVersion = new DataSetVersion { AquariumDataSetId = id, Version = aquariumDataSet.LatestVersion, DataSetId = model.DataSetId, }; aquariumDataSetVersionRepository.Add(dataSetVersion); dataSet.IsLocked = true; dataSetRepository.Update(dataSet); unitOfWork.Commit(); return(JsonCreated(new VersionIndexOutputModel(dataSetVersion))); }
private async Task <IActionResult> SetTemplateDetails(TemplateVersion templateVersion, Template template, VersionCreateInputModel model) { long? preprocessGitId = null; string preprocessRepository = null; string preprocessOwner = null; string preprocessBranch = null; string preprocessCommitId = null; string preprocessGitToken = null; long trainingGitId = 0; string trainingRepository = null; string trainingOwner = null; string trainingBranch = null; string trainingCommitId = null; string trainingGitToken = null; long? evaluationGitId = null; string evaluationRepository = null; string evaluationOwner = null; string evaluationBranch = null; string evaluationCommitId = null; string evaluationGitToken = null; if (model.PreprocessGitModel != null) { preprocessGitId = model.PreprocessGitModel.GitId ?? CurrentUserInfo.SelectedTenant.DefaultGit?.Id; preprocessRepository = model.PreprocessGitModel.Repository; preprocessOwner = model.PreprocessGitModel.Owner; preprocessBranch = model.PreprocessGitModel.Branch; preprocessCommitId = model.PreprocessGitModel.CommitId; // コミットIDが指定されていなければ、ブランチのHEADからコミットIDを取得する if (string.IsNullOrEmpty(preprocessCommitId)) { preprocessCommitId = await gitLogic.GetCommitIdAsync(preprocessGitId.Value, model.PreprocessGitModel.Repository, model.PreprocessGitModel.Owner, model.PreprocessGitModel.Branch); if (string.IsNullOrEmpty(preprocessCommitId)) { // コミットIDが特定できなかったらエラー return(JsonNotFound($"The branch {preprocessBranch} for {preprocessGitId.Value}/{model.PreprocessGitModel.Owner}/{ model.PreprocessGitModel.Repository} is not found.")); } } preprocessGitToken = model.PreprocessGitModel.Token; } if (model.TrainingGitModel != null) { trainingGitId = (model.TrainingGitModel.GitId ?? CurrentUserInfo.SelectedTenant.DefaultGit?.Id).Value; trainingRepository = model.TrainingGitModel.Repository; trainingOwner = model.TrainingGitModel.Owner; trainingBranch = model.TrainingGitModel.Branch; trainingCommitId = model.TrainingGitModel.CommitId; // コミットIDが指定されていなければ、ブランチのHEADからコミットIDを取得する if (string.IsNullOrEmpty(trainingCommitId)) { trainingCommitId = await gitLogic.GetCommitIdAsync(trainingGitId, model.TrainingGitModel.Repository, model.TrainingGitModel.Owner, model.TrainingGitModel.Branch); if (string.IsNullOrEmpty(trainingCommitId)) { // コミットIDが特定できなかったらエラー return(JsonNotFound($"The branch {trainingBranch} for {trainingGitId}/{model.TrainingGitModel.Owner}/{ model.TrainingGitModel.Repository} is not found.")); } } trainingGitToken = model.TrainingGitModel.Token; } if (model.EvaluationGitModel != null) { evaluationGitId = (model.EvaluationGitModel.GitId ?? CurrentUserInfo.SelectedTenant.DefaultGit?.Id).Value; evaluationRepository = model.EvaluationGitModel.Repository; evaluationOwner = model.EvaluationGitModel.Owner; evaluationBranch = model.EvaluationGitModel.Branch; evaluationCommitId = model.EvaluationGitModel.CommitId; // コミットIDが指定されていなければ、ブランチのHEADからコミットIDを取得する if (string.IsNullOrEmpty(evaluationCommitId)) { evaluationCommitId = await gitLogic.GetCommitIdAsync(evaluationGitId.Value, model.EvaluationGitModel.Repository, model.EvaluationGitModel.Owner, model.EvaluationGitModel.Branch); if (string.IsNullOrEmpty(evaluationCommitId)) { // コミットIDが特定できなかったらエラー return(JsonNotFound($"The branch {evaluationBranch} for {evaluationGitId}/{model.EvaluationGitModel.Owner}/{ model.EvaluationGitModel.Repository} is not found.")); } } evaluationGitToken = model.EvaluationGitModel.Token; } long? preprocessRegistryId = null; string preprocessImage = null; string preprocessTag = null; string preprocessRegistryToken = null; if (model.PreprocessContainerImage != null) { preprocessRegistryId = model.PreprocessContainerImage.RegistryId ?? CurrentUserInfo.SelectedTenant.DefaultRegistry?.Id; preprocessImage = model.PreprocessContainerImage.Image; preprocessTag = model.PreprocessContainerImage.Tag; preprocessRegistryToken = model.PreprocessContainerImage.Token; } long trainingRegistryId = 0; string trainingImage = null; string trainingTag = null; string trainingRegistryToken = null; if (model.TrainingContainerImage != null) { trainingRegistryId = (model.TrainingContainerImage.RegistryId ?? CurrentUserInfo.SelectedTenant.DefaultRegistry?.Id).Value; trainingImage = model.TrainingContainerImage.Image; trainingTag = model.TrainingContainerImage.Tag; trainingRegistryToken = model.TrainingContainerImage.Token; } long? evaluationRegistryId = null; string evaluationImage = null; string evaluationTag = null; string evaluationRegistryToken = null; if (model.EvaluationContainerImage != null) { evaluationRegistryId = (model.EvaluationContainerImage.RegistryId ?? CurrentUserInfo.SelectedTenant.DefaultRegistry?.Id).Value; evaluationImage = model.EvaluationContainerImage.Image; evaluationTag = model.EvaluationContainerImage.Tag; evaluationRegistryToken = model.EvaluationContainerImage.Token; } templateVersion.TemplateId = template.Id; templateVersion.Version = template.LatestVersion; templateVersion.PreprocessEntryPoint = model.PreprocessEntryPoint; templateVersion.PreprocessContainerRegistryId = preprocessRegistryId; templateVersion.PreprocessContainerImage = preprocessImage; templateVersion.PreprocessContainerTag = preprocessTag; // latestは運用上使用されていないハズなので、そのまま直接代入 templateVersion.PreprocessContainerToken = preprocessRegistryToken; templateVersion.PreprocessRepositoryGitId = preprocessGitId; templateVersion.PreprocessRepositoryName = preprocessRepository; templateVersion.PreprocessRepositoryOwner = preprocessOwner; templateVersion.PreprocessRepositoryBranch = preprocessBranch; templateVersion.PreprocessRepositoryCommitId = preprocessCommitId; templateVersion.PreprocessRepositoryToken = preprocessGitToken; templateVersion.PreprocessCpu = model.PreprocessCpu; templateVersion.PreprocessMemory = model.PreprocessMemory; templateVersion.PreprocessGpu = model.PreprocessGpu; templateVersion.TrainingEntryPoint = model.TrainingEntryPoint; templateVersion.TrainingContainerRegistryId = trainingRegistryId; templateVersion.TrainingContainerImage = trainingImage; templateVersion.TrainingContainerTag = trainingTag; // latestは運用上使用されていないハズなので、そのまま直接代入 templateVersion.TrainingContainerToken = trainingRegistryToken; templateVersion.TrainingRepositoryGitId = trainingGitId; templateVersion.TrainingRepositoryName = trainingRepository; templateVersion.TrainingRepositoryOwner = trainingOwner; templateVersion.TrainingRepositoryBranch = trainingBranch; templateVersion.TrainingRepositoryCommitId = trainingCommitId; templateVersion.TrainingRepositoryToken = trainingGitToken; templateVersion.TrainingCpu = model.TrainingCpu; templateVersion.TrainingMemory = model.TrainingMemory; templateVersion.TrainingGpu = model.TrainingGpu; templateVersion.EvaluationEntryPoint = model.EvaluationEntryPoint; templateVersion.EvaluationContainerRegistryId = evaluationRegistryId; templateVersion.EvaluationContainerImage = evaluationImage; templateVersion.EvaluationContainerTag = evaluationTag; // latestは運用上使用されていないハズなので、そのまま直接代入 templateVersion.EvaluationContainerToken = evaluationRegistryToken; templateVersion.EvaluationRepositoryGitId = evaluationGitId; templateVersion.EvaluationRepositoryName = evaluationRepository; templateVersion.EvaluationRepositoryOwner = evaluationOwner; templateVersion.EvaluationRepositoryBranch = evaluationBranch; templateVersion.EvaluationRepositoryCommitId = evaluationCommitId; templateVersion.EvaluationRepositoryToken = evaluationGitToken; templateVersion.EvaluationCpu = model.EvaluationCpu; templateVersion.EvaluationMemory = model.EvaluationMemory; templateVersion.EvaluationGpu = model.EvaluationGpu; return(null); }