예제 #1
0
        /// <summary>
        /// Updates the existing tag.
        /// </summary>
        public async Task UpdateAsync(int id, TagVM vm)
        {
            await ValidateAsync(vm, id);

            var tag = await _db.Tags.GetAsync(x => x.Id == id, $"Tag #{id} does not exist.");

            _mapper.Map(vm, tag);
            await _db.SaveChangesAsync();
        }
예제 #2
0
        /// <summary>
        /// Creates a new tag.
        /// </summary>
        public async Task <TagVM> CreateAsync(TagVM vm)
        {
            await ValidateAsync(vm, null);

            var tag = _mapper.Map <Tag>(vm);

            _db.Tags.Add(tag);
            await _db.SaveChangesAsync();

            return(_mapper.Map <TagVM>(tag));
        }
예제 #3
0
        /// <summary>
        /// Ensures that the request is correct.
        /// </summary>
        private async Task ValidateAsync(TagVM vm, int?id)
        {
            if (string.IsNullOrEmpty(vm.Caption))
            {
                throw new OperationException($"Required field {nameof(vm.Caption)} is not set.");
            }

            if (!Enum.IsDefined(typeof(TagType), vm.Type))
            {
                throw new OperationException($"Tag type '{vm.Type}' is unknown.");
            }

            if (await _db.Tags.AnyAsync(x => x.Caption.ToLower() == vm.Caption.ToLower() && x.Id != id))
            {
                throw new OperationException($"Tag '{vm.Caption}' already exists.");
            }
        }