feat():learning后台管理项目初始化

This commit is contained in:
yuj
2025-12-04 16:23:46 +08:00
parent 39886d50d2
commit 88e048f4d1
154 changed files with 28966 additions and 6 deletions

9
.idea/goalfylearning-admin.iml generated Normal file
View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
<component name="Go" enabled="true" />
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

6
.idea/goframehelperCache.xml generated Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="com.github.oldmegit.goframehelper.ui.goframehelperCache">
<option name="gf" value="false" />
</component>
</project>

6
.idea/misc.xml generated Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GoLibraries">
<option name="indexEntireGoPath" value="true" />
</component>
</project>

8
.idea/modules.xml generated Normal file
View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/goalfylearning-admin.iml" filepath="$PROJECT_DIR$/.idea/goalfylearning-admin.iml" />
</modules>
</component>
</project>

6
.idea/vcs.xml generated Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

273
.idea/workspace.xml generated Normal file
View File

@@ -0,0 +1,273 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AutoImportSettings">
<option name="autoReloadType" value="ALL" />
</component>
<component name="ChangeListManager">
<list default="true" id="cb6928fe-2e48-4090-8720-8313f14b8012" name="更改" comment="">
<change afterPath="$PROJECT_DIR$/.idea/goalfylearning-admin.iml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/goframehelperCache.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/misc.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/modules.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/vcs.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/Dockerfile" afterDir="false" />
<change afterPath="$PROJECT_DIR$/SSO_README.md" afterDir="false" />
<change afterPath="$PROJECT_DIR$/build-and-push.sh" afterDir="false" />
<change afterPath="$PROJECT_DIR$/build.sh" afterDir="false" />
<change afterPath="$PROJECT_DIR$/cmd/server/main.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/discuss/ARCHITECTURE_DIAGRAM.md" afterDir="false" />
<change afterPath="$PROJECT_DIR$/discuss/QUICK_START.md" afterDir="false" />
<change afterPath="$PROJECT_DIR$/discuss/README.md" afterDir="false" />
<change afterPath="$PROJECT_DIR$/discuss/architecture_guide.md" afterDir="false" />
<change afterPath="$PROJECT_DIR$/discuss/user-level-config-implementation-summary.md" afterDir="false" />
<change afterPath="$PROJECT_DIR$/docs/deployment_and_testing.md" afterDir="false" />
<change afterPath="$PROJECT_DIR$/docs/email_preview_approval.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/docs/email_preview_approval_new.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/docs/email_preview_en.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/docs/email_preview_rejection.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/docs/email_preview_rejection_new.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/docs/email_preview_zh.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/docs/email_templates_preview.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/docs/invite_apply_example.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/docs/invite_code_application_feature.md" afterDir="false" />
<change afterPath="$PROJECT_DIR$/docs/test_summary.md" afterDir="false" />
<change afterPath="$PROJECT_DIR$/docs/test_summary_email.md" afterDir="false" />
<change afterPath="$PROJECT_DIR$/etc/config-prod.yaml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/etc/config-staging.yaml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/etc/config.yaml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/go.mod" afterDir="false" />
<change afterPath="$PROJECT_DIR$/go.sum" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/api/README.md" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/api/handlers/audit_log_handler.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/api/handlers/finance_handler.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/api/handlers/goalfymax_user_handler.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/api/handlers/invite_code_application_handler.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/api/handlers/invite_code_handler.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/api/handlers/mcp_provider_handler.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/api/handlers/message_push_handler.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/api/handlers/page_handler.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/api/handlers/quota_handler.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/api/handlers/rbac_handler.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/api/handlers/role_handler.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/api/handlers/sso_handler.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/api/handlers/system_config_handler.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/api/handlers/user_feedback_handler.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/api/handlers/user_handler.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/api/handlers/user_level_config_handler.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/api/handlers/user_project_quota_handler.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/api/handlers/vendor_model_pricing_handler.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/api/handlers/vm_pricing_handler.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/api/middlewares/api_log_middleware.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/api/middlewares/logging.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/api/routes/routes.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/config/README.md" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/config/config.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/jobs/mcp_usage_job.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/jobs/model_token_job.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/models/audit_log.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/models/balance_operation_log.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/models/common.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/models/goalfymax_user.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/models/invite_code.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/models/invite_code_application.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/models/message_push.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/models/quota_models.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/models/rbac.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/models/request.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/models/response.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/models/sso.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/models/user_feedback.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/models/user_level_config.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/models/user_project_quota.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/notifier/notifier.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/oss/s3.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/services/README.md" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/services/audit_log_service.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/services/email_service.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/services/finance_service.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/services/gateway_client.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/services/goalfymax_user_service.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/services/invite_code_application_service.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/services/invite_code_service.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/services/log_service.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/services/message_push_service.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/services/page_service.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/services/quota_service.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/services/rbac_service.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/services/role_service.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/services/sso_admin_service.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/services/sso_service.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/services/system_config_service.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/services/user_feedback_service.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/services/user_level_config_service.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/services/user_project_quota_service.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/services/user_service.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/storage/README.md" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/storage/audit_log_storage.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/storage/balance_operation_log_storage.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/storage/database.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/storage/goalfymax_user_storage.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/storage/invite_code.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/storage/log_storage.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/storage/message_push_storage.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/storage/page_storage.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/storage/postgres.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/storage/rbac_storage.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/storage/role_storage.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/storage/sso_storage.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/storage/system_config_storage.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/storage/user_feedback_storage.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/storage/user_level_config_storage.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/storage/user_project_quota_storage.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/internal/storage/user_storage.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/k8s/README.md" afterDir="false" />
<change afterPath="$PROJECT_DIR$/k8s/configmap.yaml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/k8s/deployment.yaml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/k8s/service.yaml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/migrations/20250129_add_client_id_to_invite_codes.sql" afterDir="false" />
<change afterPath="$PROJECT_DIR$/migrations/20250131_add_invite_code_applications_table.sql" afterDir="false" />
<change afterPath="$PROJECT_DIR$/migrations/20250204_add_language_to_invite_code_applications.sql" afterDir="false" />
<change afterPath="$PROJECT_DIR$/pkg/middleware/auth.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/pkg/middleware/rbac.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/pkg/middleware/sso_client.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/pkg/redis/redis.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/pkg/utils/README.md" afterDir="false" />
<change afterPath="$PROJECT_DIR$/pkg/utils/crypto.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/pkg/utils/jwt.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/pkg/utils/logger.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/pkg/utils/response.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/pkg/utils/validator.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/scripts/README_invite_api.md" afterDir="false" />
<change afterPath="$PROJECT_DIR$/scripts/invite_code_api.py" afterDir="false" />
<change afterPath="$PROJECT_DIR$/scripts/migrate.sh" afterDir="false" />
<change afterPath="$PROJECT_DIR$/scripts/run_invite_api.sh" afterDir="false" />
<change afterPath="$PROJECT_DIR$/scripts/start.sh" afterDir="false" />
<change afterPath="$PROJECT_DIR$/scripts/status.sh" afterDir="false" />
<change afterPath="$PROJECT_DIR$/scripts/stop.sh" afterDir="false" />
<change afterPath="$PROJECT_DIR$/scripts/test_api.sh" afterDir="false" />
<change afterPath="$PROJECT_DIR$/scripts/test_email.py" afterDir="false" />
<change afterPath="$PROJECT_DIR$/start.sh" afterDir="false" />
<change afterPath="$PROJECT_DIR$/start_sso.sh" afterDir="false" />
<change afterPath="$PROJECT_DIR$/start_with_cors.sh" afterDir="false" />
<change afterPath="$PROJECT_DIR$/test/preview_email.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/test/send_test_email.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/test/test_email.go" afterDir="false" />
<change afterPath="$PROJECT_DIR$/test_quota_api.sh" afterDir="false" />
<change afterPath="$PROJECT_DIR$/test_sso_api.sh" afterDir="false" />
<change beforePath="$PROJECT_DIR$/LICENSE" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/README.md" beforeDir="false" afterPath="$PROJECT_DIR$/README.md" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="GOROOT" url="file://$PROJECT_DIR$/../../jetbrains-projects/GolandProjects/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.0.darwin-arm64" />
<component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="ProjectColorInfo">{
&quot;associatedIndex&quot;: 8
}</component>
<component name="ProjectId" id="36MdYfHmyI1hp6kVg8ib7dEV3nw" />
<component name="ProjectViewState">
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent">{
&quot;keyToString&quot;: {
&quot;Go 构建.go build goalfymax-admin.executor&quot;: &quot;Run&quot;,
&quot;Go 构建.goalfylearning-admin.executor&quot;: &quot;Debug&quot;,
&quot;RunOnceActivity.GoLinterPluginOnboarding&quot;: &quot;true&quot;,
&quot;RunOnceActivity.GoLinterPluginStorageMigration&quot;: &quot;true&quot;,
&quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
&quot;RunOnceActivity.TerminalTabsStorage.copyFrom.TerminalArrangementManager.252&quot;: &quot;true&quot;,
&quot;RunOnceActivity.git.unshallow&quot;: &quot;true&quot;,
&quot;RunOnceActivity.go.formatter.settings.were.checked&quot;: &quot;true&quot;,
&quot;RunOnceActivity.go.migrated.go.modules.settings&quot;: &quot;true&quot;,
&quot;RunOnceActivity.go.modules.go.list.on.any.changes.was.set&quot;: &quot;true&quot;,
&quot;git-widget-placeholder&quot;: &quot;main&quot;,
&quot;go.import.settings.migrated&quot;: &quot;true&quot;,
&quot;last_opened_file_path&quot;: &quot;/Users/ricardo/Documents/加和科技/goalfylearning-admin/etc&quot;,
&quot;node.js.detected.package.eslint&quot;: &quot;true&quot;,
&quot;node.js.selected.package.eslint&quot;: &quot;(autodetect)&quot;,
&quot;nodejs_package_manager_path&quot;: &quot;npm&quot;,
&quot;settings.editor.selected.configurable&quot;: &quot;go.custom.fmt.functions&quot;,
&quot;vue.rearranger.settings.migration&quot;: &quot;true&quot;
}
}</component>
<component name="RecentsManager">
<key name="CopyFile.RECENT_KEYS">
<recent name="$PROJECT_DIR$/etc" />
</key>
</component>
<component name="RunDashboard">
<option name="configurationTypes">
<set>
<option value="GoApplicationRunConfiguration" />
</set>
</option>
<option name="configurationStatuses">
<map>
<entry key="GoApplicationRunConfiguration">
<value>
<map>
<entry key="goalfylearning-admin" value="STOPPED" />
</map>
</value>
</entry>
</map>
</option>
</component>
<component name="RunManager">
<configuration name="goalfylearning-admin" type="GoApplicationRunConfiguration" factoryName="Go Application">
<module name="goalfylearning-admin" />
<working_directory value="$PROJECT_DIR$" />
<EXTENSION ID="net.ashald.envfile">
<option name="IS_ENABLED" value="false" />
<option name="IS_SUBST" value="false" />
<option name="IS_PATH_MACRO_SUPPORTED" value="false" />
<option name="IS_IGNORE_MISSING_FILES" value="false" />
<option name="IS_ENABLE_EXPERIMENTAL_INTEGRATIONS" value="false" />
<ENTRIES>
<ENTRY IS_ENABLED="true" PARSER="runconfig" IS_EXECUTABLE="false" />
</ENTRIES>
</EXTENSION>
<kind value="DIRECTORY" />
<package value="$PROJECT_DIR$/cmd/server" />
<directory value="$PROJECT_DIR$/cmd/server" />
<filePath value="$PROJECT_DIR$/../goalfylearning-admin|$PROJECT_DIR$/cmd/server/main.go" />
<method v="2" />
</configuration>
</component>
<component name="SharedIndexes">
<attachedChunks>
<set>
<option value="bundled-gosdk-f466f9b0953e-3d2cccfc42a2-org.jetbrains.plugins.go.sharedIndexes.bundled-GO-252.25557.189" />
<option value="bundled-js-predefined-d6986cc7102b-b598e85cdad2-JavaScript-GO-252.25557.189" />
</set>
</attachedChunks>
</component>
<component name="TaskManager">
<task active="true" id="Default" summary="默认任务">
<changelist id="cb6928fe-2e48-4090-8720-8313f14b8012" name="更改" comment="" />
<created>1764820422237</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1764820422237</updated>
</task>
<servers />
</component>
<component name="TypeScriptGeneratedFilesManager">
<option name="version" value="3" />
</component>
<component name="VgoProject">
<environment>
<map>
<entry key="GOPROXY" value="https://goproxy.io" />
</map>
</environment>
<settings-migrated>true</settings-migrated>
</component>
</project>