Esempio n. 1
0
        public override async Task <KeyValuesReply> GetAll(Empty request, ServerCallContext context)
        {
            var reply = new KeyValuesReply();
            var items = _service.All();

            if (!(await _userService.GetUser(context.GetHttpContext())).HasWritePermission())
            {
                items = items.Where(i => i.Type != 1);
            }

            reply.KeyValues.AddRange(await items
                                     .Select(i => new KeyValue {
                Id = i.Id, Value = i.Value
            })
                                     .ToArrayAsync());
            return(reply);
        }
Esempio n. 2
0
        private async Task <Reply> IncreaseOrDecreaseTag(IncDecTagRequest request, int inc)
        {
            var reply = new Reply();

            if (!Guid.TryParse(request.TagId, out var tagId) || !Guid.TryParse(request.FileId, out var fileId))
            {
                reply.Error = Error.InvalidArguments;
                return(reply);
            }

            var tag = await _tagsService.All().FirstOrDefaultAsync(t => t.Id == tagId);

            if (tag == null)
            {
                reply.Error = Error.NoSuchEntity;
                return(reply);
            }

            var file = await _service.All().Include(f => f.FileTags).FirstOrDefaultAsync(f => f.Id == fileId);

            if (file == null)
            {
                reply.Error = Error.NoSuchEntity;
                return(reply);
            }

            var editableTags = await _keyValueService.All()
                               .FirstOrDefaultAsync(kv => kv.Id == ServerKeys.IncreaseTags.Key);

            if (editableTags == null || string.IsNullOrWhiteSpace(editableTags.Value))
            {
                reply.Error = Error.InvalidOperation;
                return(reply);
            }

            var canEdit = editableTags.Value.Split(' ').Any(s => s.Trim() == tag.Name);

            if (!canEdit)
            {
                reply.Error = Error.InvalidOperation;
                return(reply);
            }

            file.FileTags ??= new List <Domain.Models.FileTag>();

            var fileTag = file.FileTags.FirstOrDefault(t => t.TagId == tagId);

            if (fileTag == null)
            {
                fileTag = new Domain.Models.FileTag
                {
                    TagId  = tagId,
                    FileId = fileId,
                    Value  = Math.Max(inc, 0).ToString()
                };
                file.FileTags.Add(fileTag);
            }
            else
            {
                if (!int.TryParse(fileTag.Value, out var cur))
                {
                    cur = 0;
                }

                fileTag.Value = Math.Max(cur + inc, 0).ToString();
            }

            await _service.Update(file);

            return(reply);
        }