30 import de.uapcore.lightpit.dao.DataAccessObject |
30 import de.uapcore.lightpit.dao.DataAccessObject |
31 import de.uapcore.lightpit.util.IssueFilter |
31 import de.uapcore.lightpit.util.IssueFilter |
32 import de.uapcore.lightpit.util.IssueSorter |
32 import de.uapcore.lightpit.util.IssueSorter |
33 import de.uapcore.lightpit.util.SpecificFilter |
33 import de.uapcore.lightpit.util.SpecificFilter |
34 import de.uapcore.lightpit.viewmodel.IssueFeed |
34 import de.uapcore.lightpit.viewmodel.IssueFeed |
35 import de.uapcore.lightpit.viewmodel.ProjectFeed |
|
36 import javax.servlet.annotation.WebServlet |
35 import javax.servlet.annotation.WebServlet |
37 |
36 |
38 @WebServlet(urlPatterns = ["/feed/*"]) |
37 @WebServlet(urlPatterns = ["/feed/*"]) |
39 class FeedServlet : AbstractServlet() { |
38 class FeedServlet : AbstractServlet() { |
40 |
39 |
41 init { |
40 init { |
42 get("/projects.rss", this::projects) |
|
43 get("/%project/issues.rss", this::issues) |
41 get("/%project/issues.rss", this::issues) |
44 } |
|
45 |
|
46 private fun projects(http: HttpRequest, dao: DataAccessObject) { |
|
47 |
|
48 val projects = dao.listProjects() |
|
49 |
|
50 http.view = ProjectFeed(projects) |
|
51 http.renderFeed("project-feed") |
|
52 } |
42 } |
53 |
43 |
54 private fun issues(http: HttpRequest, dao: DataAccessObject) { |
44 private fun issues(http: HttpRequest, dao: DataAccessObject) { |
55 val project = http.pathParams["project"]?.let { dao.findProjectByNode(it) } |
45 val project = http.pathParams["project"]?.let { dao.findProjectByNode(it) } |
56 if (project == null) { |
46 if (project == null) { |
57 http.response.sendError(404) |
47 http.response.sendError(404) |
58 return |
48 return |
59 } |
49 } |
60 |
50 |
|
51 // TODO: add a timestamp filter (e.g. last 30 days) |
61 val issues = dao.listIssues(IssueFilter(SpecificFilter(project))).sortedWith(IssueSorter.DEFAULT_ISSUE_SORTER) |
52 val issues = dao.listIssues(IssueFilter(SpecificFilter(project))).sortedWith(IssueSorter.DEFAULT_ISSUE_SORTER) |
62 |
53 |
63 http.view = IssueFeed(project, issues) |
54 http.view = IssueFeed(project, issues) |
64 http.renderFeed("issues-feed") |
55 http.renderFeed("issues-feed") |
65 } |
56 } |