public async Task <long> NextAsync(string name)
        {
            if (await idHolderRepository.ExistsAsync(name))
            {
                var entity = await idHolderRepository.GetAsync(name);

                var idHolderName      = IdHolderName.Create(entity.Name);
                var idHolderCurrentId = IdHolderCurrentId.Create(entity.CurrentId);
                var idHolder          = new IdHolder(idHolderName.Value, idHolderCurrentId.Value);
                entity.CurrentId = idHolder.Next();
                await idHolderRepository.UpdateAsync(entity);

                return(idHolder.CurrentId.Value);
            }
            else
            {
                var idHolderName      = IdHolderName.Create(name);
                var idHolderCurrentId = IdHolderCurrentId.Create(StartFromDefault);
                var result            = Result.Combine(idHolderName, idHolderCurrentId);
                if (result.IsSuccess)
                {
                    var idHolder = new IdHolder(idHolderName.Value, idHolderCurrentId.Value);
                    await CreateIdHolderTableEntityAsync(idHolder);

                    return(StartFromDefault);
                }
                else
                {
                    throw new Exception(result.Error);
                }
            }
        }
        public void Create_NameIsValid_ReturnsObjectWithName()
        {
            var idHolderName = "name";
            var result       = IdHolderName.Create(idHolderName);

            result.IsSuccess.Should().BeTrue();
            result.Value.Value.Should().Be(idHolderName);
        }
        public void Next_ReturnsIncrementedValue()
        {
            var idHolderName      = IdHolderName.Create("name");
            var idHolderCurrentId = IdHolderCurrentId.Create(1);
            var idHolder          = new IdHolder(idHolderName.Value, idHolderCurrentId.Value);

            var next = idHolder.Next();

            next.Should().Be(2);
            idHolderCurrentId.Value.Value.Should().Be(2);
        }
        public async Task CreateAsync(CreateIdHolderDto createIdHolderDto)
        {
            var exists = await ExistsAsync(createIdHolderDto.Name);

            if (exists)
            {
                throw new ArgumentException($"IdHolder Name { createIdHolderDto.Name } is in use");
            }

            var idHolderName      = IdHolderName.Create(createIdHolderDto.Name);
            var idHolderCurrentId = IdHolderCurrentId.Create(createIdHolderDto.StartFrom);
            var result            = Result.Combine(idHolderName, idHolderCurrentId);

            if (result.IsSuccess)
            {
                var idHolder = new IdHolder(idHolderName.Value, idHolderCurrentId.Value);
                await CreateIdHolderTableEntityAsync(idHolder);
            }
            else
            {
                throw new Exception(result.Error);
            }
        }
Exemple #5
0
 public IdHolder(IdHolderName idHolderName, IdHolderCurrentId idHolderCurrentId)
 {
     Name      = idHolderName;
     CurrentId = idHolderCurrentId;
 }
        public void Create_NameIsNullOrEmpty_ReturnsResultFail(string name)
        {
            var result = IdHolderName.Create(name);

            result.IsFailure.Should().BeTrue();
        }