/// <summary> /// 指定されたIDのデータを削除する。 /// まずDBのレコードを削除して、その後オブジェクトストレージから上記のデータを削除する。 /// コミットは行わないので、呼び出し側で実行すること。(基本的には結果に関わらずコミットする) /// </summary> /// <param name="dataId">データID</param> public async Task <bool> DeleteDataAsync(long dataId) { var dataSetRepository = CommonDiLogic.DynamicDi <IDataSetRepository>(); // データセットエントリを削除 dataSetRepository.RemoveDataFromDataSet(dataId); // データとファイルを削除 var data = await dataRepository.GetDataIncludeAllAsync(dataId); dataRepository.DeleteData(data); foreach (var file in data.DataProperties) { if (file.DataFile != null) { await storageLogic.AddFileToDeleteListAsync(ResourceType.Data, file.DataFile.StoredPath); } } // タグマップを削除 tagLogic.Delete(dataId); // オブジェクトストレージからファイルを削除 return(await storageLogic.DeleteFilesInDeleteListAsync()); }
public async Task <IActionResult> EditData(long?id, [FromBody] EditInputModel model, [FromServices] ITagRepository tagRepository) { //データの入力チェック if (!ModelState.IsValid || !id.HasValue) { return(JsonBadRequest("Invalid inputs.")); } //データの存在チェック var data = await dataRepository.GetByIdAsync(id.Value); if (data == null) { return(JsonNotFound($"Data ID {id.Value} is not found.")); } if (model.Name != null) { if (string.IsNullOrWhiteSpace(model.Name)) { //名前に空文字は許可しない return(JsonBadRequest($"A name of Data is NOT allowed to set empty string.")); } // 名前の前後の空白文字を除去して設定する。 data.Name = model.Name.Trim(); } data.Memo = EditColumn(model.Memo, data.Memo); //タグの編集。指定がない場合は変更なしと見なして何もしない。 if (model.Tags != null) { if (model.Tags.Count() > 0) { //タグが一つでも指定されていたら、全部上書き await tagLogic.EditAsync(data.Id, model.Tags); } else { //タグがゼロなら全削除 tagLogic.Delete(data.Id); } } // DBへの編集内容を一旦確定させるためコミット unitOfWork.Commit(); // 未使用タグ削除 tagRepository.DeleteUnUsedTags(); // DBへタグ削除結果のコミット unitOfWork.Commit(); return(JsonOK(new IndexOutputModel(data))); }