Index: .gitignore
===================================================================
--- .gitignore	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ .gitignore	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -14,2 +14,5 @@
 # Environment
 appsettings.Development.json
+
+# Claude Code
+.claude/
Index: ChapterX.API/Controllers/AISuggestionsController.cs
===================================================================
--- ChapterX.API/Controllers/AISuggestionsController.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.API/Controllers/AISuggestionsController.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -55,5 +55,5 @@
                 appliedAt = s.AppliedAt,
                 storyId = s.StoryId,
-                suggestionTypes = s.SuggestionTypes.Select(t => t.SuggestionTypeValue),
+                suggestionType = s.SuggestionType,
             });
             return Ok(result);
Index: apterX.API/Controllers/ContentTypesController.cs
===================================================================
--- ChapterX.API/Controllers/ContentTypesController.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,74 +1,0 @@
-using ChapterX.Application.ContentType.Commands;
-using ChapterX.Application.ContentType.Queries;
-using MediatR;
-using Microsoft.AspNetCore.Authorization;
-using Microsoft.AspNetCore.Mvc;
-using Microsoft.Extensions.Logging;
-
-namespace ChapterX.API.Controllers
-{
-    [Route("api/[controller]")]
-    [ApiController]
-    public class ContentTypesController : ControllerBase
-    {
-        private readonly IMediator _mediator;
-        private readonly ILogger<ContentTypesController> _logger;
-
-        public ContentTypesController(IMediator mediator, ILogger<ContentTypesController> logger)
-        {
-            _mediator = mediator;
-            _logger = logger;
-        }
-
-        [HttpGet]
-        [AllowAnonymous]
-        public async Task<ActionResult> GetAll()
-        {
-            _logger.LogInformation("Fetching all content types");
-            var response = await _mediator.Send(new GetAllRequest());
-            return Ok(response);
-        }
-
-        [HttpGet("{id:int}")]
-        [AllowAnonymous]
-        public async Task<ActionResult> GetById(int id)
-        {
-            _logger.LogInformation("Fetching content type with ID: {ContentTypeId}", id);
-            var response = await _mediator.Send(new GetRequest(id));
-            return Ok(response);
-        }
-
-        [HttpPost]
-        [Authorize]
-        public async Task<ActionResult> Add([FromBody] AddRequest request)
-        {
-            _logger.LogInformation("Adding a new content type");
-            var response = await _mediator.Send(request);
-            return Ok(response);
-        }
-
-        [HttpPut("{id:int}")]
-        [Authorize]
-        public async Task<ActionResult> Update(int id, [FromBody] UpdateRequest request)
-        {
-            _logger.LogInformation("Updating content type with ID: {ContentTypeId}", id);
-            if (id != request.Id)
-            {
-                return BadRequest("Route ID and body ID must match.");
-            }
-
-            var response = await _mediator.Send(request);
-            return Ok(response);
-        }
-
-        [HttpDelete]
-        [Authorize]
-        public async Task<ActionResult> Delete([FromBody] DeleteRequest request)
-        {
-            _logger.LogInformation("Deleting a content type");
-            var response = await _mediator.Send(request);
-            return Ok(response);
-        }
-    }
-}
-
Index: ChapterX.API/Controllers/NotificationsController.cs
===================================================================
--- ChapterX.API/Controllers/NotificationsController.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.API/Controllers/NotificationsController.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -35,5 +35,6 @@
                 isRead = n.IsRead,
                 createdAt = n.CreatedAt,
-                type = n.Type ?? "info",
+                contentType = n.ContentType,
+                storyId = n.StoryId,
                 link = n.Link,
             });
Index: apterX.API/Controllers/NotifyController.cs
===================================================================
--- ChapterX.API/Controllers/NotifyController.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,74 +1,0 @@
-using ChapterX.Application.Notify.Commands;
-using ChapterX.Application.Notify.Queries;
-using MediatR;
-using Microsoft.AspNetCore.Authorization;
-using Microsoft.AspNetCore.Mvc;
-using Microsoft.Extensions.Logging;
-
-namespace ChapterX.API.Controllers
-{
-    [Route("api/[controller]")]
-    [ApiController]
-    public class NotifyController : ControllerBase
-    {
-        private readonly IMediator _mediator;
-        private readonly ILogger<NotifyController> _logger;
-
-        public NotifyController(IMediator mediator, ILogger<NotifyController> logger)
-        {
-            _mediator = mediator;
-            _logger = logger;
-        }
-
-        [HttpGet]
-        [AllowAnonymous]
-        public async Task<ActionResult> GetAll()
-        {
-            _logger.LogInformation("Fetching all notify entries");
-            var response = await _mediator.Send(new GetAllRequest());
-            return Ok(response);
-        }
-
-        [HttpGet("{id:int}")]
-        [AllowAnonymous]
-        public async Task<ActionResult> GetById(int id)
-        {
-            _logger.LogInformation("Fetching notify entry with ID: {NotifyId}", id);
-            var response = await _mediator.Send(new GetRequest(id));
-            return Ok(response);
-        }
-
-        [HttpPost]
-        [Authorize]
-        public async Task<ActionResult> Add([FromBody] AddRequest request)
-        {
-            _logger.LogInformation("Adding a new notify entry");
-            var response = await _mediator.Send(request);
-            return Ok(response);
-        }
-
-        [HttpPut("{id:int}")]
-        [Authorize]
-        public async Task<ActionResult> Update(int id, [FromBody] UpdateRequest request)
-        {
-            _logger.LogInformation("Updating notify entry with ID: {NotifyId}", id);
-            if (id != request.Id)
-            {
-                return BadRequest("Route ID and body ID must match.");
-            }
-
-            var response = await _mediator.Send(request);
-            return Ok(response);
-        }
-
-        [HttpDelete("{id:int}")]
-        [Authorize]
-        public async Task<ActionResult> Delete(int id)
-        {
-            _logger.LogInformation("Deleting notify entry with ID: {NotifyId}", id);
-            var response = await _mediator.Send(new DeleteRequest(id));
-            return Ok(response);
-        }
-    }
-}
-
Index: apterX.API/Controllers/PermissionLevelsController.cs
===================================================================
--- ChapterX.API/Controllers/PermissionLevelsController.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,74 +1,0 @@
-using ChapterX.Application.PermissionLevel.Commands;
-using ChapterX.Application.PermissionLevel.Queries;
-using MediatR;
-using Microsoft.AspNetCore.Authorization;
-using Microsoft.AspNetCore.Mvc;
-using Microsoft.Extensions.Logging;
-
-namespace ChapterX.API.Controllers
-{
-    [Route("api/[controller]")]
-    [ApiController]
-    public class PermissionLevelsController : ControllerBase
-    {
-        private readonly IMediator _mediator;
-        private readonly ILogger<PermissionLevelsController> _logger;
-
-        public PermissionLevelsController(IMediator mediator, ILogger<PermissionLevelsController> logger)
-        {
-            _mediator = mediator;
-            _logger = logger;
-        }
-
-        [HttpGet]
-        [AllowAnonymous]
-        public async Task<ActionResult> GetAll()
-        {
-            _logger.LogInformation("Fetching all permission levels");
-            var response = await _mediator.Send(new GetAllRequest());
-            return Ok(response);
-        }
-
-        [HttpGet("{id:int}")]
-        [AllowAnonymous]
-        public async Task<ActionResult> GetById(int id)
-        {
-            _logger.LogInformation("Fetching permission level with ID: {PermissionLevelId}", id);
-            var response = await _mediator.Send(new GetRequest(id));
-            return Ok(response);
-        }
-
-        [HttpPost]
-        [Authorize]
-        public async Task<ActionResult> Add([FromBody] AddRequest request)
-        {
-            _logger.LogInformation("Adding a new permission level");
-            var response = await _mediator.Send(request);
-            return Ok(response);
-        }
-
-        [HttpPut("{id:int}")]
-        [Authorize]
-        public async Task<ActionResult> Update(int id, [FromBody] UpdateRequest request)
-        {
-            _logger.LogInformation("Updating permission level with ID: {PermissionLevelId}", id);
-            if (id != request.Id)
-            {
-                return BadRequest("Route ID and body ID must match.");
-            }
-
-            var response = await _mediator.Send(request);
-            return Ok(response);
-        }
-
-        [HttpDelete]
-        [Authorize]
-        public async Task<ActionResult> Delete([FromBody] DeleteRequest request)
-        {
-            _logger.LogInformation("Deleting a permission level");
-            var response = await _mediator.Send(request);
-            return Ok(response);
-        }
-    }
-}
-
Index: apterX.API/Controllers/RolesController.cs
===================================================================
--- ChapterX.API/Controllers/RolesController.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,74 +1,0 @@
-using ChapterX.Application.Roles.Commands;
-using ChapterX.Application.Roles.Queries;
-using MediatR;
-using Microsoft.AspNetCore.Authorization;
-using Microsoft.AspNetCore.Mvc;
-using Microsoft.Extensions.Logging;
-
-namespace ChapterX.API.Controllers
-{
-    [Route("api/[controller]")]
-    [ApiController]
-    public class RolesController : ControllerBase
-    {
-        private readonly IMediator _mediator;
-        private readonly ILogger<RolesController> _logger;
-
-        public RolesController(IMediator mediator, ILogger<RolesController> logger)
-        {
-            _mediator = mediator;
-            _logger = logger;
-        }
-
-        [HttpGet]
-        [AllowAnonymous]
-        public async Task<ActionResult> GetAll()
-        {
-            _logger.LogInformation("Fetching all roles");
-            var response = await _mediator.Send(new GetAllRequest());
-            return Ok(response);
-        }
-
-        [HttpGet("{id:int}")]
-        [AllowAnonymous]
-        public async Task<ActionResult> GetById(int id)
-        {
-            _logger.LogInformation("Fetching role with ID: {RoleId}", id);
-            var response = await _mediator.Send(new GetRequest(id));
-            return Ok(response);
-        }
-
-        [HttpPost]
-        [Authorize]
-        public async Task<ActionResult> Add([FromBody] AddRequest request)
-        {
-            _logger.LogInformation("Adding a new role");
-            var response = await _mediator.Send(request);
-            return Ok(response);
-        }
-
-        [HttpPut("{id:int}")]
-        [Authorize]
-        public async Task<ActionResult> Update(int id, [FromBody] UpdateRequest request)
-        {
-            _logger.LogInformation("Updating role with ID: {RoleId}", id);
-            if (id != request.Id)
-            {
-                return BadRequest("Route ID and body ID must match.");
-            }
-
-            var response = await _mediator.Send(request);
-            return Ok(response);
-        }
-
-        [HttpDelete]
-        [Authorize]
-        public async Task<ActionResult> Delete([FromBody] DeleteRequest request)
-        {
-            _logger.LogInformation("Deleting a role");
-            var response = await _mediator.Send(request);
-            return Ok(response);
-        }
-    }
-}
-
Index: apterX.API/Controllers/StatusController.cs
===================================================================
--- ChapterX.API/Controllers/StatusController.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,75 +1,0 @@
-using ChapterX.Application.Status.Commands;
-using ChapterX.Application.Status.Queries;
-using MediatR;
-using Microsoft.AspNetCore.Authorization;
-using Microsoft.AspNetCore.Mvc;
-using Microsoft.Extensions.Logging;
-
-namespace ChapterX.API.Controllers
-{
-    [Route("api/[controller]")]
-    [ApiController]
-    public class StatusController : ControllerBase
-    {
-        private readonly IMediator _mediator;
-        private readonly ILogger<StatusController> _logger;
-
-        public StatusController(IMediator mediator, ILogger<StatusController> logger)
-        {
-            _mediator = mediator;
-            _logger = logger;
-        }
-
-        // GET: api/Status
-        [HttpGet]
-        [AllowAnonymous]
-        public async Task<ActionResult> GetAll()
-        {
-            _logger.LogInformation("Fetching all status values");
-            var response = await _mediator.Send(new GetAllRequest());
-            return Ok(response);
-        }
-
-        // GET: api/Status/5
-        [HttpGet("{id:int}")]
-        [AllowAnonymous]
-        public async Task<ActionResult> GetById([FromRoute] int id)
-        {
-            _logger.LogInformation("Fetching status with ID: {StatusId}", id);
-            var response = await _mediator.Send(new GetRequest(id));
-            return Ok(response);
-        }
-
-        // POST: api/Status
-        // Note: Status is an enum in the domain; runtime changes may be limited.
-        [HttpPost]
-        [Authorize]
-        public async Task<ActionResult> Add([FromBody] AddRequest request)
-        {
-            _logger.LogInformation("Adding a new status value");
-            var response = await _mediator.Send(request);
-            return Ok(response);
-        }
-
-        // PUT: api/Status/5
-        [HttpPut("{id:int}")]
-        [Authorize]
-        public async Task<ActionResult> Update([FromRoute] int id)
-        {
-            _logger.LogInformation("Updating status with ID: {StatusId}", id);
-            var response = await _mediator.Send(new UpdateRequest(id));
-            return Ok(response);
-        }
-
-        // DELETE: api/Status
-        [HttpDelete]
-        [Authorize]
-        public async Task<ActionResult> Delete([FromBody] DeleteRequest request)
-        {
-            _logger.LogInformation("Deleting a status value");
-            var response = await _mediator.Send(request);
-            return Ok(response);
-        }
-    }
-}
-
Index: ChapterX.API/Controllers/StoriesController.cs
===================================================================
--- ChapterX.API/Controllers/StoriesController.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.API/Controllers/StoriesController.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -37,4 +37,5 @@
                 image = s.Image,
                 content = s.Content,
+                status = s.Status,
                 matureContent = s.MatureContent,
                 createdAt = s.CreatedAt,
@@ -66,4 +67,5 @@
                 image = s.Image,
                 content = s.Content,
+                status = s.Status,
                 matureContent = s.MatureContent,
                 createdAt = s.CreatedAt,
Index: ChapterX.API/DTOs/AISuggestionDto.cs
===================================================================
--- ChapterX.API/DTOs/AISuggestionDto.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.API/DTOs/AISuggestionDto.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -6,4 +6,5 @@
         public string OriginalText { get; set; } = string.Empty;
         public string SuggestedText { get; set; } = string.Empty;
+        public string SuggestionType { get; set; } = string.Empty;
         public bool Accepted { get; set; }
         public DateTime CreatedAt { get; set; }
@@ -15,5 +16,4 @@
         // Navigation
         public StoryDto Story { get; set; } = null!;
-        public ICollection<SuggestionTypeDto> SuggestionTypes { get; set; } = [];
         public ICollection<NeedApprovalDto> NeedApprovals { get; set; } = [];
     }
Index: ChapterX.API/DTOs/AdminDto.cs
===================================================================
--- ChapterX.API/DTOs/AdminDto.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.API/DTOs/AdminDto.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -4,4 +4,5 @@
     {
         public int UserId { get; set; }
+        public DateTime AssignedAt { get; set; }
 
         // Navigation
Index: ChapterX.API/DTOs/CollaborationDto.cs
===================================================================
--- ChapterX.API/DTOs/CollaborationDto.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.API/DTOs/CollaborationDto.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -7,4 +7,6 @@
         public int UserId { get; set; }
         public int StoryId { get; set; }
+        public string Role { get; set; } = string.Empty;
+        public int? PermissionLevel { get; set; }
         public DateTime CreatedAt { get; set; }
 
@@ -12,6 +14,4 @@
         public UserDto User { get; set; } = null!;
         public StoryDto Story { get; set; } = null!;
-        public ICollection<RolesDto> Roles { get; set; } = [];
-        public ICollection<PermissionLevelDto> PermissionLevels { get; set; } = [];
     }
 }
Index: apterX.API/DTOs/ContentTypeDto.cs
===================================================================
--- ChapterX.API/DTOs/ContentTypeDto.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,11 +1,0 @@
-﻿namespace ChapterX.API.DTOs
-{
-    public class ContentTypeDto
-    {
-        public int NotificationId { get; set; }
-        public string Value { get; set; } = string.Empty;
-
-        // Navigation
-        public NotificationDto Notification { get; set; } = null!;
-    }
-}
Index: ChapterX.API/DTOs/LikesDto.cs
===================================================================
--- ChapterX.API/DTOs/LikesDto.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.API/DTOs/LikesDto.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -5,5 +5,5 @@
         public int UserId { get; set; }
         public int StoryId { get; set; }
-        public DateTime CreatedAt { get; set; }
+        public DateTime LikedAt { get; set; }
 
         // Navigation
Index: ChapterX.API/DTOs/NotificationDto.cs
===================================================================
--- ChapterX.API/DTOs/NotificationDto.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.API/DTOs/NotificationDto.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -7,10 +7,10 @@
         public int Id { get; set; }
         public string Content { get; set; } = string.Empty;
+        public string ContentType { get; set; } = string.Empty;
         public bool IsRead { get; set; }
+        public string? Link { get; set; }
+        public int UserId { get; set; }
+        public int? StoryId { get; set; }
         public DateTime CreatedAt { get; set; }
-
-        // Navigation
-        public ICollection<ContentType> ContentTypes { get; set; } = [];
-        public ICollection<NotifyDto> Notifies { get; set; } = [];
     }
 }
Index: apterX.API/DTOs/NotifyDto.cs
===================================================================
--- ChapterX.API/DTOs/NotifyDto.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,14 +1,0 @@
-﻿namespace ChapterX.API.DTOs
-{
-    public class NotifyDto
-    {
-        public int UserId { get; set; }
-        public int StoryId { get; set; }
-        public int NotificationId { get; set; }
-
-        // Navigation
-        public UserDto User { get; set; } = null!;
-        public StoryDto Story { get; set; } = null!;
-        public NotificationDto Notification { get; set; } = null!;
-    }
-}
Index: apterX.API/DTOs/PermissionLevelDto.cs
===================================================================
--- ChapterX.API/DTOs/PermissionLevelDto.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,12 +1,0 @@
-﻿namespace ChapterX.API.DTOs
-{
-    public class PermissionLevelDto
-    {
-        public int UserId { get; set; }
-        public int StoryId { get; set; }
-        public int Value { get; set; }
-
-        // Navigation
-        public CollaborationDto Collaboration { get; set; } = null!;
-    }
-}
Index: ChapterX.API/DTOs/RegularUserDto.cs
===================================================================
--- ChapterX.API/DTOs/RegularUserDto.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.API/DTOs/RegularUserDto.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -4,4 +4,5 @@
     {
         public int UserId { get; set; }
+        public DateTime JoinedAt { get; set; }
 
         // Navigation
Index: apterX.API/DTOs/RolesDto.cs
===================================================================
--- ChapterX.API/DTOs/RolesDto.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,12 +1,0 @@
-﻿namespace ChapterX.API.DTOs
-{
-    public class RolesDto
-    {
-        public int UserId { get; set; }
-        public int StoryId { get; set; }
-        public string Value { get; set; } = string.Empty;
-
-        // Navigation
-        public CollaborationDto Collaboration { get; set; } = null!;
-    }
-}
Index: apterX.API/DTOs/StatusDto.cs
===================================================================
--- ChapterX.API/DTOs/StatusDto.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,11 +1,0 @@
-﻿namespace ChapterX.API.DTOs
-{
-    public class StatusDto
-    {
-        public int StoryId { get; set; }
-        public string Value { get; set; } = string.Empty; 
-
-        // Navigation
-        public StoryDto Story { get; set; } = null!;
-    }
-}
Index: ChapterX.API/DTOs/StoryDto.cs
===================================================================
--- ChapterX.API/DTOs/StoryDto.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.API/DTOs/StoryDto.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -9,7 +9,9 @@
         public int Id { get; set; }
         public bool MatureContent { get; set; }
+        public string Title { get; set; } = string.Empty;
         public string ShortDescription { get; set; } = string.Empty;
         public string? Image { get; set; }
         public string Content { get; set; } = string.Empty;
+        public string Status { get; set; } = "draft";
         public DateTime CreatedAt { get; set; }
         public DateTime UpdatedAt { get; set; }
@@ -19,5 +21,4 @@
         // Navigation
         public WriterDto Writer { get; set; } = null!;
-        public ICollection<StatusDto> Statuses { get; set; } = [];
         public ICollection<ChapterDto> Chapters { get; set; } = [];
         public ICollection<HasGenreDto> HasGenres { get; set; } = [];
@@ -26,5 +27,4 @@
         public ICollection<CollaborationDto> Collaborations { get; set; } = [];
         public ICollection<AISuggestionDto> AISuggestions { get; set; } = [];
-        public ICollection<NotifyDto> Notifies { get; set; } = [];
         public ICollection<ReadingListItemsDto> ReadingListItems { get; set; } = [];
         public ICollection<NeedApprovalDto> NeedApprovals { get; set; } = [];
Index: apterX.API/DTOs/SuggestionTypeDto.cs
===================================================================
--- ChapterX.API/DTOs/SuggestionTypeDto.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,11 +1,0 @@
-﻿namespace ChapterX.API.DTOs
-{
-    public class SuggestionTypeDto
-    {
-        public int SuggestionId { get; set; }
-        public string Value { get; set; } = string.Empty;
-
-        // Navigation
-        public AISuggestionDto AISuggestion { get; set; } = null!;
-    }
-}
Index: ChapterX.API/DTOs/UserDto.cs
===================================================================
--- ChapterX.API/DTOs/UserDto.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.API/DTOs/UserDto.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -23,5 +23,5 @@
         public ICollection<CommentDto> Comments { get; set; } = [];
         public ICollection<CollaborationDto> Collaborations { get; set; } = [];
-        public ICollection<NotifyDto> Notifies { get; set; } = [];
+        public ICollection<NotificationDto> Notifications { get; set; } = [];
     }
 }
Index: ChapterX.API/DTOs/WriterDto.cs
===================================================================
--- ChapterX.API/DTOs/WriterDto.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.API/DTOs/WriterDto.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -4,4 +4,5 @@
     {
         public int UserId { get; set; }
+        public string? Bio { get; set; }
 
         // Navigation
Index: ChapterX.Application/AISuggestion/Commands/AddHandler.cs
===================================================================
--- ChapterX.Application/AISuggestion/Commands/AddHandler.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.Application/AISuggestion/Commands/AddHandler.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -22,4 +22,5 @@
                 OriginalText = request.OriginalText,
                 SuggestedText = request.SuggestedText,
+                SuggestionType = request.SuggestionType,
                 StoryId = request.StoryId,
                 Accepted = null,
Index: ChapterX.Application/AISuggestion/Commands/AddRequest.cs
===================================================================
--- ChapterX.Application/AISuggestion/Commands/AddRequest.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.Application/AISuggestion/Commands/AddRequest.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -6,4 +6,5 @@
         string OriginalText,
         string SuggestedText,
+        string SuggestionType,
         int StoryId
     ) : IRequest<AddResponse>;
Index: ChapterX.Application/Abstractions/IApplicationDbContext.cs
===================================================================
--- ChapterX.Application/Abstractions/IApplicationDbContext.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.Application/Abstractions/IApplicationDbContext.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -11,5 +11,4 @@
 using LikesEntity = ChapterX.Domain.Entities.Likes;
 using CollaborationEntity = ChapterX.Domain.Entities.Collaboration;
-using NotifyEntity = ChapterX.Domain.Entities.Notify;
 using AISuggestionEntity = ChapterX.Domain.Entities.AISuggestion;
 using AdminEntity = ChapterX.Domain.Entities.Admin;
@@ -33,5 +32,4 @@
         DbSet<LikesEntity> Likes { get; }
         DbSet<CollaborationEntity> Collaborations { get; }
-        DbSet<NotifyEntity> Notifies { get; }
         DbSet<AISuggestionEntity> AISuggestions { get; }
         DbSet<AdminEntity> Admins { get; }
Index: ChapterX.Application/Admin/Commands/AddHandler.cs
===================================================================
--- ChapterX.Application/Admin/Commands/AddHandler.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.Application/Admin/Commands/AddHandler.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -20,5 +20,6 @@
             var admin = new Domain.Entities.Admin
             {
-                Id = request.UserId
+                Id = request.UserId,
+                AssignedAt = DateTime.UtcNow
             };
 
Index: ChapterX.Application/Collaboration/Commands/AddHandler.cs
===================================================================
--- ChapterX.Application/Collaboration/Commands/AddHandler.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.Application/Collaboration/Commands/AddHandler.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -22,4 +22,6 @@
                 UserId = request.UserId,
                 StoryId = request.StoryId,
+                Role = request.Role,
+                PermissionLevel = request.PermissionLevel,
                 CreatedAt = DateTime.UtcNow
             };
Index: ChapterX.Application/Collaboration/Commands/AddRequest.cs
===================================================================
--- ChapterX.Application/Collaboration/Commands/AddRequest.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.Application/Collaboration/Commands/AddRequest.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -3,4 +3,4 @@
 namespace ChapterX.Application.Collaboration.Commands
 {
-    public record AddRequest(int UserId, int StoryId, string Role) : IRequest<AddResponse>;
+    public record AddRequest(int UserId, int StoryId, string Role, int? PermissionLevel = null) : IRequest<AddResponse>;
 }
Index: ChapterX.Application/Collaboration/Commands/UpdateHandler.cs
===================================================================
--- ChapterX.Application/Collaboration/Commands/UpdateHandler.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.Application/Collaboration/Commands/UpdateHandler.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -22,5 +22,6 @@
                 return new UpdateResponse(false);
 
-            // No updatable fields on Collaboration entity
+            collaboration.Role = request.Role;
+            collaboration.PermissionLevel = request.PermissionLevel;
 
             await _collaborationRepository.UpdateAsync(collaboration, cancellationToken);
Index: ChapterX.Application/Collaboration/Commands/UpdateRequest.cs
===================================================================
--- ChapterX.Application/Collaboration/Commands/UpdateRequest.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.Application/Collaboration/Commands/UpdateRequest.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -3,4 +3,4 @@
 namespace ChapterX.Application.Collaboration.Commands
 {
-    public record UpdateRequest(int Id, string Role) : IRequest<UpdateResponse>;
+    public record UpdateRequest(int Id, string Role, int? PermissionLevel = null) : IRequest<UpdateResponse>;
 }
