Changeset 73b69b2 for ChapterX.API
- Timestamp:
- 03/24/26 22:13:36 (3 months ago)
- Branches:
- main
- Children:
- 7fbb91c
- Parents:
- acf690c
- Location:
- ChapterX.API/Controllers
- Files:
-
- 5 edited
-
CommentsController.cs (modified) (2 diffs)
-
LikesController.cs (modified) (3 diffs)
-
NotificationsController.cs (modified) (2 diffs)
-
ReadingListItemsController.cs (modified) (3 diffs)
-
ReadingListsController.cs (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
ChapterX.API/Controllers/CommentsController.cs
racf690c r73b69b2 1 1 using ChapterX.Application.Comment.Commands; 2 2 using ChapterX.Application.Comment.Queries; 3 using ChapterX.Domain.Repositories; 3 4 using MediatR; 4 5 using Microsoft.AspNetCore.Authorization; … … 13 14 { 14 15 private readonly IMediator _mediator; 16 private readonly ICommentRepository _commentRepository; 15 17 private readonly ILogger<CommentsController> _logger; 16 18 17 public CommentsController(IMediator mediator, I Logger<CommentsController> logger)19 public CommentsController(IMediator mediator, ICommentRepository commentRepository, ILogger<CommentsController> logger) 18 20 { 19 21 _mediator = mediator; 22 _commentRepository = commentRepository; 20 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); 21 41 } 22 42 -
ChapterX.API/Controllers/LikesController.cs
racf690c r73b69b2 1 1 using ChapterX.Application.Likes.Commands; 2 2 using ChapterX.Application.Likes.Queries; 3 using ChapterX.Domain.Repositories; 3 4 using MediatR; 4 5 using Microsoft.AspNetCore.Authorization; … … 13 14 { 14 15 private readonly IMediator _mediator; 16 private readonly ILikesRepository _likesRepository; 15 17 private readonly ILogger<LikesController> _logger; 16 18 17 public LikesController(IMediator mediator, IL ogger<LikesController> logger)19 public LikesController(IMediator mediator, ILikesRepository likesRepository, ILogger<LikesController> logger) 18 20 { 19 21 _mediator = mediator; 22 _likesRepository = likesRepository; 20 23 _logger = logger; 24 } 25 26 [HttpGet("story/{storyId:int}")] 27 [AllowAnonymous] 28 public async Task<ActionResult> GetByStory(int storyId) 29 { 30 var likes = await _likesRepository.GetByStoryIdAsync(storyId); 31 return Ok(new { count = likes.Count(), userIds = likes.Select(l => l.UserId).ToList() }); 32 } 33 34 [HttpDelete("user/{userId:int}/story/{storyId:int}")] 35 [Authorize] 36 public async Task<ActionResult> DeleteByUserAndStory(int userId, int storyId) 37 { 38 var deleted = await _likesRepository.DeleteByUserAndStoryAsync(userId, storyId); 39 if (!deleted) return NotFound(); 40 return Ok(); 21 41 } 22 42 … … 43 63 public async Task<ActionResult> Add([FromBody] AddRequest request) 44 64 { 45 _logger.LogInformation("Adding a new like for ChapterId: {ChapterId}", request.ChapterId); 65 _logger.LogInformation("Adding a new like for StoryId: {StoryId}", request.StoryId); 66 var exists = await _likesRepository.ExistsAsync(request.UserId, request.StoryId); 67 if (exists) return Ok(); 46 68 var response = await _mediator.Send(request); 47 69 return Ok(response); -
ChapterX.API/Controllers/NotificationsController.cs
racf690c r73b69b2 1 1 using ChapterX.Application.Notification.Commands; 2 2 using ChapterX.Application.Notification.Queries; 3 using ChapterX.Domain.Repositories; 3 4 using MediatR; 4 5 using Microsoft.AspNetCore.Authorization; … … 13 14 { 14 15 private readonly IMediator _mediator; 16 private readonly INotificationRepository _notificationRepository; 15 17 private readonly ILogger<NotificationsController> _logger; 16 18 17 public NotificationsController(IMediator mediator, I Logger<NotificationsController> logger)19 public NotificationsController(IMediator mediator, INotificationRepository notificationRepository, ILogger<NotificationsController> logger) 18 20 { 19 21 _mediator = mediator; 22 _notificationRepository = notificationRepository; 20 23 _logger = logger; 24 } 25 26 [HttpGet("user/{userId:int}")] 27 [Authorize] 28 public async Task<ActionResult> GetByUser(int userId) 29 { 30 var notifications = await _notificationRepository.GetByUserIdAsync(userId); 31 var result = notifications.Select(n => new 32 { 33 id = n.Id, 34 content = n.Content, 35 isRead = n.IsRead, 36 createdAt = n.CreatedAt, 37 type = n.Type ?? "info", 38 link = n.Link, 39 }); 40 return Ok(result); 41 } 42 43 [HttpPut("{id:int}/read")] 44 [Authorize] 45 public async Task<ActionResult> MarkRead(int id) 46 { 47 var notification = await _notificationRepository.GetByIdAsync(id); 48 if (notification == null) return NotFound(); 49 notification.IsRead = true; 50 await _notificationRepository.UpdateAsync(notification); 51 return Ok(); 21 52 } 22 53 -
ChapterX.API/Controllers/ReadingListItemsController.cs
racf690c r73b69b2 1 1 using ChapterX.Application.ReadingListItems.Commands; 2 2 using ChapterX.Application.ReadingListItems.Queries; 3 using ChapterX.Domain.Repositories; 3 4 using MediatR; 4 5 using Microsoft.AspNetCore.Authorization; … … 13 14 { 14 15 private readonly IMediator _mediator; 16 private readonly IReadingListItemsRepository _readingListItemsRepository; 15 17 private readonly ILogger<ReadingListItemsController> _logger; 16 18 17 public ReadingListItemsController(IMediator mediator, I Logger<ReadingListItemsController> logger)19 public ReadingListItemsController(IMediator mediator, IReadingListItemsRepository readingListItemsRepository, ILogger<ReadingListItemsController> logger) 18 20 { 19 21 _mediator = mediator; 22 _readingListItemsRepository = readingListItemsRepository; 20 23 _logger = logger; 21 24 } … … 70 73 return Ok(response); 71 74 } 75 76 [HttpDelete("{listId:int}/story/{storyId:int}")] 77 [Authorize] 78 public async Task<ActionResult> DeleteByListAndStory(int listId, int storyId) 79 { 80 _logger.LogInformation("Removing story {StoryId} from list {ListId}", storyId, listId); 81 var deleted = await _readingListItemsRepository.DeleteByListAndStoryAsync(listId, storyId); 82 return deleted ? Ok() : NotFound(); 83 } 72 84 } 73 85 } -
ChapterX.API/Controllers/ReadingListsController.cs
racf690c r73b69b2 1 1 using ChapterX.Application.ReadingList.Commands; 2 2 using ChapterX.Application.ReadingList.Queries; 3 using ChapterX.Domain.Repositories; 3 4 using MediatR; 4 5 using Microsoft.AspNetCore.Authorization; … … 13 14 { 14 15 private readonly IMediator _mediator; 16 private readonly IReadingListRepository _readingListRepository; 15 17 private readonly ILogger<ReadingListsController> _logger; 16 18 17 public ReadingListsController(IMediator mediator, I Logger<ReadingListsController> logger)19 public ReadingListsController(IMediator mediator, IReadingListRepository readingListRepository, ILogger<ReadingListsController> logger) 18 20 { 19 21 _mediator = mediator; 22 _readingListRepository = readingListRepository; 20 23 _logger = logger; 24 } 25 26 [HttpGet("user/{userId:int}")] 27 [Authorize] 28 public async Task<ActionResult> GetByUser(int userId) 29 { 30 _logger.LogInformation("Fetching reading lists for user {UserId}", userId); 31 var lists = await _readingListRepository.GetByUserIdAsync(userId); 32 var result = lists.Select(l => MapList(l)); 33 return Ok(result); 21 34 } 22 35 … … 26 39 { 27 40 _logger.LogInformation("Fetching all reading lists"); 28 var response = await _mediator.Send(new GetAllRequest()); 29 return Ok(response); 41 var lists = await _readingListRepository.GetAllAsync(); 42 var result = lists.Select(l => MapList(l)); 43 return Ok(result); 30 44 } 45 46 private static object MapList(Domain.Entities.ReadingList l) => new 47 { 48 id = l.Id, 49 name = l.Name, 50 content = l.Content, 51 isPublic = l.IsPublic, 52 userId = l.UserId, 53 createdAt = l.CreatedAt, 54 username = l.User?.Username ?? "", 55 readingListItems = l.ReadingListItems.Select(i => new 56 { 57 listId = i.ListId, 58 storyId = i.StoryId, 59 addedAt = i.AddedAt, 60 storyTitle = i.Story?.ShortDescription ?? "", 61 authorUsername = i.Story?.Writer?.User?.Username ?? "", 62 genres = i.Story?.HasGenres.Select(hg => hg.Genre?.Name).Where(n => n != null).ToList() ?? [] 63 }).ToList() 64 }; 31 65 32 66 [HttpGet("{id:int}")]
Note:
See TracChangeset
for help on using the changeset viewer.
