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