Index: apterX.Application/ContentType/Commands/AddHandler.cs
===================================================================
--- ChapterX.Application/ContentType/Commands/AddHandler.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,21 +1,0 @@
-using MediatR;
-using Microsoft.Extensions.Logging;
-
-namespace ChapterX.Application.ContentType.Commands
-{
-    public class AddHandler : IRequestHandler<AddRequest, AddResponse>
-    {
-        private readonly ILogger<AddHandler> _logger;
-
-        public AddHandler(ILogger<AddHandler> logger)
-        {
-            _logger = logger;
-        }
-
-        public Task<AddResponse> Handle(AddRequest request, CancellationToken cancellationToken)
-        {
-            _logger.LogWarning("ContentType is an enum and cannot be added at runtime.");
-            return Task.FromResult(new AddResponse(false));
-        }
-    }
-}
Index: apterX.Application/ContentType/Commands/AddRequest.cs
===================================================================
--- ChapterX.Application/ContentType/Commands/AddRequest.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,7 +1,0 @@
-using MediatR;
-using ContentTypeEnum = ChapterX.Domain.Entities.ContentType;
-
-namespace ChapterX.Application.ContentType.Commands
-{
-    public record AddRequest(ContentTypeEnum Value) : IRequest<AddResponse>;
-}
Index: apterX.Application/ContentType/Commands/AddResponse.cs
===================================================================
--- ChapterX.Application/ContentType/Commands/AddResponse.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,4 +1,0 @@
-namespace ChapterX.Application.ContentType.Commands
-{
-    public record AddResponse(bool Success);
-}
Index: apterX.Application/ContentType/Commands/DeleteHandler.cs
===================================================================
--- ChapterX.Application/ContentType/Commands/DeleteHandler.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,21 +1,0 @@
-using MediatR;
-using Microsoft.Extensions.Logging;
-
-namespace ChapterX.Application.ContentType.Commands
-{
-    public class DeleteHandler : IRequestHandler<DeleteRequest, DeleteResponse>
-    {
-        private readonly ILogger<DeleteHandler> _logger;
-
-        public DeleteHandler(ILogger<DeleteHandler> logger)
-        {
-            _logger = logger;
-        }
-
-        public Task<DeleteResponse> Handle(DeleteRequest request, CancellationToken cancellationToken)
-        {
-            _logger.LogWarning("ContentType is an enum and cannot be deleted at runtime.");
-            return Task.FromResult(new DeleteResponse(false));
-        }
-    }
-}
Index: apterX.Application/ContentType/Commands/DeleteRequest.cs
===================================================================
--- ChapterX.Application/ContentType/Commands/DeleteRequest.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,7 +1,0 @@
-using MediatR;
-using ContentTypeEnum = ChapterX.Domain.Entities.ContentType;
-
-namespace ChapterX.Application.ContentType.Commands
-{
-    public record DeleteRequest(ContentTypeEnum Value) : IRequest<DeleteResponse>;
-}
Index: apterX.Application/ContentType/Commands/DeleteResponse.cs
===================================================================
--- ChapterX.Application/ContentType/Commands/DeleteResponse.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,4 +1,0 @@
-namespace ChapterX.Application.ContentType.Commands
-{
-    public record DeleteResponse(bool Success);
-}
Index: apterX.Application/ContentType/Commands/UpdateHandler.cs
===================================================================
--- ChapterX.Application/ContentType/Commands/UpdateHandler.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,22 +1,0 @@
-using MediatR;
-using Microsoft.Extensions.Logging;
-
-namespace ChapterX.Application.ContentType.Commands
-{
-    // ContentType is an enum — values cannot be updated at runtime.
-    public class UpdateHandler : IRequestHandler<UpdateRequest, UpdateResponse>
-    {
-        private readonly ILogger<UpdateHandler> _logger;
-
-        public UpdateHandler(ILogger<UpdateHandler> logger)
-        {
-            _logger = logger;
-        }
-
-        public Task<UpdateResponse> Handle(UpdateRequest request, CancellationToken cancellationToken)
-        {
-            _logger.LogWarning("ContentType is an enum and cannot be updated at runtime.");
-            return Task.FromResult(new UpdateResponse(false));
-        }
-    }
-}
Index: apterX.Application/ContentType/Commands/UpdateRequest.cs
===================================================================
--- ChapterX.Application/ContentType/Commands/UpdateRequest.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,6 +1,0 @@
-using MediatR;
-
-namespace ChapterX.Application.ContentType.Commands
-{
-    public record UpdateRequest(int Id) : IRequest<UpdateResponse>;
-}
Index: apterX.Application/ContentType/Commands/UpdateResponse.cs
===================================================================
--- ChapterX.Application/ContentType/Commands/UpdateResponse.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,4 +1,0 @@
-namespace ChapterX.Application.ContentType.Commands
-{
-    public record UpdateResponse(bool Success);
-}
Index: apterX.Application/ContentType/Queries/GetAllHandler.cs
===================================================================
--- ChapterX.Application/ContentType/Queries/GetAllHandler.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,24 +1,0 @@
-using ChapterX.Domain.Repositories;
-using MediatR;
-using Microsoft.Extensions.Logging;
-
-namespace ChapterX.Application.ContentType.Queries
-{
-    public class GetAllHandler : IRequestHandler<GetAllRequest, GetAllResponse>
-    {
-        private readonly IContentTypeRepository _contentTypeRepository;
-        private readonly ILogger<GetAllHandler> _logger;
-
-        public GetAllHandler(IContentTypeRepository contentTypeRepository, ILogger<GetAllHandler> logger)
-        {
-            _contentTypeRepository = contentTypeRepository;
-            _logger = logger;
-        }
-
-        public async Task<GetAllResponse> Handle(GetAllRequest request, CancellationToken cancellationToken)
-        {
-            var contentTypes = await _contentTypeRepository.GetAllAsync(cancellationToken);
-            return new GetAllResponse(contentTypes);
-        }
-    }
-}
Index: apterX.Application/ContentType/Queries/GetAllRequest.cs
===================================================================
--- ChapterX.Application/ContentType/Queries/GetAllRequest.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,6 +1,0 @@
-using MediatR;
-
-namespace ChapterX.Application.ContentType.Queries
-{
-    public record GetAllRequest() : IRequest<GetAllResponse>;
-}
Index: apterX.Application/ContentType/Queries/GetAllResponse.cs
===================================================================
--- ChapterX.Application/ContentType/Queries/GetAllResponse.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,6 +1,0 @@
-using ContentTypeEnum = ChapterX.Domain.Entities.ContentType;
-
-namespace ChapterX.Application.ContentType.Queries
-{
-    public record GetAllResponse(IEnumerable<ContentTypeEnum> ContentTypes);
-}
Index: apterX.Application/ContentType/Queries/GetHandler.cs
===================================================================
--- ChapterX.Application/ContentType/Queries/GetHandler.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,24 +1,0 @@
-using ChapterX.Domain.Repositories;
-using MediatR;
-using Microsoft.Extensions.Logging;
-
-namespace ChapterX.Application.ContentType.Queries
-{
-    public class GetHandler : IRequestHandler<GetRequest, GetResponse>
-    {
-        private readonly IContentTypeRepository _contentTypeRepository;
-        private readonly ILogger<GetHandler> _logger;
-
-        public GetHandler(IContentTypeRepository contentTypeRepository, ILogger<GetHandler> logger)
-        {
-            _contentTypeRepository = contentTypeRepository;
-            _logger = logger;
-        }
-
-        public async Task<GetResponse> Handle(GetRequest request, CancellationToken cancellationToken)
-        {
-            var contentType = await _contentTypeRepository.GetByIdAsync(request.Id, cancellationToken);
-            return new GetResponse(contentType);
-        }
-    }
-}
Index: apterX.Application/ContentType/Queries/GetRequest.cs
===================================================================
--- ChapterX.Application/ContentType/Queries/GetRequest.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,6 +1,0 @@
-using MediatR;
-
-namespace ChapterX.Application.ContentType.Queries
-{
-    public record GetRequest(int Id) : IRequest<GetResponse>;
-}
Index: apterX.Application/ContentType/Queries/GetResponse.cs
===================================================================
--- ChapterX.Application/ContentType/Queries/GetResponse.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,4 +1,0 @@
-namespace ChapterX.Application.ContentType.Queries
-{
-    public record GetResponse(ChapterX.Domain.Entities.ContentType? ContentType);
-}
Index: ChapterX.Application/Likes/Commands/AddHandler.cs
===================================================================
--- ChapterX.Application/Likes/Commands/AddHandler.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.Application/Likes/Commands/AddHandler.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -22,5 +22,5 @@
                 UserId = request.UserId,
                 StoryId = request.StoryId,
-                CreatedAt = DateTime.UtcNow
+                LikedAt = DateTime.UtcNow
             };
 
Index: ChapterX.Application/Notification/Commands/AddHandler.cs
===================================================================
--- ChapterX.Application/Notification/Commands/AddHandler.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.Application/Notification/Commands/AddHandler.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -21,9 +21,10 @@
             {
                 Content = request.Content,
+                ContentType = request.ContentType,
                 IsRead = false,
+                Link = request.Link,
+                UserId = request.UserId,
+                StoryId = request.StoryId,
                 CreatedAt = DateTime.UtcNow,
-                RecipientUserId = request.RecipientUserId,
-                Type = request.Type,
-                Link = request.Link,
             };
 
Index: ChapterX.Application/Notification/Commands/AddRequest.cs
===================================================================
--- ChapterX.Application/Notification/Commands/AddRequest.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.Application/Notification/Commands/AddRequest.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -3,4 +3,4 @@
 namespace ChapterX.Application.Notification.Commands
 {
-    public record AddRequest(string Content, int? RecipientUserId = null, string? Type = null, string? Link = null) : IRequest<AddResponse>;
+    public record AddRequest(string Content, string ContentType, int UserId, int? StoryId = null, string? Link = null) : IRequest<AddResponse>;
 }
Index: apterX.Application/Notify/Commands/AddHandler.cs
===================================================================
--- ChapterX.Application/Notify/Commands/AddHandler.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,31 +1,0 @@
-using ChapterX.Domain.Repositories;
-using MediatR;
-using Microsoft.Extensions.Logging;
-
-namespace ChapterX.Application.Notify.Commands
-{
-    public class AddHandler : IRequestHandler<AddRequest, AddResponse>
-    {
-        private readonly INotifyRepository _notifyRepository;
-        private readonly ILogger<AddHandler> _logger;
-
-        public AddHandler(INotifyRepository notifyRepository, ILogger<AddHandler> logger)
-        {
-            _notifyRepository = notifyRepository;
-            _logger = logger;
-        }
-
-        public async Task<AddResponse> Handle(AddRequest request, CancellationToken cancellationToken)
-        {
-            var notify = new Domain.Entities.Notify
-            {
-                UserId = request.UserId,
-                NotificationId = request.NotificationId
-            };
-
-            await _notifyRepository.AddAsync(notify, cancellationToken);
-
-            return new AddResponse(notify.Id);
-        }
-    }
-}
Index: apterX.Application/Notify/Commands/AddRequest.cs
===================================================================
--- ChapterX.Application/Notify/Commands/AddRequest.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,6 +1,0 @@
-using MediatR;
-
-namespace ChapterX.Application.Notify.Commands
-{
-    public record AddRequest(int UserId, int NotificationId) : IRequest<AddResponse>;
-}
Index: apterX.Application/Notify/Commands/AddResponse.cs
===================================================================
--- ChapterX.Application/Notify/Commands/AddResponse.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,4 +1,0 @@
-namespace ChapterX.Application.Notify.Commands
-{
-    public record AddResponse(int Id);
-}
Index: apterX.Application/Notify/Commands/DeleteHandler.cs
===================================================================
--- ChapterX.Application/Notify/Commands/DeleteHandler.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,29 +1,0 @@
-using ChapterX.Domain.Repositories;
-using MediatR;
-using Microsoft.Extensions.Logging;
-
-namespace ChapterX.Application.Notify.Commands
-{
-    public class DeleteHandler : IRequestHandler<DeleteRequest, DeleteResponse>
-    {
-        private readonly INotifyRepository _notifyRepository;
-        private readonly ILogger<DeleteHandler> _logger;
-
-        public DeleteHandler(INotifyRepository notifyRepository, ILogger<DeleteHandler> logger)
-        {
-            _notifyRepository = notifyRepository;
-            _logger = logger;
-        }
-
-        public async Task<DeleteResponse> Handle(DeleteRequest request, CancellationToken cancellationToken)
-        {
-            var notify = await _notifyRepository.GetByIdAsync(request.Id, cancellationToken);
-            if (notify is null)
-                return new DeleteResponse(false);
-
-            await _notifyRepository.DeleteAsync(notify, cancellationToken);
-
-            return new DeleteResponse(true);
-        }
-    }
-}
Index: apterX.Application/Notify/Commands/DeleteRequest.cs
===================================================================
--- ChapterX.Application/Notify/Commands/DeleteRequest.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,6 +1,0 @@
-using MediatR;
-
-namespace ChapterX.Application.Notify.Commands
-{
-    public record DeleteRequest(int Id) : IRequest<DeleteResponse>;
-}
Index: apterX.Application/Notify/Commands/DeleteResponse.cs
===================================================================
--- ChapterX.Application/Notify/Commands/DeleteResponse.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,4 +1,0 @@
-namespace ChapterX.Application.Notify.Commands
-{
-    public record DeleteResponse(bool Success);
-}
Index: apterX.Application/Notify/Commands/UpdateHandler.cs
===================================================================
--- ChapterX.Application/Notify/Commands/UpdateHandler.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,31 +1,0 @@
-using ChapterX.Domain.Repositories;
-using MediatR;
-using Microsoft.Extensions.Logging;
-
-namespace ChapterX.Application.Notify.Commands
-{
-    public class UpdateHandler : IRequestHandler<UpdateRequest, UpdateResponse>
-    {
-        private readonly INotifyRepository _notifyRepository;
-        private readonly ILogger<UpdateHandler> _logger;
-
-        public UpdateHandler(INotifyRepository notifyRepository, ILogger<UpdateHandler> logger)
-        {
-            _notifyRepository = notifyRepository;
-            _logger = logger;
-        }
-
-        public async Task<UpdateResponse> Handle(UpdateRequest request, CancellationToken cancellationToken)
-        {
-            var notify = await _notifyRepository.GetByIdAsync(request.Id, cancellationToken);
-            if (notify is null)
-                return new UpdateResponse(false);
-
-            // No updatable fields on Notify entity
-
-            await _notifyRepository.UpdateAsync(notify, cancellationToken);
-
-            return new UpdateResponse(true);
-        }
-    }
-}
Index: apterX.Application/Notify/Commands/UpdateRequest.cs
===================================================================
--- ChapterX.Application/Notify/Commands/UpdateRequest.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,6 +1,0 @@
-using MediatR;
-
-namespace ChapterX.Application.Notify.Commands
-{
-    public record UpdateRequest(int Id, bool IsRead) : IRequest<UpdateResponse>;
-}
Index: apterX.Application/Notify/Commands/UpdateResponse.cs
===================================================================
--- ChapterX.Application/Notify/Commands/UpdateResponse.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,4 +1,0 @@
-namespace ChapterX.Application.Notify.Commands
-{
-    public record UpdateResponse(bool Success);
-}
Index: apterX.Application/Notify/Queries/GetAllHandler.cs
===================================================================
--- ChapterX.Application/Notify/Queries/GetAllHandler.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,24 +1,0 @@
-using ChapterX.Domain.Repositories;
-using MediatR;
-using Microsoft.Extensions.Logging;
-
-namespace ChapterX.Application.Notify.Queries
-{
-    public class GetAllHandler : IRequestHandler<GetAllRequest, GetAllResponse>
-    {
-        private readonly INotifyRepository _notifyRepository;
-        private readonly ILogger<GetAllHandler> _logger;
-
-        public GetAllHandler(INotifyRepository notifyRepository, ILogger<GetAllHandler> logger)
-        {
-            _notifyRepository = notifyRepository;
-            _logger = logger;
-        }
-
-        public async Task<GetAllResponse> Handle(GetAllRequest request, CancellationToken cancellationToken)
-        {
-            var notifies = await _notifyRepository.GetAllAsync(cancellationToken);
-            return new GetAllResponse(notifies);
-        }
-    }
-}
Index: apterX.Application/Notify/Queries/GetAllRequest.cs
===================================================================
--- ChapterX.Application/Notify/Queries/GetAllRequest.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,6 +1,0 @@
-using MediatR;
-
-namespace ChapterX.Application.Notify.Queries
-{
-    public record GetAllRequest() : IRequest<GetAllResponse>;
-}
Index: apterX.Application/Notify/Queries/GetAllResponse.cs
===================================================================
--- ChapterX.Application/Notify/Queries/GetAllResponse.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,4 +1,0 @@
-namespace ChapterX.Application.Notify.Queries
-{
-    public record GetAllResponse(IEnumerable<Domain.Entities.Notify> Notifies);
-}
Index: apterX.Application/Notify/Queries/GetHandler.cs
===================================================================
--- ChapterX.Application/Notify/Queries/GetHandler.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,24 +1,0 @@
-using ChapterX.Domain.Repositories;
-using MediatR;
-using Microsoft.Extensions.Logging;
-
-namespace ChapterX.Application.Notify.Queries
-{
-    public class GetHandler : IRequestHandler<GetRequest, GetResponse>
-    {
-        private readonly INotifyRepository _notifyRepository;
-        private readonly ILogger<GetHandler> _logger;
-
-        public GetHandler(INotifyRepository notifyRepository, ILogger<GetHandler> logger)
-        {
-            _notifyRepository = notifyRepository;
-            _logger = logger;
-        }
-
-        public async Task<GetResponse> Handle(GetRequest request, CancellationToken cancellationToken)
-        {
-            var notify = await _notifyRepository.GetByIdAsync(request.Id, cancellationToken);
-            return new GetResponse(notify);
-        }
-    }
-}
Index: apterX.Application/Notify/Queries/GetRequest.cs
===================================================================
--- ChapterX.Application/Notify/Queries/GetRequest.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,6 +1,0 @@
-using MediatR;
-
-namespace ChapterX.Application.Notify.Queries
-{
-    public record GetRequest(int Id) : IRequest<GetResponse>;
-}
Index: apterX.Application/Notify/Queries/GetResponse.cs
===================================================================
--- ChapterX.Application/Notify/Queries/GetResponse.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,4 +1,0 @@
-namespace ChapterX.Application.Notify.Queries
-{
-    public record GetResponse(Domain.Entities.Notify? Notify);
-}
Index: apterX.Application/PermissionLevel/Commands/AddHandler.cs
===================================================================
--- ChapterX.Application/PermissionLevel/Commands/AddHandler.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,21 +1,0 @@
-using MediatR;
-using Microsoft.Extensions.Logging;
-
-namespace ChapterX.Application.PermissionLevel.Commands
-{
-    public class AddHandler : IRequestHandler<AddRequest, AddResponse>
-    {
-        private readonly ILogger<AddHandler> _logger;
-
-        public AddHandler(ILogger<AddHandler> logger)
-        {
-            _logger = logger;
-        }
-
-        public Task<AddResponse> Handle(AddRequest request, CancellationToken cancellationToken)
-        {
-            _logger.LogWarning("PermissionLevel is an enum and cannot be added at runtime.");
-            return Task.FromResult(new AddResponse(false));
-        }
-    }
-}
Index: apterX.Application/PermissionLevel/Commands/AddRequest.cs
===================================================================
--- ChapterX.Application/PermissionLevel/Commands/AddRequest.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,7 +1,0 @@
-using MediatR;
-using PermissionLevelEnum = ChapterX.Domain.Entities.PermissionLevel;
-
-namespace ChapterX.Application.PermissionLevel.Commands
-{
-    public record AddRequest(PermissionLevelEnum Value) : IRequest<AddResponse>;
-}
Index: apterX.Application/PermissionLevel/Commands/AddResponse.cs
===================================================================
--- ChapterX.Application/PermissionLevel/Commands/AddResponse.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,4 +1,0 @@
-namespace ChapterX.Application.PermissionLevel.Commands
-{
-    public record AddResponse(bool Success);
-}
Index: apterX.Application/PermissionLevel/Commands/DeleteHandler.cs
===================================================================
--- ChapterX.Application/PermissionLevel/Commands/DeleteHandler.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,21 +1,0 @@
-using MediatR;
-using Microsoft.Extensions.Logging;
-
-namespace ChapterX.Application.PermissionLevel.Commands
-{
-    public class DeleteHandler : IRequestHandler<DeleteRequest, DeleteResponse>
-    {
-        private readonly ILogger<DeleteHandler> _logger;
-
-        public DeleteHandler(ILogger<DeleteHandler> logger)
-        {
-            _logger = logger;
-        }
-
-        public Task<DeleteResponse> Handle(DeleteRequest request, CancellationToken cancellationToken)
-        {
-            _logger.LogWarning("PermissionLevel is an enum and cannot be deleted at runtime.");
-            return Task.FromResult(new DeleteResponse(false));
-        }
-    }
-}
Index: apterX.Application/PermissionLevel/Commands/DeleteRequest.cs
===================================================================
--- ChapterX.Application/PermissionLevel/Commands/DeleteRequest.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,7 +1,0 @@
-using MediatR;
-using PermissionLevelEnum = ChapterX.Domain.Entities.PermissionLevel;
-
-namespace ChapterX.Application.PermissionLevel.Commands
-{
-    public record DeleteRequest(PermissionLevelEnum Value) : IRequest<DeleteResponse>;
-}
Index: apterX.Application/PermissionLevel/Commands/DeleteResponse.cs
===================================================================
--- ChapterX.Application/PermissionLevel/Commands/DeleteResponse.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,4 +1,0 @@
-namespace ChapterX.Application.PermissionLevel.Commands
-{
-    public record DeleteResponse(bool Success);
-}
Index: apterX.Application/PermissionLevel/Commands/UpdateHandler.cs
===================================================================
--- ChapterX.Application/PermissionLevel/Commands/UpdateHandler.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,22 +1,0 @@
-using MediatR;
-using Microsoft.Extensions.Logging;
-
-namespace ChapterX.Application.PermissionLevel.Commands
-{
-    // PermissionLevel is an enum — values cannot be updated at runtime.
-    public class UpdateHandler : IRequestHandler<UpdateRequest, UpdateResponse>
-    {
-        private readonly ILogger<UpdateHandler> _logger;
-
-        public UpdateHandler(ILogger<UpdateHandler> logger)
-        {
-            _logger = logger;
-        }
-
-        public Task<UpdateResponse> Handle(UpdateRequest request, CancellationToken cancellationToken)
-        {
-            _logger.LogWarning("PermissionLevel is an enum and cannot be updated at runtime.");
-            return Task.FromResult(new UpdateResponse(false));
-        }
-    }
-}
Index: apterX.Application/PermissionLevel/Commands/UpdateRequest.cs
===================================================================
--- ChapterX.Application/PermissionLevel/Commands/UpdateRequest.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,6 +1,0 @@
-using MediatR;
-
-namespace ChapterX.Application.PermissionLevel.Commands
-{
-    public record UpdateRequest(int Id) : IRequest<UpdateResponse>;
-}
Index: apterX.Application/PermissionLevel/Commands/UpdateResponse.cs
===================================================================
--- ChapterX.Application/PermissionLevel/Commands/UpdateResponse.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,4 +1,0 @@
-namespace ChapterX.Application.PermissionLevel.Commands
-{
-    public record UpdateResponse(bool Success);
-}
Index: apterX.Application/PermissionLevel/Queries/GetAllHandler.cs
===================================================================
--- ChapterX.Application/PermissionLevel/Queries/GetAllHandler.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,24 +1,0 @@
-using ChapterX.Domain.Repositories;
-using MediatR;
-using Microsoft.Extensions.Logging;
-
-namespace ChapterX.Application.PermissionLevel.Queries
-{
-    public class GetAllHandler : IRequestHandler<GetAllRequest, GetAllResponse>
-    {
-        private readonly IPermissionLevelRepository _permissionLevelRepository;
-        private readonly ILogger<GetAllHandler> _logger;
-
-        public GetAllHandler(IPermissionLevelRepository permissionLevelRepository, ILogger<GetAllHandler> logger)
-        {
-            _permissionLevelRepository = permissionLevelRepository;
-            _logger = logger;
-        }
-
-        public async Task<GetAllResponse> Handle(GetAllRequest request, CancellationToken cancellationToken)
-        {
-            var permissionLevels = await _permissionLevelRepository.GetAllAsync(cancellationToken);
-            return new GetAllResponse(permissionLevels);
-        }
-    }
-}
Index: apterX.Application/PermissionLevel/Queries/GetAllRequest.cs
===================================================================
--- ChapterX.Application/PermissionLevel/Queries/GetAllRequest.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,6 +1,0 @@
-using MediatR;
-
-namespace ChapterX.Application.PermissionLevel.Queries
-{
-    public record GetAllRequest() : IRequest<GetAllResponse>;
-}
Index: apterX.Application/PermissionLevel/Queries/GetAllResponse.cs
===================================================================
--- ChapterX.Application/PermissionLevel/Queries/GetAllResponse.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,8 +1,0 @@
-using ChapterX.Domain.Entities;
-
-namespace ChapterX.Application.PermissionLevel.Queries
-{
-    using PermissionLevelEnum = ChapterX.Domain.Entities.PermissionLevel;
-
-    public record GetAllResponse(IEnumerable<PermissionLevelEnum> PermissionLevels);
-}
Index: apterX.Application/PermissionLevel/Queries/GetHandler.cs
===================================================================
--- ChapterX.Application/PermissionLevel/Queries/GetHandler.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,24 +1,0 @@
-using ChapterX.Domain.Repositories;
-using MediatR;
-using Microsoft.Extensions.Logging;
-
-namespace ChapterX.Application.PermissionLevel.Queries
-{
-    public class GetHandler : IRequestHandler<GetRequest, GetResponse>
-    {
-        private readonly IPermissionLevelRepository _permissionLevelRepository;
-        private readonly ILogger<GetHandler> _logger;
-
-        public GetHandler(IPermissionLevelRepository permissionLevelRepository, ILogger<GetHandler> logger)
-        {
-            _permissionLevelRepository = permissionLevelRepository;
-            _logger = logger;
-        }
-
-        public async Task<GetResponse> Handle(GetRequest request, CancellationToken cancellationToken)
-        {
-            var permissionLevel = await _permissionLevelRepository.GetByIdAsync(request.Id, cancellationToken);
-            return new GetResponse(permissionLevel);
-        }
-    }
-}
Index: apterX.Application/PermissionLevel/Queries/GetRequest.cs
===================================================================
--- ChapterX.Application/PermissionLevel/Queries/GetRequest.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,6 +1,0 @@
-using MediatR;
-
-namespace ChapterX.Application.PermissionLevel.Queries
-{
-    public record GetRequest(int Id) : IRequest<GetResponse>;
-}
Index: apterX.Application/PermissionLevel/Queries/GetResponse.cs
===================================================================
--- ChapterX.Application/PermissionLevel/Queries/GetResponse.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,6 +1,0 @@
-namespace ChapterX.Application.PermissionLevel.Queries
-{
-    using PermissionLevelEnum = ChapterX.Domain.Entities.PermissionLevel;
-
-    public record GetResponse(PermissionLevelEnum? PermissionLevel);
-}
Index: ChapterX.Application/RegularUser/Commands/AddHandler.cs
===================================================================
--- ChapterX.Application/RegularUser/Commands/AddHandler.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.Application/RegularUser/Commands/AddHandler.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -20,5 +20,6 @@
             var regularUser = new Domain.Entities.RegularUser
             {
-                Id = request.UserId
+                Id = request.UserId,
+                JoinedAt = DateTime.UtcNow
             };
 
