69 lines
2.4 KiB
C#
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
|
|
};
|
|
}
|
|
}
|