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