src/Relecloud.Web.CallCenter.Api/Controllers/SearchController.cs (52 lines of code) (raw):

using Microsoft.AspNetCore.Mvc; using Relecloud.Web.Models.ConcertContext; using Relecloud.Web.Models.Search; using Relecloud.Web.Models.Services; using System.Net.Mime; namespace Relecloud.Web.Api.Controllers { [Route("api/[controller]")] [ApiController] public class SearchController : ControllerBase { private ILogger<SearchController> logger; private readonly IConcertSearchService concertSearchService; public SearchController(ILogger<SearchController> logger, IConcertSearchService concertSearchService) { this.logger = logger; this.concertSearchService = concertSearchService; } [HttpPost("Concerts", Name = "SearchConcerts")] [Consumes(MediaTypeNames.Application.Json)] [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(SearchResponse<Concert>))] [ProducesResponseType(StatusCodes.Status400BadRequest)] public async Task<IActionResult> SearchConcertsAsync([FromBody] SearchRequest searchRequest) { try { var response = await this.concertSearchService.SearchAsync(searchRequest); return Ok(response); } catch (Exception ex) { this.logger.LogError(ex, $"Unable to display search results for query '{searchRequest.Query}'"); return Problem($"Unable to display search results for query '{searchRequest.Query}'"); } } [HttpGet("SuggestConcerts", Name = "SuggestConcerts")] [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(ICollection<string>))] public async Task<IActionResult> SuggestConcertsAsync(string query) { try { var suggestions = await this.concertSearchService.SuggestAsync(query); return Ok(suggestions); } catch (Exception ex) { this.logger.LogError(ex, $"Unable to suggest search results for query '{query}'"); return Problem($"Unable to suggest search results for query '{query}'"); } } } }