source: ChapterX.API/Controllers/CommentsController.cs@ 73b69b2

main
Last change on this file since 73b69b2 was 73b69b2, checked in by kikisrbinoska <srbinoskakristina07@…>, 3 months ago

Fixed reading lists,comments and likes

  • Property mode set to 100644
File size: 3.0 KB
Line 
1using ChapterX.Application.Comment.Commands;
2using ChapterX.Application.Comment.Queries;
3using ChapterX.Domain.Repositories;
4using MediatR;
5using Microsoft.AspNetCore.Authorization;
6using Microsoft.AspNetCore.Mvc;
7using Microsoft.Extensions.Logging;
8
9namespace ChapterX.API.Controllers
10{
11 [Route("api/[controller]")]
12 [ApiController]
13 public class CommentsController : ControllerBase
14 {
15 private readonly IMediator _mediator;
16 private readonly ICommentRepository _commentRepository;
17 private readonly ILogger<CommentsController> _logger;
18
19 public CommentsController(IMediator mediator, ICommentRepository commentRepository, ILogger<CommentsController> logger)
20 {
21 _mediator = mediator;
22 _commentRepository = commentRepository;
23 _logger = logger;
24 }
25
26 [HttpGet("story/{storyId:int}")]
27 [AllowAnonymous]
28 public async Task<ActionResult> GetByStory(int storyId)
29 {
30 var comments = await _commentRepository.GetByStoryIdAsync(storyId);
31 var result = comments.Select(c => new
32 {
33 id = c.Id,
34 content = c.Content,
35 userId = c.UserId,
36 storyId = c.StoryId,
37 username = c.User?.Username ?? "",
38 createdAt = c.CreatedAt,
39 });
40 return Ok(result);
41 }
42
43 [HttpGet]
44 [AllowAnonymous]
45 public async Task<ActionResult> GetAll()
46 {
47 _logger.LogInformation("Fetching all comments");
48 var response = await _mediator.Send(new GetAllRequest());
49 return Ok(response);
50 }
51
52 [HttpGet("{id:int}")]
53 [AllowAnonymous]
54 public async Task<ActionResult> GetById(int id)
55 {
56 _logger.LogInformation("Fetching comment with ID: {CommentId}", id);
57 var response = await _mediator.Send(new GetRequest(id));
58 return Ok(response);
59 }
60
61 [HttpPost]
62 [Authorize]
63 public async Task<ActionResult> Add([FromBody] AddRequest request)
64 {
65 _logger.LogInformation("Adding a new comment");
66 var response = await _mediator.Send(request);
67 return Ok(response);
68 }
69
70 [HttpPut("{id:int}")]
71 [Authorize]
72 public async Task<ActionResult> Update(int id, [FromBody] UpdateRequest request)
73 {
74 _logger.LogInformation("Updating comment with ID: {CommentId}", id);
75 if (id != request.Id)
76 {
77 return BadRequest("Route ID and body ID must match.");
78 }
79
80 var response = await _mediator.Send(request);
81 return Ok(response);
82 }
83
84 [HttpDelete("{id:int}")]
85 [Authorize]
86 public async Task<ActionResult> Delete(int id)
87 {
88 _logger.LogInformation("Deleting comment with ID: {CommentId}", id);
89 var response = await _mediator.Send(new DeleteRequest(id));
90 return Ok(response);
91 }
92 }
93}
94
Note: See TracBrowser for help on using the repository browser.