Index: apterX.Application/Roles/Commands/AddHandler.cs
===================================================================
--- ChapterX.Application/Roles/Commands/AddHandler.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,21 +1,0 @@
-using MediatR;
-using Microsoft.Extensions.Logging;
-
-namespace ChapterX.Application.Roles.Commands
-{
-    public class AddHandler : IRequestHandler<AddRequest, AddResponse>
-    {
-        private readonly ILogger<AddHandler> _logger;
-
-        public AddHandler(ILogger<AddHandler> logger)
-        {
-            _logger = logger;
-        }
-
-        public Task<AddResponse> Handle(AddRequest request, CancellationToken cancellationToken)
-        {
-            _logger.LogWarning("Roles is an enum and cannot be added at runtime.");
-            return Task.FromResult(new AddResponse(false));
-        }
-    }
-}
Index: apterX.Application/Roles/Commands/AddRequest.cs
===================================================================
--- ChapterX.Application/Roles/Commands/AddRequest.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,7 +1,0 @@
-using MediatR;
-using RolesEnum = ChapterX.Domain.Entities.Roles;
-
-namespace ChapterX.Application.Roles.Commands
-{
-    public record AddRequest(RolesEnum Value) : IRequest<AddResponse>;
-}
Index: apterX.Application/Roles/Commands/AddResponse.cs
===================================================================
--- ChapterX.Application/Roles/Commands/AddResponse.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,4 +1,0 @@
-namespace ChapterX.Application.Roles.Commands
-{
-    public record AddResponse(bool Success);
-}
Index: apterX.Application/Roles/Commands/DeleteHandler.cs
===================================================================
--- ChapterX.Application/Roles/Commands/DeleteHandler.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,21 +1,0 @@
-using MediatR;
-using Microsoft.Extensions.Logging;
-
-namespace ChapterX.Application.Roles.Commands
-{
-    public class DeleteHandler : IRequestHandler<DeleteRequest, DeleteResponse>
-    {
-        private readonly ILogger<DeleteHandler> _logger;
-
-        public DeleteHandler(ILogger<DeleteHandler> logger)
-        {
-            _logger = logger;
-        }
-
-        public Task<DeleteResponse> Handle(DeleteRequest request, CancellationToken cancellationToken)
-        {
-            _logger.LogWarning("Roles is an enum and cannot be deleted at runtime.");
-            return Task.FromResult(new DeleteResponse(false));
-        }
-    }
-}
Index: apterX.Application/Roles/Commands/DeleteRequest.cs
===================================================================
--- ChapterX.Application/Roles/Commands/DeleteRequest.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,7 +1,0 @@
-using MediatR;
-using RolesEnum = ChapterX.Domain.Entities.Roles;
-
-namespace ChapterX.Application.Roles.Commands
-{
-    public record DeleteRequest(RolesEnum Value) : IRequest<DeleteResponse>;
-}
Index: apterX.Application/Roles/Commands/DeleteResponse.cs
===================================================================
--- ChapterX.Application/Roles/Commands/DeleteResponse.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,4 +1,0 @@
-namespace ChapterX.Application.Roles.Commands
-{
-    public record DeleteResponse(bool Success);
-}
Index: apterX.Application/Roles/Commands/UpdateHandler.cs
===================================================================
--- ChapterX.Application/Roles/Commands/UpdateHandler.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,22 +1,0 @@
-using MediatR;
-using Microsoft.Extensions.Logging;
-
-namespace ChapterX.Application.Roles.Commands
-{
-    // Roles is an enum — values cannot be updated at runtime.
-    public class UpdateHandler : IRequestHandler<UpdateRequest, UpdateResponse>
-    {
-        private readonly ILogger<UpdateHandler> _logger;
-
-        public UpdateHandler(ILogger<UpdateHandler> logger)
-        {
-            _logger = logger;
-        }
-
-        public Task<UpdateResponse> Handle(UpdateRequest request, CancellationToken cancellationToken)
-        {
-            _logger.LogWarning("Roles is an enum and cannot be updated at runtime.");
-            return Task.FromResult(new UpdateResponse(false));
-        }
-    }
-}
Index: apterX.Application/Roles/Commands/UpdateRequest.cs
===================================================================
--- ChapterX.Application/Roles/Commands/UpdateRequest.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,6 +1,0 @@
-using MediatR;
-
-namespace ChapterX.Application.Roles.Commands
-{
-    public record UpdateRequest(int Id) : IRequest<UpdateResponse>;
-}
Index: apterX.Application/Roles/Commands/UpdateResponse.cs
===================================================================
--- ChapterX.Application/Roles/Commands/UpdateResponse.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,4 +1,0 @@
-namespace ChapterX.Application.Roles.Commands
-{
-    public record UpdateResponse(bool Success);
-}
Index: apterX.Application/Roles/Queries/GetAllHandler.cs
===================================================================
--- ChapterX.Application/Roles/Queries/GetAllHandler.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,24 +1,0 @@
-using ChapterX.Domain.Repositories;
-using MediatR;
-using Microsoft.Extensions.Logging;
-
-namespace ChapterX.Application.Roles.Queries
-{
-    public class GetAllHandler : IRequestHandler<GetAllRequest, GetAllResponse>
-    {
-        private readonly IRolesRepository _rolesRepository;
-        private readonly ILogger<GetAllHandler> _logger;
-
-        public GetAllHandler(IRolesRepository rolesRepository, ILogger<GetAllHandler> logger)
-        {
-            _rolesRepository = rolesRepository;
-            _logger = logger;
-        }
-
-        public async Task<GetAllResponse> Handle(GetAllRequest request, CancellationToken cancellationToken)
-        {
-            var roles = await _rolesRepository.GetAllAsync(cancellationToken);
-            return new GetAllResponse(roles);
-        }
-    }
-}
Index: apterX.Application/Roles/Queries/GetAllRequest.cs
===================================================================
--- ChapterX.Application/Roles/Queries/GetAllRequest.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,6 +1,0 @@
-using MediatR;
-
-namespace ChapterX.Application.Roles.Queries
-{
-    public record GetAllRequest() : IRequest<GetAllResponse>;
-}
Index: apterX.Application/Roles/Queries/GetAllResponse.cs
===================================================================
--- ChapterX.Application/Roles/Queries/GetAllResponse.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,8 +1,0 @@
-using ChapterX.Domain.Entities;
-
-namespace ChapterX.Application.Roles.Queries
-{
-    using RolesEnum = ChapterX.Domain.Entities.Roles;
-
-    public record GetAllResponse(IEnumerable<RolesEnum> RolesList);
-}
Index: apterX.Application/Roles/Queries/GetHandler.cs
===================================================================
--- ChapterX.Application/Roles/Queries/GetHandler.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,24 +1,0 @@
-using ChapterX.Domain.Repositories;
-using MediatR;
-using Microsoft.Extensions.Logging;
-
-namespace ChapterX.Application.Roles.Queries
-{
-    public class GetHandler : IRequestHandler<GetRequest, GetResponse>
-    {
-        private readonly IRolesRepository _rolesRepository;
-        private readonly ILogger<GetHandler> _logger;
-
-        public GetHandler(IRolesRepository rolesRepository, ILogger<GetHandler> logger)
-        {
-            _rolesRepository = rolesRepository;
-            _logger = logger;
-        }
-
-        public async Task<GetResponse> Handle(GetRequest request, CancellationToken cancellationToken)
-        {
-            var role = await _rolesRepository.GetByIdAsync(request.Id, cancellationToken);
-            return new GetResponse(role);
-        }
-    }
-}
Index: apterX.Application/Roles/Queries/GetRequest.cs
===================================================================
--- ChapterX.Application/Roles/Queries/GetRequest.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,6 +1,0 @@
-using MediatR;
-
-namespace ChapterX.Application.Roles.Queries
-{
-    public record GetRequest(int Id) : IRequest<GetResponse>;
-}
Index: apterX.Application/Roles/Queries/GetResponse.cs
===================================================================
--- ChapterX.Application/Roles/Queries/GetResponse.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,6 +1,0 @@
-namespace ChapterX.Application.Roles.Queries
-{
-    using RolesEnum = ChapterX.Domain.Entities.Roles;
-
-    public record GetResponse(RolesEnum? Role);
-}
Index: apterX.Application/Status/Commands/AddHandler.cs
===================================================================
--- ChapterX.Application/Status/Commands/AddHandler.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,21 +1,0 @@
-using MediatR;
-using Microsoft.Extensions.Logging;
-
-namespace ChapterX.Application.Status.Commands
-{
-    public class AddHandler : IRequestHandler<AddRequest, AddResponse>
-    {
-        private readonly ILogger<AddHandler> _logger;
-
-        public AddHandler(ILogger<AddHandler> logger)
-        {
-            _logger = logger;
-        }
-
-        public Task<AddResponse> Handle(AddRequest request, CancellationToken cancellationToken)
-        {
-            _logger.LogWarning("Status is an enum and cannot be added at runtime.");
-            return Task.FromResult(new AddResponse(false));
-        }
-    }
-}
Index: apterX.Application/Status/Commands/AddRequest.cs
===================================================================
--- ChapterX.Application/Status/Commands/AddRequest.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,7 +1,0 @@
-using MediatR;
-using StatusEnum = ChapterX.Domain.Entities.Status;
-
-namespace ChapterX.Application.Status.Commands
-{
-    public record AddRequest(StatusEnum Value) : IRequest<AddResponse>;
-}
Index: apterX.Application/Status/Commands/AddResponse.cs
===================================================================
--- ChapterX.Application/Status/Commands/AddResponse.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,4 +1,0 @@
-namespace ChapterX.Application.Status.Commands
-{
-    public record AddResponse(bool Success);
-}
Index: apterX.Application/Status/Commands/DeleteHandler.cs
===================================================================
--- ChapterX.Application/Status/Commands/DeleteHandler.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,21 +1,0 @@
-using MediatR;
-using Microsoft.Extensions.Logging;
-
-namespace ChapterX.Application.Status.Commands
-{
-    public class DeleteHandler : IRequestHandler<DeleteRequest, DeleteResponse>
-    {
-        private readonly ILogger<DeleteHandler> _logger;
-
-        public DeleteHandler(ILogger<DeleteHandler> logger)
-        {
-            _logger = logger;
-        }
-
-        public Task<DeleteResponse> Handle(DeleteRequest request, CancellationToken cancellationToken)
-        {
-            _logger.LogWarning("Status is an enum and cannot be deleted at runtime.");
-            return Task.FromResult(new DeleteResponse(false));
-        }
-    }
-}
Index: apterX.Application/Status/Commands/DeleteRequest.cs
===================================================================
--- ChapterX.Application/Status/Commands/DeleteRequest.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,7 +1,0 @@
-using MediatR;
-using StatusEnum = ChapterX.Domain.Entities.Status;
-
-namespace ChapterX.Application.Status.Commands
-{
-    public record DeleteRequest(StatusEnum Value) : IRequest<DeleteResponse>;
-}
Index: apterX.Application/Status/Commands/DeleteResponse.cs
===================================================================
--- ChapterX.Application/Status/Commands/DeleteResponse.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,4 +1,0 @@
-namespace ChapterX.Application.Status.Commands
-{
-    public record DeleteResponse(bool Success);
-}
Index: apterX.Application/Status/Commands/UpdateHandler.cs
===================================================================
--- ChapterX.Application/Status/Commands/UpdateHandler.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,22 +1,0 @@
-using MediatR;
-using Microsoft.Extensions.Logging;
-
-namespace ChapterX.Application.Status.Commands
-{
-    // Status is an enum — values cannot be updated at runtime.
-    public class UpdateHandler : IRequestHandler<UpdateRequest, UpdateResponse>
-    {
-        private readonly ILogger<UpdateHandler> _logger;
-
-        public UpdateHandler(ILogger<UpdateHandler> logger)
-        {
-            _logger = logger;
-        }
-
-        public Task<UpdateResponse> Handle(UpdateRequest request, CancellationToken cancellationToken)
-        {
-            _logger.LogWarning("Status is an enum and cannot be updated at runtime.");
-            return Task.FromResult(new UpdateResponse(false));
-        }
-    }
-}
Index: apterX.Application/Status/Commands/UpdateRequest.cs
===================================================================
--- ChapterX.Application/Status/Commands/UpdateRequest.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,6 +1,0 @@
-using MediatR;
-
-namespace ChapterX.Application.Status.Commands
-{
-    public record UpdateRequest(int Id) : IRequest<UpdateResponse>;
-}
Index: apterX.Application/Status/Commands/UpdateResponse.cs
===================================================================
--- ChapterX.Application/Status/Commands/UpdateResponse.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,4 +1,0 @@
-namespace ChapterX.Application.Status.Commands
-{
-    public record UpdateResponse(bool Success);
-}
Index: apterX.Application/Status/Queries/GetAllHandler.cs
===================================================================
--- ChapterX.Application/Status/Queries/GetAllHandler.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,24 +1,0 @@
-using ChapterX.Domain.Repositories;
-using MediatR;
-using Microsoft.Extensions.Logging;
-
-namespace ChapterX.Application.Status.Queries
-{
-    public class GetAllHandler : IRequestHandler<GetAllRequest, GetAllResponse>
-    {
-        private readonly IStatusRepository _statusRepository;
-        private readonly ILogger<GetAllHandler> _logger;
-
-        public GetAllHandler(IStatusRepository statusRepository, ILogger<GetAllHandler> logger)
-        {
-            _statusRepository = statusRepository;
-            _logger = logger;
-        }
-
-        public async Task<GetAllResponse> Handle(GetAllRequest request, CancellationToken cancellationToken)
-        {
-            var statuses = await _statusRepository.GetAllAsync(cancellationToken);
-            return new GetAllResponse(statuses);
-        }
-    }
-}
Index: apterX.Application/Status/Queries/GetAllRequest.cs
===================================================================
--- ChapterX.Application/Status/Queries/GetAllRequest.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,6 +1,0 @@
-using MediatR;
-
-namespace ChapterX.Application.Status.Queries
-{
-    public record GetAllRequest() : IRequest<GetAllResponse>;
-}
Index: apterX.Application/Status/Queries/GetAllResponse.cs
===================================================================
--- ChapterX.Application/Status/Queries/GetAllResponse.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,6 +1,0 @@
-namespace ChapterX.Application.Status.Queries
-{
-    using StatusEnum = ChapterX.Domain.Entities.Status;
-
-    public record GetAllResponse(IEnumerable<StatusEnum> Statuses);
-}
Index: apterX.Application/Status/Queries/GetHandler.cs
===================================================================
--- ChapterX.Application/Status/Queries/GetHandler.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,24 +1,0 @@
-using ChapterX.Domain.Repositories;
-using MediatR;
-using Microsoft.Extensions.Logging;
-
-namespace ChapterX.Application.Status.Queries
-{
-    public class GetHandler : IRequestHandler<GetRequest, GetResponse>
-    {
-        private readonly IStatusRepository _statusRepository;
-        private readonly ILogger<GetHandler> _logger;
-
-        public GetHandler(IStatusRepository statusRepository, ILogger<GetHandler> logger)
-        {
-            _statusRepository = statusRepository;
-            _logger = logger;
-        }
-
-        public async Task<GetResponse> Handle(GetRequest request, CancellationToken cancellationToken)
-        {
-            var status = await _statusRepository.GetByIdAsync(request.Id, cancellationToken);
-            return new GetResponse(status);
-        }
-    }
-}
Index: apterX.Application/Status/Queries/GetRequest.cs
===================================================================
--- ChapterX.Application/Status/Queries/GetRequest.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,6 +1,0 @@
-using MediatR;
-
-namespace ChapterX.Application.Status.Queries
-{
-    public record GetRequest(int Id) : IRequest<GetResponse>;
-}
Index: apterX.Application/Status/Queries/GetResponse.cs
===================================================================
--- ChapterX.Application/Status/Queries/GetResponse.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,6 +1,0 @@
-namespace ChapterX.Application.Status.Queries
-{
-    using StatusEnum = ChapterX.Domain.Entities.Status;
-
-    public record GetResponse(StatusEnum? Status);
-}
Index: ChapterX.Application/Story/Commands/AddHandler.cs
===================================================================
--- ChapterX.Application/Story/Commands/AddHandler.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.Application/Story/Commands/AddHandler.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -35,4 +35,5 @@
                     Image = request.Image,
                     Content = request.Content,
+                    Status = "draft",
                     UserId = request.UserId,
                     CreatedAt = DateTime.UtcNow,
Index: ChapterX.Application/Story/Commands/UpdateHandler.cs
===================================================================
--- ChapterX.Application/Story/Commands/UpdateHandler.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.Application/Story/Commands/UpdateHandler.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -30,4 +30,6 @@
             story.Image = request.Image;
             story.Content = request.Content;
+            if (request.Status is not null)
+                story.Status = request.Status;
             story.UpdatedAt = DateTime.UtcNow;
 
Index: ChapterX.Application/Story/Commands/UpdateRequest.cs
===================================================================
--- ChapterX.Application/Story/Commands/UpdateRequest.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.Application/Story/Commands/UpdateRequest.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -3,4 +3,4 @@
 namespace ChapterX.Application.Story.Commands
 {
-    public record UpdateRequest(int Id, bool MatureContent, string Title, string ShortDescription, string? Image, string Content, int CallerId = 0) : IRequest<UpdateResponse>;
+    public record UpdateRequest(int Id, bool MatureContent, string Title, string ShortDescription, string? Image, string Content, string? Status = null, int CallerId = 0) : IRequest<UpdateResponse>;
 }
Index: ChapterX.Application/Writer/Commands/AddHandler.cs
===================================================================
--- ChapterX.Application/Writer/Commands/AddHandler.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.Application/Writer/Commands/AddHandler.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -20,5 +20,6 @@
             var writer = new Domain.Entities.Writer
             {
-                Id = request.UserId
+                Id = request.UserId,
+                Bio = request.Bio
             };
 
Index: ChapterX.Application/Writer/Commands/UpdateHandler.cs
===================================================================
--- ChapterX.Application/Writer/Commands/UpdateHandler.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.Application/Writer/Commands/UpdateHandler.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -22,5 +22,5 @@
                 return new UpdateResponse(false);
 
-            // No updatable fields on Writer entity
+            writer.Bio = request.Bio;
 
             await _writerRepository.UpdateAsync(writer, cancellationToken);
Index: ChapterX.Domain/DTOs/AISuggestionDto.cs
===================================================================
--- ChapterX.Domain/DTOs/AISuggestionDto.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.Domain/DTOs/AISuggestionDto.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -6,4 +6,5 @@
         public string OriginalText { get; set; } = string.Empty;
         public string SuggestedText { get; set; } = string.Empty;
+        public string SuggestionType { get; set; } = string.Empty;
         public bool Accepted { get; set; }
         public DateTime CreatedAt { get; set; }
@@ -15,5 +16,4 @@
         // Navigation
         public StoryDto Story { get; set; } = null!;
-        public ICollection<SuggestionTypeDto> SuggestionTypes { get; set; } = [];
         public ICollection<NeedApprovalDto> NeedApprovals { get; set; } = [];
     }
Index: ChapterX.Domain/DTOs/AdminDto.cs
===================================================================
--- ChapterX.Domain/DTOs/AdminDto.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.Domain/DTOs/AdminDto.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -4,4 +4,5 @@
     {
         public int UserId { get; set; }
+        public DateTime AssignedAt { get; set; }
 
         // Navigation
Index: ChapterX.Domain/DTOs/CollaborationDto.cs
===================================================================
--- ChapterX.Domain/DTOs/CollaborationDto.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.Domain/DTOs/CollaborationDto.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -5,4 +5,6 @@
         public int UserId { get; set; }
         public int StoryId { get; set; }
+        public string Role { get; set; } = string.Empty;
+        public int? PermissionLevel { get; set; }
         public DateTime CreatedAt { get; set; }
 
@@ -10,6 +12,4 @@
         public UserDto User { get; set; } = null!;
         public StoryDto Story { get; set; } = null!;
-        public ICollection<RolesDto> Roles { get; set; } = [];
-        public ICollection<PermissionLevelDto> PermissionLevels { get; set; } = [];
     }
 }
Index: apterX.Domain/DTOs/ContentTypeDto.cs
===================================================================
--- ChapterX.Domain/DTOs/ContentTypeDto.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,11 +1,0 @@
-﻿namespace ChapterX.API.DTOs
-{
-    public class ContentTypeDto
-    {
-        public int NotificationId { get; set; }
-        public string Value { get; set; } = string.Empty;
-
-        // Navigation
-        public NotificationDto Notification { get; set; } = null!;
-    }
-}
Index: ChapterX.Domain/DTOs/LikesDto.cs
===================================================================
--- ChapterX.Domain/DTOs/LikesDto.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.Domain/DTOs/LikesDto.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -5,5 +5,5 @@
         public int UserId { get; set; }
         public int StoryId { get; set; }
-        public DateTime CreatedAt { get; set; }
+        public DateTime LikedAt { get; set; }
 
         // Navigation
Index: ChapterX.Domain/DTOs/NotificationDto.cs
===================================================================
--- ChapterX.Domain/DTOs/NotificationDto.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.Domain/DTOs/NotificationDto.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -5,10 +5,10 @@
         public int Id { get; set; }
         public string Content { get; set; } = string.Empty;
+        public string ContentType { get; set; } = string.Empty;
         public bool IsRead { get; set; }
+        public string? Link { get; set; }
+        public int UserId { get; set; }
+        public int? StoryId { get; set; }
         public DateTime CreatedAt { get; set; }
-
-        // Navigation
-        public ICollection<ContentTypeDto> ContentTypes { get; set; } = [];
-        public ICollection<NotifyDto> Notifies { get; set; } = [];
     }
 }
Index: apterX.Domain/DTOs/NotifyDto.cs
===================================================================
--- ChapterX.Domain/DTOs/NotifyDto.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,14 +1,0 @@
-﻿namespace ChapterX.API.DTOs
-{
-    public class NotifyDto
-    {
-        public int UserId { get; set; }
-        public int StoryId { get; set; }
-        public int NotificationId { get; set; }
-
-        // Navigation
-        public UserDto User { get; set; } = null!;
-        public StoryDto Story { get; set; } = null!;
-        public NotificationDto Notification { get; set; } = null!;
-    }
-}
Index: apterX.Domain/DTOs/PermissionLevelDto.cs
===================================================================
--- ChapterX.Domain/DTOs/PermissionLevelDto.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,12 +1,0 @@
-﻿namespace ChapterX.API.DTOs
-{
-    public class PermissionLevelDto
-    {
-        public int UserId { get; set; }
-        public int StoryId { get; set; }
-        public int Value { get; set; }
-
-        // Navigation
-        public CollaborationDto Collaboration { get; set; } = null!;
-    }
-}
Index: ChapterX.Domain/DTOs/RegularUserDto.cs
===================================================================
--- ChapterX.Domain/DTOs/RegularUserDto.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.Domain/DTOs/RegularUserDto.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -4,4 +4,5 @@
     {
         public int UserId { get; set; }
+        public DateTime JoinedAt { get; set; }
 
         // Navigation
Index: apterX.Domain/DTOs/RolesDto.cs
===================================================================
--- ChapterX.Domain/DTOs/RolesDto.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,12 +1,0 @@
-﻿namespace ChapterX.API.DTOs
-{
-    public class RolesDto
-    {
-        public int UserId { get; set; }
-        public int StoryId { get; set; }
-        public string Value { get; set; } = string.Empty;
-
-        // Navigation
-        public CollaborationDto Collaboration { get; set; } = null!;
-    }
-}
Index: apterX.Domain/DTOs/StatusDto.cs
===================================================================
--- ChapterX.Domain/DTOs/StatusDto.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,11 +1,0 @@
-﻿namespace ChapterX.API.DTOs
-{
-    public class StatusDto
-    {
-        public int StoryId { get; set; }
-        public string Value { get; set; } = string.Empty;
-
-        // Navigation
-        public StoryDto Story { get; set; } = null!;
-    }
-}
Index: ChapterX.Domain/DTOs/StoryDto.cs
===================================================================
--- ChapterX.Domain/DTOs/StoryDto.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.Domain/DTOs/StoryDto.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -7,7 +7,9 @@
         public int Id { get; set; }
         public bool MatureContent { get; set; }
+        public string Title { get; set; } = string.Empty;
         public string ShortDescription { get; set; } = string.Empty;
         public string? Image { get; set; }
         public string Content { get; set; } = string.Empty;
+        public string Status { get; set; } = "draft";
         public DateTime CreatedAt { get; set; }
         public DateTime UpdatedAt { get; set; }
@@ -17,5 +19,4 @@
         // Navigation
         public WriterDto Writer { get; set; } = null!;
-        public ICollection<StatusDto> Statuses { get; set; } = [];
         public ICollection<ChapterDto> Chapters { get; set; } = [];
         public ICollection<HasGenreDto> HasGenres { get; set; } = [];
@@ -24,5 +25,4 @@
         public ICollection<CollaborationDto> Collaborations { get; set; } = [];
         public ICollection<AISuggestionDto> AISuggestions { get; set; } = [];
-        public ICollection<NotifyDto> Notifies { get; set; } = [];
         public ICollection<ReadingListItemsDto> ReadingListItems { get; set; } = [];
         public ICollection<NeedApprovalDto> NeedApprovals { get; set; } = [];
Index: apterX.Domain/DTOs/SuggestionTypeDto.cs
===================================================================
--- ChapterX.Domain/DTOs/SuggestionTypeDto.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,11 +1,0 @@
-﻿namespace ChapterX.API.DTOs
-{
-    public class SuggestionTypeDto
-    {
-        public int SuggestionId { get; set; }
-        public string Value { get; set; } = string.Empty;
-
-        // Navigation
-        public AISuggestionDto AISuggestion { get; set; } = null!;
-    }
-}
Index: ChapterX.Domain/DTOs/UserDto.cs
===================================================================
--- ChapterX.Domain/DTOs/UserDto.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.Domain/DTOs/UserDto.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -22,5 +22,5 @@
         public ICollection<CommentDto> Comments { get; set; } = [];
         public ICollection<CollaborationDto> Collaborations { get; set; } = [];
-        public ICollection<NotifyDto> Notifies { get; set; } = [];
+        public ICollection<NotificationDto> Notifications { get; set; } = [];
     }
 }
