예제 #1
0
        public async Task <TagUse> RenameTagUseAsync(RenameTagUseRequest request)
        {
            SystemContract.RequireNotNullOrWhiteSpace(request.NewName, "request.NewName");
            SystemContract.RequireNotNullOrWhiteSpace(request.OldName, "request.OldName");

            /// NewNameの使用確認
            var newNameTagUseQuery = _refsContext.TagUses.Include("Owner").AsNoTracking().
                                     Where(u => u.OwnerId == request.OwnerId && u.Name == request.NewName);
            /// collationをcase insensitiveにしているので大文字小文字が異なるTagUseも取得される
            var newNameTagUses = await newNameTagUseQuery.ToArrayAsync();

            var isNewNameTagUseExists = newNameTagUses.Any(u => u.Name == request.NewName);

            BusinessContract.Require(!isNewNameTagUseExists, Errors.TagUseNameAlreadyExists, request.NewName);

            var oldNameTagUseQuery = _refsContext.TagUses.Include("Owner").
                                     Where(t => t.OwnerId == request.OwnerId && t.Name == request.OldName);
            /// collationをcase insensitiveにしているので大文字小文字が異なるTagUseも取得される
            var storedTagUses = await oldNameTagUseQuery.ToArrayAsync();

            var storedTagUse = storedTagUses.Single(u => u.Name == request.OldName);

            BusinessContract.ValidateWritePermission(request.OwnerId);
            BusinessContract.ValidateRowVersion(request.TagUseIdentity.RowVersion, storedTagUse.RowVersion);

            var tag = await EnsureTagAsync(request.NewName);

            storedTagUse.TagId = tag.Id;
            storedTagUse.Name  = request.NewName;

            _refsContext.MarkAsModified(storedTagUse);
            await _refsContext.SaveChangesAsync();

            return(storedTagUse);
        }
예제 #2
0
        public async Task <ActionResult> RenameTagUse(long?id, byte[] rowVersion, string oldName, string newName)
        {
            SystemContract.RequireNotNull(id, "id");
            SystemContract.RequireNotNullOrWhiteSpace(oldName, "oldName");
            SystemContract.RequireNotNullOrWhiteSpace(newName, "newName");

            var user    = GetUser();
            var request = new RenameTagUseRequest()
            {
                TagUseIdentity = new EntityIdentity(id.Value, rowVersion),
                OwnerId        = user.Id,
                OldName        = oldName,
                NewName        = newName,
            };
            var result = await _tagHandler.RenameTagUseAsync(request);

            var ret = Mapper.Map <TagUseViewModel>(result);

            return(JsonNet(ret));
        }