- MessageInfoResponseDto에 service_name, service_code, created_by_name, latest_send_status 추가 - MessagePreviewRequestDto/ResponseDto에 JsonPropertyName snake_case 적용 - MessagePreviewResponseDto에 link_type 필드 추가 - Repository에 GetByMessageCodeWithDetailsAsync (Navigation Include), GetSendStatsAsync 추가 - MessageService.GetInfoAsync에서 서비스/작성자/발송상태 매핑 - MessageService.PreviewAsync에서 link_type 반환 Closes #226
32 lines
1.4 KiB
C#
32 lines
1.4 KiB
C#
using System.Linq.Expressions;
|
|
using SPMS.Domain.Entities;
|
|
|
|
namespace SPMS.Domain.Interfaces;
|
|
|
|
public interface IMessageRepository : IRepository<Message>
|
|
{
|
|
Task<Message?> GetByMessageCodeAsync(string messageCode);
|
|
Task<Message?> GetByMessageCodeAndServiceAsync(string messageCode, long serviceId);
|
|
Task<int> GetTodaySequenceAsync(long serviceId);
|
|
Task<(IReadOnlyList<Message> Items, int TotalCount)> GetPagedByServiceAsync(
|
|
long serviceId, int page, int size,
|
|
Expression<Func<Message, bool>>? predicate = null);
|
|
Task<(IReadOnlyList<MessageListProjection> Items, int TotalCount)> GetPagedForListAsync(
|
|
long? serviceId, int page, int size,
|
|
string? keyword = null, bool? isActive = null, string? sendStatus = null);
|
|
Task<Message?> GetByMessageCodeWithDetailsAsync(string messageCode, long serviceId);
|
|
Task<(int TotalSendCount, int SuccessCount)> GetSendStatsAsync(long messageId);
|
|
}
|
|
|
|
public class MessageListProjection
|
|
{
|
|
public string MessageCode { get; set; } = string.Empty;
|
|
public string Title { get; set; } = string.Empty;
|
|
public bool IsActive { get; set; }
|
|
public DateTime CreatedAt { get; set; }
|
|
public string ServiceName { get; set; } = string.Empty;
|
|
public string ServiceCode { get; set; } = string.Empty;
|
|
public int TotalSendCount { get; set; }
|
|
public int SuccessCount { get; set; }
|
|
}
|