aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2021-01-17 22:56:05 +0800
committercrupest <crupest@outlook.com>2021-01-17 22:56:05 +0800
commit667f14149f32756a80018ead27102c63270644f4 (patch)
tree175f7bfa6e7e9ab37ea6801ecafd2cbebfc04de9
parent280698f244bdaf3fbe2896d7104826d132c0b95a (diff)
downloadtimeline-667f14149f32756a80018ead27102c63270644f4.tar.gz
timeline-667f14149f32756a80018ead27102c63270644f4.tar.bz2
timeline-667f14149f32756a80018ead27102c63270644f4.zip
feat: Add search controller.
-rw-r--r--BackEnd/Timeline/Controllers/SearchController.cs47
-rw-r--r--BackEnd/Timeline/Startup.cs2
2 files changed, 49 insertions, 0 deletions
diff --git a/BackEnd/Timeline/Controllers/SearchController.cs b/BackEnd/Timeline/Controllers/SearchController.cs
new file mode 100644
index 00000000..915938de
--- /dev/null
+++ b/BackEnd/Timeline/Controllers/SearchController.cs
@@ -0,0 +1,47 @@
+using Microsoft.AspNetCore.Mvc;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Threading.Tasks;
+using Timeline.Models.Http;
+using Timeline.Models.Mapper;
+using Timeline.Services;
+
+namespace Timeline.Controllers
+{
+ /// <summary>
+ /// Api related to search timelines or users.
+ /// </summary>
+ [ApiController]
+ [ProducesErrorResponseType(typeof(CommonResponse))]
+ [Route("search")]
+ public class SearchController : Controller
+ {
+ private readonly ISearchService _service;
+ private readonly TimelineMapper _timelineMapper;
+ private readonly UserMapper _userMapper;
+
+ public SearchController(ISearchService service, TimelineMapper timelineMapper, UserMapper userMapper)
+ {
+ _service = service;
+ _timelineMapper = timelineMapper;
+ _userMapper = userMapper;
+ }
+
+ [HttpGet("timelines")]
+ public async Task<ActionResult<List<HttpTimeline>>> TimelineSearch([FromQuery(Name = "q"), Required(AllowEmptyStrings = false)] string query)
+ {
+ var searchResult = await _service.SearchTimeline(query);
+ var timelines = searchResult.Items.Select(i => i.Item).ToList();
+ return await _timelineMapper.MapToHttp(timelines, Url, this.GetOptionalUserId());
+ }
+
+ [HttpGet("users")]
+ public async Task<ActionResult<List<HttpUser>>> UserSearch([FromQuery(Name = "q"), Required(AllowEmptyStrings = false)] string query)
+ {
+ var searchResult = await _service.SearchUser(query);
+ var users = searchResult.Items.Select(i => i.Item).ToList();
+ return await _userMapper.MapToHttp(users, Url);
+ }
+ }
+}
diff --git a/BackEnd/Timeline/Startup.cs b/BackEnd/Timeline/Startup.cs
index cb99c138..0fab798b 100644
--- a/BackEnd/Timeline/Startup.cs
+++ b/BackEnd/Timeline/Startup.cs
@@ -120,6 +120,8 @@ namespace Timeline
services.AddScoped<IHighlightTimelineService, HighlightTimelineService>();
services.AddScoped<IBookmarkTimelineService, BookmarkTimelineService>();
+ services.AddScoped<ISearchService, SearchService>();
+
services.AddOpenApiDocs();
if (_frontEndMode == FrontEndMode.Mock)