package com.aicheck.config; import org.yaml.snakeyaml.Yaml; import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; import java.util.List; import java.util.Map; public class AppConfig { private boolean enabled = true; private boolean dtoEntityConversionEnabled = true; private List modelDirs = new ArrayList<>(); private List controllerScanDirs = new ArrayList<>(); private List feignScanDirs = new ArrayList<>(); private List conversionScanDirs = new ArrayList<>(); private String wecomWebhookUrl = ""; private boolean onlyOnChange = true; @SuppressWarnings("unchecked") public static AppConfig load(Path configPath) throws IOException { Yaml yaml = new Yaml(); Map root; try (InputStream in = Files.newInputStream(configPath)) { root = yaml.load(in); } if (root == null) { root = Map.of(); } AppConfig config = new AppConfig(); Map classCheck = mapOrEmpty(root.get("class_check")); config.enabled = boolOrDefault(classCheck.get("enabled"), true); Map conversion = mapOrEmpty(classCheck.get("dto_entity_conversion")); config.dtoEntityConversionEnabled = boolOrDefault(conversion.get("enabled"), true); config.modelDirs = stringList(classCheck.get("model_dirs")); Map endpointScan = mapOrEmpty(classCheck.get("endpoint_scan")); config.controllerScanDirs = stringList(endpointScan.get("controllers")); config.feignScanDirs = stringList(endpointScan.get("feign_apis")); config.conversionScanDirs = stringList(classCheck.get("conversion_scan")); Map wecom = mapOrEmpty(root.get("wecom")); config.wecomWebhookUrl = stringOrEmpty(wecom.get("webhook_url")); Map notify = mapOrEmpty(root.get("notify")); config.onlyOnChange = boolOrDefault(notify.get("only_on_change"), true); return config; } @SuppressWarnings("unchecked") private static Map mapOrEmpty(Object value) { if (value instanceof Map) { return (Map) value; } return Map.of(); } @SuppressWarnings("unchecked") private static List stringList(Object value) { if (value instanceof List) { List list = (List) value; List result = new ArrayList<>(); for (Object item : list) { if (item != null) { result.add(item.toString()); } } return result; } return new ArrayList<>(); } private static boolean boolOrDefault(Object value, boolean defaultValue) { if (value instanceof Boolean) { return (Boolean) value; } return defaultValue; } private static String stringOrEmpty(Object value) { return value == null ? "" : value.toString(); } public boolean isEnabled() { return enabled; } public boolean isDtoEntityConversionEnabled() { return dtoEntityConversionEnabled; } public List getModelDirs() { return modelDirs; } public List getControllerScanDirs() { return controllerScanDirs; } public List getFeignScanDirs() { return feignScanDirs; } public List getConversionScanDirs() { return conversionScanDirs; } public String getWecomWebhookUrl() { return wecomWebhookUrl; } public boolean isOnlyOnChange() { return onlyOnChange; } }