SPMS_API/SPMS.Application/Services/NoticeService.cs

69 lines
2.4 KiB
C#

using SPMS.Application.DTOs.Notice;
using SPMS.Application.Interfaces;
using SPMS.Domain.Common;
using SPMS.Domain.Exceptions;
using SPMS.Domain.Interfaces;
namespace SPMS.Application.Services;
public class NoticeService : INoticeService
{
private readonly INoticeRepository _noticeRepository;
private readonly IServiceRepository _serviceRepository;
public NoticeService(INoticeRepository noticeRepository, IServiceRepository serviceRepository)
{
_noticeRepository = noticeRepository;
_serviceRepository = serviceRepository;
}
public async Task<NoticeListResponseDto> GetListAsync(string serviceCode, NoticeListRequestDto request)
{
var service = await _serviceRepository.GetByServiceCodeAsync(serviceCode);
if (service == null)
throw new SpmsException(ErrorCodes.NotFound, "존재하지 않는 서비스입니다.", 404);
var (items, totalCount) = await _noticeRepository.GetActivePagedAsync(service.Id, request.Page, request.Size);
var totalPages = (int)Math.Ceiling((double)totalCount / request.Size);
return new NoticeListResponseDto
{
Items = items.Select(n => new NoticeSummaryDto
{
NoticeId = n.Id,
Title = n.Title,
IsImportant = n.IsPinned,
CreatedAt = n.CreatedAt
}).ToList(),
Pagination = new PaginationDto
{
Page = request.Page,
Size = request.Size,
TotalCount = totalCount,
TotalPages = totalPages
}
};
}
public async Task<NoticeInfoResponseDto> GetInfoAsync(string serviceCode, NoticeInfoRequestDto request)
{
var service = await _serviceRepository.GetByServiceCodeAsync(serviceCode);
if (service == null)
throw new SpmsException(ErrorCodes.NotFound, "존재하지 않는 서비스입니다.", 404);
var notice = await _noticeRepository.GetActiveByIdAsync(request.NoticeId, service.Id);
if (notice == null)
throw new SpmsException(ErrorCodes.NotFound, "존재하지 않는 공지사항입니다.", 404);
return new NoticeInfoResponseDto
{
NoticeId = notice.Id,
Title = notice.Title,
Content = notice.Content,
IsImportant = notice.IsPinned,
CreatedAt = notice.CreatedAt
};
}
}