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