@@ -22,49 +22,61 @@ public PostsController(IDataService data)
2222 }
2323
2424 /// <summary>
25- /// Get list of blog posts
25+ /// Search blog posts by term
2626 /// </summary>
2727 /// <param name="term">Search term</param>
28- /// <param name="status">Status; P - published, D - drafts</param>
28+ /// <param name="author">Author</param>
29+ /// <param name="include">Posts to include: all by default; F - featured, D - drafts, P - published</param>
2930 /// <param name="page">Page number</param>
3031 /// <returns>Model with list of posts and pager</returns>
31- [ HttpGet ]
32- public async Task < ActionResult < PageListModel > > Get ( [ FromQuery ] string term = "" , [ FromQuery ] string status = "" , [ FromQuery ] int page = 1 )
32+ [ HttpGet ( "search/{term}" ) ]
33+ public async Task < ActionResult < PageListModel > > Search (
34+ string term ,
35+ [ FromQuery ] string author = "" ,
36+ [ FromQuery ] string include = "" ,
37+ [ FromQuery ] int page = 1 )
3338 {
3439 try
3540 {
3641 var blog = await _data . CustomFields . GetBlogSettings ( ) ;
42+ IEnumerable < PostItem > results ;
3743 var pager = new Pager ( page , blog . ItemsPerPage ) ;
38- var author = _data . Authors . Single ( a => a . AppUserName == User . Identity . Name ) ;
44+ var authorId = GetUserId ( author ) ;
45+
46+ results = await _data . BlogPosts . Search ( pager , term , authorId , include , ! User . Identity . IsAuthenticated ) ;
47+
48+ return Ok ( new PageListModel { Posts = results , Pager = pager } ) ;
49+ }
50+ catch ( Exception )
51+ {
52+ return StatusCode ( StatusCodes . Status500InternalServerError , "Database Failure" ) ;
53+ }
54+ }
55+
56+ /// <summary>
57+ /// Get list of blog posts
58+ /// </summary>
59+ /// <param name="author">Post author</param>
60+ /// <param name="category">Post category</param>
61+ /// <param name="include">Posts to include: all by default; F - featured, D - drafts, P - published</param>
62+ /// <param name="page">Page number</param>
63+ /// <returns>Model with list of posts and pager</returns>
64+ [ HttpGet ]
65+ public async Task < ActionResult < PageListModel > > Get (
66+ [ FromQuery ] string author = "" ,
67+ [ FromQuery ] string category = "" ,
68+ [ FromQuery ] string include = "" ,
69+ [ FromQuery ] int page = 1 )
70+ {
71+ try
72+ {
73+ var blog = await _data . CustomFields . GetBlogSettings ( ) ;
3974 IEnumerable < PostItem > results ;
75+ var pager = new Pager ( page , blog . ItemsPerPage ) ;
76+ int authorId = GetUserId ( author ) ;
77+
78+ results = await _data . BlogPosts . GetList ( pager , authorId , category , include , ! User . Identity . IsAuthenticated ) ;
4079
41- if ( ! string . IsNullOrEmpty ( term ) )
42- {
43- results = author . IsAdmin ?
44- await _data . BlogPosts . Search ( pager , term ) :
45- await _data . BlogPosts . Search ( pager , term , author . Id ) ;
46- }
47- else
48- {
49- if ( ! author . IsAdmin )
50- {
51- if ( status == "P" )
52- results = await _data . BlogPosts . GetList ( p => p . Published > DateTime . MinValue && p . AuthorId == author . Id , pager ) ;
53- else if ( status == "D" )
54- results = await _data . BlogPosts . GetList ( p => p . Published == DateTime . MinValue && p . AuthorId == author . Id , pager ) ;
55- else
56- results = await _data . BlogPosts . GetList ( p => p . AuthorId == author . Id , pager ) ;
57- }
58- else
59- {
60- if ( status == "P" )
61- results = await _data . BlogPosts . GetList ( p => p . Published > DateTime . MinValue , pager ) ;
62- else if ( status == "D" )
63- results = await _data . BlogPosts . GetList ( p => p . Published == DateTime . MinValue , pager ) ;
64- else
65- results = await _data . BlogPosts . GetList ( p => p . Id > 0 , pager ) ;
66- }
67- }
6880 return Ok ( new PageListModel { Posts = results , Pager = pager } ) ;
6981 }
7082 catch ( Exception )
@@ -234,5 +246,17 @@ async Task<string> GetSlug(int id, string title)
234246
235247 return await Task . FromResult ( slug ) ;
236248 }
249+
250+ int GetUserId ( string author )
251+ {
252+ int id = 0 ;
253+ if ( ! string . IsNullOrEmpty ( author ) )
254+ {
255+ var objAuthor = _data . Authors . Single ( a => a . AppUserName == author ) ;
256+ if ( objAuthor != null )
257+ id = objAuthor . Id ;
258+ }
259+ return id ;
260+ }
237261 }
238262}
0 commit comments