Index: ChapterX.Domain/DTOs/WriterDto.cs
===================================================================
--- ChapterX.Domain/DTOs/WriterDto.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.Domain/DTOs/WriterDto.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -6,4 +6,5 @@
     {
         public int UserId { get; set; }
+        public string? Bio { get; set; }
 
         // Navigation
Index: ChapterX.Domain/Entities/AISuggestion.cs
===================================================================
--- ChapterX.Domain/Entities/AISuggestion.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.Domain/Entities/AISuggestion.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -13,4 +13,5 @@
         public string OriginalText { get; set; } = string.Empty;
         public string SuggestedText { get; set; } = string.Empty;
+        public string SuggestionType { get; set; } = string.Empty;
         public bool? Accepted { get; set; }
         public DateTime CreatedAt { get; set; }
@@ -19,5 +20,4 @@
         public int StoryId { get; set; }
         public Story Story { get; set; } = null!;
-        public ICollection<SuggestionType> SuggestionTypes { get; set; } = [];
         public ICollection<NeedApproval> NeedApprovals { get; set; } = [];
 
Index: ChapterX.Domain/Entities/Admin.cs
===================================================================
--- ChapterX.Domain/Entities/Admin.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.Domain/Entities/Admin.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -6,4 +6,5 @@
     {
         public int Id { get; set; } // maps to user_id
+        public DateTime AssignedAt { get; set; }
         public User User { get; set; } = null!;
     }
Index: ChapterX.Domain/Entities/Collaboration.cs
===================================================================
--- ChapterX.Domain/Entities/Collaboration.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.Domain/Entities/Collaboration.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -8,4 +8,6 @@
         public int UserId { get; set; }
         public int StoryId { get; set; }
+        public string Role { get; set; } = string.Empty;
+        public int? PermissionLevel { get; set; }
         public DateTime CreatedAt { get; set; }
         public User User { get; set; } = null!;
Index: apterX.Domain/Entities/ContentType.cs
===================================================================
--- ChapterX.Domain/Entities/ContentType.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,12 +1,0 @@
-using ChapterX.Domain.Shared;
-
-namespace ChapterX.Domain.Entities
-{
-    public class ContentType : IEntity
-    {
-        public int Id { get; set; }
-        public int NotificationId { get; set; }
-        public string ContentTypeValue { get; set; } = string.Empty;
-        public Notification Notification { get; set; } = null!;
-    }
-}
Index: ChapterX.Domain/Entities/Likes.cs
===================================================================
--- ChapterX.Domain/Entities/Likes.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.Domain/Entities/Likes.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -8,5 +8,5 @@
         public int UserId { get; set; }
         public int StoryId { get; set; }
-        public DateTime CreatedAt { get; set; }
+        public DateTime LikedAt { get; set; }
         public User User { get; set; } = null!;
         public Story Story { get; set; } = null!;
Index: ChapterX.Domain/Entities/Notification.cs
===================================================================
--- ChapterX.Domain/Entities/Notification.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.Domain/Entities/Notification.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -12,13 +12,13 @@
         public int Id { get; set; }
         public string Content { get; set; } = string.Empty;
+        public string ContentType { get; set; } = string.Empty;
         public bool IsRead { get; set; }
+        public string? Link { get; set; }
         public DateTime CreatedAt { get; set; }
-        public int? RecipientUserId { get; set; }
-        public string? Type { get; set; }
-        public string? Link { get; set; }
 
-        public ICollection<ContentType> ContentTypes { get; set; } = [];
-        public ICollection<Notify> Notifies { get; set; } = [];
-
+        public int UserId { get; set; }
+        public int? StoryId { get; set; }
+        public User User { get; set; } = null!;
+        public Story? Story { get; set; }
     }
 }
Index: apterX.Domain/Entities/Notify.cs
===================================================================
--- ChapterX.Domain/Entities/Notify.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,15 +1,0 @@
-using ChapterX.Domain.Shared;
-
-namespace ChapterX.Domain.Entities
-{
-    public class Notify : IEntity
-    {
-        public int Id { get; set; }
-        public int UserId { get; set; }
-        public int StoryId { get; set; }
-        public int NotificationId { get; set; }
-        public User User { get; set; } = null!;
-        public Story Story { get; set; } = null!;
-        public Notification Notification { get; set; } = null!;
-    }
-}
Index: apterX.Domain/Entities/PermissionLevel.cs
===================================================================
--- ChapterX.Domain/Entities/PermissionLevel.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,12 +1,0 @@
-using ChapterX.Domain.Shared;
-
-namespace ChapterX.Domain.Entities
-{
-    public class PermissionLevel : IEntity
-    {
-        public int Id { get; set; }
-        public int UserId { get; set; }
-        public int StoryId { get; set; }
-        public int Level { get; set; }
-    }
-}
Index: ChapterX.Domain/Entities/RegularUser.cs
===================================================================
--- ChapterX.Domain/Entities/RegularUser.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.Domain/Entities/RegularUser.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -6,4 +6,5 @@
     {
         public int Id { get; set; } // maps to user_id
+        public DateTime JoinedAt { get; set; }
         public User User { get; set; } = null!;
     }
Index: apterX.Domain/Entities/Roles.cs
===================================================================
--- ChapterX.Domain/Entities/Roles.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,12 +1,0 @@
-using ChapterX.Domain.Shared;
-
-namespace ChapterX.Domain.Entities
-{
-    public class Roles : IEntity
-    {
-        public int Id { get; set; }
-        public int UserId { get; set; }
-        public int StoryId { get; set; }
-        public string RoleValue { get; set; } = string.Empty;
-    }
-}
Index: apterX.Domain/Entities/Status.cs
===================================================================
--- ChapterX.Domain/Entities/Status.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,12 +1,0 @@
-using ChapterX.Domain.Shared;
-
-namespace ChapterX.Domain.Entities
-{
-    public class Status : IEntity
-    {
-        public int Id { get; set; }
-        public int StoryId { get; set; }
-        public string StatusValue { get; set; } = string.Empty;
-        public Story Story { get; set; } = null!;
-    }
-}
Index: ChapterX.Domain/Entities/Story.cs
===================================================================
--- ChapterX.Domain/Entities/Story.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.Domain/Entities/Story.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -16,4 +16,5 @@
         public string? Image { get; set; }
         public string Content { get; set; } = string.Empty;
+        public string Status { get; set; } = "draft";
         public DateTime CreatedAt { get; set; }
         public DateTime UpdatedAt { get; set; }
@@ -21,5 +22,4 @@
         public int UserId { get; set; }
         public Writer Writer { get; set; } = null!;
-        public ICollection<Status> Statuses { get; set; } = [];
         public ICollection<Chapter> Chapters { get; set; } = [];
         public ICollection<HasGenre> HasGenres { get; set; } = [];
@@ -28,5 +28,5 @@
         public ICollection<Collaboration> Collaborations { get; set; } = [];
         public ICollection<AISuggestion> AISuggestions { get; set; } = [];
-        public ICollection<Notify> Notifies { get; set; } = [];
+        public ICollection<Notification> Notifications { get; set; } = [];
         public ICollection<ReadingListItems> ReadingListItems { get; set; } = [];
         public ICollection<NeedApproval> NeedApprovals { get; set; } = [];
Index: apterX.Domain/Entities/SuggestionType.cs
===================================================================
--- ChapterX.Domain/Entities/SuggestionType.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,12 +1,0 @@
-using ChapterX.Domain.Shared;
-
-namespace ChapterX.Domain.Entities
-{
-    public class SuggestionType : IEntity
-    {
-        public int Id { get; set; }
-        public int SuggestionId { get; set; }
-        public string SuggestionTypeValue { get; set; } = string.Empty;
-        public AISuggestion AISuggestion { get; set; } = null!;
-    }
-}
Index: ChapterX.Domain/Entities/User.cs
===================================================================
--- ChapterX.Domain/Entities/User.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.Domain/Entities/User.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -26,5 +26,5 @@
         public ICollection<Comment> Comments { get; set; } = [];
         public ICollection<Collaboration> Collaborations { get; set; } = [];
-        public ICollection<Notify> Notifies { get; set; } = [];
+        public ICollection<Notification> Notifications { get; set; } = [];
 
 
Index: ChapterX.Domain/Entities/Writer.cs
===================================================================
--- ChapterX.Domain/Entities/Writer.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.Domain/Entities/Writer.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -6,4 +6,5 @@
     {
         public int Id { get; set; } // maps to user_id
+        public string? Bio { get; set; }
         public User User { get; set; } = null!;
         public ICollection<Story> Stories { get; set; } = [];
Index: apterX.Domain/Repositories/IContentTypeRepository.cs
===================================================================
--- ChapterX.Domain/Repositories/IContentTypeRepository.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,13 +1,0 @@
-using ChapterX.Domain.Entities;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace ChapterX.Domain.Repositories
-{
-    public interface IContentTypeRepository : IRepository<ContentType>
-    {
-    }
-}
Index: apterX.Domain/Repositories/INotifyRepository.cs
===================================================================
--- ChapterX.Domain/Repositories/INotifyRepository.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,8 +1,0 @@
-using ChapterX.Domain.Entities;
-
-namespace ChapterX.Domain.Repositories
-{
-    public interface INotifyRepository : IRepository<Notify>
-    {
-    }
-}
Index: apterX.Domain/Repositories/IPermissionLevelRepository.cs
===================================================================
--- ChapterX.Domain/Repositories/IPermissionLevelRepository.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,13 +1,0 @@
-using ChapterX.Domain.Entities;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace ChapterX.Domain.Repositories
-{
-    public interface IPermissionLevelRepository : IRepository<PermissionLevel>
-    {
-    }
-}
Index: apterX.Domain/Repositories/IRolesRepository.cs
===================================================================
--- ChapterX.Domain/Repositories/IRolesRepository.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,13 +1,0 @@
-using ChapterX.Domain.Entities;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace ChapterX.Domain.Repositories
-{
-    public interface IRolesRepository : IRepository<Roles>
-    {
-    }
-}
Index: apterX.Domain/Repositories/IStatusRepository.cs
===================================================================
--- ChapterX.Domain/Repositories/IStatusRepository.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,13 +1,0 @@
-using ChapterX.Domain.Entities;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace ChapterX.Domain.Repositories
-{
-    public interface IStatusRepository : IRepository<Status>
-    {
-    }
-}
Index: apterX.Domain/Repositories/ISuggestionTypeRepository.cs
===================================================================
--- ChapterX.Domain/Repositories/ISuggestionTypeRepository.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,13 +1,0 @@
-using ChapterX.Domain.Entities;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace ChapterX.Domain.Repositories
-{
-    public interface ISuggestionTypeRepository
-    {
-    }
-}
Index: ChapterX.Infrastructure/Data/DataContext/ApplicationDbContext.cs
===================================================================
--- ChapterX.Infrastructure/Data/DataContext/ApplicationDbContext.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.Infrastructure/Data/DataContext/ApplicationDbContext.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -19,5 +19,4 @@
         public DbSet<Likes> Likes { get; init; }
         public DbSet<Collaboration> Collaborations { get; init; }
-        public DbSet<Notify> Notifies { get; init; }
         public DbSet<AISuggestion> AISuggestions { get; init; }
         public DbSet<Admin> Admins { get; init; }
@@ -26,9 +25,4 @@
         public DbSet<HasGenre> HasGenres { get; init; }
         public DbSet<NeedApproval> NeedApprovals { get; init; }
-        public DbSet<Status> Statuses { get; init; }
-        public DbSet<ContentType> ContentTypes { get; init; }
-        public DbSet<SuggestionType> SuggestionTypes { get; init; }
-        public DbSet<Roles> Roles { get; init; }
-        public DbSet<PermissionLevel> PermissionLevels { get; init; }
 
         public Task<IDbContextTransaction> BeginTransactionAsync(CancellationToken cancellationToken = default)
@@ -60,4 +54,5 @@
                 e.HasKey(x => x.Id);
                 e.Property(x => x.Id).HasColumnName("user_id");
+                e.Property(x => x.AssignedAt).HasColumnName("assigned_at");
                 e.HasOne(x => x.User).WithOne(u => u.Admin).HasForeignKey<Admin>(x => x.Id);
             });
@@ -69,4 +64,5 @@
                 e.HasKey(x => x.Id);
                 e.Property(x => x.Id).HasColumnName("user_id");
+                e.Property(x => x.JoinedAt).HasColumnName("joined_at");
                 e.HasOne(x => x.User).WithOne(u => u.RegularUser).HasForeignKey<RegularUser>(x => x.Id);
             });
@@ -78,4 +74,5 @@
                 e.HasKey(x => x.Id);
                 e.Property(x => x.Id).HasColumnName("user_id");
+                e.Property(x => x.Bio).HasColumnName("bio");
                 e.HasOne(x => x.User).WithOne(u => u.Writer).HasForeignKey<Writer>(x => x.Id);
             });
@@ -92,19 +89,9 @@
                 e.Property(x => x.Image).HasColumnName("image");
                 e.Property(x => x.Content).HasColumnName("story_content");
+                e.Property(x => x.Status).HasColumnName("status");
                 e.Property(x => x.UserId).HasColumnName("user_id");
                 e.Property(x => x.CreatedAt).HasColumnName("story_created_at");
                 e.Property(x => x.UpdatedAt).HasColumnName("story_updated_at");
                 e.HasOne(x => x.Writer).WithMany(w => w.Stories).HasForeignKey(x => x.UserId);
-            });
-
-            // STATUS
-            modelBuilder.Entity<Status>(e =>
-            {
-                e.ToTable("status");
-                e.HasKey(x => new { x.StoryId, x.StatusValue });
-                e.Ignore(x => x.Id);
-                e.Property(x => x.StoryId).HasColumnName("story_id");
-                e.Property(x => x.StatusValue).HasColumnName("status");
-                e.HasOne(x => x.Story).WithMany(s => s.Statuses).HasForeignKey(x => x.StoryId);
             });
 
@@ -158,5 +145,5 @@
                 e.Property(x => x.UserId).HasColumnName("user_id");
                 e.Property(x => x.StoryId).HasColumnName("story_id");
-                e.Property(x => x.CreatedAt).HasColumnName("like_created_at");
+                e.Property(x => x.LikedAt).HasColumnName("liked_at");
                 e.HasOne(x => x.User).WithMany(u => u.Likes).HasForeignKey(x => x.UserId);
                 e.HasOne(x => x.Story).WithMany(s => s.Likes).HasForeignKey(x => x.StoryId);
@@ -213,34 +200,13 @@
                 e.Property(x => x.Id).HasColumnName("notification_id");
                 e.Property(x => x.Content).HasColumnName("notification_content");
+                e.Property(x => x.ContentType).HasColumnName("content_type");
                 e.Property(x => x.IsRead).HasColumnName("is_read");
+                e.Property(x => x.Link).HasColumnName("link");
+                e.Property(x => x.UserId).HasColumnName("user_id");
+                e.Property(x => x.StoryId).HasColumnName("story_id");
                 e.Property(x => x.CreatedAt).HasColumnName("notification_created_at");
-                e.Property(x => x.RecipientUserId).HasColumnName("recipient_user_id");
-                e.Property(x => x.Type).HasColumnName("type");
-                e.Property(x => x.Link).HasColumnName("link");
-            });
-
-            // CONTENT_TYPE
-            modelBuilder.Entity<ContentType>(e =>
-            {
-                e.ToTable("content_type");
-                e.HasKey(x => new { x.NotificationId, x.ContentTypeValue });
-                e.Ignore(x => x.Id);
-                e.Property(x => x.NotificationId).HasColumnName("notification_id");
-                e.Property(x => x.ContentTypeValue).HasColumnName("content_type");
-                e.HasOne(x => x.Notification).WithMany(n => n.ContentTypes).HasForeignKey(x => x.NotificationId);
-            });
-
-            // NOTIFY
-            modelBuilder.Entity<Notify>(e =>
-            {
-                e.ToTable("notify");
-                e.HasKey(x => new { x.UserId, x.StoryId, x.NotificationId });
-                e.Ignore(x => x.Id);
-                e.Property(x => x.UserId).HasColumnName("user_id");
-                e.Property(x => x.StoryId).HasColumnName("story_id");
-                e.Property(x => x.NotificationId).HasColumnName("notification_id");
-                e.HasOne(x => x.User).WithMany(u => u.Notifies).HasForeignKey(x => x.UserId);
-                e.HasOne(x => x.Story).WithMany(s => s.Notifies).HasForeignKey(x => x.StoryId);
-                e.HasOne(x => x.Notification).WithMany(n => n.Notifies).HasForeignKey(x => x.NotificationId);
+                e.HasOne(x => x.User).WithMany(u => u.Notifications).HasForeignKey(x => x.UserId);
+                e.HasOne(x => x.Story).WithMany(s => s.Notifications).HasForeignKey(x => x.StoryId)
+                    .IsRequired(false).OnDelete(DeleteBehavior.SetNull);
             });
 
@@ -253,4 +219,5 @@
                 e.Property(x => x.OriginalText).HasColumnName("original_text");
                 e.Property(x => x.SuggestedText).HasColumnName("suggested_text");
+                e.Property(x => x.SuggestionType).HasColumnName("suggestion_type");
                 e.Property(x => x.Accepted).HasColumnName("accepted");
                 e.Property(x => x.CreatedAt).HasColumnName("suggestion_created_at");
@@ -258,15 +225,4 @@
                 e.Property(x => x.StoryId).HasColumnName("story_id");
                 e.HasOne(x => x.Story).WithMany(s => s.AISuggestions).HasForeignKey(x => x.StoryId);
-            });
-
-            // SUGGESTION_TYPE
-            modelBuilder.Entity<SuggestionType>(e =>
-            {
-                e.ToTable("suggestion_type");
-                e.HasKey(x => new { x.SuggestionId, x.SuggestionTypeValue });
-                e.Ignore(x => x.Id);
-                e.Property(x => x.SuggestionId).HasColumnName("suggestion_id");
-                e.Property(x => x.SuggestionTypeValue).HasColumnName("suggestion_type");
-                e.HasOne(x => x.AISuggestion).WithMany(a => a.SuggestionTypes).HasForeignKey(x => x.SuggestionId);
             });
 
@@ -293,30 +249,10 @@
                 e.Property(x => x.UserId).HasColumnName("user_id");
                 e.Property(x => x.StoryId).HasColumnName("story_id");
+                e.Property(x => x.Role).HasColumnName("role");
+                e.Property(x => x.PermissionLevel).HasColumnName("permission_level");
                 e.Property(x => x.CreatedAt).HasColumnName("collab_created_at");
                 e.HasOne(x => x.User).WithMany(u => u.Collaborations).HasForeignKey(x => x.UserId);
                 e.HasOne(x => x.Story).WithMany(s => s.Collaborations).HasForeignKey(x => x.StoryId);
             });
-
-            // ROLES
-            modelBuilder.Entity<Roles>(e =>
-            {
-                e.ToTable("roles");
-                e.HasKey(x => new { x.UserId, x.StoryId, x.RoleValue });
-                e.Ignore(x => x.Id);
-                e.Property(x => x.UserId).HasColumnName("user_id");
-                e.Property(x => x.StoryId).HasColumnName("story_id");
-                e.Property(x => x.RoleValue).HasColumnName("roles");
-            });
-
-            // PERMISSION_LEVEL
-            modelBuilder.Entity<PermissionLevel>(e =>
-            {
-                e.ToTable("permission_level");
-                e.HasKey(x => new { x.UserId, x.StoryId, x.Level });
-                e.Ignore(x => x.Id);
-                e.Property(x => x.UserId).HasColumnName("user_id");
-                e.Property(x => x.StoryId).HasColumnName("story_id");
-                e.Property(x => x.Level).HasColumnName("permission_level");
-            });
         }
     }
Index: ChapterX.Infrastructure/DependencyInjection.cs
===================================================================
--- ChapterX.Infrastructure/DependencyInjection.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.Infrastructure/DependencyInjection.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -44,5 +44,4 @@
             services.AddScoped<IReadingListItemsRepository, ReadingListItemsRepository>();
             services.AddScoped<INotificationRepository, NotificationRepository>();
-            services.AddScoped<INotifyRepository, NotifyRepository>();
             services.AddScoped<INeedApprovalRepository, NeedApprovalRepository>();
             services.AddScoped<ILikesRepository, LikesRepository>();
@@ -52,8 +51,4 @@
             services.AddScoped<ICommentRepository, CommentRepository>();
             services.AddScoped<IAISuggestionRepository, AISuggestionRepository>();
-            services.AddScoped<IContentTypeRepository, ContentTypeRepository>();
-            services.AddScoped<IPermissionLevelRepository, PermissionLevelRepository>();
-            services.AddScoped<IRolesRepository, RolesRepository>();
-            services.AddScoped<IStatusRepository, StatusRepository>();
 
             return services;
