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;
}