public async Task Executar(ParadaNaLinhaDto paradaNaLinhaDto) { var linha = await context.Linhas .Include(x => x.Paradas) .SingleOrDefaultAsync(x => x.Id == paradaNaLinhaDto.LinhaId); var parada = await context.Paradas.FindAsync(paradaNaLinhaDto.ParadaId); if (linha is null) { Notifications.Add("linha-nao-encontrada", "Linha não encontrada!"); } if (parada is null) { Notifications.Add("parada-nao-encontrada", "Parada não encontrada!"); } if (linha is not null && linha.Paradas.Any(x => x.Id == paradaNaLinhaDto.ParadaId)) { Notifications.Add("parada-vinculada", "Esta parada já está vinculada a esta linha!"); } if (!Notifications.Any()) { linha.AdicionarParada(parada); await context.SaveChangesAsync(); } }
public async Task NaoDeveVincularUmaParadaNaLinhaPoisAParadaJaEstaVinculada() { //arrange var paradaNaLinhaDto = new ParadaNaLinhaDto() { LinhaId = 1, ParadaId = 2 }; var paradaDto = new ParadaDto() { Nome = "Parada 1", Localizacao = new LocalizacaoDto() { Latitude = -8.771593, Longitude = -63.847208 } }; var parada = new Domain.Entities.Parada( paradaDto.Nome, new Domain.ValueObjects.Localizacao( paradaDto.Localizacao.Latitude, paradaDto.Localizacao.Longitude ) ); var linha = new Domain.Entities.Linha( nome: "Linha 1", id: 1 ); linha.AdicionarParada(parada); await context.AddAsync(parada); await context.AddAsync(linha); await context.SaveChangesAsync(); //act await vincularParada.Executar(paradaNaLinhaDto); //assert Assert.False(vincularParada.Notifications.ContainsKey("parada-vinculada")); }
public async Task <IActionResult> Post([FromServices] VincularParada vincularParada, ParadaNaLinhaDto paradaNaLinhaDto) { await vincularParada.Executar(paradaNaLinhaDto); if (vincularParada.Notifications.Any()) { return(BadRequest(vincularParada.Notifications)); } return(Ok()); }