Index: apterX.Infrastructure/Migrations/20260319165332_InitialCreate.Designer.cs
===================================================================
--- ChapterX.Infrastructure/Migrations/20260319165332_InitialCreate.Designer.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,852 +1,0 @@
-﻿// <auto-generated />
-using System;
-using ChapterX.Infrastructure.Data.DataContext;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
-
-#nullable disable
-
-namespace ChapterX.Infrastructure.Migrations
-{
-    [DbContext(typeof(ApplicationDbContext))]
-    [Migration("20260319165332_InitialCreate")]
-    partial class InitialCreate
-    {
-        /// <inheritdoc />
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-#pragma warning disable 612, 618
-            modelBuilder
-                .HasAnnotation("ProductVersion", "9.0.1")
-                .HasAnnotation("Relational:MaxIdentifierLength", 63);
-
-            NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.AISuggestion", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
-
-                    b.Property<bool>("Accepted")
-                        .HasColumnType("boolean");
-
-                    b.Property<DateTime?>("AppliedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<DateTime>("CreatedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<string>("OriginalText")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.Property<int>("StoryId")
-                        .HasColumnType("integer");
-
-                    b.Property<string>("SuggestedText")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.PrimitiveCollection<int[]>("SuggestionTypes")
-                        .IsRequired()
-                        .HasColumnType("integer[]");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("StoryId");
-
-                    b.ToTable("AISuggestions");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Admin", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
-
-                    b.Property<int>("UserId")
-                        .HasColumnType("integer");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("Admins");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Chapter", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
-
-                    b.Property<string>("Content")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.Property<DateTime>("CreatedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<string>("Name")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.Property<int>("Number")
-                        .HasColumnType("integer");
-
-                    b.Property<DateTime>("PublishedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<decimal?>("Rating")
-                        .HasColumnType("numeric");
-
-                    b.Property<int>("StoryId")
-                        .HasColumnType("integer");
-
-                    b.Property<string>("Title")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.Property<DateTime>("UpdatedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<int>("ViewCount")
-                        .HasColumnType("integer");
-
-                    b.Property<int?>("WordCount")
-                        .HasColumnType("integer");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("StoryId");
-
-                    b.ToTable("Chapters");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Collaboration", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
-
-                    b.Property<DateTime>("JoinedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<string>("Role")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.Property<int>("StoryId")
-                        .HasColumnType("integer");
-
-                    b.Property<int>("UserId")
-                        .HasColumnType("integer");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("StoryId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Collaborations");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Comment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
-
-                    b.Property<string>("Content")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.Property<DateTime>("CreatedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<int>("StoryId")
-                        .HasColumnType("integer");
-
-                    b.Property<DateTime>("UpdatedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<int>("UserId")
-                        .HasColumnType("integer");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("StoryId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Comments");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Genre", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
-
-                    b.Property<string>("Name")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Genres");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.HasGenre", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
-
-                    b.Property<int>("GenreId")
-                        .HasColumnType("integer");
-
-                    b.Property<int>("StoryId")
-                        .HasColumnType("integer");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GenreId");
-
-                    b.HasIndex("StoryId");
-
-                    b.ToTable("HasGenres");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Likes", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
-
-                    b.Property<int>("ChapterId")
-                        .HasColumnType("integer");
-
-                    b.Property<DateTime>("CreatedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<int?>("StoryId")
-                        .HasColumnType("integer");
-
-                    b.Property<int>("UserId")
-                        .HasColumnType("integer");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ChapterId");
-
-                    b.HasIndex("StoryId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Likes");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.NeedApproval", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
-
-                    b.Property<int?>("AISuggestionId")
-                        .HasColumnType("integer");
-
-                    b.Property<int>("AdminId")
-                        .HasColumnType("integer");
-
-                    b.Property<bool>("Approved")
-                        .HasColumnType("boolean");
-
-                    b.Property<int?>("ChapterId")
-                        .HasColumnType("integer");
-
-                    b.Property<DateTime>("RequestedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<int>("StoryId")
-                        .HasColumnType("integer");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("AISuggestionId");
-
-                    b.HasIndex("AdminId");
-
-                    b.HasIndex("ChapterId");
-
-                    b.HasIndex("StoryId");
-
-                    b.ToTable("NeedApprovals");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Notification", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
-
-                    b.Property<string>("Content")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.PrimitiveCollection<int[]>("ContentTypes")
-                        .IsRequired()
-                        .HasColumnType("integer[]");
-
-                    b.Property<DateTime>("CreatedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<bool>("IsRead")
-                        .HasColumnType("boolean");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Notifications");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Notify", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
-
-                    b.Property<bool>("IsRead")
-                        .HasColumnType("boolean");
-
-                    b.Property<int>("NotificationId")
-                        .HasColumnType("integer");
-
-                    b.Property<int?>("StoryId")
-                        .HasColumnType("integer");
-
-                    b.Property<int>("UserId")
-                        .HasColumnType("integer");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("NotificationId");
-
-                    b.HasIndex("StoryId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Notifies");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.ReadingList", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
-
-                    b.Property<string>("Content")
-                        .HasColumnType("text");
-
-                    b.Property<DateTime>("CreatedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<bool>("IsPublic")
-                        .HasColumnType("boolean");
-
-                    b.Property<string>("Name")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.Property<DateTime>("UpdatedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<int>("UserId")
-                        .HasColumnType("integer");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ReadingLists");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.ReadingListItems", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
-
-                    b.Property<DateTime>("AddedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<int>("ReadingListId")
-                        .HasColumnType("integer");
-
-                    b.Property<int>("StoryId")
-                        .HasColumnType("integer");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ReadingListId");
-
-                    b.HasIndex("StoryId");
-
-                    b.ToTable("ReadingListItems");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.RegularUser", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
-
-                    b.Property<int>("UserId")
-                        .HasColumnType("integer");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("RegularUsers");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Story", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
-
-                    b.Property<string>("Content")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.Property<DateTime>("CreatedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<string>("Image")
-                        .HasColumnType("text");
-
-                    b.Property<bool>("MatureContent")
-                        .HasColumnType("boolean");
-
-                    b.Property<string>("ShortDescription")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.PrimitiveCollection<int[]>("Statuses")
-                        .IsRequired()
-                        .HasColumnType("integer[]");
-
-                    b.Property<DateTime>("UpdatedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<int>("UserId")
-                        .HasColumnType("integer");
-
-                    b.Property<int>("WriterId")
-                        .HasColumnType("integer");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("WriterId");
-
-                    b.ToTable("Stories");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
-
-                    b.Property<DateTime>("CreatedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<string>("Email")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.Property<string>("Name")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.Property<string>("Password")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.Property<string>("Surname")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.Property<DateTime>("UpdatedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<string>("Username")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Writer", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
-
-                    b.Property<string>("Bio")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.Property<int>("UserId")
-                        .HasColumnType("integer");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("Writers");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.AISuggestion", b =>
-                {
-                    b.HasOne("ChapterX.Domain.Entities.Story", "Story")
-                        .WithMany("AISuggestions")
-                        .HasForeignKey("StoryId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("Story");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Admin", b =>
-                {
-                    b.HasOne("ChapterX.Domain.Entities.User", "User")
-                        .WithOne("Admin")
-                        .HasForeignKey("ChapterX.Domain.Entities.Admin", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("User");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Chapter", b =>
-                {
-                    b.HasOne("ChapterX.Domain.Entities.Story", "Story")
-                        .WithMany("Chapters")
-                        .HasForeignKey("StoryId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("Story");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Collaboration", b =>
-                {
-                    b.HasOne("ChapterX.Domain.Entities.Story", "Story")
-                        .WithMany("Collaborations")
-                        .HasForeignKey("StoryId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.HasOne("ChapterX.Domain.Entities.User", "User")
-                        .WithMany("Collaborations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("Story");
-
-                    b.Navigation("User");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Comment", b =>
-                {
-                    b.HasOne("ChapterX.Domain.Entities.Story", "Story")
-                        .WithMany("Comments")
-                        .HasForeignKey("StoryId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.HasOne("ChapterX.Domain.Entities.User", "User")
-                        .WithMany("Comments")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("Story");
-
-                    b.Navigation("User");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.HasGenre", b =>
-                {
-                    b.HasOne("ChapterX.Domain.Entities.Genre", "Genre")
-                        .WithMany("HasGenres")
-                        .HasForeignKey("GenreId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.HasOne("ChapterX.Domain.Entities.Story", "Story")
-                        .WithMany("HasGenres")
-                        .HasForeignKey("StoryId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("Genre");
-
-                    b.Navigation("Story");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Likes", b =>
-                {
-                    b.HasOne("ChapterX.Domain.Entities.Chapter", "Chapter")
-                        .WithMany()
-                        .HasForeignKey("ChapterId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.HasOne("ChapterX.Domain.Entities.Story", null)
-                        .WithMany("Likes")
-                        .HasForeignKey("StoryId");
-
-                    b.HasOne("ChapterX.Domain.Entities.User", "User")
-                        .WithMany("Likes")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("Chapter");
-
-                    b.Navigation("User");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.NeedApproval", b =>
-                {
-                    b.HasOne("ChapterX.Domain.Entities.AISuggestion", null)
-                        .WithMany("NeedApprovals")
-                        .HasForeignKey("AISuggestionId");
-
-                    b.HasOne("ChapterX.Domain.Entities.Admin", "Admin")
-                        .WithMany()
-                        .HasForeignKey("AdminId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.HasOne("ChapterX.Domain.Entities.Chapter", null)
-                        .WithMany("NeedApprovals")
-                        .HasForeignKey("ChapterId");
-
-                    b.HasOne("ChapterX.Domain.Entities.Story", "Story")
-                        .WithMany("NeedApprovals")
-                        .HasForeignKey("StoryId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("Admin");
-
-                    b.Navigation("Story");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Notify", b =>
-                {
-                    b.HasOne("ChapterX.Domain.Entities.Notification", "Notification")
-                        .WithMany("Notifies")
-                        .HasForeignKey("NotificationId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.HasOne("ChapterX.Domain.Entities.Story", null)
-                        .WithMany("Notifies")
-                        .HasForeignKey("StoryId");
-
-                    b.HasOne("ChapterX.Domain.Entities.User", "User")
-                        .WithMany("Notifies")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("Notification");
-
-                    b.Navigation("User");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.ReadingList", b =>
-                {
-                    b.HasOne("ChapterX.Domain.Entities.User", "User")
-                        .WithMany("ReadingLists")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("User");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.ReadingListItems", b =>
-                {
-                    b.HasOne("ChapterX.Domain.Entities.ReadingList", "ReadingList")
-                        .WithMany("ReadingListItems")
-                        .HasForeignKey("ReadingListId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.HasOne("ChapterX.Domain.Entities.Story", "Story")
-                        .WithMany("ReadingListItems")
-                        .HasForeignKey("StoryId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("ReadingList");
-
-                    b.Navigation("Story");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.RegularUser", b =>
-                {
-                    b.HasOne("ChapterX.Domain.Entities.User", "User")
-                        .WithOne("RegularUser")
-                        .HasForeignKey("ChapterX.Domain.Entities.RegularUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("User");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Story", b =>
-                {
-                    b.HasOne("ChapterX.Domain.Entities.Writer", "Writer")
-                        .WithMany("Stories")
-                        .HasForeignKey("WriterId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("Writer");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Writer", b =>
-                {
-                    b.HasOne("ChapterX.Domain.Entities.User", "User")
-                        .WithOne("Writer")
-                        .HasForeignKey("ChapterX.Domain.Entities.Writer", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("User");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.AISuggestion", b =>
-                {
-                    b.Navigation("NeedApprovals");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Chapter", b =>
-                {
-                    b.Navigation("NeedApprovals");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Genre", b =>
-                {
-                    b.Navigation("HasGenres");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Notification", b =>
-                {
-                    b.Navigation("Notifies");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.ReadingList", b =>
-                {
-                    b.Navigation("ReadingListItems");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Story", b =>
-                {
-                    b.Navigation("AISuggestions");
-
-                    b.Navigation("Chapters");
-
-                    b.Navigation("Collaborations");
-
-                    b.Navigation("Comments");
-
-                    b.Navigation("HasGenres");
-
-                    b.Navigation("Likes");
-
-                    b.Navigation("NeedApprovals");
-
-                    b.Navigation("Notifies");
-
-                    b.Navigation("ReadingListItems");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.User", b =>
-                {
-                    b.Navigation("Admin");
-
-                    b.Navigation("Collaborations");
-
-                    b.Navigation("Comments");
-
-                    b.Navigation("Likes");
-
-                    b.Navigation("Notifies");
-
-                    b.Navigation("ReadingLists");
-
-                    b.Navigation("RegularUser");
-
-                    b.Navigation("Writer");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Writer", b =>
-                {
-                    b.Navigation("Stories");
-                });
-#pragma warning restore 612, 618
-        }
-    }
-}
Index: apterX.Infrastructure/Migrations/20260319165332_InitialCreate.cs
===================================================================
--- ChapterX.Infrastructure/Migrations/20260319165332_InitialCreate.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,626 +1,0 @@
-﻿using System;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
-
-#nullable disable
-
-namespace ChapterX.Infrastructure.Migrations
-{
-    /// <inheritdoc />
-    public partial class InitialCreate : Migration
-    {
-        /// <inheritdoc />
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.CreateTable(
-                name: "Genres",
-                columns: table => new
-                {
-                    Id = table.Column<int>(type: "integer", nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    Name = table.Column<string>(type: "text", nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_Genres", x => x.Id);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "Notifications",
-                columns: table => new
-                {
-                    Id = table.Column<int>(type: "integer", nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    Content = table.Column<string>(type: "text", nullable: false),
-                    IsRead = table.Column<bool>(type: "boolean", nullable: false),
-                    CreatedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
-                    ContentTypes = table.Column<int[]>(type: "integer[]", nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_Notifications", x => x.Id);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "Users",
-                columns: table => new
-                {
-                    Id = table.Column<int>(type: "integer", nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    Username = table.Column<string>(type: "text", nullable: false),
-                    Email = table.Column<string>(type: "text", nullable: false),
-                    Name = table.Column<string>(type: "text", nullable: false),
-                    Surname = table.Column<string>(type: "text", nullable: false),
-                    Password = table.Column<string>(type: "text", nullable: false),
-                    CreatedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
-                    UpdatedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_Users", x => x.Id);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "Admins",
-                columns: table => new
-                {
-                    Id = table.Column<int>(type: "integer", nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    UserId = table.Column<int>(type: "integer", nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_Admins", x => x.Id);
-                    table.ForeignKey(
-                        name: "FK_Admins_Users_UserId",
-                        column: x => x.UserId,
-                        principalTable: "Users",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "ReadingLists",
-                columns: table => new
-                {
-                    Id = table.Column<int>(type: "integer", nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    Name = table.Column<string>(type: "text", nullable: false),
-                    Content = table.Column<string>(type: "text", nullable: true),
-                    IsPublic = table.Column<bool>(type: "boolean", nullable: false),
-                    CreatedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
-                    UpdatedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
-                    UserId = table.Column<int>(type: "integer", nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_ReadingLists", x => x.Id);
-                    table.ForeignKey(
-                        name: "FK_ReadingLists_Users_UserId",
-                        column: x => x.UserId,
-                        principalTable: "Users",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "RegularUsers",
-                columns: table => new
-                {
-                    Id = table.Column<int>(type: "integer", nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    UserId = table.Column<int>(type: "integer", nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_RegularUsers", x => x.Id);
-                    table.ForeignKey(
-                        name: "FK_RegularUsers_Users_UserId",
-                        column: x => x.UserId,
-                        principalTable: "Users",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "Writers",
-                columns: table => new
-                {
-                    Id = table.Column<int>(type: "integer", nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    UserId = table.Column<int>(type: "integer", nullable: false),
-                    Bio = table.Column<string>(type: "text", nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_Writers", x => x.Id);
-                    table.ForeignKey(
-                        name: "FK_Writers_Users_UserId",
-                        column: x => x.UserId,
-                        principalTable: "Users",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "Stories",
-                columns: table => new
-                {
-                    Id = table.Column<int>(type: "integer", nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    MatureContent = table.Column<bool>(type: "boolean", nullable: false),
-                    ShortDescription = table.Column<string>(type: "text", nullable: false),
-                    Image = table.Column<string>(type: "text", nullable: true),
-                    Content = table.Column<string>(type: "text", nullable: false),
-                    CreatedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
-                    UpdatedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
-                    UserId = table.Column<int>(type: "integer", nullable: false),
-                    WriterId = table.Column<int>(type: "integer", nullable: false),
-                    Statuses = table.Column<int[]>(type: "integer[]", nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_Stories", x => x.Id);
-                    table.ForeignKey(
-                        name: "FK_Stories_Writers_WriterId",
-                        column: x => x.WriterId,
-                        principalTable: "Writers",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "AISuggestions",
-                columns: table => new
-                {
-                    Id = table.Column<int>(type: "integer", nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    OriginalText = table.Column<string>(type: "text", nullable: false),
-                    SuggestedText = table.Column<string>(type: "text", nullable: false),
-                    Accepted = table.Column<bool>(type: "boolean", nullable: false),
-                    CreatedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
-                    AppliedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: true),
-                    StoryId = table.Column<int>(type: "integer", nullable: false),
-                    SuggestionTypes = table.Column<int[]>(type: "integer[]", nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_AISuggestions", x => x.Id);
-                    table.ForeignKey(
-                        name: "FK_AISuggestions_Stories_StoryId",
-                        column: x => x.StoryId,
-                        principalTable: "Stories",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "Chapters",
-                columns: table => new
-                {
-                    Id = table.Column<int>(type: "integer", nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    Number = table.Column<int>(type: "integer", nullable: false),
-                    Name = table.Column<string>(type: "text", nullable: false),
-                    Title = table.Column<string>(type: "text", nullable: false),
-                    Content = table.Column<string>(type: "text", nullable: false),
-                    WordCount = table.Column<int>(type: "integer", nullable: true),
-                    Rating = table.Column<decimal>(type: "numeric", nullable: true),
-                    PublishedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
-                    ViewCount = table.Column<int>(type: "integer", nullable: false),
-                    CreatedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
-                    UpdatedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
-                    StoryId = table.Column<int>(type: "integer", nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_Chapters", x => x.Id);
-                    table.ForeignKey(
-                        name: "FK_Chapters_Stories_StoryId",
-                        column: x => x.StoryId,
-                        principalTable: "Stories",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "Collaborations",
-                columns: table => new
-                {
-                    Id = table.Column<int>(type: "integer", nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    UserId = table.Column<int>(type: "integer", nullable: false),
-                    StoryId = table.Column<int>(type: "integer", nullable: false),
-                    Role = table.Column<string>(type: "text", nullable: false),
-                    JoinedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_Collaborations", x => x.Id);
-                    table.ForeignKey(
-                        name: "FK_Collaborations_Stories_StoryId",
-                        column: x => x.StoryId,
-                        principalTable: "Stories",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                    table.ForeignKey(
-                        name: "FK_Collaborations_Users_UserId",
-                        column: x => x.UserId,
-                        principalTable: "Users",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "Comments",
-                columns: table => new
-                {
-                    Id = table.Column<int>(type: "integer", nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    Content = table.Column<string>(type: "text", nullable: false),
-                    CreatedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
-                    UpdatedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
-                    UserId = table.Column<int>(type: "integer", nullable: false),
-                    StoryId = table.Column<int>(type: "integer", nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_Comments", x => x.Id);
-                    table.ForeignKey(
-                        name: "FK_Comments_Stories_StoryId",
-                        column: x => x.StoryId,
-                        principalTable: "Stories",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                    table.ForeignKey(
-                        name: "FK_Comments_Users_UserId",
-                        column: x => x.UserId,
-                        principalTable: "Users",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "HasGenres",
-                columns: table => new
-                {
-                    Id = table.Column<int>(type: "integer", nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    StoryId = table.Column<int>(type: "integer", nullable: false),
-                    GenreId = table.Column<int>(type: "integer", nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_HasGenres", x => x.Id);
-                    table.ForeignKey(
-                        name: "FK_HasGenres_Genres_GenreId",
-                        column: x => x.GenreId,
-                        principalTable: "Genres",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                    table.ForeignKey(
-                        name: "FK_HasGenres_Stories_StoryId",
-                        column: x => x.StoryId,
-                        principalTable: "Stories",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "Notifies",
-                columns: table => new
-                {
-                    Id = table.Column<int>(type: "integer", nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    UserId = table.Column<int>(type: "integer", nullable: false),
-                    NotificationId = table.Column<int>(type: "integer", nullable: false),
-                    IsRead = table.Column<bool>(type: "boolean", nullable: false),
-                    StoryId = table.Column<int>(type: "integer", nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_Notifies", x => x.Id);
-                    table.ForeignKey(
-                        name: "FK_Notifies_Notifications_NotificationId",
-                        column: x => x.NotificationId,
-                        principalTable: "Notifications",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                    table.ForeignKey(
-                        name: "FK_Notifies_Stories_StoryId",
-                        column: x => x.StoryId,
-                        principalTable: "Stories",
-                        principalColumn: "Id");
-                    table.ForeignKey(
-                        name: "FK_Notifies_Users_UserId",
-                        column: x => x.UserId,
-                        principalTable: "Users",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "ReadingListItems",
-                columns: table => new
-                {
-                    Id = table.Column<int>(type: "integer", nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    ReadingListId = table.Column<int>(type: "integer", nullable: false),
-                    StoryId = table.Column<int>(type: "integer", nullable: false),
-                    AddedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_ReadingListItems", x => x.Id);
-                    table.ForeignKey(
-                        name: "FK_ReadingListItems_ReadingLists_ReadingListId",
-                        column: x => x.ReadingListId,
-                        principalTable: "ReadingLists",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                    table.ForeignKey(
-                        name: "FK_ReadingListItems_Stories_StoryId",
-                        column: x => x.StoryId,
-                        principalTable: "Stories",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "Likes",
-                columns: table => new
-                {
-                    Id = table.Column<int>(type: "integer", nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    UserId = table.Column<int>(type: "integer", nullable: false),
-                    ChapterId = table.Column<int>(type: "integer", nullable: false),
-                    CreatedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
-                    StoryId = table.Column<int>(type: "integer", nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_Likes", x => x.Id);
-                    table.ForeignKey(
-                        name: "FK_Likes_Chapters_ChapterId",
-                        column: x => x.ChapterId,
-                        principalTable: "Chapters",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                    table.ForeignKey(
-                        name: "FK_Likes_Stories_StoryId",
-                        column: x => x.StoryId,
-                        principalTable: "Stories",
-                        principalColumn: "Id");
-                    table.ForeignKey(
-                        name: "FK_Likes_Users_UserId",
-                        column: x => x.UserId,
-                        principalTable: "Users",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "NeedApprovals",
-                columns: table => new
-                {
-                    Id = table.Column<int>(type: "integer", nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    StoryId = table.Column<int>(type: "integer", nullable: false),
-                    AdminId = table.Column<int>(type: "integer", nullable: false),
-                    Approved = table.Column<bool>(type: "boolean", nullable: false),
-                    RequestedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
-                    AISuggestionId = table.Column<int>(type: "integer", nullable: true),
-                    ChapterId = table.Column<int>(type: "integer", nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("PK_NeedApprovals", x => x.Id);
-                    table.ForeignKey(
-                        name: "FK_NeedApprovals_AISuggestions_AISuggestionId",
-                        column: x => x.AISuggestionId,
-                        principalTable: "AISuggestions",
-                        principalColumn: "Id");
-                    table.ForeignKey(
-                        name: "FK_NeedApprovals_Admins_AdminId",
-                        column: x => x.AdminId,
-                        principalTable: "Admins",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                    table.ForeignKey(
-                        name: "FK_NeedApprovals_Chapters_ChapterId",
-                        column: x => x.ChapterId,
-                        principalTable: "Chapters",
-                        principalColumn: "Id");
-                    table.ForeignKey(
-                        name: "FK_NeedApprovals_Stories_StoryId",
-                        column: x => x.StoryId,
-                        principalTable: "Stories",
-                        principalColumn: "Id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateIndex(
-                name: "IX_Admins_UserId",
-                table: "Admins",
-                column: "UserId",
-                unique: true);
-
-            migrationBuilder.CreateIndex(
-                name: "IX_AISuggestions_StoryId",
-                table: "AISuggestions",
-                column: "StoryId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_Chapters_StoryId",
-                table: "Chapters",
-                column: "StoryId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_Collaborations_StoryId",
-                table: "Collaborations",
-                column: "StoryId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_Collaborations_UserId",
-                table: "Collaborations",
-                column: "UserId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_Comments_StoryId",
-                table: "Comments",
-                column: "StoryId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_Comments_UserId",
-                table: "Comments",
-                column: "UserId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_HasGenres_GenreId",
-                table: "HasGenres",
-                column: "GenreId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_HasGenres_StoryId",
-                table: "HasGenres",
-                column: "StoryId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_Likes_ChapterId",
-                table: "Likes",
-                column: "ChapterId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_Likes_StoryId",
-                table: "Likes",
-                column: "StoryId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_Likes_UserId",
-                table: "Likes",
-                column: "UserId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_NeedApprovals_AdminId",
-                table: "NeedApprovals",
-                column: "AdminId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_NeedApprovals_AISuggestionId",
-                table: "NeedApprovals",
-                column: "AISuggestionId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_NeedApprovals_ChapterId",
-                table: "NeedApprovals",
-                column: "ChapterId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_NeedApprovals_StoryId",
-                table: "NeedApprovals",
-                column: "StoryId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_Notifies_NotificationId",
-                table: "Notifies",
-                column: "NotificationId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_Notifies_StoryId",
-                table: "Notifies",
-                column: "StoryId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_Notifies_UserId",
-                table: "Notifies",
-                column: "UserId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_ReadingListItems_ReadingListId",
-                table: "ReadingListItems",
-                column: "ReadingListId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_ReadingListItems_StoryId",
-                table: "ReadingListItems",
-                column: "StoryId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_ReadingLists_UserId",
-                table: "ReadingLists",
-                column: "UserId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_RegularUsers_UserId",
-                table: "RegularUsers",
-                column: "UserId",
-                unique: true);
-
-            migrationBuilder.CreateIndex(
-                name: "IX_Stories_WriterId",
-                table: "Stories",
-                column: "WriterId");
-
-            migrationBuilder.CreateIndex(
-                name: "IX_Writers_UserId",
-                table: "Writers",
-                column: "UserId",
-                unique: true);
-        }
-
-        /// <inheritdoc />
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropTable(
-                name: "Collaborations");
-
-            migrationBuilder.DropTable(
-                name: "Comments");
-
-            migrationBuilder.DropTable(
-                name: "HasGenres");
-
-            migrationBuilder.DropTable(
-                name: "Likes");
-
-            migrationBuilder.DropTable(
-                name: "NeedApprovals");
-
-            migrationBuilder.DropTable(
-                name: "Notifies");
-
-            migrationBuilder.DropTable(
-                name: "ReadingListItems");
-
-            migrationBuilder.DropTable(
-                name: "RegularUsers");
-
-            migrationBuilder.DropTable(
-                name: "Genres");
-
-            migrationBuilder.DropTable(
-                name: "AISuggestions");
-
-            migrationBuilder.DropTable(
-                name: "Admins");
-
-            migrationBuilder.DropTable(
-                name: "Chapters");
-
-            migrationBuilder.DropTable(
-                name: "Notifications");
-
-            migrationBuilder.DropTable(
-                name: "ReadingLists");
-
-            migrationBuilder.DropTable(
-                name: "Stories");
-
-            migrationBuilder.DropTable(
-                name: "Writers");
-
-            migrationBuilder.DropTable(
-                name: "Users");
-        }
-    }
-}
Index: apterX.Infrastructure/Migrations/20260319165534_InitialCreate1.Designer.cs
===================================================================
--- ChapterX.Infrastructure/Migrations/20260319165534_InitialCreate1.Designer.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,852 +1,0 @@
-﻿// <auto-generated />
-using System;
-using ChapterX.Infrastructure.Data.DataContext;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
-
-#nullable disable
-
-namespace ChapterX.Infrastructure.Migrations
-{
-    [DbContext(typeof(ApplicationDbContext))]
-    [Migration("20260319165534_InitialCreate1")]
-    partial class InitialCreate1
-    {
-        /// <inheritdoc />
-        protected override void BuildTargetModel(ModelBuilder modelBuilder)
-        {
-#pragma warning disable 612, 618
-            modelBuilder
-                .HasAnnotation("ProductVersion", "9.0.1")
-                .HasAnnotation("Relational:MaxIdentifierLength", 63);
-
-            NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.AISuggestion", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
-
-                    b.Property<bool>("Accepted")
-                        .HasColumnType("boolean");
-
-                    b.Property<DateTime?>("AppliedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<DateTime>("CreatedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<string>("OriginalText")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.Property<int>("StoryId")
-                        .HasColumnType("integer");
-
-                    b.Property<string>("SuggestedText")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.PrimitiveCollection<int[]>("SuggestionTypes")
-                        .IsRequired()
-                        .HasColumnType("integer[]");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("StoryId");
-
-                    b.ToTable("AISuggestions");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Admin", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
-
-                    b.Property<int>("UserId")
-                        .HasColumnType("integer");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("Admins");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Chapter", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
-
-                    b.Property<string>("Content")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.Property<DateTime>("CreatedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<string>("Name")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.Property<int>("Number")
-                        .HasColumnType("integer");
-
-                    b.Property<DateTime>("PublishedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<decimal?>("Rating")
-                        .HasColumnType("numeric");
-
-                    b.Property<int>("StoryId")
-                        .HasColumnType("integer");
-
-                    b.Property<string>("Title")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.Property<DateTime>("UpdatedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<int>("ViewCount")
-                        .HasColumnType("integer");
-
-                    b.Property<int?>("WordCount")
-                        .HasColumnType("integer");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("StoryId");
-
-                    b.ToTable("Chapters");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Collaboration", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
-
-                    b.Property<DateTime>("JoinedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<string>("Role")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.Property<int>("StoryId")
-                        .HasColumnType("integer");
-
-                    b.Property<int>("UserId")
-                        .HasColumnType("integer");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("StoryId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Collaborations");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Comment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
-
-                    b.Property<string>("Content")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.Property<DateTime>("CreatedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<int>("StoryId")
-                        .HasColumnType("integer");
-
-                    b.Property<DateTime>("UpdatedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<int>("UserId")
-                        .HasColumnType("integer");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("StoryId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Comments");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Genre", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
-
-                    b.Property<string>("Name")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Genres");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.HasGenre", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
-
-                    b.Property<int>("GenreId")
-                        .HasColumnType("integer");
-
-                    b.Property<int>("StoryId")
-                        .HasColumnType("integer");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GenreId");
-
-                    b.HasIndex("StoryId");
-
-                    b.ToTable("HasGenres");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Likes", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
-
-                    b.Property<int>("ChapterId")
-                        .HasColumnType("integer");
-
-                    b.Property<DateTime>("CreatedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<int?>("StoryId")
-                        .HasColumnType("integer");
-
-                    b.Property<int>("UserId")
-                        .HasColumnType("integer");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ChapterId");
-
-                    b.HasIndex("StoryId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Likes");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.NeedApproval", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
-
-                    b.Property<int?>("AISuggestionId")
-                        .HasColumnType("integer");
-
-                    b.Property<int>("AdminId")
-                        .HasColumnType("integer");
-
-                    b.Property<bool>("Approved")
-                        .HasColumnType("boolean");
-
-                    b.Property<int?>("ChapterId")
-                        .HasColumnType("integer");
-
-                    b.Property<DateTime>("RequestedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<int>("StoryId")
-                        .HasColumnType("integer");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("AISuggestionId");
-
-                    b.HasIndex("AdminId");
-
-                    b.HasIndex("ChapterId");
-
-                    b.HasIndex("StoryId");
-
-                    b.ToTable("NeedApprovals");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Notification", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
-
-                    b.Property<string>("Content")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.PrimitiveCollection<int[]>("ContentTypes")
-                        .IsRequired()
-                        .HasColumnType("integer[]");
-
-                    b.Property<DateTime>("CreatedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<bool>("IsRead")
-                        .HasColumnType("boolean");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Notifications");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Notify", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
-
-                    b.Property<bool>("IsRead")
-                        .HasColumnType("boolean");
-
-                    b.Property<int>("NotificationId")
-                        .HasColumnType("integer");
-
-                    b.Property<int?>("StoryId")
-                        .HasColumnType("integer");
-
-                    b.Property<int>("UserId")
-                        .HasColumnType("integer");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("NotificationId");
-
-                    b.HasIndex("StoryId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Notifies");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.ReadingList", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
-
-                    b.Property<string>("Content")
-                        .HasColumnType("text");
-
-                    b.Property<DateTime>("CreatedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<bool>("IsPublic")
-                        .HasColumnType("boolean");
-
-                    b.Property<string>("Name")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.Property<DateTime>("UpdatedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<int>("UserId")
-                        .HasColumnType("integer");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ReadingLists");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.ReadingListItems", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
-
-                    b.Property<DateTime>("AddedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<int>("ReadingListId")
-                        .HasColumnType("integer");
-
-                    b.Property<int>("StoryId")
-                        .HasColumnType("integer");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ReadingListId");
-
-                    b.HasIndex("StoryId");
-
-                    b.ToTable("ReadingListItems");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.RegularUser", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
-
-                    b.Property<int>("UserId")
-                        .HasColumnType("integer");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("RegularUsers");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Story", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
-
-                    b.Property<string>("Content")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.Property<DateTime>("CreatedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<string>("Image")
-                        .HasColumnType("text");
-
-                    b.Property<bool>("MatureContent")
-                        .HasColumnType("boolean");
-
-                    b.Property<string>("ShortDescription")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.PrimitiveCollection<int[]>("Statuses")
-                        .IsRequired()
-                        .HasColumnType("integer[]");
-
-                    b.Property<DateTime>("UpdatedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<int>("UserId")
-                        .HasColumnType("integer");
-
-                    b.Property<int>("WriterId")
-                        .HasColumnType("integer");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("WriterId");
-
-                    b.ToTable("Stories");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
-
-                    b.Property<DateTime>("CreatedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<string>("Email")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.Property<string>("Name")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.Property<string>("Password")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.Property<string>("Surname")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.Property<DateTime>("UpdatedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<string>("Username")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Users");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Writer", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
-
-                    b.Property<string>("Bio")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.Property<int>("UserId")
-                        .HasColumnType("integer");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("Writers");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.AISuggestion", b =>
-                {
-                    b.HasOne("ChapterX.Domain.Entities.Story", "Story")
-                        .WithMany("AISuggestions")
-                        .HasForeignKey("StoryId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("Story");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Admin", b =>
-                {
-                    b.HasOne("ChapterX.Domain.Entities.User", "User")
-                        .WithOne("Admin")
-                        .HasForeignKey("ChapterX.Domain.Entities.Admin", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("User");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Chapter", b =>
-                {
-                    b.HasOne("ChapterX.Domain.Entities.Story", "Story")
-                        .WithMany("Chapters")
-                        .HasForeignKey("StoryId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("Story");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Collaboration", b =>
-                {
-                    b.HasOne("ChapterX.Domain.Entities.Story", "Story")
-                        .WithMany("Collaborations")
-                        .HasForeignKey("StoryId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.HasOne("ChapterX.Domain.Entities.User", "User")
-                        .WithMany("Collaborations")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("Story");
-
-                    b.Navigation("User");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Comment", b =>
-                {
-                    b.HasOne("ChapterX.Domain.Entities.Story", "Story")
-                        .WithMany("Comments")
-                        .HasForeignKey("StoryId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.HasOne("ChapterX.Domain.Entities.User", "User")
-                        .WithMany("Comments")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("Story");
-
-                    b.Navigation("User");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.HasGenre", b =>
-                {
-                    b.HasOne("ChapterX.Domain.Entities.Genre", "Genre")
-                        .WithMany("HasGenres")
-                        .HasForeignKey("GenreId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.HasOne("ChapterX.Domain.Entities.Story", "Story")
-                        .WithMany("HasGenres")
-                        .HasForeignKey("StoryId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("Genre");
-
-                    b.Navigation("Story");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Likes", b =>
-                {
-                    b.HasOne("ChapterX.Domain.Entities.Chapter", "Chapter")
-                        .WithMany()
-                        .HasForeignKey("ChapterId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.HasOne("ChapterX.Domain.Entities.Story", null)
-                        .WithMany("Likes")
-                        .HasForeignKey("StoryId");
-
-                    b.HasOne("ChapterX.Domain.Entities.User", "User")
-                        .WithMany("Likes")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("Chapter");
-
-                    b.Navigation("User");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.NeedApproval", b =>
-                {
-                    b.HasOne("ChapterX.Domain.Entities.AISuggestion", null)
-                        .WithMany("NeedApprovals")
-                        .HasForeignKey("AISuggestionId");
-
-                    b.HasOne("ChapterX.Domain.Entities.Admin", "Admin")
-                        .WithMany()
-                        .HasForeignKey("AdminId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.HasOne("ChapterX.Domain.Entities.Chapter", null)
-                        .WithMany("NeedApprovals")
-                        .HasForeignKey("ChapterId");
-
-                    b.HasOne("ChapterX.Domain.Entities.Story", "Story")
-                        .WithMany("NeedApprovals")
-                        .HasForeignKey("StoryId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("Admin");
-
-                    b.Navigation("Story");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Notify", b =>
-                {
-                    b.HasOne("ChapterX.Domain.Entities.Notification", "Notification")
-                        .WithMany("Notifies")
-                        .HasForeignKey("NotificationId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.HasOne("ChapterX.Domain.Entities.Story", null)
-                        .WithMany("Notifies")
-                        .HasForeignKey("StoryId");
-
-                    b.HasOne("ChapterX.Domain.Entities.User", "User")
-                        .WithMany("Notifies")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("Notification");
-
-                    b.Navigation("User");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.ReadingList", b =>
-                {
-                    b.HasOne("ChapterX.Domain.Entities.User", "User")
-                        .WithMany("ReadingLists")
-                        .HasForeignKey("UserId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("User");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.ReadingListItems", b =>
-                {
-                    b.HasOne("ChapterX.Domain.Entities.ReadingList", "ReadingList")
-                        .WithMany("ReadingListItems")
-                        .HasForeignKey("ReadingListId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.HasOne("ChapterX.Domain.Entities.Story", "Story")
-                        .WithMany("ReadingListItems")
-                        .HasForeignKey("StoryId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("ReadingList");
-
-                    b.Navigation("Story");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.RegularUser", b =>
-                {
-                    b.HasOne("ChapterX.Domain.Entities.User", "User")
-                        .WithOne("RegularUser")
-                        .HasForeignKey("ChapterX.Domain.Entities.RegularUser", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("User");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Story", b =>
-                {
-                    b.HasOne("ChapterX.Domain.Entities.Writer", "Writer")
-                        .WithMany("Stories")
-                        .HasForeignKey("WriterId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("Writer");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Writer", b =>
-                {
-                    b.HasOne("ChapterX.Domain.Entities.User", "User")
-                        .WithOne("Writer")
-                        .HasForeignKey("ChapterX.Domain.Entities.Writer", "UserId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.Navigation("User");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.AISuggestion", b =>
-                {
-                    b.Navigation("NeedApprovals");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Chapter", b =>
-                {
-                    b.Navigation("NeedApprovals");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Genre", b =>
-                {
-                    b.Navigation("HasGenres");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Notification", b =>
-                {
-                    b.Navigation("Notifies");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.ReadingList", b =>
-                {
-                    b.Navigation("ReadingListItems");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Story", b =>
-                {
-                    b.Navigation("AISuggestions");
-
-                    b.Navigation("Chapters");
-
-                    b.Navigation("Collaborations");
-
-                    b.Navigation("Comments");
-
-                    b.Navigation("HasGenres");
-
-                    b.Navigation("Likes");
-
-                    b.Navigation("NeedApprovals");
-
-                    b.Navigation("Notifies");
-
-                    b.Navigation("ReadingListItems");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.User", b =>
-                {
-                    b.Navigation("Admin");
-
-                    b.Navigation("Collaborations");
-
-                    b.Navigation("Comments");
-
-                    b.Navigation("Likes");
-
-                    b.Navigation("Notifies");
-
-                    b.Navigation("ReadingLists");
-
-                    b.Navigation("RegularUser");
-
-                    b.Navigation("Writer");
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Writer", b =>
-                {
-                    b.Navigation("Stories");
-                });
-#pragma warning restore 612, 618
-        }
-    }
-}
Index: apterX.Infrastructure/Migrations/20260319165534_InitialCreate1.cs
===================================================================
--- ChapterX.Infrastructure/Migrations/20260319165534_InitialCreate1.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,22 +1,0 @@
-﻿using Microsoft.EntityFrameworkCore.Migrations;
-
-#nullable disable
-
-namespace ChapterX.Infrastructure.Migrations
-{
-    /// <inheritdoc />
-    public partial class InitialCreate1 : Migration
-    {
-        /// <inheritdoc />
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-
-        }
-
-        /// <inheritdoc />
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-
-        }
-    }
-}
Index: ChapterX.Infrastructure/Migrations/20260824172555_InitialCreate.Designer.cs
===================================================================
--- ChapterX.Infrastructure/Migrations/20260824172555_InitialCreate.Designer.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
+++ ChapterX.Infrastructure/Migrations/20260824172555_InitialCreate.Designer.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -0,0 +1,829 @@
+﻿// <auto-generated />
+using System;
+using ChapterX.Infrastructure.Data.DataContext;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
+
+#nullable disable
+
+namespace ChapterX.Infrastructure.Migrations
+{
+    [DbContext(typeof(ApplicationDbContext))]
+    [Migration("20260824172555_InitialCreate")]
+    partial class InitialCreate
+    {
+        /// <inheritdoc />
+        protected override void BuildTargetModel(ModelBuilder modelBuilder)
+        {
+#pragma warning disable 612, 618
+            modelBuilder
+                .HasAnnotation("ProductVersion", "9.0.1")
+                .HasAnnotation("Relational:MaxIdentifierLength", 63);
+
+            NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.AISuggestion", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("suggestion_id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<bool?>("Accepted")
+                        .HasColumnType("boolean")
+                        .HasColumnName("accepted");
+
+                    b.Property<DateTime?>("AppliedAt")
+                        .HasColumnType("timestamp with time zone")
+                        .HasColumnName("applied_at");
+
+                    b.Property<DateTime>("CreatedAt")
+                        .HasColumnType("timestamp with time zone")
+                        .HasColumnName("suggestion_created_at");
+
+                    b.Property<string>("OriginalText")
+                        .IsRequired()
+                        .HasColumnType("text")
+                        .HasColumnName("original_text");
+
+                    b.Property<int>("StoryId")
+                        .HasColumnType("integer")
+                        .HasColumnName("story_id");
+
+                    b.Property<string>("SuggestedText")
+                        .IsRequired()
+                        .HasColumnType("text")
+                        .HasColumnName("suggested_text");
+
+                    b.Property<string>("SuggestionType")
+                        .IsRequired()
+                        .HasColumnType("text")
+                        .HasColumnName("suggestion_type");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("StoryId");
+
+                    b.ToTable("ai_suggestion", (string)null);
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.Admin", b =>
+                {
+                    b.Property<int>("Id")
+                        .HasColumnType("integer")
+                        .HasColumnName("user_id");
+
+                    b.Property<DateTime>("AssignedAt")
+                        .HasColumnType("timestamp with time zone")
+                        .HasColumnName("assigned_at");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("admins", (string)null);
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.Chapter", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("chapter_id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<string>("Content")
+                        .IsRequired()
+                        .HasColumnType("text")
+                        .HasColumnName("chapter_content");
+
+                    b.Property<DateTime>("CreatedAt")
+                        .HasColumnType("timestamp with time zone")
+                        .HasColumnName("chapter_created_at");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("text")
+                        .HasColumnName("chapter_name");
+
+                    b.Property<int>("Number")
+                        .HasColumnType("integer")
+                        .HasColumnName("chapter_number");
+
+                    b.Property<DateTime>("PublishedAt")
+                        .HasColumnType("timestamp with time zone")
+                        .HasColumnName("published_at");
+
+                    b.Property<decimal?>("Rating")
+                        .HasColumnType("numeric")
+                        .HasColumnName("rating");
+
+                    b.Property<int>("StoryId")
+                        .HasColumnType("integer")
+                        .HasColumnName("story_id");
+
+                    b.Property<string>("Title")
+                        .IsRequired()
+                        .HasColumnType("text")
+                        .HasColumnName("title");
+
+                    b.Property<DateTime>("UpdatedAt")
+                        .HasColumnType("timestamp with time zone")
+                        .HasColumnName("chapter_updated_at");
+
+                    b.Property<int>("ViewCount")
+                        .HasColumnType("integer")
+                        .HasColumnName("view_count");
+
+                    b.Property<int?>("WordCount")
+                        .HasColumnType("integer")
+                        .HasColumnName("word_count");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("StoryId");
+
+                    b.ToTable("chapter", (string)null);
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.Collaboration", b =>
+                {
+                    b.Property<int>("UserId")
+                        .HasColumnType("integer")
+                        .HasColumnName("user_id");
+
+                    b.Property<int>("StoryId")
+                        .HasColumnType("integer")
+                        .HasColumnName("story_id");
+
+                    b.Property<DateTime>("CreatedAt")
+                        .HasColumnType("timestamp with time zone")
+                        .HasColumnName("collab_created_at");
+
+                    b.Property<int?>("PermissionLevel")
+                        .HasColumnType("integer")
+                        .HasColumnName("permission_level");
+
+                    b.Property<string>("Role")
+                        .IsRequired()
+                        .HasColumnType("text")
+                        .HasColumnName("role");
+
+                    b.HasKey("UserId", "StoryId");
+
+                    b.HasIndex("StoryId");
+
+                    b.ToTable("collaboration", (string)null);
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.Comment", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("comment_id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<string>("Content")
+                        .IsRequired()
+                        .HasColumnType("text")
+                        .HasColumnName("comment_content");
+
+                    b.Property<DateTime>("CreatedAt")
+                        .HasColumnType("timestamp with time zone")
+                        .HasColumnName("comment_created_at");
+
+                    b.Property<int>("StoryId")
+                        .HasColumnType("integer")
+                        .HasColumnName("story_id");
+
+                    b.Property<DateTime>("UpdatedAt")
+                        .HasColumnType("timestamp with time zone")
+                        .HasColumnName("comment_updated_at");
+
+                    b.Property<int>("UserId")
+                        .HasColumnType("integer")
+                        .HasColumnName("user_id");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("StoryId");
+
+                    b.HasIndex("UserId");
+
+                    b.ToTable("comment", (string)null);
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.Genre", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("genre_id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("text")
+                        .HasColumnName("genre_name");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("genre", (string)null);
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.HasGenre", b =>
+                {
+                    b.Property<int>("StoryId")
+                        .HasColumnType("integer")
+                        .HasColumnName("story_id");
+
+                    b.Property<int>("GenreId")
+                        .HasColumnType("integer")
+                        .HasColumnName("genre_id");
+
+                    b.HasKey("StoryId", "GenreId");
+
+                    b.HasIndex("GenreId");
+
+                    b.ToTable("has_genre", (string)null);
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.Likes", b =>
+                {
+                    b.Property<int>("UserId")
+                        .HasColumnType("integer")
+                        .HasColumnName("user_id");
+
+                    b.Property<int>("StoryId")
+                        .HasColumnType("integer")
+                        .HasColumnName("story_id");
+
+                    b.Property<DateTime>("LikedAt")
+                        .HasColumnType("timestamp with time zone")
+                        .HasColumnName("liked_at");
+
+                    b.HasKey("UserId", "StoryId");
+
+                    b.HasIndex("StoryId");
+
+                    b.ToTable("likes", (string)null);
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.NeedApproval", b =>
+                {
+                    b.Property<int>("SuggestionId")
+                        .HasColumnType("integer")
+                        .HasColumnName("suggestion_id");
+
+                    b.Property<int>("StoryId")
+                        .HasColumnType("integer")
+                        .HasColumnName("story_id");
+
+                    b.Property<int>("ChapterId")
+                        .HasColumnType("integer")
+                        .HasColumnName("chapter_id");
+
+                    b.HasKey("SuggestionId", "StoryId", "ChapterId");
+
+                    b.HasIndex("ChapterId");
+
+                    b.HasIndex("StoryId");
+
+                    b.ToTable("need_approval", (string)null);
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.Notification", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("notification_id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<string>("Content")
+                        .IsRequired()
+                        .HasColumnType("text")
+                        .HasColumnName("notification_content");
+
+                    b.Property<string>("ContentType")
+                        .IsRequired()
+                        .HasColumnType("text")
+                        .HasColumnName("content_type");
+
+                    b.Property<DateTime>("CreatedAt")
+                        .HasColumnType("timestamp with time zone")
+                        .HasColumnName("notification_created_at");
+
+                    b.Property<bool>("IsRead")
+                        .HasColumnType("boolean")
+                        .HasColumnName("is_read");
+
+                    b.Property<string>("Link")
+                        .HasColumnType("text")
+                        .HasColumnName("link");
+
+                    b.Property<int?>("StoryId")
+                        .HasColumnType("integer")
+                        .HasColumnName("story_id");
+
+                    b.Property<int>("UserId")
+                        .HasColumnType("integer")
+                        .HasColumnName("user_id");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("StoryId");
+
+                    b.HasIndex("UserId");
+
+                    b.ToTable("notification", (string)null);
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.ReadingList", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("list_id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<string>("Content")
+                        .HasColumnType("text")
+                        .HasColumnName("list_content");
+
+                    b.Property<DateTime>("CreatedAt")
+                        .HasColumnType("timestamp with time zone")
+                        .HasColumnName("list_created_at");
+
+                    b.Property<bool>("IsPublic")
+                        .HasColumnType("boolean")
+                        .HasColumnName("is_public");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("text")
+                        .HasColumnName("list_name");
+
+                    b.Property<DateTime>("UpdatedAt")
+                        .HasColumnType("timestamp with time zone")
+                        .HasColumnName("list_updated_at");
+
+                    b.Property<int>("UserId")
+                        .HasColumnType("integer")
+                        .HasColumnName("user_id");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("UserId");
+
+                    b.ToTable("reading_list", (string)null);
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.ReadingListItems", b =>
+                {
+                    b.Property<int>("ListId")
+                        .HasColumnType("integer")
+                        .HasColumnName("list_id");
+
+                    b.Property<int>("StoryId")
+                        .HasColumnType("integer")
+                        .HasColumnName("story_id");
+
+                    b.Property<DateTime>("AddedAt")
+                        .HasColumnType("timestamp with time zone")
+                        .HasColumnName("added_at");
+
+                    b.HasKey("ListId", "StoryId");
+
+                    b.HasIndex("StoryId");
+
+                    b.ToTable("reading_list_items", (string)null);
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.RegularUser", b =>
+                {
+                    b.Property<int>("Id")
+                        .HasColumnType("integer")
+                        .HasColumnName("user_id");
+
+                    b.Property<DateTime>("JoinedAt")
+                        .HasColumnType("timestamp with time zone")
+                        .HasColumnName("joined_at");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("regular_user", (string)null);
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.Story", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("story_id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<string>("Content")
+                        .IsRequired()
+                        .HasColumnType("text")
+                        .HasColumnName("story_content");
+
+                    b.Property<DateTime>("CreatedAt")
+                        .HasColumnType("timestamp with time zone")
+                        .HasColumnName("story_created_at");
+
+                    b.Property<string>("Image")
+                        .HasColumnType("text")
+                        .HasColumnName("image");
+
+                    b.Property<bool>("MatureContent")
+                        .HasColumnType("boolean")
+                        .HasColumnName("mature_content");
+
+                    b.Property<string>("ShortDescription")
+                        .IsRequired()
+                        .HasColumnType("text")
+                        .HasColumnName("short_description");
+
+                    b.Property<string>("Status")
+                        .IsRequired()
+                        .HasColumnType("text")
+                        .HasColumnName("status");
+
+                    b.Property<string>("Title")
+                        .IsRequired()
+                        .HasColumnType("text")
+                        .HasColumnName("title");
+
+                    b.Property<DateTime>("UpdatedAt")
+                        .HasColumnType("timestamp with time zone")
+                        .HasColumnName("story_updated_at");
+
+                    b.Property<int>("UserId")
+                        .HasColumnType("integer")
+                        .HasColumnName("user_id");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("UserId");
+
+                    b.ToTable("story", (string)null);
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.User", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("user_id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<DateTime>("CreatedAt")
+                        .HasColumnType("timestamp with time zone")
+                        .HasColumnName("user_created_at");
+
+                    b.Property<string>("Email")
+                        .IsRequired()
+                        .HasColumnType("text")
+                        .HasColumnName("email");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("text")
+                        .HasColumnName("user_name");
+
+                    b.Property<string>("Password")
+                        .IsRequired()
+                        .HasColumnType("text")
+                        .HasColumnName("password");
+
+                    b.Property<string>("Surname")
+                        .IsRequired()
+                        .HasColumnType("text")
+                        .HasColumnName("surname");
+
+                    b.Property<DateTime>("UpdatedAt")
+                        .HasColumnType("timestamp with time zone")
+                        .HasColumnName("user_updated_at");
+
+                    b.Property<string>("Username")
+                        .IsRequired()
+                        .HasColumnType("text")
+                        .HasColumnName("username");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("users", (string)null);
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.Writer", b =>
+                {
+                    b.Property<int>("Id")
+                        .HasColumnType("integer")
+                        .HasColumnName("user_id");
+
+                    b.Property<string>("Bio")
+                        .HasColumnType("text")
+                        .HasColumnName("bio");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("writer", (string)null);
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.AISuggestion", b =>
+                {
+                    b.HasOne("ChapterX.Domain.Entities.Story", "Story")
+                        .WithMany("AISuggestions")
+                        .HasForeignKey("StoryId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("Story");
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.Admin", b =>
+                {
+                    b.HasOne("ChapterX.Domain.Entities.User", "User")
+                        .WithOne("Admin")
+                        .HasForeignKey("ChapterX.Domain.Entities.Admin", "Id")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("User");
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.Chapter", b =>
+                {
+                    b.HasOne("ChapterX.Domain.Entities.Story", "Story")
+                        .WithMany("Chapters")
+                        .HasForeignKey("StoryId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("Story");
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.Collaboration", b =>
+                {
+                    b.HasOne("ChapterX.Domain.Entities.Story", "Story")
+                        .WithMany("Collaborations")
+                        .HasForeignKey("StoryId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("ChapterX.Domain.Entities.User", "User")
+                        .WithMany("Collaborations")
+                        .HasForeignKey("UserId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("Story");
+
+                    b.Navigation("User");
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.Comment", b =>
+                {
+                    b.HasOne("ChapterX.Domain.Entities.Story", "Story")
+                        .WithMany("Comments")
+                        .HasForeignKey("StoryId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("ChapterX.Domain.Entities.User", "User")
+                        .WithMany("Comments")
+                        .HasForeignKey("UserId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("Story");
+
+                    b.Navigation("User");
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.HasGenre", b =>
+                {
+                    b.HasOne("ChapterX.Domain.Entities.Genre", "Genre")
+                        .WithMany("HasGenres")
+                        .HasForeignKey("GenreId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("ChapterX.Domain.Entities.Story", "Story")
+                        .WithMany("HasGenres")
+                        .HasForeignKey("StoryId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("Genre");
+
+                    b.Navigation("Story");
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.Likes", b =>
+                {
+                    b.HasOne("ChapterX.Domain.Entities.Story", "Story")
+                        .WithMany("Likes")
+                        .HasForeignKey("StoryId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("ChapterX.Domain.Entities.User", "User")
+                        .WithMany("Likes")
+                        .HasForeignKey("UserId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("Story");
+
+                    b.Navigation("User");
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.NeedApproval", b =>
+                {
+                    b.HasOne("ChapterX.Domain.Entities.Chapter", "Chapter")
+                        .WithMany("NeedApprovals")
+                        .HasForeignKey("ChapterId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("ChapterX.Domain.Entities.Story", "Story")
+                        .WithMany("NeedApprovals")
+                        .HasForeignKey("StoryId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("ChapterX.Domain.Entities.AISuggestion", "AISuggestion")
+                        .WithMany("NeedApprovals")
+                        .HasForeignKey("SuggestionId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("AISuggestion");
+
+                    b.Navigation("Chapter");
+
+                    b.Navigation("Story");
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.Notification", b =>
+                {
+                    b.HasOne("ChapterX.Domain.Entities.Story", "Story")
+                        .WithMany("Notifications")
+                        .HasForeignKey("StoryId")
+                        .OnDelete(DeleteBehavior.SetNull);
+
+                    b.HasOne("ChapterX.Domain.Entities.User", "User")
+                        .WithMany("Notifications")
+                        .HasForeignKey("UserId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("Story");
+
+                    b.Navigation("User");
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.ReadingList", b =>
+                {
+                    b.HasOne("ChapterX.Domain.Entities.User", "User")
+                        .WithMany("ReadingLists")
+                        .HasForeignKey("UserId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("User");
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.ReadingListItems", b =>
+                {
+                    b.HasOne("ChapterX.Domain.Entities.ReadingList", "ReadingList")
+                        .WithMany("ReadingListItems")
+                        .HasForeignKey("ListId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("ChapterX.Domain.Entities.Story", "Story")
+                        .WithMany("ReadingListItems")
+                        .HasForeignKey("StoryId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("ReadingList");
+
+                    b.Navigation("Story");
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.RegularUser", b =>
+                {
+                    b.HasOne("ChapterX.Domain.Entities.User", "User")
+                        .WithOne("RegularUser")
+                        .HasForeignKey("ChapterX.Domain.Entities.RegularUser", "Id")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("User");
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.Story", b =>
+                {
+                    b.HasOne("ChapterX.Domain.Entities.Writer", "Writer")
+                        .WithMany("Stories")
+                        .HasForeignKey("UserId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("Writer");
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.Writer", b =>
+                {
+                    b.HasOne("ChapterX.Domain.Entities.User", "User")
+                        .WithOne("Writer")
+                        .HasForeignKey("ChapterX.Domain.Entities.Writer", "Id")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("User");
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.AISuggestion", b =>
+                {
+                    b.Navigation("NeedApprovals");
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.Chapter", b =>
+                {
+                    b.Navigation("NeedApprovals");
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.Genre", b =>
+                {
+                    b.Navigation("HasGenres");
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.ReadingList", b =>
+                {
+                    b.Navigation("ReadingListItems");
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.Story", b =>
+                {
+                    b.Navigation("AISuggestions");
+
+                    b.Navigation("Chapters");
+
+                    b.Navigation("Collaborations");
+
+                    b.Navigation("Comments");
+
+                    b.Navigation("HasGenres");
+
+                    b.Navigation("Likes");
+
+                    b.Navigation("NeedApprovals");
+
+                    b.Navigation("Notifications");
+
+                    b.Navigation("ReadingListItems");
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.User", b =>
+                {
+                    b.Navigation("Admin");
+
+                    b.Navigation("Collaborations");
+
+                    b.Navigation("Comments");
+
+                    b.Navigation("Likes");
+
+                    b.Navigation("Notifications");
+
+                    b.Navigation("ReadingLists");
+
+                    b.Navigation("RegularUser");
+
+                    b.Navigation("Writer");
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.Writer", b =>
+                {
+                    b.Navigation("Stories");
+                });
+#pragma warning restore 612, 618
+        }
+    }
+}
Index: ChapterX.Infrastructure/Migrations/20260824172555_InitialCreate.cs
===================================================================
--- ChapterX.Infrastructure/Migrations/20260824172555_InitialCreate.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
+++ ChapterX.Infrastructure/Migrations/20260824172555_InitialCreate.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -0,0 +1,521 @@
+﻿using System;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
+
+#nullable disable
+
+namespace ChapterX.Infrastructure.Migrations
+{
+    /// <inheritdoc />
+    public partial class InitialCreate : Migration
+    {
+        /// <inheritdoc />
+        protected override void Up(MigrationBuilder migrationBuilder)
+        {
+            migrationBuilder.CreateTable(
+                name: "genre",
+                columns: table => new
+                {
+                    genre_id = table.Column<int>(type: "integer", nullable: false)
+                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+                    genre_name = table.Column<string>(type: "text", nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_genre", x => x.genre_id);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "users",
+                columns: table => new
+                {
+                    user_id = table.Column<int>(type: "integer", nullable: false)
+                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+                    username = table.Column<string>(type: "text", nullable: false),
+                    email = table.Column<string>(type: "text", nullable: false),
+                    user_name = table.Column<string>(type: "text", nullable: false),
+                    surname = table.Column<string>(type: "text", nullable: false),
+                    password = table.Column<string>(type: "text", nullable: false),
+                    user_created_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
+                    user_updated_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_users", x => x.user_id);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "admins",
+                columns: table => new
+                {
+                    user_id = table.Column<int>(type: "integer", nullable: false),
+                    assigned_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_admins", x => x.user_id);
+                    table.ForeignKey(
+                        name: "FK_admins_users_user_id",
+                        column: x => x.user_id,
+                        principalTable: "users",
+                        principalColumn: "user_id",
+                        onDelete: ReferentialAction.Cascade);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "reading_list",
+                columns: table => new
+                {
+                    list_id = table.Column<int>(type: "integer", nullable: false)
+                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+                    list_name = table.Column<string>(type: "text", nullable: false),
+                    list_content = table.Column<string>(type: "text", nullable: true),
+                    is_public = table.Column<bool>(type: "boolean", nullable: false),
+                    list_created_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
+                    list_updated_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
+                    user_id = table.Column<int>(type: "integer", nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_reading_list", x => x.list_id);
+                    table.ForeignKey(
+                        name: "FK_reading_list_users_user_id",
+                        column: x => x.user_id,
+                        principalTable: "users",
+                        principalColumn: "user_id",
+                        onDelete: ReferentialAction.Cascade);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "regular_user",
+                columns: table => new
+                {
+                    user_id = table.Column<int>(type: "integer", nullable: false),
+                    joined_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_regular_user", x => x.user_id);
+                    table.ForeignKey(
+                        name: "FK_regular_user_users_user_id",
+                        column: x => x.user_id,
+                        principalTable: "users",
+                        principalColumn: "user_id",
+                        onDelete: ReferentialAction.Cascade);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "writer",
+                columns: table => new
+                {
+                    user_id = table.Column<int>(type: "integer", nullable: false),
+                    bio = table.Column<string>(type: "text", nullable: true)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_writer", x => x.user_id);
+                    table.ForeignKey(
+                        name: "FK_writer_users_user_id",
+                        column: x => x.user_id,
+                        principalTable: "users",
+                        principalColumn: "user_id",
+                        onDelete: ReferentialAction.Cascade);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "story",
+                columns: table => new
+                {
+                    story_id = table.Column<int>(type: "integer", nullable: false)
+                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+                    mature_content = table.Column<bool>(type: "boolean", nullable: false),
+                    title = table.Column<string>(type: "text", nullable: false),
+                    short_description = table.Column<string>(type: "text", nullable: false),
+                    image = table.Column<string>(type: "text", nullable: true),
+                    story_content = table.Column<string>(type: "text", nullable: false),
+                    status = table.Column<string>(type: "text", nullable: false),
+                    story_created_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
+                    story_updated_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
+                    user_id = table.Column<int>(type: "integer", nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_story", x => x.story_id);
+                    table.ForeignKey(
+                        name: "FK_story_writer_user_id",
+                        column: x => x.user_id,
+                        principalTable: "writer",
+                        principalColumn: "user_id",
+                        onDelete: ReferentialAction.Cascade);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "ai_suggestion",
+                columns: table => new
+                {
+                    suggestion_id = table.Column<int>(type: "integer", nullable: false)
+                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+                    original_text = table.Column<string>(type: "text", nullable: false),
+                    suggested_text = table.Column<string>(type: "text", nullable: false),
+                    suggestion_type = table.Column<string>(type: "text", nullable: false),
+                    accepted = table.Column<bool>(type: "boolean", nullable: true),
+                    suggestion_created_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
+                    applied_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: true),
+                    story_id = table.Column<int>(type: "integer", nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_ai_suggestion", x => x.suggestion_id);
+                    table.ForeignKey(
+                        name: "FK_ai_suggestion_story_story_id",
+                        column: x => x.story_id,
+                        principalTable: "story",
+                        principalColumn: "story_id",
+                        onDelete: ReferentialAction.Cascade);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "chapter",
+                columns: table => new
+                {
+                    chapter_id = table.Column<int>(type: "integer", nullable: false)
+                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+                    chapter_number = table.Column<int>(type: "integer", nullable: false),
+                    chapter_name = table.Column<string>(type: "text", nullable: false),
+                    title = table.Column<string>(type: "text", nullable: false),
+                    chapter_content = table.Column<string>(type: "text", nullable: false),
+                    word_count = table.Column<int>(type: "integer", nullable: true),
+                    rating = table.Column<decimal>(type: "numeric", nullable: true),
+                    published_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
+                    view_count = table.Column<int>(type: "integer", nullable: false),
+                    chapter_created_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
+                    chapter_updated_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
+                    story_id = table.Column<int>(type: "integer", nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_chapter", x => x.chapter_id);
+                    table.ForeignKey(
+                        name: "FK_chapter_story_story_id",
+                        column: x => x.story_id,
+                        principalTable: "story",
+                        principalColumn: "story_id",
+                        onDelete: ReferentialAction.Cascade);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "collaboration",
+                columns: table => new
+                {
+                    user_id = table.Column<int>(type: "integer", nullable: false),
+                    story_id = table.Column<int>(type: "integer", nullable: false),
+                    role = table.Column<string>(type: "text", nullable: false),
+                    permission_level = table.Column<int>(type: "integer", nullable: true),
+                    collab_created_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_collaboration", x => new { x.user_id, x.story_id });
+                    table.ForeignKey(
+                        name: "FK_collaboration_story_story_id",
+                        column: x => x.story_id,
+                        principalTable: "story",
+                        principalColumn: "story_id",
+                        onDelete: ReferentialAction.Cascade);
+                    table.ForeignKey(
+                        name: "FK_collaboration_users_user_id",
+                        column: x => x.user_id,
+                        principalTable: "users",
+                        principalColumn: "user_id",
+                        onDelete: ReferentialAction.Cascade);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "comment",
+                columns: table => new
+                {
+                    comment_id = table.Column<int>(type: "integer", nullable: false)
+                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+                    comment_content = table.Column<string>(type: "text", nullable: false),
+                    comment_created_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
+                    comment_updated_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
+                    user_id = table.Column<int>(type: "integer", nullable: false),
+                    story_id = table.Column<int>(type: "integer", nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_comment", x => x.comment_id);
+                    table.ForeignKey(
+                        name: "FK_comment_story_story_id",
+                        column: x => x.story_id,
+                        principalTable: "story",
+                        principalColumn: "story_id",
+                        onDelete: ReferentialAction.Cascade);
+                    table.ForeignKey(
+                        name: "FK_comment_users_user_id",
+                        column: x => x.user_id,
+                        principalTable: "users",
+                        principalColumn: "user_id",
+                        onDelete: ReferentialAction.Cascade);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "has_genre",
+                columns: table => new
+                {
+                    story_id = table.Column<int>(type: "integer", nullable: false),
+                    genre_id = table.Column<int>(type: "integer", nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_has_genre", x => new { x.story_id, x.genre_id });
+                    table.ForeignKey(
+                        name: "FK_has_genre_genre_genre_id",
+                        column: x => x.genre_id,
+                        principalTable: "genre",
+                        principalColumn: "genre_id",
+                        onDelete: ReferentialAction.Cascade);
+                    table.ForeignKey(
+                        name: "FK_has_genre_story_story_id",
+                        column: x => x.story_id,
+                        principalTable: "story",
+                        principalColumn: "story_id",
+                        onDelete: ReferentialAction.Cascade);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "likes",
+                columns: table => new
+                {
+                    user_id = table.Column<int>(type: "integer", nullable: false),
+                    story_id = table.Column<int>(type: "integer", nullable: false),
+                    liked_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_likes", x => new { x.user_id, x.story_id });
+                    table.ForeignKey(
+                        name: "FK_likes_story_story_id",
+                        column: x => x.story_id,
+                        principalTable: "story",
+                        principalColumn: "story_id",
+                        onDelete: ReferentialAction.Cascade);
+                    table.ForeignKey(
+                        name: "FK_likes_users_user_id",
+                        column: x => x.user_id,
+                        principalTable: "users",
+                        principalColumn: "user_id",
+                        onDelete: ReferentialAction.Cascade);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "notification",
+                columns: table => new
+                {
+                    notification_id = table.Column<int>(type: "integer", nullable: false)
+                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+                    notification_content = table.Column<string>(type: "text", nullable: false),
+                    content_type = table.Column<string>(type: "text", nullable: false),
+                    is_read = table.Column<bool>(type: "boolean", nullable: false),
+                    link = table.Column<string>(type: "text", nullable: true),
+                    notification_created_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
+                    user_id = table.Column<int>(type: "integer", nullable: false),
+                    story_id = table.Column<int>(type: "integer", nullable: true)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_notification", x => x.notification_id);
+                    table.ForeignKey(
+                        name: "FK_notification_story_story_id",
+                        column: x => x.story_id,
+                        principalTable: "story",
+                        principalColumn: "story_id",
+                        onDelete: ReferentialAction.SetNull);
+                    table.ForeignKey(
+                        name: "FK_notification_users_user_id",
+                        column: x => x.user_id,
+                        principalTable: "users",
+                        principalColumn: "user_id",
+                        onDelete: ReferentialAction.Cascade);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "reading_list_items",
+                columns: table => new
+                {
+                    list_id = table.Column<int>(type: "integer", nullable: false),
+                    story_id = table.Column<int>(type: "integer", nullable: false),
+                    added_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_reading_list_items", x => new { x.list_id, x.story_id });
+                    table.ForeignKey(
+                        name: "FK_reading_list_items_reading_list_list_id",
+                        column: x => x.list_id,
+                        principalTable: "reading_list",
+                        principalColumn: "list_id",
+                        onDelete: ReferentialAction.Cascade);
+                    table.ForeignKey(
+                        name: "FK_reading_list_items_story_story_id",
+                        column: x => x.story_id,
+                        principalTable: "story",
+                        principalColumn: "story_id",
+                        onDelete: ReferentialAction.Cascade);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "need_approval",
+                columns: table => new
+                {
+                    suggestion_id = table.Column<int>(type: "integer", nullable: false),
+                    story_id = table.Column<int>(type: "integer", nullable: false),
+                    chapter_id = table.Column<int>(type: "integer", nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_need_approval", x => new { x.suggestion_id, x.story_id, x.chapter_id });
+                    table.ForeignKey(
+                        name: "FK_need_approval_ai_suggestion_suggestion_id",
+                        column: x => x.suggestion_id,
+                        principalTable: "ai_suggestion",
+                        principalColumn: "suggestion_id",
+                        onDelete: ReferentialAction.Cascade);
+                    table.ForeignKey(
+                        name: "FK_need_approval_chapter_chapter_id",
+                        column: x => x.chapter_id,
+                        principalTable: "chapter",
+                        principalColumn: "chapter_id",
+                        onDelete: ReferentialAction.Cascade);
+                    table.ForeignKey(
+                        name: "FK_need_approval_story_story_id",
+                        column: x => x.story_id,
+                        principalTable: "story",
+                        principalColumn: "story_id",
+                        onDelete: ReferentialAction.Cascade);
+                });
+
+            migrationBuilder.CreateIndex(
+                name: "IX_ai_suggestion_story_id",
+                table: "ai_suggestion",
+                column: "story_id");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_chapter_story_id",
+                table: "chapter",
+                column: "story_id");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_collaboration_story_id",
+                table: "collaboration",
+                column: "story_id");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_comment_story_id",
+                table: "comment",
+                column: "story_id");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_comment_user_id",
+                table: "comment",
+                column: "user_id");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_has_genre_genre_id",
+                table: "has_genre",
+                column: "genre_id");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_likes_story_id",
+                table: "likes",
+                column: "story_id");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_need_approval_chapter_id",
+                table: "need_approval",
+                column: "chapter_id");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_need_approval_story_id",
+                table: "need_approval",
+                column: "story_id");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_notification_story_id",
+                table: "notification",
+                column: "story_id");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_notification_user_id",
+                table: "notification",
+                column: "user_id");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_reading_list_user_id",
+                table: "reading_list",
+                column: "user_id");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_reading_list_items_story_id",
+                table: "reading_list_items",
+                column: "story_id");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_story_user_id",
+                table: "story",
+                column: "user_id");
+        }
+
+        /// <inheritdoc />
+        protected override void Down(MigrationBuilder migrationBuilder)
+        {
+            migrationBuilder.DropTable(
+                name: "admins");
+
+            migrationBuilder.DropTable(
+                name: "collaboration");
+
+            migrationBuilder.DropTable(
+                name: "comment");
+
+            migrationBuilder.DropTable(
+                name: "has_genre");
+
+            migrationBuilder.DropTable(
+                name: "likes");
+
+            migrationBuilder.DropTable(
+                name: "need_approval");
+
+            migrationBuilder.DropTable(
+                name: "notification");
+
+            migrationBuilder.DropTable(
+                name: "reading_list_items");
+
+            migrationBuilder.DropTable(
+                name: "regular_user");
+
+            migrationBuilder.DropTable(
+                name: "genre");
+
+            migrationBuilder.DropTable(
+                name: "ai_suggestion");
+
+            migrationBuilder.DropTable(
+                name: "chapter");
+
+            migrationBuilder.DropTable(
+                name: "reading_list");
+
+            migrationBuilder.DropTable(
+                name: "story");
+
+            migrationBuilder.DropTable(
+                name: "writer");
+
+            migrationBuilder.DropTable(
+                name: "users");
+        }
+    }
+}
Index: ChapterX.Infrastructure/Migrations/ApplicationDbContextModelSnapshot.cs
===================================================================
--- ChapterX.Infrastructure/Migrations/ApplicationDbContextModelSnapshot.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.Infrastructure/Migrations/ApplicationDbContextModelSnapshot.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -27,31 +27,39 @@
                     b.Property<int>("Id")
                         .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
+                        .HasColumnType("integer")
+                        .HasColumnName("suggestion_id");
 
                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
 
                     b.Property<bool?>("Accepted")
-                        .HasColumnType("boolean");
+                        .HasColumnType("boolean")
+                        .HasColumnName("accepted");
 
                     b.Property<DateTime?>("AppliedAt")
-                        .HasColumnType("timestamp with time zone");
+                        .HasColumnType("timestamp with time zone")
+                        .HasColumnName("applied_at");
 
                     b.Property<DateTime>("CreatedAt")
-                        .HasColumnType("timestamp with time zone");
+                        .HasColumnType("timestamp with time zone")
+                        .HasColumnName("suggestion_created_at");
 
                     b.Property<string>("OriginalText")
                         .IsRequired()
-                        .HasColumnType("text");
+                        .HasColumnType("text")
+                        .HasColumnName("original_text");
 
                     b.Property<int>("StoryId")
-                        .HasColumnType("integer");
+                        .HasColumnType("integer")
+                        .HasColumnName("story_id");
 
                     b.Property<string>("SuggestedText")
                         .IsRequired()
-                        .HasColumnType("text");
-
-                    b.PrimitiveCollection<int[]>("SuggestionTypes")
-                        .IsRequired()
-                        .HasColumnType("integer[]");
+                        .HasColumnType("text")
+                        .HasColumnName("suggested_text");
+
+                    b.Property<string>("SuggestionType")
+                        .IsRequired()
+                        .HasColumnType("text")
+                        .HasColumnName("suggestion_type");
 
                     b.HasKey("Id");
@@ -59,5 +67,5 @@
                     b.HasIndex("StoryId");
 
-                    b.ToTable("AISuggestions", (string)null);
+                    b.ToTable("ai_suggestion", (string)null);
                 });
 
@@ -65,25 +73,115 @@
                 {
                     b.Property<int>("Id")
+                        .HasColumnType("integer")
+                        .HasColumnName("user_id");
+
+                    b.Property<DateTime>("AssignedAt")
+                        .HasColumnType("timestamp with time zone")
+                        .HasColumnName("assigned_at");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("admins", (string)null);
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.Chapter", b =>
+                {
+                    b.Property<int>("Id")
                         .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
+                        .HasColumnType("integer")
+                        .HasColumnName("chapter_id");
 
                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
 
+                    b.Property<string>("Content")
+                        .IsRequired()
+                        .HasColumnType("text")
+                        .HasColumnName("chapter_content");
+
+                    b.Property<DateTime>("CreatedAt")
+                        .HasColumnType("timestamp with time zone")
+                        .HasColumnName("chapter_created_at");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("text")
+                        .HasColumnName("chapter_name");
+
+                    b.Property<int>("Number")
+                        .HasColumnType("integer")
+                        .HasColumnName("chapter_number");
+
+                    b.Property<DateTime>("PublishedAt")
+                        .HasColumnType("timestamp with time zone")
+                        .HasColumnName("published_at");
+
+                    b.Property<decimal?>("Rating")
+                        .HasColumnType("numeric")
+                        .HasColumnName("rating");
+
+                    b.Property<int>("StoryId")
+                        .HasColumnType("integer")
+                        .HasColumnName("story_id");
+
+                    b.Property<string>("Title")
+                        .IsRequired()
+                        .HasColumnType("text")
+                        .HasColumnName("title");
+
+                    b.Property<DateTime>("UpdatedAt")
+                        .HasColumnType("timestamp with time zone")
+                        .HasColumnName("chapter_updated_at");
+
+                    b.Property<int>("ViewCount")
+                        .HasColumnType("integer")
+                        .HasColumnName("view_count");
+
+                    b.Property<int?>("WordCount")
+                        .HasColumnType("integer")
+                        .HasColumnName("word_count");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("StoryId");
+
+                    b.ToTable("chapter", (string)null);
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.Collaboration", b =>
+                {
                     b.Property<int>("UserId")
-                        .HasColumnType("integer");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("Admins", (string)null);
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Chapter", b =>
+                        .HasColumnType("integer")
+                        .HasColumnName("user_id");
+
+                    b.Property<int>("StoryId")
+                        .HasColumnType("integer")
+                        .HasColumnName("story_id");
+
+                    b.Property<DateTime>("CreatedAt")
+                        .HasColumnType("timestamp with time zone")
+                        .HasColumnName("collab_created_at");
+
+                    b.Property<int?>("PermissionLevel")
+                        .HasColumnType("integer")
+                        .HasColumnName("permission_level");
+
+                    b.Property<string>("Role")
+                        .IsRequired()
+                        .HasColumnType("text")
+                        .HasColumnName("role");
+
+                    b.HasKey("UserId", "StoryId");
+
+                    b.HasIndex("StoryId");
+
+                    b.ToTable("collaboration", (string)null);
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.Comment", b =>
                 {
                     b.Property<int>("Id")
                         .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
+                        .HasColumnType("integer")
+                        .HasColumnName("comment_id");
 
                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
@@ -91,437 +189,338 @@
                     b.Property<string>("Content")
                         .IsRequired()
-                        .HasColumnType("text");
+                        .HasColumnType("text")
+                        .HasColumnName("comment_content");
 
                     b.Property<DateTime>("CreatedAt")
-                        .HasColumnType("timestamp with time zone");
+                        .HasColumnType("timestamp with time zone")
+                        .HasColumnName("comment_created_at");
+
+                    b.Property<int>("StoryId")
+                        .HasColumnType("integer")
+                        .HasColumnName("story_id");
+
+                    b.Property<DateTime>("UpdatedAt")
+                        .HasColumnType("timestamp with time zone")
+                        .HasColumnName("comment_updated_at");
+
+                    b.Property<int>("UserId")
+                        .HasColumnType("integer")
+                        .HasColumnName("user_id");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("StoryId");
+
+                    b.HasIndex("UserId");
+
+                    b.ToTable("comment", (string)null);
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.Genre", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("genre_id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
 
                     b.Property<string>("Name")
                         .IsRequired()
-                        .HasColumnType("text");
-
-                    b.Property<int>("Number")
-                        .HasColumnType("integer");
-
-                    b.Property<DateTime>("PublishedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<decimal?>("Rating")
-                        .HasColumnType("numeric");
-
+                        .HasColumnType("text")
+                        .HasColumnName("genre_name");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("genre", (string)null);
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.HasGenre", b =>
+                {
                     b.Property<int>("StoryId")
-                        .HasColumnType("integer");
+                        .HasColumnType("integer")
+                        .HasColumnName("story_id");
+
+                    b.Property<int>("GenreId")
+                        .HasColumnType("integer")
+                        .HasColumnName("genre_id");
+
+                    b.HasKey("StoryId", "GenreId");
+
+                    b.HasIndex("GenreId");
+
+                    b.ToTable("has_genre", (string)null);
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.Likes", b =>
+                {
+                    b.Property<int>("UserId")
+                        .HasColumnType("integer")
+                        .HasColumnName("user_id");
+
+                    b.Property<int>("StoryId")
+                        .HasColumnType("integer")
+                        .HasColumnName("story_id");
+
+                    b.Property<DateTime>("LikedAt")
+                        .HasColumnType("timestamp with time zone")
+                        .HasColumnName("liked_at");
+
+                    b.HasKey("UserId", "StoryId");
+
+                    b.HasIndex("StoryId");
+
+                    b.ToTable("likes", (string)null);
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.NeedApproval", b =>
+                {
+                    b.Property<int>("SuggestionId")
+                        .HasColumnType("integer")
+                        .HasColumnName("suggestion_id");
+
+                    b.Property<int>("StoryId")
+                        .HasColumnType("integer")
+                        .HasColumnName("story_id");
+
+                    b.Property<int>("ChapterId")
+                        .HasColumnType("integer")
+                        .HasColumnName("chapter_id");
+
+                    b.HasKey("SuggestionId", "StoryId", "ChapterId");
+
+                    b.HasIndex("ChapterId");
+
+                    b.HasIndex("StoryId");
+
+                    b.ToTable("need_approval", (string)null);
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.Notification", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("notification_id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<string>("Content")
+                        .IsRequired()
+                        .HasColumnType("text")
+                        .HasColumnName("notification_content");
+
+                    b.Property<string>("ContentType")
+                        .IsRequired()
+                        .HasColumnType("text")
+                        .HasColumnName("content_type");
+
+                    b.Property<DateTime>("CreatedAt")
+                        .HasColumnType("timestamp with time zone")
+                        .HasColumnName("notification_created_at");
+
+                    b.Property<bool>("IsRead")
+                        .HasColumnType("boolean")
+                        .HasColumnName("is_read");
+
+                    b.Property<string>("Link")
+                        .HasColumnType("text")
+                        .HasColumnName("link");
+
+                    b.Property<int?>("StoryId")
+                        .HasColumnType("integer")
+                        .HasColumnName("story_id");
+
+                    b.Property<int>("UserId")
+                        .HasColumnType("integer")
+                        .HasColumnName("user_id");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("StoryId");
+
+                    b.HasIndex("UserId");
+
+                    b.ToTable("notification", (string)null);
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.ReadingList", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("list_id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<string>("Content")
+                        .HasColumnType("text")
+                        .HasColumnName("list_content");
+
+                    b.Property<DateTime>("CreatedAt")
+                        .HasColumnType("timestamp with time zone")
+                        .HasColumnName("list_created_at");
+
+                    b.Property<bool>("IsPublic")
+                        .HasColumnType("boolean")
+                        .HasColumnName("is_public");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("text")
+                        .HasColumnName("list_name");
+
+                    b.Property<DateTime>("UpdatedAt")
+                        .HasColumnType("timestamp with time zone")
+                        .HasColumnName("list_updated_at");
+
+                    b.Property<int>("UserId")
+                        .HasColumnType("integer")
+                        .HasColumnName("user_id");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("UserId");
+
+                    b.ToTable("reading_list", (string)null);
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.ReadingListItems", b =>
+                {
+                    b.Property<int>("ListId")
+                        .HasColumnType("integer")
+                        .HasColumnName("list_id");
+
+                    b.Property<int>("StoryId")
+                        .HasColumnType("integer")
+                        .HasColumnName("story_id");
+
+                    b.Property<DateTime>("AddedAt")
+                        .HasColumnType("timestamp with time zone")
+                        .HasColumnName("added_at");
+
+                    b.HasKey("ListId", "StoryId");
+
+                    b.HasIndex("StoryId");
+
+                    b.ToTable("reading_list_items", (string)null);
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.RegularUser", b =>
+                {
+                    b.Property<int>("Id")
+                        .HasColumnType("integer")
+                        .HasColumnName("user_id");
+
+                    b.Property<DateTime>("JoinedAt")
+                        .HasColumnType("timestamp with time zone")
+                        .HasColumnName("joined_at");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("regular_user", (string)null);
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.Story", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer")
+                        .HasColumnName("story_id");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<string>("Content")
+                        .IsRequired()
+                        .HasColumnType("text")
+                        .HasColumnName("story_content");
+
+                    b.Property<DateTime>("CreatedAt")
+                        .HasColumnType("timestamp with time zone")
+                        .HasColumnName("story_created_at");
+
+                    b.Property<string>("Image")
+                        .HasColumnType("text")
+                        .HasColumnName("image");
+
+                    b.Property<bool>("MatureContent")
+                        .HasColumnType("boolean")
+                        .HasColumnName("mature_content");
+
+                    b.Property<string>("ShortDescription")
+                        .IsRequired()
+                        .HasColumnType("text")
+                        .HasColumnName("short_description");
+
+                    b.Property<string>("Status")
+                        .IsRequired()
+                        .HasColumnType("text")
+                        .HasColumnName("status");
 
                     b.Property<string>("Title")
                         .IsRequired()
-                        .HasColumnType("text");
+                        .HasColumnType("text")
+                        .HasColumnName("title");
 
                     b.Property<DateTime>("UpdatedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<int>("ViewCount")
-                        .HasColumnType("integer");
-
-                    b.Property<int?>("WordCount")
-                        .HasColumnType("integer");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("StoryId");
-
-                    b.ToTable("Chapters", (string)null);
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Collaboration", b =>
+                        .HasColumnType("timestamp with time zone")
+                        .HasColumnName("story_updated_at");
+
+                    b.Property<int>("UserId")
+                        .HasColumnType("integer")
+                        .HasColumnName("user_id");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("UserId");
+
+                    b.ToTable("story", (string)null);
+                });
+
+            modelBuilder.Entity("ChapterX.Domain.Entities.User", b =>
                 {
                     b.Property<int>("Id")
                         .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
+                        .HasColumnType("integer")
+                        .HasColumnName("user_id");
 
                     NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
 
-                    b.Property<DateTime>("JoinedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<string>("Role")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.Property<int>("StoryId")
-                        .HasColumnType("integer");
-
-                    b.Property<int>("UserId")
-                        .HasColumnType("integer");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("StoryId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Collaborations", (string)null);
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Comment", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
-
-                    b.Property<string>("Content")
-                        .IsRequired()
-                        .HasColumnType("text");
-
                     b.Property<DateTime>("CreatedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<int>("StoryId")
-                        .HasColumnType("integer");
+                        .HasColumnType("timestamp with time zone")
+                        .HasColumnName("user_created_at");
+
+                    b.Property<string>("Email")
+                        .IsRequired()
+                        .HasColumnType("text")
+                        .HasColumnName("email");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("text")
+                        .HasColumnName("user_name");
+
+                    b.Property<string>("Password")
+                        .IsRequired()
+                        .HasColumnType("text")
+                        .HasColumnName("password");
+
+                    b.Property<string>("Surname")
+                        .IsRequired()
+                        .HasColumnType("text")
+                        .HasColumnName("surname");
 
                     b.Property<DateTime>("UpdatedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<int>("UserId")
-                        .HasColumnType("integer");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("StoryId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Comments", (string)null);
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Genre", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
-
-                    b.Property<string>("Name")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Genres", (string)null);
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.HasGenre", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
-
-                    b.Property<int>("GenreId")
-                        .HasColumnType("integer");
-
-                    b.Property<int>("StoryId")
-                        .HasColumnType("integer");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("GenreId");
-
-                    b.HasIndex("StoryId");
-
-                    b.ToTable("HasGenres", (string)null);
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Likes", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
-
-                    b.Property<int>("ChapterId")
-                        .HasColumnType("integer");
-
-                    b.Property<DateTime>("CreatedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<int?>("StoryId")
-                        .HasColumnType("integer");
-
-                    b.Property<int>("UserId")
-                        .HasColumnType("integer");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ChapterId");
-
-                    b.HasIndex("StoryId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Likes", (string)null);
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.NeedApproval", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
-
-                    b.Property<int?>("AISuggestionId")
-                        .HasColumnType("integer");
-
-                    b.Property<int>("AdminId")
-                        .HasColumnType("integer");
-
-                    b.Property<bool>("Approved")
-                        .HasColumnType("boolean");
-
-                    b.Property<int?>("ChapterId")
-                        .HasColumnType("integer");
-
-                    b.Property<DateTime>("RequestedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<int>("StoryId")
-                        .HasColumnType("integer");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("AISuggestionId");
-
-                    b.HasIndex("AdminId");
-
-                    b.HasIndex("ChapterId");
-
-                    b.HasIndex("StoryId");
-
-                    b.ToTable("NeedApprovals", (string)null);
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Notification", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
-
-                    b.Property<string>("Content")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.PrimitiveCollection<int[]>("ContentTypes")
-                        .IsRequired()
-                        .HasColumnType("integer[]");
-
-                    b.Property<DateTime>("CreatedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<bool>("IsRead")
-                        .HasColumnType("boolean");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Notifications", (string)null);
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Notify", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
-
-                    b.Property<bool>("IsRead")
-                        .HasColumnType("boolean");
-
-                    b.Property<int>("NotificationId")
-                        .HasColumnType("integer");
-
-                    b.Property<int?>("StoryId")
-                        .HasColumnType("integer");
-
-                    b.Property<int>("UserId")
-                        .HasColumnType("integer");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("NotificationId");
-
-                    b.HasIndex("StoryId");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("Notifies", (string)null);
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.ReadingList", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
-
-                    b.Property<string>("Content")
-                        .HasColumnType("text");
-
-                    b.Property<DateTime>("CreatedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<bool>("IsPublic")
-                        .HasColumnType("boolean");
-
-                    b.Property<string>("Name")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.Property<DateTime>("UpdatedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<int>("UserId")
-                        .HasColumnType("integer");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId");
-
-                    b.ToTable("ReadingLists", (string)null);
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.ReadingListItems", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
-
-                    b.Property<DateTime>("AddedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<int>("ReadingListId")
-                        .HasColumnType("integer");
-
-                    b.Property<int>("StoryId")
-                        .HasColumnType("integer");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("ReadingListId");
-
-                    b.HasIndex("StoryId");
-
-                    b.ToTable("ReadingListItems", (string)null);
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.RegularUser", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
-
-                    b.Property<int>("UserId")
-                        .HasColumnType("integer");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("RegularUsers", (string)null);
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.Story", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
-
-                    b.Property<string>("Content")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.Property<DateTime>("CreatedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<string>("Image")
-                        .HasColumnType("text");
-
-                    b.Property<bool>("MatureContent")
-                        .HasColumnType("boolean");
-
-                    b.Property<string>("ShortDescription")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.PrimitiveCollection<int[]>("Statuses")
-                        .IsRequired()
-                        .HasColumnType("integer[]");
-
-                    b.Property<DateTime>("UpdatedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<int>("UserId")
-                        .HasColumnType("integer");
-
-                    b.Property<int>("WriterId")
-                        .HasColumnType("integer");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("WriterId");
-
-                    b.ToTable("Stories", (string)null);
-                });
-
-            modelBuilder.Entity("ChapterX.Domain.Entities.User", b =>
-                {
-                    b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
-
-                    b.Property<DateTime>("CreatedAt")
-                        .HasColumnType("timestamp with time zone");
-
-                    b.Property<string>("Email")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.Property<string>("Name")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.Property<string>("Password")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.Property<string>("Surname")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.Property<DateTime>("UpdatedAt")
-                        .HasColumnType("timestamp with time zone");
+                        .HasColumnType("timestamp with time zone")
+                        .HasColumnName("user_updated_at");
 
                     b.Property<string>("Username")
                         .IsRequired()
-                        .HasColumnType("text");
-
-                    b.HasKey("Id");
-
-                    b.ToTable("Users", (string)null);
+                        .HasColumnType("text")
+                        .HasColumnName("username");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("users", (string)null);
                 });
 
@@ -529,22 +528,14 @@
                 {
                     b.Property<int>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnType("integer");
-
-                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+                        .HasColumnType("integer")
+                        .HasColumnName("user_id");
 
                     b.Property<string>("Bio")
-                        .IsRequired()
-                        .HasColumnType("text");
-
-                    b.Property<int>("UserId")
-                        .HasColumnType("integer");
-
-                    b.HasKey("Id");
-
-                    b.HasIndex("UserId")
-                        .IsUnique();
-
-                    b.ToTable("Writers", (string)null);
+                        .HasColumnType("text")
+                        .HasColumnName("bio");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("writer", (string)null);
                 });
 
@@ -564,5 +555,5 @@
                     b.HasOne("ChapterX.Domain.Entities.User", "User")
                         .WithOne("Admin")
-                        .HasForeignKey("ChapterX.Domain.Entities.Admin", "UserId")
+                        .HasForeignKey("ChapterX.Domain.Entities.Admin", "Id")
                         .OnDelete(DeleteBehavior.Cascade)
                         .IsRequired();
@@ -641,13 +632,9 @@
             modelBuilder.Entity("ChapterX.Domain.Entities.Likes", b =>
                 {
-                    b.HasOne("ChapterX.Domain.Entities.Chapter", "Chapter")
-                        .WithMany()
-                        .HasForeignKey("ChapterId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.HasOne("ChapterX.Domain.Entities.Story", null)
+                    b.HasOne("ChapterX.Domain.Entities.Story", "Story")
                         .WithMany("Likes")
-                        .HasForeignKey("StoryId");
+                        .HasForeignKey("StoryId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
 
                     b.HasOne("ChapterX.Domain.Entities.User", "User")
@@ -657,5 +644,5 @@
                         .IsRequired();
 
-                    b.Navigation("Chapter");
+                    b.Navigation("Story");
 
                     b.Navigation("User");
@@ -664,17 +651,9 @@
             modelBuilder.Entity("ChapterX.Domain.Entities.NeedApproval", b =>
                 {
-                    b.HasOne("ChapterX.Domain.Entities.AISuggestion", null)
+                    b.HasOne("ChapterX.Domain.Entities.Chapter", "Chapter")
                         .WithMany("NeedApprovals")
-                        .HasForeignKey("AISuggestionId");
-
-                    b.HasOne("ChapterX.Domain.Entities.Admin", "Admin")
-                        .WithMany()
-                        .HasForeignKey("AdminId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.HasOne("ChapterX.Domain.Entities.Chapter", null)
-                        .WithMany("NeedApprovals")
-                        .HasForeignKey("ChapterId");
+                        .HasForeignKey("ChapterId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
 
                     b.HasOne("ChapterX.Domain.Entities.Story", "Story")
@@ -684,28 +663,31 @@
                         .IsRequired();
 
-                    b.Navigation("Admin");
+                    b.HasOne("ChapterX.Domain.Entities.AISuggestion", "AISuggestion")
+                        .WithMany("NeedApprovals")
+                        .HasForeignKey("SuggestionId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("AISuggestion");
+
+                    b.Navigation("Chapter");
 
                     b.Navigation("Story");
                 });
 
-            modelBuilder.Entity("ChapterX.Domain.Entities.Notify", b =>
-                {
-                    b.HasOne("ChapterX.Domain.Entities.Notification", "Notification")
-                        .WithMany("Notifies")
-                        .HasForeignKey("NotificationId")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-
-                    b.HasOne("ChapterX.Domain.Entities.Story", null)
-                        .WithMany("Notifies")
-                        .HasForeignKey("StoryId");
+            modelBuilder.Entity("ChapterX.Domain.Entities.Notification", b =>
+                {
+                    b.HasOne("ChapterX.Domain.Entities.Story", "Story")
+                        .WithMany("Notifications")
+                        .HasForeignKey("StoryId")
+                        .OnDelete(DeleteBehavior.SetNull);
 
                     b.HasOne("ChapterX.Domain.Entities.User", "User")
-                        .WithMany("Notifies")
+                        .WithMany("Notifications")
                         .HasForeignKey("UserId")
                         .OnDelete(DeleteBehavior.Cascade)
                         .IsRequired();
 
-                    b.Navigation("Notification");
+                    b.Navigation("Story");
 
                     b.Navigation("User");
@@ -727,5 +709,5 @@
                     b.HasOne("ChapterX.Domain.Entities.ReadingList", "ReadingList")
                         .WithMany("ReadingListItems")
-                        .HasForeignKey("ReadingListId")
+                        .HasForeignKey("ListId")
                         .OnDelete(DeleteBehavior.Cascade)
                         .IsRequired();
@@ -746,5 +728,5 @@
                     b.HasOne("ChapterX.Domain.Entities.User", "User")
                         .WithOne("RegularUser")
-                        .HasForeignKey("ChapterX.Domain.Entities.RegularUser", "UserId")
+                        .HasForeignKey("ChapterX.Domain.Entities.RegularUser", "Id")
                         .OnDelete(DeleteBehavior.Cascade)
                         .IsRequired();
@@ -757,5 +739,5 @@
                     b.HasOne("ChapterX.Domain.Entities.Writer", "Writer")
                         .WithMany("Stories")
-                        .HasForeignKey("WriterId")
+                        .HasForeignKey("UserId")
                         .OnDelete(DeleteBehavior.Cascade)
                         .IsRequired();
@@ -768,5 +750,5 @@
                     b.HasOne("ChapterX.Domain.Entities.User", "User")
                         .WithOne("Writer")
-                        .HasForeignKey("ChapterX.Domain.Entities.Writer", "UserId")
+                        .HasForeignKey("ChapterX.Domain.Entities.Writer", "Id")
                         .OnDelete(DeleteBehavior.Cascade)
                         .IsRequired();
@@ -790,9 +772,4 @@
                 });
 
-            modelBuilder.Entity("ChapterX.Domain.Entities.Notification", b =>
-                {
-                    b.Navigation("Notifies");
-                });
-
             modelBuilder.Entity("ChapterX.Domain.Entities.ReadingList", b =>
                 {
@@ -816,5 +793,5 @@
                     b.Navigation("NeedApprovals");
 
-                    b.Navigation("Notifies");
+                    b.Navigation("Notifications");
 
                     b.Navigation("ReadingListItems");
@@ -831,5 +808,5 @@
                     b.Navigation("Likes");
 
-                    b.Navigation("Notifies");
+                    b.Navigation("Notifications");
 
                     b.Navigation("ReadingLists");
Index: ChapterX.Infrastructure/Repositories/AISuggestionRepository.cs
===================================================================
--- ChapterX.Infrastructure/Repositories/AISuggestionRepository.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.Infrastructure/Repositories/AISuggestionRepository.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -21,5 +21,4 @@
         {
             return await _dbSet
-                .Include(a => a.SuggestionTypes)
                 .Where(a => a.NeedApprovals.Any(na => na.ChapterId == chapterId))
                 .ToListAsync(cancellationToken);
Index: apterX.Infrastructure/Repositories/ContentTypeRepository.cs
===================================================================
--- ChapterX.Infrastructure/Repositories/ContentTypeRepository.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,16 +1,0 @@
-using ChapterX.Domain.Entities;
-using ChapterX.Domain.Repositories;
-using ChapterX.Infrastructure.Data.DataContext;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace ChapterX.Infrastructure.Repositories
-{
-    public class ContentTypeRepository : GenericRepository<ContentType>, IContentTypeRepository
-    {
-        public ContentTypeRepository(ApplicationDbContext context) : base(context) { }
-    }
-}
Index: ChapterX.Infrastructure/Repositories/NotificationRepository.cs
===================================================================
--- ChapterX.Infrastructure/Repositories/NotificationRepository.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ ChapterX.Infrastructure/Repositories/NotificationRepository.cs	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -12,9 +12,7 @@
         }
 
-        // Currently Notification is not linked directly to a User entity.
-        // This method returns all notifications; adjust filter when a User relation is added.
         public async Task<IEnumerable<Notification>> GetByUserIdAsync(int userId, CancellationToken cancellationToken = default)
             => await _dbSet
-                .Where(n => n.RecipientUserId == userId)
+                .Where(n => n.UserId == userId)
                 .OrderByDescending(n => n.CreatedAt)
                 .ToListAsync(cancellationToken);
Index: apterX.Infrastructure/Repositories/NotifyRepository.cs
===================================================================
--- ChapterX.Infrastructure/Repositories/NotifyRepository.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,18 +1,0 @@
-using ChapterX.Domain.Entities;
-using ChapterX.Domain.Repositories;
-using ChapterX.Infrastructure.Data.DataContext;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace ChapterX.Infrastructure.Repositories
-{
-    public class NotifyRepository : GenericRepository<Notify>, INotifyRepository
-    {
-        public NotifyRepository(ApplicationDbContext context) : base(context)
-        {
-        }
-    }
-}
Index: apterX.Infrastructure/Repositories/PermissionLevelRepository.cs
===================================================================
--- ChapterX.Infrastructure/Repositories/PermissionLevelRepository.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,16 +1,0 @@
-using ChapterX.Domain.Entities;
-using ChapterX.Domain.Repositories;
-using ChapterX.Infrastructure.Data.DataContext;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace ChapterX.Infrastructure.Repositories
-{
-    public class PermissionLevelRepository : GenericRepository<PermissionLevel>, IPermissionLevelRepository
-    {
-        public PermissionLevelRepository(ApplicationDbContext context) : base(context) { }
-    }
-}
Index: apterX.Infrastructure/Repositories/RolesRepository.cs
===================================================================
--- ChapterX.Infrastructure/Repositories/RolesRepository.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,16 +1,0 @@
-using ChapterX.Domain.Entities;
-using ChapterX.Domain.Repositories;
-using ChapterX.Infrastructure.Data.DataContext;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace ChapterX.Infrastructure.Repositories
-{
-    public class RolesRepository : GenericRepository<Roles>, IRolesRepository
-    {
-        public RolesRepository(ApplicationDbContext context) : base(context) { }
-    }
-}
Index: apterX.Infrastructure/Repositories/StatusRepository.cs
===================================================================
--- ChapterX.Infrastructure/Repositories/StatusRepository.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,16 +1,0 @@
-using ChapterX.Domain.Entities;
-using ChapterX.Domain.Repositories;
-using ChapterX.Infrastructure.Data.DataContext;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace ChapterX.Infrastructure.Repositories
-{
-    public class StatusRepository : GenericRepository<Status>, IStatusRepository
-    {
-        public StatusRepository(ApplicationDbContext context) : base(context) { }
-    }
-}
Index: apterX.Infrastructure/Repositories/SuggestionTypeRepository.cs
===================================================================
--- ChapterX.Infrastructure/Repositories/SuggestionTypeRepository.cs	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ 	(revision )
@@ -1,16 +1,0 @@
-using ChapterX.Domain.Entities;
-using ChapterX.Domain.Repositories;
-using ChapterX.Infrastructure.Data.DataContext;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace ChapterX.Infrastructure.Repositories
-{
-    // SuggestionType is an enum; this repository is kept only as a marker and does not use GenericRepository.
-    public class SuggestionTypeRepository : ISuggestionTypeRepository
-    {
-    }
-}
Index: chapterx-frontend/src/components/admin/ContentModerationTable.tsx
===================================================================
--- chapterx-frontend/src/components/admin/ContentModerationTable.tsx	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ chapterx-frontend/src/components/admin/ContentModerationTable.tsx	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -20,8 +20,7 @@
     deleteStory(story.story_id)
     addNotification({
-      user_id: story.user_id,
-      type: 'system',
-      title: 'Story Removed',
-      message: `Your story "${story.title}" has been removed by an administrator.`,
+      userId: story.user_id,
+      contentType: 'system',
+      content: `Your story "${story.title}" has been removed by an administrator.`,
     })
     addToast(`"${story.title}" removed from platform`, 'info')
Index: chapterx-frontend/src/components/story/CommentSection.tsx
===================================================================
--- chapterx-frontend/src/components/story/CommentSection.tsx	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ chapterx-frontend/src/components/story/CommentSection.tsx	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -80,7 +80,8 @@
       if (currentUser.user_id !== authorUserId) {
         await addNotification({
-          recipientUserId: authorUserId,
-          type: 'comment',
+          userId: authorUserId,
+          contentType: 'comment',
           content: `${currentUser.username} commented: "${text.trim().slice(0, 60)}${text.length > 60 ? '...' : ''}"`,
+          storyId,
           link: `/story/${storyId}`,
         })
Index: chapterx-frontend/src/components/story/LikeButton.tsx
===================================================================
--- chapterx-frontend/src/components/story/LikeButton.tsx	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ chapterx-frontend/src/components/story/LikeButton.tsx	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -59,7 +59,8 @@
         if (currentUser.user_id !== authorUserId) {
           await addNotification({
-            recipientUserId: authorUserId,
-            type: 'like',
+            userId: authorUserId,
+            contentType: 'like',
             content: `${currentUser.username} liked your story.`,
+            storyId,
             link: `/story/${storyId}`,
           })
Index: chapterx-frontend/src/components/writer/CollaboratorManager.tsx
===================================================================
--- chapterx-frontend/src/components/writer/CollaboratorManager.tsx	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ chapterx-frontend/src/components/writer/CollaboratorManager.tsx	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -62,7 +62,8 @@
     addCollaboration(newCollab)
     addNotification({
-      recipientUserId: user.user_id,
-      type: 'collaboration',
+      userId: user.user_id,
+      contentType: 'collaboration',
       content: `You've been invited to collaborate on "${storyTitle}" as ${selectedRole}.`,
+      storyId,
       link: `/story/${storyId}`,
     })
Index: chapterx-frontend/src/store/notificationStore.ts
===================================================================
--- chapterx-frontend/src/store/notificationStore.ts	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ chapterx-frontend/src/store/notificationStore.ts	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -17,5 +17,5 @@
   notifications: Notification[]
   fetchUserNotifications: (userId: number) => Promise<void>
-  addNotification: (n: { recipientUserId: number; type: string; content: string; link?: string }) => Promise<void>
+  addNotification: (n: { userId: number; contentType: string; content: string; storyId?: number; link?: string }) => Promise<void>
   markAllRead: () => Promise<void>
   markRead: (id: number) => Promise<void>
@@ -33,6 +33,6 @@
         notification_id: n.id,
         user_id: userId,
-        type: n.type ?? 'info',
-        title: n.type ?? 'Notification',
+        type: n.contentType ?? 'info',
+        title: n.contentType ?? 'Notification',
         message: n.content,
         link: n.link,
@@ -46,10 +46,11 @@
   },
 
-  addNotification: async ({ recipientUserId, type, content, link }) => {
+  addNotification: async ({ userId, contentType, content, storyId, link }) => {
     try {
       await axios.post(`${API}/notifications`, {
         content,
-        recipientUserId,
-        type,
+        contentType,
+        userId,
+        storyId,
         link,
       }, { headers: getAuthHeaders() })
Index: chapterx-frontend/src/store/storyStore.ts
===================================================================
--- chapterx-frontend/src/store/storyStore.ts	(revision a6e33d1f34c0dbbfff38bfb2c73eea32abfe7cff)
+++ chapterx-frontend/src/store/storyStore.ts	(revision e882b92860e1899312f197af1134bb0f33d30d15)
@@ -144,5 +144,5 @@
         cover_image: s.image ?? undefined,
         mature_content: s.matureContent,
-        status: 'published' as StoryStatus,
+        status: (s.status ?? 'draft') as StoryStatus,
         author_username: s.writer?.user?.username ?? '',
         created_at: s.createdAt,
@@ -193,6 +193,6 @@
         name: c.name ?? c.username ?? '',
         story_title: '',
-        role: 'editor' as any,
-        permission_level: 3 as any,
+        role: c.role as any,
+        permission_level: (c.permissionLevel ?? 3) as any,
         joined_at: c.createdAt,
       }))
@@ -246,4 +246,5 @@
         image: imageUrl,
         content: partial.content ?? story.content,
+        status: partial.status ?? story.status,
       }, { headers: getAuthHeaders() })
     } catch {
@@ -266,10 +267,12 @@
   },
 
-  updateStoryStatus: (id, status) =>
+  updateStoryStatus: (id, status) => {
     set(state => ({
       stories: state.stories.map(s =>
         s.story_id === id ? { ...s, status, updated_at: new Date().toISOString() } : s
       ),
-    })),
+    }))
+    get().updateStory(id, { status })
+  },
 
   addChapter: async (chapter) => {
@@ -407,4 +410,5 @@
         storyId: collab.story_id,
         role: collab.role,
+        permissionLevel: collab.permission_level,
       }, { headers: getAuthHeaders() })
     } catch {
@@ -445,6 +449,8 @@
         original_text: s.originalText,
         suggested_text: s.suggestedText,
-        suggestion_type: (s.suggestionTypes?.[0] ?? 'style') as SuggestionType,
+        suggestion_type: (s.suggestionType ?? 'style') as SuggestionType,
+        explanation: s.explanation ?? '',
         accepted: s.accepted === true ? true : s.accepted === false ? false : null,
+        created_at: s.createdAt ?? new Date().toISOString(),
         applied_at: s.appliedAt ?? undefined,
       }))
@@ -506,4 +512,5 @@
         originalText: suggestion.original_text,
         suggestedText: suggestion.suggested_text,
+        suggestionType: suggestion.suggestion_type,
         storyId: suggestion.chapter_id,
       }, { headers: getAuthHeaders() })
