SPMS_API/SPMS.Domain/Interfaces/IMessageRepository.cs
SEAN 011cb9b380 improvement: 메시지 목록 확장 (#224)
- ServiceCodeMiddleware: message/list를 OPTIONAL_FOR_ADMIN에 추가
- MessageListRequestDto: service_code, send_status 필터 필드 추가
- MessageSummaryDto: service_name, service_code, latest_send_status 추가
- IMessageRepository + MessageRepository: GetPagedForListAsync 구현
  (Service 조인 + PushSendLog 집계 한 번의 쿼리)
- IMessageService + MessageService: serviceId nullable 변경, DetermineSendStatus 헬퍼
- MessageController: GetServiceIdOrNull() 헬퍼 + Swagger 업데이트

Closes #224
2026-02-25 14:28:09 +09:00

30 lines
1.2 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);
}
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; }
}