using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using PrivaPub.ClientModels; using PrivaPub.Domain.Timelines; using PrivaPub.Extensions; namespace PrivaPub.Controllers.ClientToServer { [ApiController, Route("clientapi/timeline"), Authorize(Policy = Policies.IsUser)] public class TimelineController : ControllerBase { readonly ITimelineService _timelines; public TimelineController(ITimelineService timelines) { _timelines = timelines; } [HttpGet, Route("/clientapi/timeline/home")] public async Task Home([FromQuery] string avatarId, [FromQuery(Name = "max_id")] string maxId, [FromQuery] int limit = 20, CancellationToken token = default) => Answer(await _timelines.Home(User.GetUserId(), avatarId, maxId, limit, token)); [HttpGet, Route("/clientapi/notifications")] public async Task Notifications([FromQuery] string avatarId, [FromQuery(Name = "max_id")] string maxId, [FromQuery] int limit = 20, CancellationToken token = default) => Answer(await _timelines.Notifications(User.GetUserId(), avatarId, maxId, limit, token)); [HttpPost, Route("/clientapi/notifications/read")] public async Task Read([FromQuery] string avatarId, CancellationToken token) => Answer(await _timelines.MarkNotificationsRead(User.GetUserId(), avatarId, token)); IActionResult Answer(WebResult result) => result.IsValid ? Ok(result.Data) : StatusCode(result.StatusCode, result); } }