1 line
6.5 KiB
JSON
1 line
6.5 KiB
JSON
{"repo": "arpitp2019/flowdash", "files": {"backend/src/main/java/com/flowdash/service/AiSettingsService.java": {"2b90ed7a3103b024cb351fa9b5bc1f2a114c2232": {"t": 1785745681.8887167, "n": 3042, "h": "5e510da1411f14db", "c": "package com.flowdash.service;\n\nimport com.flowdash.domain.AiProviderKey;\nimport com.flowdash.domain.AiProviderSetting;\nimport com.flowdash.domain.AppUser;\nimport com.flowdash.repository.AiProviderSettingRepository;\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.stereotype.Service;\n\nimport java.math.BigDecimal;\n\n@Service\npublic class AiSettingsService {\n\n private final AiProviderSettingRepository settingRepository;\n\n @Value(\"${FLOWDASH_AI_PROVIDER:mock}\")\n private String defaultProvider;\n\n @Value(\"${FLOWDASH_AI_MODEL:flowdash-mock}\")\n private String defaultModel;\n\n @Value(\"${FLOWDASH_AI_BASE_URL:}\")\n private String defaultBaseUrl;\n\n public AiSettingsService(AiProviderSettingRepository settingRepository) {\n this.settingRepository = settingRepository;\n }\n\n public AiProviderSetting resolveFor(AppUser user) {\n if (user != null) {\n return settingRepository.findFirstByUserAndDefaultSelectedTrue(user)\n .orElseGet(() -> buildDefaultForUser(user));\n }\n return settingRepository.findFirstByUserIsNullAndDefaultSelectedTrue()\n .orElseGet(this::buildGlobalDefault);\n }\n\n public String resolveApiKey(AiProviderKey providerKey) {\n return switch (providerKey) {\n case GEMINI -> envOrDefault(\"GEMINI_API_KEY\", \"\");\n case CLAUDE -> envOrDefault(\"ANTHROPIC_API_KEY\", \"\");\n case MINIMAX -> envOrDefault(\"MINIMAX_API_KEY\", \"\");\n case GLM -> envOrDefault(\"GLM_API_KEY\", \"\");\n case DEEPSEEK -> envOrDefault(\"DEEPSEEK_API_KEY\", \"\");\n case OPENAI -> envOrDefault(\"OPENAI_API_KEY\", \"\");\n case GROK -> envOrDefault(\"XAI_API_KEY\", envOrDefault(\"GROK_API_KEY\", \"\"));\n case MOCK -> \"\";\n };\n }\n\n private AiProviderSetting buildDefaultForUser(AppUser user) {\n return new AiProviderSetting(user, parseProvider(defaultProvider), providerLabel(defaultProvider), defaultModel, defaultBaseUrl, true, true, new BigDecimal(\"0.30\"));\n }\n\n private AiProviderSetting buildGlobalDefault() {\n return new AiProviderSetting(null, parseProvider(defaultProvider), providerLabel(defaultProvider), defaultModel, defaultBaseUrl, true, true, new BigDecimal(\"0.30\"));\n }\n\n private static AiProviderKey parseProvider(String provider) {\n if (provider == null || provider.isBlank()) {\n return AiProviderKey.MOCK;\n }\n try {\n return AiProviderKey.valueOf(provider.trim().toUpperCase());\n } catch (Exception ignored) {\n return AiProviderKey.MOCK;\n }\n }\n\n private static String providerLabel(String provider) {\n if (provider == null || provider.isBlank()) {\n return \"Mock\";\n }\n return provider.trim();\n }\n\n private static String envOrDefault(String name, String fallback) {\n String value = System.getenv(name);\n return value == null || value.isBlank() ? fallback : value;\n }\n}\n"}, "a36c677f6ab380c3f81fe9d8f8f188b4dff6e3eb": {"t": 1785755694.5498085, "n": 3042, "h": "5e510da1411f14db", "c": "package com.flowdash.service;\n\nimport com.flowdash.domain.AiProviderKey;\nimport com.flowdash.domain.AiProviderSetting;\nimport com.flowdash.domain.AppUser;\nimport com.flowdash.repository.AiProviderSettingRepository;\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.stereotype.Service;\n\nimport java.math.BigDecimal;\n\n@Service\npublic class AiSettingsService {\n\n private final AiProviderSettingRepository settingRepository;\n\n @Value(\"${FLOWDASH_AI_PROVIDER:mock}\")\n private String defaultProvider;\n\n @Value(\"${FLOWDASH_AI_MODEL:flowdash-mock}\")\n private String defaultModel;\n\n @Value(\"${FLOWDASH_AI_BASE_URL:}\")\n private String defaultBaseUrl;\n\n public AiSettingsService(AiProviderSettingRepository settingRepository) {\n this.settingRepository = settingRepository;\n }\n\n public AiProviderSetting resolveFor(AppUser user) {\n if (user != null) {\n return settingRepository.findFirstByUserAndDefaultSelectedTrue(user)\n .orElseGet(() -> buildDefaultForUser(user));\n }\n return settingRepository.findFirstByUserIsNullAndDefaultSelectedTrue()\n .orElseGet(this::buildGlobalDefault);\n }\n\n public String resolveApiKey(AiProviderKey providerKey) {\n return switch (providerKey) {\n case GEMINI -> envOrDefault(\"GEMINI_API_KEY\", \"\");\n case CLAUDE -> envOrDefault(\"ANTHROPIC_API_KEY\", \"\");\n case MINIMAX -> envOrDefault(\"MINIMAX_API_KEY\", \"\");\n case GLM -> envOrDefault(\"GLM_API_KEY\", \"\");\n case DEEPSEEK -> envOrDefault(\"DEEPSEEK_API_KEY\", \"\");\n case OPENAI -> envOrDefault(\"OPENAI_API_KEY\", \"\");\n case GROK -> envOrDefault(\"XAI_API_KEY\", envOrDefault(\"GROK_API_KEY\", \"\"));\n case MOCK -> \"\";\n };\n }\n\n private AiProviderSetting buildDefaultForUser(AppUser user) {\n return new AiProviderSetting(user, parseProvider(defaultProvider), providerLabel(defaultProvider), defaultModel, defaultBaseUrl, true, true, new BigDecimal(\"0.30\"));\n }\n\n private AiProviderSetting buildGlobalDefault() {\n return new AiProviderSetting(null, parseProvider(defaultProvider), providerLabel(defaultProvider), defaultModel, defaultBaseUrl, true, true, new BigDecimal(\"0.30\"));\n }\n\n private static AiProviderKey parseProvider(String provider) {\n if (provider == null || provider.isBlank()) {\n return AiProviderKey.MOCK;\n }\n try {\n return AiProviderKey.valueOf(provider.trim().toUpperCase());\n } catch (Exception ignored) {\n return AiProviderKey.MOCK;\n }\n }\n\n private static String providerLabel(String provider) {\n if (provider == null || provider.isBlank()) {\n return \"Mock\";\n }\n return provider.trim();\n }\n\n private static String envOrDefault(String name, String fallback) {\n String value = System.getenv(name);\n return value == null || value.isBlank() ? fallback : value;\n }\n}\n"}}}} |