diff --git a/OpenCand.API/Controllers/CandidatoController.cs b/OpenCand.API/Controllers/CandidatoController.cs index 69bace7..a328578 100644 --- a/OpenCand.API/Controllers/CandidatoController.cs +++ b/OpenCand.API/Controllers/CandidatoController.cs @@ -30,6 +30,15 @@ namespace OpenCand.API.Controllers return await openCandService.SearchCandidatosAsync(q); } + [HttpGet("random")] + public async Task GetRandomCandidatoId() + { + return new + { + idCandidato = await openCandService.GetRandomCandidato() + }; + } + [HttpGet("{id}")] public async Task GetCandidatoById([FromRoute] Guid id) { diff --git a/OpenCand.API/Repository/CandidatoRepository.cs b/OpenCand.API/Repository/CandidatoRepository.cs index 8a82c2c..55ede74 100644 --- a/OpenCand.API/Repository/CandidatoRepository.cs +++ b/OpenCand.API/Repository/CandidatoRepository.cs @@ -101,5 +101,16 @@ namespace OpenCand.Repository return (await connection.QueryAsync(query, new { idcandidato })).AsList(); } } + + public async Task GetRandomCandidatoIdAsync() + { + using var connection = new NpgsqlConnection(ConnectionString); + return await connection.QueryFirstOrDefaultAsync(@" + SELECT idcandidato + FROM candidato + ORDER BY RANDOM() + LIMIT 1; + "); + } } } diff --git a/OpenCand.API/Services/OpenCandService.cs b/OpenCand.API/Services/OpenCandService.cs index 32d4573..05085c6 100644 --- a/OpenCand.API/Services/OpenCandService.cs +++ b/OpenCand.API/Services/OpenCandService.cs @@ -55,6 +55,11 @@ namespace OpenCand.API.Services }; } + public async Task GetRandomCandidato() + { + return await candidatoRepository.GetRandomCandidatoIdAsync(); + } + public async Task GetCandidatoAsync(Guid idcandidato) { var result = await candidatoRepository.GetCandidatoAsync(idcandidato);