46951d871a
- TaxSeason / CurrentSeasonDto에 RelatedCategorySlug 추가 - TaxSeasonCalendar 각 시즌에 카테고리 슬러그 매핑 (income-tax→income-tax, vat-1st/2nd→vat, 종부세→real-estate-tax 등) - IBlogPostRepository.GetByCategorySlugAsync 추가 - BlogService.GetSeasonalPostsAsync: 시즌 관련 글 2개 우선 + 나머지 최신 글로 채움 - IndexModel: SeasonalPosts / RecentPosts 분리 로드 - Index.cshtml 블로그 섹션: 시즌 중 "이번 시즌 추천" 배지 + 시즌별 전체보기 버튼 - site.css: blog-card--seasonal, seasonal-blog-tag, btn-seasonal 스타일 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
40 lines
1.3 KiB
C#
40 lines
1.3 KiB
C#
namespace TaxBaik.Application.Services;
|
|
|
|
using TaxBaik.Application.Seasonal;
|
|
|
|
public class SeasonalMarketingService
|
|
{
|
|
public CurrentSeasonDto? GetCurrentSeason()
|
|
{
|
|
var today = DateTime.Today;
|
|
|
|
foreach (var season in TaxSeasonCalendar.Seasons)
|
|
{
|
|
var start = new DateTime(today.Year, season.StartMonth, season.StartDay);
|
|
var end = new DateTime(today.Year, season.EndMonth, season.EndDay);
|
|
|
|
if (today >= start && today <= end)
|
|
{
|
|
var days = (end - today).Days;
|
|
return new CurrentSeasonDto
|
|
{
|
|
Key = season.Key,
|
|
Name = season.Name,
|
|
HeroHeadline = season.HeroHeadline,
|
|
HeroSubtext = season.HeroSubtext,
|
|
UrgencyBadge = season.UrgencyBadge.Replace("{n}", days.ToString()),
|
|
FocusService = season.FocusService,
|
|
RelatedCategorySlug = season.RelatedCategorySlug,
|
|
CtaText = season.CtaText,
|
|
DaysUntilDeadline = days,
|
|
Deadline = end
|
|
};
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
public IReadOnlyList<TaxSeason> GetFullCalendar() => TaxSeasonCalendar.Seasons;
|
|
}
|