private async Task <Reply> UpdateFields(Tags.Tag request, ServerCallContext context, Func <Tag, Task <Error> > updateField) { var reply = new Reply(); var user = await _userService.GetUser(context.GetHttpContext()); if (user == null) { reply.Error = Error.NeedLogin; return(reply); } if (!user.HasWritePermission()) { reply.Error = Error.NoPermission; return(reply); } if (Guid.TryParse(request.Id, out var id)) { var item = await _service.All().Where(i => i.Id == id).FirstOrDefaultAsync(); if (item != null) { reply.Error = await updateField(item); if (reply.Error == Error.None) { await _service.Update(item); } } else { reply.Error = Error.NoSuchEntity; } } else { reply.Error = Error.InvalidArguments; } return(reply); }