SPMS_API/SPMS.Application/Services/AppConfigService.cs

85 lines
3.5 KiB
C#

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<AppConfigResponseDto> GetTermsAsync(string serviceCode)
{
return await GetConfigUrlAsync(serviceCode, "terms_url");
}
public async Task<AppConfigResponseDto> GetPrivacyAsync(string serviceCode)
{
return await GetConfigUrlAsync(serviceCode, "privacy_url");
}
public async Task<AppVersionResponseDto> 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
};
}
public async Task<AppSettingsResponseDto> GetAppSettingsAsync(string serviceCode)
{
var service = await _serviceRepository.GetByServiceCodeAsync(serviceCode);
if (service == null)
throw new SpmsException(ErrorCodes.NotFound, "존재하지 않는 서비스입니다.", 404);
var configs = await _appConfigRepository.GetAllByServiceAsync(service.Id);
var configDict = configs.ToDictionary(c => c.ConfigKey, c => c.ConfigValue);
return new AppSettingsResponseDto
{
MinAppVersion = configDict.GetValueOrDefault("min_version"),
IsMaintenance = string.Equals(configDict.GetValueOrDefault("maintenance_mode"), "true", StringComparison.OrdinalIgnoreCase),
MaintenanceMsg = configDict.GetValueOrDefault("maintenance_message"),
CsEmail = configDict.GetValueOrDefault("cs_email"),
CsPhone = configDict.GetValueOrDefault("cs_phone")
};
}
private async Task<AppConfigResponseDto> 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
};
}
}