package com.gcsc.guide.service; import com.gcsc.guide.dto.RegistrationSettingsResponse; import com.gcsc.guide.dto.RoleResponse; import com.gcsc.guide.entity.AppSetting; import com.gcsc.guide.repository.AppSettingRepository; import com.gcsc.guide.repository.RoleRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; @Service @RequiredArgsConstructor public class SettingsService { private static final String AUTO_APPROVE_KEY = "registration.auto-approve"; private final AppSettingRepository appSettingRepository; private final RoleRepository roleRepository; @Transactional(readOnly = true) public boolean isAutoApproveEnabled() { return appSettingRepository.findBySettingKey(AUTO_APPROVE_KEY) .map(s -> Boolean.parseBoolean(s.getSettingValue())) .orElse(false); } @Transactional(readOnly = true) public RegistrationSettingsResponse getRegistrationSettings() { boolean autoApprove = isAutoApproveEnabled(); List defaultRoles = roleRepository.findByDefaultGrantTrue().stream() .map(RoleResponse::from) .toList(); return new RegistrationSettingsResponse(autoApprove, defaultRoles); } @Transactional public RegistrationSettingsResponse updateAutoApprove(boolean autoApprove) { AppSetting setting = appSettingRepository.findBySettingKey(AUTO_APPROVE_KEY) .orElseGet(() -> new AppSetting(AUTO_APPROVE_KEY, "false", "신규 가입자 자동 승인 여부")); setting.updateValue(String.valueOf(autoApprove)); appSettingRepository.save(setting); return getRegistrationSettings(); } }