using GozareshgirProgramManager.Application._Common.Models; using GozareshgirProgramManager.Application.Modules.TaskChat.Commands.DeleteMessage; using GozareshgirProgramManager.Application.Modules.TaskChat.Commands.EditMessage; using GozareshgirProgramManager.Application.Modules.TaskChat.Commands.PinMessage; using GozareshgirProgramManager.Application.Modules.TaskChat.Commands.SendMessage; using GozareshgirProgramManager.Application.Modules.TaskChat.Commands.UnpinMessage; using GozareshgirProgramManager.Application.Modules.TaskChat.DTOs; using GozareshgirProgramManager.Application.Modules.TaskChat.Queries.GetMessages; using GozareshgirProgramManager.Application.Modules.TaskChat.Queries.GetPinnedMessages; using GozareshgirProgramManager.Application.Modules.TaskChat.Queries.SearchMessages; using GozareshgirProgramManager.Domain.TaskChatAgg.Enums; using MediatR; using Microsoft.AspNetCore.Mvc; using ServiceHost.BaseControllers; namespace ServiceHost.Areas.Admin.Controllers.ProgramManager; /// /// کنترلر مدیریت چت تسک /// public class TaskChatController : ProgramManagerBaseController { private readonly IMediator _mediator; public TaskChatController(IMediator mediator) { _mediator = mediator; } /// /// دریافت لیست پیام‌های یک تسک /// /// شناسه تسک /// نوع پیام /// صفحه (پیش‌فرض: 1) /// تعداد در هر صفحه (پیش‌فرض: 50) [HttpGet("{taskId:guid}/messages")] public async Task>>> GetMessages( Guid taskId, [FromQuery] MessageType? messageType, [FromQuery] int page = 1, [FromQuery] int pageSize = 50) { var query = new GetMessagesQuery(taskId,messageType, page, pageSize); var result = await _mediator.Send(query); return result; } /// /// دریافت پیام‌های پین شده یک تسک /// /// شناسه تسک [HttpGet("{taskId:guid}/messages/pinned")] public async Task>>> GetPinnedMessages(Guid taskId) { var query = new GetPinnedMessagesQuery(taskId); var result = await _mediator.Send(query); return result; } /// /// جستجو در پیام‌های یک تسک /// /// شناسه تسک /// متن جستجو /// صفحه /// تعداد در هر صفحه [HttpGet("{taskId:guid}/messages/search")] public async Task>>> SearchMessages( Guid taskId, [FromQuery] string search, [FromQuery] int page = 1, [FromQuery] int pageSize = 20) { var query = new SearchMessagesQuery(taskId, search, page, pageSize); var result = await _mediator.Send(query); return result; } /// /// ارسال پیام جدید (با یا بدون فایل) /// [HttpPost("messages")] public async Task>> SendMessage( [FromForm] SendMessageCommand command) { var result = await _mediator.Send(command); return result; } /// /// ویرایش پیام (فقط متن) /// /// شناسه پیام /// محتوای جدید [HttpPut("messages/{messageId:guid}")] public async Task> EditMessage( Guid messageId, [FromBody] EditMessageRequest request) { var command = new EditMessageCommand(messageId, request.NewTextContent); var result = await _mediator.Send(command); return result; } /// /// حذف پیام /// /// شناسه پیام [HttpDelete("messages/{messageId:guid}")] public async Task> DeleteMessage(Guid messageId) { var command = new DeleteMessageCommand(messageId); var result = await _mediator.Send(command); return result; } /// /// پین کردن پیام /// /// شناسه پیام [HttpPost("messages/{messageId:guid}/pin")] public async Task> PinMessage(Guid messageId) { var command = new PinMessageCommand(messageId); var result = await _mediator.Send(command); return result; } /// /// برداشتن پین پیام /// /// شناسه پیام [HttpPost("messages/{messageId:guid}/unpin")] public async Task> UnpinMessage(Guid messageId) { var command = new UnpinMessageCommand(messageId); var result = await _mediator.Send(command); return result; } } public class EditMessageRequest { public string NewTextContent { get; set; } = string.Empty; }