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); } } }
private async Task CreateIdHolderTableEntityAsync(IdHolder idHolder) { var entity = new IdHolderTableEntity { Name = idHolder.Name, CurrentId = idHolder.CurrentId }; await idHolderRepository.CreateAsync(entity); }
public async Task <ActionResult <Lamp> > Post([FromBody] LampCreationApi lamp) { var newItem = mapper.Map <Lamp>(lamp); IdHolder <int> idHolder = await db.Lamps.AddAsync(newItem); await db.SaveAsync(); newItem.SetId(idHolder.Id); return(CreatedAtAction(nameof(Get), new { id = newItem.Id }, newItem)); }
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); } }