using SPMS.Application.DTOs.AppConfig; using SPMS.Application.Interfaces; using SPMS.Domain.Common; using SPMS.Domain.Exceptions; using SPMS.Domain.Interfaces; namespace SPMS.Application.Services; public class AppConfigService : IAppConfigService { private readonly IAppConfigRepository _appConfigRepository; private readonly IServiceRepository _serviceRepository; public AppConfigService(IAppConfigRepository appConfigRepository, IServiceRepository serviceRepository) { _appConfigRepository = appConfigRepository; _serviceRepository = serviceRepository; } public async Task GetTermsAsync(string serviceCode) { return await GetConfigUrlAsync(serviceCode, "terms_url"); } public async Task GetPrivacyAsync(string serviceCode) { return await GetConfigUrlAsync(serviceCode, "privacy_url"); } public async Task GetAppVersionAsync(string serviceCode, AppVersionRequestDto request) { var service = await _serviceRepository.GetByServiceCodeAsync(serviceCode); if (service == null) throw new SpmsException(ErrorCodes.NotFound, "존재하지 않는 서비스입니다.", 404); var latestVersion = await _appConfigRepository.GetByKeyAsync(service.Id, "latest_version"); var minVersion = await _appConfigRepository.GetByKeyAsync(service.Id, "min_version"); var forceUpdate = await _appConfigRepository.GetByKeyAsync(service.Id, "force_update"); var updateUrlKey = request.Platform?.ToLowerInvariant() == "ios" ? "update_url_ios" : "update_url_android"; var updateUrl = await _appConfigRepository.GetByKeyAsync(service.Id, updateUrlKey); return new AppVersionResponseDto { LatestVersion = latestVersion?.ConfigValue, MinVersion = minVersion?.ConfigValue, IsForceUpdate = string.Equals(forceUpdate?.ConfigValue, "true", StringComparison.OrdinalIgnoreCase), UpdateUrl = updateUrl?.ConfigValue }; } private async Task GetConfigUrlAsync(string serviceCode, string configKey) { var service = await _serviceRepository.GetByServiceCodeAsync(serviceCode); if (service == null) throw new SpmsException(ErrorCodes.NotFound, "존재하지 않는 서비스입니다.", 404); var config = await _appConfigRepository.GetByKeyAsync(service.Id, configKey); return new AppConfigResponseDto { Url = config?.ConfigValue }; } }