Skip to content

feat(plugins): add timezone conversion and permission i18n hooks#143

Merged
eoctet merged 1 commit intodevelopfrom
develop-feat-plugins
Sep 25, 2025
Merged

feat(plugins): add timezone conversion and permission i18n hooks#143
eoctet merged 1 commit intodevelopfrom
develop-feat-plugins

Conversation

@eoctet
Copy link
Contributor

@eoctet eoctet commented Sep 25, 2025

Add timezone conversion and permission i18n hooks

变更类型

  • 新功能 (feature)
  • 代码重构 (refactor)
  • 性能优化 (perf)

变更描述

本次提交为Websoft9平台新增了两个插件功能,主要包括时区转换插件和权限国际化钩子:

  1. 时区转换插件: 实现了自动时区调整功能,在查询结果中自动转换时间字段到用户所在时区
  2. 权限国际化钩子: 添加了权限名称翻译功能,根据用户语言偏好自动翻译Permission.Name字段
  3. 数据库管理器增强: 在DatabaseManagerFactory中初始化插件系统,支持插件化扩展
  4. 代码优化: 移除了不必要的i18n依赖,简化了服务结构
  5. 错误处理重构: 改进了响应结构并避免了循环导入问题
  6. 上下文管理工具: 新增用户ID和语言获取的工具函数,支持从Redis中检索上下文信息
  7. 响应包重构: 移除了response包,直接在错误处理中使用JSON响应

相关 Issue

测试说明

请说明如何测试这些变更:

  • 已添加单元测试
  • 已添加集成测试
  • 已进行手动测试
  • 测试覆盖率 ≥ 80%

测试步骤

  1. 运行单元测试验证上下文工具函数的用户ID检索功能
  2. 测试时区转换插件在查询结果中的自动时区调整
  3. 验证权限国际化钩子的多语言翻译功能
  4. 检查服务在移除i18n依赖后的正常工作
  5. 测试新的错误处理结构的响应格式

检查清单

请确认以下项目:

  • 代码遵循项目编码规范
  • 已更新相关文档
  • 已通过所有自动化测试
  • 已进行代码自查
  • 无明显性能问题
  • 提交消息符合 Conventional Commits 规范

破坏性变更

本PR包含以下破坏性变更:

  • 移除了 pkg/response/response.go 包,相关功能已迁移到错误处理模块
  • 调整了 internal/dto/common.go 的目录结构,迁移至 internal/dto/common/common.go
  • 修改了错误处理的响应结构,可能影响前端对错误响应的解析

- Implemented a timezone conversion plugin for automatic timezone adjustments in query results.
- Added a permission i18n hook to translate Permission.Name fields based on user language preferences.
- Enhanced the DatabaseManagerFactory to initialize these plugins during manager creation.
- Updated the email service to remove unnecessary i18n dependency.
- Refactored error handling to improve response structure and avoid circular imports.
- Introduced utility functions for context management, including user ID and language retrieval from Redis.
- Removed the response package and replaced its functionality with direct JSON responses in error handling.
- Added tests for context utility functions to ensure correct user ID retrieval.
@github-actions
Copy link

⚠️ Test Coverage Report

Component Coverage Status
API Service 14.5% ⚠️
Websoft9 Agent 14.3% ⚠️
Average Coverage 14.4% ⚠️

Threshold: 80%

⚠️ Warning: Some components have coverage below threshold, recommend adding test cases

Detailed Coverage Information

API Service:

api-service/cmd/server/main.go:58:				main					0.0%
api-service/cmd/server/main.go:126:				initAuthConfig				0.0%
api-service/cmd/server/main.go:133:				initI18n				0.0%
api-service/cmd/server/main.go:140:				initCrypto				0.0%
api-service/cmd/server/main.go:149:				initDatabaseWrapper			0.0%
api-service/cmd/server/main.go:209:				initServices				0.0%
api-service/cmd/server/main.go:234:				startServer				0.0%
api-service/cmd/server/main.go:356:				initRepositories			0.0%
api-service/cmd/server/main.go:390:				initBusinessServices			0.0%
api-service/cmd/server/main.go:428:				initControllers				0.0%
api-service/cmd/server/main.go:477:				shutdownServices			0.0%
api-service/docs/docs.go:5428:					init					0.0%
api-service/internal/config/auth.go:157:			NewAuthConfigManager			0.0%
api-service/internal/config/auth.go:171:			loadConfig				0.0%
api-service/internal/config/auth.go:210:			setDefaults				0.0%
api-service/internal/config/auth.go:256:			createDefaultConfig			0.0%
api-service/internal/config/auth.go:272:			processEnvironmentVariables		0.0%
api-service/internal/config/auth.go:288:			expandEnvironmentVariables		0.0%
api-service/internal/config/auth.go:293:			GetConfig				0.0%
api-service/internal/config/auth.go:298:			UpdateConfig				0.0%
api-service/internal/config/auth.go:319:			validateConfig				0.0%
api-service/internal/config/auth.go:355:			updateViperConfig			0.0%
api-service/internal/config/auth.go:375:			ReloadConfig				0.0%
api-service/internal/config/auth.go:380:			GetOAuth2Provider			0.0%
api-service/internal/config/auth.go:389:			GetEnabledOAuth2Providers		0.0%
api-service/internal/config/auth.go:401:			IsOAuth2Enabled				0.0%
api-service/internal/config/auth.go:406:			IsTwoFactorEnabled			0.0%
api-service/internal/config/auth.go:411:			IsTwoFactorRequiredForRole		0.0%
api-service/internal/config/auth.go:421:			GetPasswordPolicy			0.0%
api-service/internal/config/auth.go:426:			GetLoginSecurity			0.0%
api-service/internal/config/config.go:138:			Load					0.0%
api-service/internal/config/config.go:184:			setDefaults				0.0%
api-service/internal/constants/constants.go:249:		GetModuleTableName			0.0%
api-service/internal/constants/constants.go:285:		GetModuleType				0.0%
api-service/internal/constants/constants.go:371:		GetTimezoneConvertibleFields		0.0%
api-service/internal/controller/alert.go:24:			NewAlertController			0.0%
api-service/internal/controller/alert.go:37:			bindAndValidateRequest			0.0%
api-service/internal/controller/alert.go:69:			GetAlertRules				0.0%
api-service/internal/controller/alert.go:99:			CreateAlertRule				0.0%
api-service/internal/controller/alert.go:133:			isExpression				0.0%
api-service/internal/controller/alert.go:150:			GetAlertRule				0.0%
api-service/internal/controller/alert.go:188:			UpdateAlertRule				0.0%
api-service/internal/controller/alert.go:239:			DeleteAlertRule				0.0%
api-service/internal/controller/alert.go:281:			GetAlertRecords				0.0%
api-service/internal/controller/alert.go:313:			AcknowledgeAlertRecord			0.0%
api-service/internal/controller/alert.go:374:			ResolveAlertRecord			0.0%
api-service/internal/controller/audit_log.go:28:		NewAuditLogController			0.0%
api-service/internal/controller/audit_log.go:53:		GetAuditLog				0.0%
api-service/internal/controller/audit_log.go:88:		ListAuditLogs				0.0%
api-service/internal/controller/audit_log.go:116:		GetAuditLogStatistics			0.0%
api-service/internal/controller/audit_log.go:145:		ExportAuditLogs				0.0%
api-service/internal/controller/audit_log.go:169:		generateExportFilename			0.0%
api-service/internal/controller/audit_log.go:176:		getFileExtensionByFormat		0.0%
api-service/internal/controller/health.go:20:			NewHealthController			0.0%
api-service/internal/controller/health.go:36:			DatabaseHealth				0.0%
api-service/internal/controller/health.go:71:			SystemHealth				0.0%
api-service/internal/controller/health.go:91:			checkDatabase				0.0%
api-service/internal/controller/health.go:114:			checkRedis				0.0%
api-service/internal/controller/health.go:142:			checkInfluxDB				0.0%
api-service/internal/controller/health.go:182:			finalizeHealthResponse			0.0%
api-service/internal/controller/health.go:216:			DatabaseStats				0.0%
api-service/internal/controller/health.go:234:			Ping					0.0%
api-service/internal/controller/health.go:250:			Readiness				0.0%
api-service/internal/controller/health.go:275:			Liveness				0.0%
api-service/internal/controller/helpers.go:15:			BindAndValidateRequest			0.0%
api-service/internal/controller/helpers.go:44:			BindAndValidateQuery			0.0%
api-service/internal/controller/helpers.go:73:			GetUserID				0.0%
api-service/internal/controller/helpers.go:87:			ParseIDParam				0.0%
api-service/internal/controller/helpers.go:102:			GetPaginationParams			0.0%
api-service/internal/controller/i18n.go:16:			NewI18nController			0.0%
api-service/internal/controller/i18n.go:28:			GetLanguages				0.0%
api-service/internal/controller/i18n.go:51:			GetTranslations				0.0%
api-service/internal/controller/i18n.go:82:			TestI18n				0.0%
api-service/internal/controller/role_permission.go:24:		NewRolePermissionController		0.0%
api-service/internal/controller/role_permission.go:50:		CreateRole				0.0%
api-service/internal/controller/role_permission.go:86:		GetRole					0.0%
api-service/internal/controller/role_permission.go:119:		ListRoles				0.0%
api-service/internal/controller/role_permission.go:158:		UpdateRole				0.0%
api-service/internal/controller/role_permission.go:212:		DeleteRole				0.0%
api-service/internal/controller/role_permission.go:243:		AssignPermissions			0.0%
api-service/internal/controller/role_permission.go:297:		RemovePermissions			0.0%
api-service/internal/controller/role_permission.go:345:		GetRoleUsers				0.0%
api-service/internal/controller/role_permission.go:376:		CreatePermission			0.0%
api-service/internal/controller/role_permission.go:411:		GetPermission				0.0%
api-service/internal/controller/role_permission.go:440:		UpdatePermission			0.0%
api-service/internal/controller/role_permission.go:493:		DeletePermission			0.0%
api-service/internal/controller/role_permission.go:529:		ListPermissions				0.0%
api-service/internal/controller/role_permission.go:567:		GetPermissionTree			0.0%
api-service/internal/controller/role_permission.go:607:		GetPermissionRoles			0.0%
api-service/internal/controller/security.go:55:			NewSecurityController			0.0%
api-service/internal/controller/security.go:85:			RevokeAPIToken				0.0%
api-service/internal/controller/security.go:124:		RefreshAPIToken				0.0%
api-service/internal/controller/security.go:151:		GetAuthConfig				0.0%
api-service/internal/controller/security.go:173:		UpdateAuthConfig			0.0%
api-service/internal/controller/security.go:200:		GetOAuth2Providers			0.0%
api-service/internal/controller/security.go:221:		EnableTOTP				0.0%
api-service/internal/controller/security.go:250:		ConfirmTOTP				0.0%
api-service/internal/controller/security.go:295:		DisableTOTP				0.0%
api-service/internal/controller/security.go:340:		EnableEmailTwoFactor			0.0%
api-service/internal/controller/security.go:384:		DisableEmailTwoFactor			0.0%
api-service/internal/controller/security.go:412:		SendEmailCode				0.0%
api-service/internal/controller/security.go:441:		VerifyTwoFactor				0.0%
api-service/internal/controller/security.go:481:		GetTwoFactorStatus			0.0%
api-service/internal/controller/security.go:509:		GenerateBackupCodes			0.0%
api-service/internal/controller/security.go:537:		DisableTwoFactor			0.0%
api-service/internal/controller/security.go:578:		GenerateTOTPSecret			0.0%
api-service/internal/controller/system_config.go:21:		NewSystemConfigController		0.0%
api-service/internal/controller/system_config.go:46:		ListSystemConfigs			0.0%
api-service/internal/controller/system_config.go:73:		TestSMTP				0.0%
api-service/internal/controller/system_config.go:98:		ListBasicConfigs			0.0%
api-service/internal/controller/system_config.go:125:		ListSecurityConfigs			0.0%
api-service/internal/controller/system_config.go:153:		ListEmailConfigs			0.0%
api-service/internal/controller/system_config.go:183:		BatchUpdateSystemConfigs		0.0%
api-service/internal/controller/tag.go:25:			NewTagController			0.0%
api-service/internal/controller/tag.go:35:			getCurrentUserID64			0.0%
api-service/internal/controller/tag.go:63:			CreateTag				0.0%
api-service/internal/controller/tag.go:102:			GetTag					0.0%
api-service/internal/controller/tag.go:137:			UpdateTag				0.0%
api-service/internal/controller/tag.go:184:			DeleteTag				0.0%
api-service/internal/controller/tag.go:223:			ListTags				0.0%
api-service/internal/controller/tag.go:255:			AssignTags				0.0%
api-service/internal/controller/tag.go:296:			ReplaceTags				0.0%
api-service/internal/controller/tag.go:337:			UnassignTags				0.0%
api-service/internal/controller/tag.go:376:			SearchTags				0.0%
api-service/internal/controller/tag.go:409:			GetResourceTags				0.0%
api-service/internal/controller/tag.go:446:			SearchResourcesByTags			0.0%
api-service/internal/controller/user.go:24:			NewUserController			0.0%
api-service/internal/controller/user.go:33:			bindAndValidateRequest			0.0%
api-service/internal/controller/user.go:43:			handleUserIDBasedRequest		0.0%
api-service/internal/controller/user.go:92:			ListUsers				0.0%
api-service/internal/controller/user.go:145:			CreateUser				0.0%
api-service/internal/controller/user.go:183:			GetUser					0.0%
api-service/internal/controller/user.go:219:			UpdateUser				0.0%
api-service/internal/controller/user.go:264:			DeleteUser				0.0%
api-service/internal/controller/user.go:300:			UpdateUserStatus			0.0%
api-service/internal/controller/user.go:324:			UpdateUserPassword			0.0%
api-service/internal/controller/user_auth.go:22:		NewUserAuthController			0.0%
api-service/internal/controller/user_auth.go:33:		bindAndValidateRequest			0.0%
api-service/internal/controller/user_auth.go:43:		handleUserAuth				0.0%
api-service/internal/controller/user_auth.go:80:		Register				0.0%
api-service/internal/controller/user_auth.go:99:		Login					0.0%
api-service/internal/controller/user_auth.go:128:		ForgotPassword				0.0%
api-service/internal/controller/user_auth.go:156:		ShowResetPasswordForm			0.0%
api-service/internal/controller/user_auth.go:189:		ResetPassword				0.0%
api-service/internal/controller/user_auth.go:217:		VerifyEmail				0.0%
api-service/internal/controller/user_auth.go:253:		ResendVerificationEmail			0.0%
api-service/internal/controller/user_auth.go:282:		OAuth2Login				0.0%
api-service/internal/controller/user_auth.go:312:		Logout					0.0%
api-service/internal/controller/user_profile.go:22:		NewUserProfileController		0.0%
api-service/internal/controller/user_profile.go:47:		GetProfile				0.0%
api-service/internal/controller/user_profile.go:83:		UpdateProfile				0.0%
api-service/internal/controller/user_profile.go:126:		ChangePassword				0.0%
api-service/internal/controller/user_profile.go:170:		GetLoginHistories			0.0%
api-service/internal/controller/user_profile.go:211:		GetNotificationSettings			0.0%
api-service/internal/controller/user_profile.go:245:		UpdateNotificationSettings		0.0%
api-service/internal/controller/user_profile.go:285:		GetSecuritySettings			0.0%
api-service/internal/controller/user_profile.go:319:		UpdateSecuritySettings			0.0%
api-service/internal/dto/common/common.go:22:			GetOffset				0.0%
api-service/internal/dto/common/common.go:30:			GetPageSize				0.0%
api-service/internal/dto/common/common.go:56:			NewPaginationResponse			0.0%
api-service/internal/dto/common/common.go:72:			NewListResponse				0.0%
api-service/internal/dto/common/common.go:96:			GetSortOrder				0.0%
api-service/internal/dto/request/security.go:229:		GetPage					0.0%
api-service/internal/dto/request/security.go:242:		GetPageSize				0.0%
api-service/internal/dto/request/security.go:253:		GetOffset				0.0%
api-service/internal/dto/response/audit_log.go:141:		FromAuditLog				0.0%
api-service/internal/dto/response/audit_log.go:178:		FromCreateRequest			0.0%
api-service/internal/dto/response/response.go:32:		Success					0.0%
api-service/internal/dto/response/response.go:41:		ErrorResponse				0.0%
api-service/internal/dto/response/response.go:50:		Error					0.0%
api-service/internal/dto/response/response.go:55:		BuildResponseWithI18n			0.0%
api-service/internal/dto/response/response.go:66:		BadRequest				0.0%
api-service/internal/dto/response/response.go:71:		OKWithData				0.0%
api-service/internal/dto/response/response.go:76:		OK					0.0%
api-service/internal/dto/response/response.go:81:		DataNotFound				0.0%
api-service/internal/dto/response/response.go:86:		Unauthorized				0.0%
api-service/internal/dto/response/response.go:91:		AccessForbidden				0.0%
api-service/internal/dto/response/response.go:96:		InternalError				0.0%
api-service/internal/dto/response/response.go:104:		WithError				0.0%
api-service/internal/dto/response/security.go:255:		ConvertToRoleResponse			0.0%
api-service/internal/dto/response/security.go:294:		ConvertToPermissionResponse		0.0%
api-service/internal/dto/response/security.go:339:		ConvertToAPITokenResponse		0.0%
api-service/internal/dto/response/security.go:358:		extractScopes				0.0%
api-service/internal/dto/response/security.go:384:		ConvertToPermissionTreeResponse		0.0%
api-service/internal/dto/response/security.go:413:		ConvertToTwoFactorStatusResponse	0.0%
api-service/internal/middleware/audit_log.go:21:		Write					0.0%
api-service/internal/middleware/audit_log.go:27:		AuditLogMiddleware			0.0%
api-service/internal/middleware/cors.go:9:			CORS					0.0%
api-service/internal/middleware/error.go:11:			ErrorHandler				0.0%
api-service/internal/middleware/error.go:29:			RequestValidator			0.0%
api-service/internal/middleware/i18n.go:10:			I18nMiddleware				0.0%
api-service/internal/middleware/i18n.go:46:			GetLanguage				0.0%
api-service/internal/middleware/i18n.go:56:			T					0.0%
api-service/internal/middleware/logger.go:11:			LoggerMiddleware			0.0%
api-service/internal/middleware/logger.go:34:			Logger					0.0%
api-service/internal/middleware/permission.go:64:		isPublicRoute				0.0%
api-service/internal/middleware/permission.go:75:		isWhiteListRoutes			0.0%
api-service/internal/middleware/permission.go:90:		PermissionMiddleware			0.0%
api-service/internal/middleware/permission.go:130:		authenticateRequest			0.0%
api-service/internal/middleware/permission.go:150:		handleAuthError				0.0%
api-service/internal/middleware/permission.go:161:		handleTokenValidationError		0.0%
api-service/internal/middleware/permission.go:172:		checkUserPermission			0.0%
api-service/internal/middleware/permission.go:217:		buildResourceAction			0.0%
api-service/internal/middleware/permission.go:256:		buildResourceFromPath			0.0%
api-service/internal/middleware/permission.go:292:		isPathParameter				0.0%
api-service/internal/middleware/permission.go:306:		isNumericID				0.0%
api-service/internal/model/alert.go:50:				TableName				0.0%
api-service/internal/model/alert.go:75:				TableName				0.0%
api-service/internal/model/audit_log.go:38:			TableName				0.0%
api-service/internal/model/audit_log.go:43:			GetFormattedRequestParams		0.0%
api-service/internal/model/audit_log.go:58:			SanitizeForExport			0.0%
api-service/internal/model/audit_log.go:84:			sanitizeData				0.0%
api-service/internal/model/security.go:37:			TableName				0.0%
api-service/internal/model/security.go:42:			IsActive				0.0%
api-service/internal/model/security.go:75:			TableName				0.0%
api-service/internal/model/security.go:80:			IsActive				0.0%
api-service/internal/model/security.go:102:			TableName				0.0%
api-service/internal/model/security.go:123:			TableName				0.0%
api-service/internal/model/security.go:148:			TableName				0.0%
api-service/internal/model/security.go:153:			IsExpired				0.0%
api-service/internal/model/security.go:176:			TableName				0.0%
api-service/internal/model/security.go:184:			Scan					0.0%
api-service/internal/model/security.go:209:			Value					0.0%
api-service/internal/model/system_config.go:35:			TableName				0.0%
api-service/internal/model/system_config.go:40:			GetEffectiveValue			0.0%
api-service/internal/model/tag.go:22:				TableName				0.0%
api-service/internal/model/tag.go:39:				TableName				0.0%
api-service/internal/model/user.go:33:				TableName				0.0%
api-service/internal/model/user.go:38:				IsActive				0.0%
api-service/internal/model/user.go:43:				GetDisplayName				0.0%
api-service/internal/model/user_profile.go:41:			TableName				0.0%
api-service/internal/model/user_profile.go:46:			TableName				0.0%
api-service/internal/repository/alert.go:17:			NewAlertRepository			0.0%
api-service/internal/repository/alert.go:24:			CreateAlertRule				0.0%
api-service/internal/repository/alert.go:33:			GetAlertRuleByID			0.0%
api-service/internal/repository/alert.go:44:			ListAlertRules				0.0%
api-service/internal/repository/alert.go:84:			UpdateAlertRule				0.0%
api-service/internal/repository/alert.go:96:			DeleteAlertRule				0.0%
api-service/internal/repository/alert.go:106:			ListAlertRecords			0.0%
api-service/internal/repository/alert.go:157:			GetAlertRecordByID			0.0%
api-service/internal/repository/alert.go:172:			CreateAlertRecord			0.0%
api-service/internal/repository/alert.go:181:			UpdateAlertRecord			0.0%
api-service/internal/repository/alert.go:190:			DeleteAlertRecord			0.0%
api-service/internal/repository/alert.go:199:			ExistsAlertRecord			0.0%
api-service/internal/repository/api_token.go:19:		NewAPITokenRepository			0.0%
api-service/internal/repository/api_token.go:24:		Create					0.0%
api-service/internal/repository/api_token.go:29:		GetByID					0.0%
api-service/internal/repository/api_token.go:48:		GetByToken				0.0%
api-service/internal/repository/api_token.go:65:		Update					0.0%
api-service/internal/repository/api_token.go:77:		Delete					0.0%
api-service/internal/repository/api_token.go:89:		GetByUserID				0.0%
api-service/internal/repository/api_token.go:108:		GetActiveTokenByUserID			0.0%
api-service/internal/repository/api_token.go:133:		UpdateLastUsed				0.0%
api-service/internal/repository/api_token.go:145:		CleanExpiredTokens			0.0%
api-service/internal/repository/api_token.go:152:		CreateWithTx				0.0%
api-service/internal/repository/api_token.go:157:		UpdateWithTx				0.0%
api-service/internal/repository/audit_log.go:34:		NewAuditLogRepository			0.0%
api-service/internal/repository/audit_log.go:41:		Create					0.0%
api-service/internal/repository/audit_log.go:51:		GetByID					0.0%
api-service/internal/repository/audit_log.go:66:		List					0.0%
api-service/internal/repository/audit_log.go:143:		GetStatistics				0.0%
api-service/internal/repository/audit_log.go:224:		Export					0.0%
api-service/internal/repository/audit_log.go:253:		CleanupOldLogs				0.0%
api-service/internal/repository/audit_log.go:264:		getTimelineData				0.0%
api-service/internal/repository/helpers.go:13:			GetRolesByPermissionID			0.0%
api-service/internal/repository/helpers.go:49:			GetUsersByRoleID			0.0%
api-service/internal/repository/permission.go:19:		NewPermissionRepository			0.0%
api-service/internal/repository/permission.go:24:		Create					0.0%
api-service/internal/repository/permission.go:32:		GetByID					0.0%
api-service/internal/repository/permission.go:45:		GetByCode				0.0%
api-service/internal/repository/permission.go:58:		Update					0.0%
api-service/internal/repository/permission.go:89:		Delete					0.0%
api-service/internal/repository/permission.go:147:		List					0.0%
api-service/internal/repository/permission.go:207:		GetTree					0.0%
api-service/internal/repository/permission.go:233:		buildBaseQuery				0.0%
api-service/internal/repository/permission.go:246:		getAllPermissions			0.0%
api-service/internal/repository/permission.go:256:		getPermissionsWithScope			0.0%
api-service/internal/repository/permission.go:280:		getScopedPermissions			0.0%
api-service/internal/repository/permission.go:291:		collectParentCodes			0.0%
api-service/internal/repository/permission.go:312:		getParentPermissions			0.0%
api-service/internal/repository/permission.go:332:		combinePermissions			0.0%
api-service/internal/repository/permission.go:357:		buildPermissionTree			0.0%
api-service/internal/repository/permission.go:387:		filterTreeByScope			0.0%
api-service/internal/repository/permission.go:400:		filterNodeByScope			0.0%
api-service/internal/repository/permission.go:430:		GetWithRoles				0.0%
api-service/internal/repository/permission.go:447:		GetChildren				0.0%
api-service/internal/repository/permission.go:463:		GetRoles				0.0%
api-service/internal/repository/permission.go:468:		CountRoles				0.0%
api-service/internal/repository/permission.go:481:		BatchUpdateStatus			0.0%
api-service/internal/repository/permission.go:498:		GetByIDs				0.0%
api-service/internal/repository/permission.go:514:		GetUserPermissions			0.0%
api-service/internal/repository/permission.go:532:		CheckUserPermission			0.0%
api-service/internal/repository/permission.go:550:		CreateWithTx				0.0%
api-service/internal/repository/permission.go:558:		UpdateWithTx				0.0%
api-service/internal/repository/role.go:19:			NewRoleRepository			0.0%
api-service/internal/repository/role.go:24:			Create					0.0%
api-service/internal/repository/role.go:32:			GetByID					0.0%
api-service/internal/repository/role.go:45:			GetByCode				0.0%
api-service/internal/repository/role.go:58:			Update					0.0%
api-service/internal/repository/role.go:89:			Delete					0.0%
api-service/internal/repository/role.go:136:			List					0.0%
api-service/internal/repository/role.go:194:			GetWithPermissions			0.0%
api-service/internal/repository/role.go:211:			GetWithUsers				0.0%
api-service/internal/repository/role.go:228:			AssignPermissionsWithTx			0.0%
api-service/internal/repository/role.go:264:			RemovePermissions			0.0%
api-service/internal/repository/role.go:281:			GetPermissions				0.0%
api-service/internal/repository/role.go:297:			GetUsers				0.0%
api-service/internal/repository/role.go:302:			CountPermissions			0.0%
api-service/internal/repository/role.go:315:			CountUsers				0.0%
api-service/internal/repository/role.go:328:			BatchUpdateStatus			0.0%
api-service/internal/repository/role.go:345:			CreateWithTx				0.0%
api-service/internal/repository/role.go:353:			UpdateWithTx				0.0%
api-service/internal/repository/system_config.go:21:		NewSystemConfigRepository		0.0%
api-service/internal/repository/system_config.go:26:		Create					0.0%
api-service/internal/repository/system_config.go:35:		GetByKey				0.0%
api-service/internal/repository/system_config.go:50:		GetByID					0.0%
api-service/internal/repository/system_config.go:65:		List					0.0%
api-service/internal/repository/system_config.go:93:		Update					0.0%
api-service/internal/repository/system_config.go:107:		UpdateValue				0.0%
api-service/internal/repository/system_config.go:125:		Delete					0.0%
api-service/internal/repository/tag.go:17:			NewTagRepository			0.0%
api-service/internal/repository/tag.go:22:			CreateTag				0.0%
api-service/internal/repository/tag.go:27:			GetTagByID				0.0%
api-service/internal/repository/tag.go:37:			GetTagByName				0.0%
api-service/internal/repository/tag.go:47:			UpdateTag				0.0%
api-service/internal/repository/tag.go:52:			DeleteTag				0.0%
api-service/internal/repository/tag.go:57:			ListTags				0.0%
api-service/internal/repository/tag.go:74:			ListTagsWithUsageCount			0.0%
api-service/internal/repository/tag.go:94:			SearchTagsByName			0.0%
api-service/internal/repository/tag.go:108:			ExistsTagByName				0.0%
api-service/internal/repository/tag.go:115:			ExistsTagByNameExcludeID		0.0%
api-service/internal/repository/tag.go:123:			CreateTagging				0.0%
api-service/internal/repository/tag.go:128:			GetTaggingsByResourceID			0.0%
api-service/internal/repository/tag.go:138:			GetTaggingsByTagID			0.0%
api-service/internal/repository/tag.go:145:			DeleteTagging				0.0%
api-service/internal/repository/tag.go:152:			DeleteTaggingsByResourceID		0.0%
api-service/internal/repository/tag.go:159:			DeleteTaggingsByTagIDs			0.0%
api-service/internal/repository/tag.go:166:			CreateTaggingsBatch			0.0%
api-service/internal/repository/tag.go:174:			ExistsTagging				0.0%
api-service/internal/repository/tag.go:182:			SearchResourcesByTags			0.0%
api-service/internal/repository/two_factor.go:18:		NewTwoFactorRepository			0.0%
api-service/internal/repository/two_factor.go:23:		Create					0.0%
api-service/internal/repository/two_factor.go:28:		GetByUserIDAndMethod			0.0%
api-service/internal/repository/two_factor.go:41:		Update					0.0%
api-service/internal/repository/two_factor.go:46:		Delete					0.0%
api-service/internal/repository/two_factor.go:51:		GetByUserID				0.0%
api-service/internal/repository/two_factor.go:61:		EnableMethod				0.0%
api-service/internal/repository/two_factor.go:78:		DisableMethod				0.0%
api-service/internal/repository/two_factor.go:90:		IsMethodEnabled				0.0%
api-service/internal/repository/two_factor.go:100:		CreateWithTx				0.0%
api-service/internal/repository/two_factor.go:105:		UpdateWithTx				0.0%
api-service/internal/repository/user.go:18:			NewUserRepository			0.0%
api-service/internal/repository/user.go:23:			Create					0.0%
api-service/internal/repository/user.go:28:			GetByID					0.0%
api-service/internal/repository/user.go:38:			GetByIDWithRelations			0.0%
api-service/internal/repository/user.go:51:			GetByUsername				0.0%
api-service/internal/repository/user.go:61:			GetByEmail				0.0%
api-service/internal/repository/user.go:71:			CreateUserRole				0.0%
api-service/internal/repository/user.go:79:			GetByUsernameOrEmail			0.0%
api-service/internal/repository/user.go:91:			Update					0.0%
api-service/internal/repository/user.go:96:			Delete					0.0%
api-service/internal/repository/user.go:106:			List					0.0%
api-service/internal/repository/user.go:130:			ListWithRelations			0.0%
api-service/internal/repository/user.go:163:			Search					0.0%
api-service/internal/repository/user.go:185:			ExistsByUsername			0.0%
api-service/internal/repository/user.go:192:			ExistsByEmail				0.0%
api-service/internal/repository/user.go:199:			ExistsByUsernameExcludeID		0.0%
api-service/internal/repository/user.go:208:			ExistsByEmailExcludeID			0.0%
api-service/internal/repository/user.go:217:			GetActiveUsers				0.0%
api-service/internal/repository/user.go:234:			CountByStatus				0.0%
api-service/internal/repository/user.go:241:			GetUserStats				0.0%
api-service/internal/repository/user.go:257:			applyFilters				0.0%
api-service/internal/repository/user.go:267:			ExistsByID				0.0%
api-service/internal/repository/user.go:274:			GetRoleIDsByUserID			0.0%
api-service/internal/repository/user.go:287:			DeleteUserRole				0.0%
api-service/internal/repository/user_profile.go:17:		NewUserProfileRepository		0.0%
api-service/internal/repository/user_profile.go:24:		GetUserProfileByID			0.0%
api-service/internal/repository/user_profile.go:36:		LoadUserRoles				0.0%
api-service/internal/repository/user_profile.go:46:		UpdateUserProfile			0.0%
api-service/internal/repository/user_profile.go:60:		UpdateUserPassword			0.0%
api-service/internal/repository/user_profile.go:74:		GetLoginHistories			0.0%
api-service/internal/repository/user_profile.go:97:		GetUserConfig				0.0%
api-service/internal/repository/user_profile.go:112:		GetUserConfigsByCategory		0.0%
api-service/internal/repository/user_profile.go:123:		SaveUserConfig				0.0%
api-service/internal/router/router.go:36:			SetupRouter				0.0%
api-service/internal/router/router.go:74:			setupMiddleware				0.0%
api-service/internal/router/router.go:92:			setupHealthCheck			0.0%
api-service/internal/router/router.go:126:			setupSwaggerRoute			0.0%
api-service/internal/router/router.go:135:			setupAPIRoutes				0.0%
api-service/internal/router/router.go:154:			setupUserAuthRoutes			0.0%
api-service/internal/router/router.go:169:			setupI18nRoutes				0.0%
api-service/internal/router/router.go:182:			setupUserRoutes				0.0%
api-service/internal/router/router.go:196:			setupRoleRoutes				0.0%
api-service/internal/router/router.go:215:			setupPermissionRoutes			0.0%
api-service/internal/router/router.go:231:			setupAPITokenRoutes			0.0%
api-service/internal/router/router.go:242:			setupTwoFactorRoutes			0.0%
api-service/internal/router/router.go:258:			setupAuthConfigRoutes			0.0%
api-service/internal/router/router.go:271:			setupAuditLogRoutes			0.0%
api-service/internal/router/router.go:285:			setupUserProfileRoutes			0.0%
api-service/internal/router/router.go:302:			setupSystemConfigRoutes			0.0%
api-service/internal/router/router.go:318:			setupTagRoutes				0.0%
api-service/internal/router/router.go:341:			setupAlertRoutes			0.0%
api-service/internal/service/alert.go:26:			NewAlertService				100.0%
api-service/internal/service/alert.go:39:			CreateAlertRule				77.8%
api-service/internal/service/alert.go:76:			GetAlertRuleByID			44.4%
api-service/internal/service/alert.go:97:			ListAlertRules				88.9%
api-service/internal/service/alert.go:138:			UpdateAlertRule				66.7%
api-service/internal/service/alert.go:203:			DeleteAlertRule				41.7%
api-service/internal/service/alert.go:234:			buildAlertRuleResponse			100.0%
api-service/internal/service/alert.go:252:			ListAlertRecords			69.2%
api-service/internal/service/alert.go:311:			AcknowledgeAlertRecord			61.9%
api-service/internal/service/alert.go:367:			ResolveAlertRecord			63.2%
api-service/internal/service/alert.go:418:			mapAlertRecordToDTO			0.0%
api-service/internal/service/alert.go:440:			determineSeverity			0.0%
api-service/internal/service/api_token.go:27:			NewAPITokenService			0.0%
api-service/internal/service/api_token.go:42:			CleanExpiredTokens			66.7%
api-service/internal/service/api_token.go:57:			RevokeAPITokenByToken			0.0%
api-service/internal/service/api_token.go:95:			RefreshUserAPIToken			0.0%
api-service/internal/service/api_token.go:171:			CheckTokenIsExists			0.0%
api-service/internal/service/audit_log.go:56:			logAndWrapError				100.0%
api-service/internal/service/audit_log.go:62:			NewAuditLogService			100.0%
api-service/internal/service/audit_log.go:81:			RecordLog				100.0%
api-service/internal/service/audit_log.go:123:			GetAuditLog				93.3%
api-service/internal/service/audit_log.go:156:			ListAuditLogs				97.0%
api-service/internal/service/audit_log.go:244:			GetStatistics				93.8%
api-service/internal/service/audit_log.go:296:			ExportAuditLogs				91.7%
api-service/internal/service/audit_log.go:384:			CleanupExpiredLogs			77.8%
api-service/internal/service/audit_log.go:407:			LogUserAction				0.0%
api-service/internal/service/audit_log.go:430:			ShouldSkipAudit				100.0%
api-service/internal/service/audit_log.go:435:			shouldSkip				100.0%
api-service/internal/service/audit_log.go:452:			shouldSkipByMethod			94.4%
api-service/internal/service/audit_log.go:499:			extractPathWithoutQuery			66.7%
api-service/internal/service/audit_log.go:507:			RecordAuditFromRequest			0.0%
api-service/internal/service/audit_log.go:523:			extractAuditInfoFromRequest		0.0%
api-service/internal/service/audit_log.go:583:			getActionFromMethod			0.0%
api-service/internal/service/audit_log.go:611:			buildDescription			0.0%
api-service/internal/service/audit_log.go:621:			getModuleFromPath			0.0%
api-service/internal/service/audit_log.go:634:			getRequestParams			0.0%
api-service/internal/service/audit_log.go:645:			addQueryParams				0.0%
api-service/internal/service/audit_log.go:652:			addPathParams				0.0%
api-service/internal/service/audit_log.go:659:			addPostParams				0.0%
api-service/internal/service/audit_log.go:670:			addFormData				0.0%
api-service/internal/service/audit_log.go:681:			getValueFromSlice			0.0%
api-service/internal/service/audit_log.go:689:			addJSONBodyData				0.0%
api-service/internal/service/audit_log.go:713:			isPasswordField				0.0%
api-service/internal/service/audit_log.go:723:			paramsToJSON				0.0%
api-service/internal/service/audit_log.go:736:			extractErrorMessage			0.0%
api-service/internal/service/audit_log.go:759:			extractResourceID			0.0%
api-service/internal/service/audit_log.go:770:			extractUsernameFromRequestBody		0.0%
api-service/internal/service/auth_config.go:21:			NewAuthConfigService			0.0%
api-service/internal/service/auth_config.go:29:			GetAuthConfig				0.0%
api-service/internal/service/auth_config.go:121:		UpdateAuthConfig			0.0%
api-service/internal/service/auth_config.go:149:		updateAPIAuthConfig			0.0%
api-service/internal/service/auth_config.go:172:		updateTokenAuthConfig			0.0%
api-service/internal/service/auth_config.go:195:		updateUserAuthConfig			0.0%
api-service/internal/service/auth_config.go:228:		updateSessionConfig			0.0%
api-service/internal/service/auth_config.go:248:		updateBasicAuthConfig			0.0%
api-service/internal/service/auth_config.go:255:		updateEmailAuthConfig			0.0%
api-service/internal/service/auth_config.go:265:		GetOAuth2Providers			0.0%
api-service/internal/service/auth_config.go:296:		convertOAuth2ProvidersToResponse	0.0%
api-service/internal/service/auth_config.go:321:		updatePasswordPolicy			0.0%
api-service/internal/service/auth_config.go:346:		updateLoginSecurity			0.0%
api-service/internal/service/auth_config.go:370:		maskSensitiveValue			0.0%
api-service/internal/service/auth_config.go:381:		updateOAuth2LoginConfig			0.0%
api-service/internal/service/auth_config.go:395:		updateTwoFactorConfig			0.0%
api-service/internal/service/auth_config.go:408:		updateTwoFactorMethodsConfig		0.0%
api-service/internal/service/auth_config.go:418:		updateTOTPMethodConfig			0.0%
api-service/internal/service/auth_config.go:440:		updateEmailMethodConfig			0.0%
api-service/internal/service/oauth2.go:45:			NewOAuth2Service			0.0%
api-service/internal/service/oauth2.go:56:			GetAuthorizationURL			0.0%
api-service/internal/service/oauth2.go:102:			ExchangeCodeForToken			0.0%
api-service/internal/service/oauth2.go:164:			GetUserInfo				0.0%
api-service/internal/service/oauth2.go:226:			mapUserInfo				0.0%
api-service/internal/service/oauth2.go:251:			mapUserFields				0.0%
api-service/internal/service/oauth2.go:260:			mapSingleUserField			0.0%
api-service/internal/service/oauth2.go:279:			mapUserID				0.0%
api-service/internal/service/oauth2.go:293:			mapProviderSpecificID			0.0%
api-service/internal/service/oauth2.go:309:			mapGenericUserID			0.0%
api-service/internal/service/oauth2.go:327:			ValidateState				0.0%
api-service/internal/service/oauth2.go:343:			RefreshToken				0.0%
api-service/internal/service/oauth2.go:404:			IsProviderEnabled			0.0%
api-service/internal/service/oauth2.go:410:			GetEnabledProviders			0.0%
api-service/internal/service/permission.go:24:			NewPermissionService			0.0%
api-service/internal/service/permission.go:37:			CreatePermission			57.9%
api-service/internal/service/permission.go:93:			GetPermission				0.0%
api-service/internal/service/permission.go:109:			UpdatePermission			78.9%
api-service/internal/service/permission.go:150:			DeletePermission			58.8%
api-service/internal/service/permission.go:189:			ListPermissions				80.0%
api-service/internal/service/permission.go:219:			GetPermissionTree			71.4%
api-service/internal/service/permission.go:235:			GetPermissionRoles			0.0%
api-service/internal/service/permission.go:266:			CheckUserPermission			66.7%
api-service/internal/service/permission.go:284:			GetUserPermissions			77.8%
api-service/internal/service/permission.go:306:			BatchUpdatePermissionStatus		66.7%
api-service/internal/service/role.go:25:			NewRoleService				0.0%
api-service/internal/service/role.go:40:			CreateRole				87.5%
api-service/internal/service/role.go:62:			validateRoleForCreation			75.0%
api-service/internal/service/role.go:79:			validatePermissionIDs			70.0%
api-service/internal/service/role.go:99:			buildRoleEntity				100.0%
api-service/internal/service/role.go:111:			createRoleWithPermissions		71.4%
api-service/internal/service/role.go:130:			GetRole					87.5%
api-service/internal/service/role.go:147:			UpdateRole				81.8%
api-service/internal/service/role.go:177:			getRoleForUpdate			75.0%
api-service/internal/service/role.go:194:			updateRoleFields			100.0%
api-service/internal/service/role.go:206:			updateRoleWithPermissions		71.4%
api-service/internal/service/role.go:225:			DeleteRole				100.0%
api-service/internal/service/role.go:240:			ListRoles				87.5%
api-service/internal/service/role.go:265:			GetRoleWithPermissions			0.0%
api-service/internal/service/role.go:275:			GetRoleUsers				0.0%
api-service/internal/service/role.go:304:			AssignPermissions			61.9%
api-service/internal/service/role.go:351:			RemovePermissions			53.8%
api-service/internal/service/role.go:382:			BatchUpdateRoleStatus			66.7%
api-service/internal/service/system_config.go:29:		NewSystemConfigService			100.0%
api-service/internal/service/system_config.go:51:		ListSystemConfigs			90.9%
api-service/internal/service/system_config.go:90:		TestSMTP				100.0%
api-service/internal/service/system_config.go:105:		BatchUpdateSystemConfigs		69.2%
api-service/internal/service/system_config.go:158:		encryptConfigValue			20.0%
api-service/internal/service/system_config.go:178:		decryptConfigValue			80.0%
api-service/internal/service/system_config.go:199:		decryptConfigList			60.0%
api-service/internal/service/tag.go:28:				NewTagService				0.0%
api-service/internal/service/tag.go:43:				CreateTag				85.7%
api-service/internal/service/tag.go:79:				GetTag					75.0%
api-service/internal/service/tag.go:95:				UpdateTag				72.7%
api-service/internal/service/tag.go:139:			DeleteTag				66.7%
api-service/internal/service/tag.go:165:			ListTags				86.7%
api-service/internal/service/tag.go:196:			AssignTags				0.0%
api-service/internal/service/tag.go:251:			ReplaceTags				0.0%
api-service/internal/service/tag.go:273:			UnassignTags				0.0%
api-service/internal/service/tag.go:291:			GetResourceTags				100.0%
api-service/internal/service/tag.go:315:			SearchResourcesByTags			0.0%
api-service/internal/service/tag.go:372:			buildSimpleResourceMap			0.0%
api-service/internal/service/tag.go:409:			SearchTags				100.0%
api-service/internal/service/tag.go:432:			convertTagToResponse			100.0%
api-service/internal/service/tag.go:445:			processTagIDsForAssignment		0.0%
api-service/internal/service/tag.go:494:			processTagNamesForAssignment		0.0%
api-service/internal/service/tag.go:557:			collectTagIDs				0.0%
api-service/internal/service/two_factor.go:37:			NewTwoFactorService			0.0%
api-service/internal/service/two_factor.go:50:			GetTwoFactorStatus			0.0%
api-service/internal/service/two_factor.go:66:			EnableTOTP				0.0%
api-service/internal/service/two_factor.go:133:			ConfirmTOTP				0.0%
api-service/internal/service/two_factor.go:191:			DisableTOTP				0.0%
api-service/internal/service/two_factor.go:228:			EnableEmailTwoFactor			0.0%
api-service/internal/service/two_factor.go:269:			DisableEmailTwoFactor			0.0%
api-service/internal/service/two_factor.go:295:			SendEmailCode				0.0%
api-service/internal/service/two_factor.go:331:			VerifyTwoFactor				0.0%
api-service/internal/service/two_factor.go:351:			GenerateBackupCodes			0.0%
api-service/internal/service/two_factor.go:389:			verifyTOTP				0.0%
api-service/internal/service/two_factor.go:407:			verifyEmail				0.0%
api-service/internal/service/two_factor.go:425:			verifyBackupCode			0.0%
api-service/internal/service/two_factor.go:458:			generateBackupCodes			0.0%
api-service/internal/service/two_factor.go:470:			generateEmailCode			0.0%
api-service/internal/service/user.go:29:			NewUserService				0.0%
api-service/internal/service/user.go:37:			ChangePassword				68.8%
api-service/internal/service/user.go:71:			ListUsers				65.0%
api-service/internal/service/user.go:116:			GetUser					75.0%
api-service/internal/service/user.go:132:			CreateUser				68.8%
api-service/internal/service/user.go:173:			UpdateUser				57.9%
api-service/internal/service/user.go:214:			syncUserRoles				80.0%
api-service/internal/service/user.go:268:			UpdateUserStatus			58.3%
api-service/internal/service/user.go:290:			DeleteUser				66.7%
api-service/internal/service/user.go:314:			UpdateUserPassword			0.0%
api-service/internal/service/user.go:343:			ValidateUserAccess			0.0%
api-service/internal/service/user.go:349:			CheckUserQuota				0.0%
api-service/internal/service/user.go:357:			validateEmailUniqueness			66.7%
api-service/internal/service/user.go:369:			validateUserCreation			53.8%
api-service/internal/service/user.go:393:			createUserFromRequest			66.7%
api-service/internal/service/user.go:430:			updateUserFromRequest			61.1%
api-service/internal/service/user.go:462:			buildUserResponse			42.9%
api-service/internal/service/user_auth.go:60:			NewUserAuthService			0.0%
api-service/internal/service/user_auth.go:94:			Register				0.0%
api-service/internal/service/user_auth.go:172:			Login					0.0%
api-service/internal/service/user_auth.go:265:			ForgotPassword				0.0%
api-service/internal/service/user_auth.go:312:			ValidateResetToken			0.0%
api-service/internal/service/user_auth.go:332:			ResetPassword				0.0%
api-service/internal/service/user_auth.go:387:			VerifyEmail				0.0%
api-service/internal/service/user_auth.go:455:			ResendVerificationEmail			0.0%
api-service/internal/service/user_auth.go:506:			OAuth2Login				0.0%
api-service/internal/service/user_auth.go:590:			generateUsernameFromEmail		0.0%
api-service/internal/service/user_auth.go:611:			findOrCreateOAuth2User			0.0%
api-service/internal/service/user_auth.go:663:			buildUserResponse			0.0%
api-service/internal/service/user_auth.go:699:			setEmailVerificationLock		0.0%
api-service/internal/service/user_auth.go:714:			hasEmailVerificationLock		0.0%
api-service/internal/service/user_auth.go:733:			deleteEmailVerificationLock		0.0%
api-service/internal/service/user_auth.go:748:			storeTokenInRedis			0.0%
api-service/internal/service/user_auth.go:777:			getTokenFromRedis			0.0%
api-service/internal/service/user_auth.go:810:			storeJWTToken				0.0%
api-service/internal/service/user_auth.go:874:			Logout					0.0%
api-service/internal/service/user_auth.go:909:			generateVerificationToken		0.0%
api-service/internal/service/user_auth.go:946:			validateVerificationToken		0.0%
api-service/internal/service/user_auth.go:988:			markTokenAsUsed				0.0%
api-service/internal/service/user_auth.go:1014:			storeUserPreferencesInRedis		0.0%
api-service/internal/service/user_auth.go:1069:			fillMissingPreferences			0.0%
api-service/internal/service/user_auth.go:1109:			getSystemConfigByKey			0.0%
api-service/internal/service/user_profile.go:27:		NewUserProfileService			100.0%
api-service/internal/service/user_profile.go:40:		GetUserProfile				76.9%
api-service/internal/service/user_profile.go:95:		UpdateUserProfile			61.5%
api-service/internal/service/user_profile.go:148:		ChangeProfilePassword			52.6%
api-service/internal/service/user_profile.go:189:		GetLoginHistories			92.9%
api-service/internal/service/user_profile.go:232:		GetNotificationSettings			85.7%
api-service/internal/service/user_profile.go:270:		UpdateNotificationSettings		46.7%
api-service/internal/service/user_profile.go:314:		GetSecuritySettings			78.6%
api-service/internal/service/user_profile.go:349:		UpdateSecuritySettings			60.0%
api-service/internal/service/user_profile.go:379:		saveUserConfig				75.0%
api-service/internal/service/user_profile.go:396:		boolToString				100.0%
api-service/pkg/auth/auth_policy.go:27:				NewAuthPolicy				100.0%
api-service/pkg/auth/auth_policy.go:60:				NewValidator				100.0%
api-service/pkg/auth/auth_policy.go:68:				ValidateUsername			100.0%
api-service/pkg/auth/auth_policy.go:108:			ValidateEmail				42.3%
api-service/pkg/auth/auth_policy.go:160:			IsEmail					100.0%
api-service/pkg/auth/auth_policy.go:172:			ValidateUsernameOrEmail			100.0%
api-service/pkg/auth/auth_policy.go:194:			ValidatePasswordWithPolicy		100.0%
api-service/pkg/auth/auth_policy.go:212:			validatePasswordLength			100.0%
api-service/pkg/auth/auth_policy.go:229:			validatePasswordComplexity		86.7%
api-service/pkg/auth/auth_policy.go:259:			analyzePasswordCharacters		100.0%
api-service/pkg/auth/auth_policy.go:278:			ValidateLoginMethod			69.2%
api-service/pkg/auth/auth_policy.go:337:			CheckLoginSecurity			0.0%
api-service/pkg/auth/auth_policy.go:386:			ValidatePassword			0.0%
api-service/pkg/auth/auth_policy.go:400:			checkIPWhitelist			0.0%
api-service/pkg/auth/auth_policy.go:448:			isIPAllowed				0.0%
api-service/pkg/auth/auth_policy.go:481:			checkLoginTimeRestrictions		0.0%
api-service/pkg/auth/auth_policy.go:517:			parseTimeString				83.3%
api-service/pkg/auth/auth_policy.go:543:			checkAccountLockout			0.0%
api-service/pkg/auth/auth_policy.go:579:			recordLoginFailure			0.0%
api-service/pkg/auth/auth_policy.go:666:			clearLoginAttempts			0.0%
api-service/pkg/auth/auth_policy.go:685:			GetLoginAttempts			0.0%
api-service/pkg/auth/auth_policy.go:711:			IsAccountLocked				0.0%
api-service/pkg/auth/auth_policy.go:738:			InitGlobalAuthPolicy			100.0%
api-service/pkg/auth/auth_policy.go:745:			ValidateEmail				100.0%
api-service/pkg/auth/auth_policy.go:761:			IsEmail					100.0%
api-service/pkg/auth/auth_policy.go:774:			ValidateUsernameOrEmail			100.0%
api-service/pkg/auth/jwt.go:36:					NewJWTAuth				0.0%
api-service/pkg/auth/jwt.go:43:					InitJWT					0.0%
api-service/pkg/auth/jwt.go:48:					GetGlobalJWT				0.0%
api-service/pkg/auth/jwt.go:53:					UpdateJWTConfig				0.0%
api-service/pkg/auth/jwt.go:58:					HashToken				0.0%
api-service/pkg/auth/jwt.go:64:					ParseWithClaims				0.0%
api-service/pkg/auth/jwt.go:75:					ExtractTokenFromHeader			0.0%
api-service/pkg/auth/jwt.go:89:					GenerateTokenWithUserInfo		0.0%
api-service/pkg/auth/jwt.go:115:				ValidateToken				0.0%
api-service/pkg/auth/jwt.go:127:				RefreshToken				0.0%
api-service/pkg/auth/jwt.go:138:				GetTokenExpiresInSeconds		0.0%
api-service/pkg/auth/jwt.go:150:				GetTokenSigningMethod			0.0%
api-service/pkg/auth/totp.go:44:				GenerateTOTPSecret			0.0%
api-service/pkg/auth/totp.go:66:				ValidateTOTP				0.0%
api-service/pkg/auth/totp.go:71:				GenerateQRCode				0.0%
api-service/pkg/auth/totp.go:89:				GenerateBackupCodes			0.0%
api-service/pkg/auth/totp.go:104:				generateBackupCode			0.0%
api-service/pkg/auth/totp.go:127:				ValidateBackupCode			0.0%
api-service/pkg/auth/totp.go:137:				RemoveUsedBackupCode			0.0%
api-service/pkg/auth/totp.go:148:				EncodeSecret				0.0%
api-service/pkg/auth/totp.go:153:				DecodeSecret				0.0%
api-service/pkg/auth/totp.go:158:				GenerateSimpleTOTPSecret		0.0%
api-service/pkg/auth/totp.go:167:				GenerateTOTPQRCode			0.0%
api-service/pkg/auth/totp.go:172:				ValidateSimpleTOTP			0.0%
api-service/pkg/crypto/aes.go:30:				NewAESCrypto				100.0%
api-service/pkg/crypto/aes.go:45:				Encrypt					76.9%
api-service/pkg/crypto/aes.go:76:				Decrypt					84.2%
api-service/pkg/crypto/aes.go:119:				RotateKey				100.0%
api-service/pkg/crypto/aes.go:125:				ValidateKey				70.0%
api-service/pkg/crypto/aes.go:152:				InitDefaultCrypto			0.0%
api-service/pkg/crypto/aes.go:166:				GetDefaultCrypto			0.0%
api-service/pkg/database/database.go:28:			parseLogLevel				0.0%
api-service/pkg/database/database.go:63:			InitDB					0.0%
api-service/pkg/database/database.go:113:			initSQLite				0.0%
api-service/pkg/database/database.go:149:			initMySQL				0.0%
api-service/pkg/database/database.go:165:			initPostgreSQL				0.0%
api-service/pkg/database/database.go:181:			buildMySQLDSN				0.0%
api-service/pkg/database/database.go:224:			buildPostgreSQLDSN			0.0%
api-service/pkg/database/database.go:253:			configureConnectionPool			0.0%
api-service/pkg/database/database.go:278:			TestDatabaseConnection			0.0%
api-service/pkg/database/database.go:300:			GetDatabaseInfo				0.0%
api-service/pkg/database/errors/errors.go:50:			Error					0.0%
api-service/pkg/database/errors/errors.go:56:			Unwrap					0.0%
api-service/pkg/database/errors/errors.go:61:			getTypeString				0.0%
api-service/pkg/database/errors/errors.go:79:			IsRetryable				0.0%
api-service/pkg/database/errors/errors.go:89:			GetRetryDelay				0.0%
api-service/pkg/database/errors/errors.go:106:			NewSQLiteErrorClassifier		0.0%
api-service/pkg/database/errors/errors.go:111:			ClassifyError				0.0%
api-service/pkg/database/errors/errors.go:129:			determineErrorType			0.0%
api-service/pkg/database/errors/errors.go:194:			DefaultRetryConfig			0.0%
api-service/pkg/database/errors/errors.go:215:			NewSQLiteRetryHandler			0.0%
api-service/pkg/database/errors/errors.go:227:			ShouldRetry				0.0%
api-service/pkg/database/errors/errors.go:256:			calculateDelay				0.0%
api-service/pkg/database/errors/errors.go:273:			WrapError				0.0%
api-service/pkg/database/errors/errors.go:288:			containsAny				0.0%
api-service/pkg/database/influxdb.go:10:			InitInfluxDB				0.0%
api-service/pkg/database/manager.go:37:				NewDatabaseManagerFactory		0.0%
api-service/pkg/database/manager.go:44:				CreateManager				0.0%
api-service/pkg/database/manager.go:76:				initTimezonePlugin			0.0%
api-service/pkg/database/manager.go:94:				initPermissionI18nHook			0.0%
api-service/pkg/database/manager.go:114:			NewGenericManager			0.0%
api-service/pkg/database/manager.go:122:			Query					0.0%
api-service/pkg/database/manager.go:134:			Transaction				0.0%
api-service/pkg/database/manager.go:152:			Create					0.0%
api-service/pkg/database/manager.go:157:			Update					0.0%
api-service/pkg/database/manager.go:162:			Delete					0.0%
api-service/pkg/database/manager.go:167:			BatchCreate				0.0%
api-service/pkg/database/manager.go:172:			GetDB					0.0%
api-service/pkg/database/manager.go:177:			HealthCheck				0.0%
api-service/pkg/database/manager.go:194:			Close					0.0%
api-service/pkg/database/migrations.go:43:			NewMigrator				0.0%
api-service/pkg/database/migrations.go:51:			AddMigration				0.0%
api-service/pkg/database/migrations.go:61:			InitMigrationTable			0.0%
api-service/pkg/database/migrations.go:69:			Migrate					0.0%
api-service/pkg/database/migrations.go:132:			Rollback				0.0%
api-service/pkg/database/migrations.go:192:			Status					0.0%
api-service/pkg/database/migrations.go:206:			getCurrentBatch				0.0%
api-service/pkg/database/migrations.go:215:			RunMigrations				0.0%
api-service/pkg/database/migrations.go:245:			addSQLiteMigrations			0.0%
api-service/pkg/database/migrations.go:261:			addMySQLMigrations			0.0%
api-service/pkg/database/migrations.go:274:			addPostgresMigrations			0.0%
api-service/pkg/database/plugins/permission_hook.go:25:		NewPermissionI18nHook			0.0%
api-service/pkg/database/plugins/permission_hook.go:34:		RegisterPermissionI18nHook		0.0%
api-service/pkg/database/plugins/permission_hook.go:59:		afterQueryCallback			0.0%
api-service/pkg/database/plugins/permission_hook.go:87:		isPermissionQuery			0.0%
api-service/pkg/database/plugins/permission_hook.go:100:	shouldSkipTranslation			0.0%
api-service/pkg/database/plugins/permission_hook.go:147:	getUserLanguage				0.0%
api-service/pkg/database/plugins/permission_hook.go:208:	getSystemLanguage			0.0%
api-service/pkg/database/plugins/permission_hook.go:235:	translatePermissionNames		0.0%
api-service/pkg/database/plugins/permission_hook.go:278:	translatePermissionName			0.0%
api-service/pkg/database/plugins/permission_hook.go:356:	SkipPermissionI18n			0.0%
api-service/pkg/database/plugins/timezone_plugin.go:30:		NewTimezonePlugin			0.0%
api-service/pkg/database/plugins/timezone_plugin.go:54:		WithLogger				0.0%
api-service/pkg/database/plugins/timezone_plugin.go:62:		WithCustomFields			0.0%
api-service/pkg/database/plugins/timezone_plugin.go:72:		Name					0.0%
api-service/pkg/database/plugins/timezone_plugin.go:79:		Initialize				0.0%
api-service/pkg/database/plugins/timezone_plugin.go:102:	afterQueryCallback			0.0%
api-service/pkg/database/plugins/timezone_plugin.go:142:	shouldSkipConversion			0.0%
api-service/pkg/database/plugins/timezone_plugin.go:189:	getUserTimezone				0.0%
api-service/pkg/database/plugins/timezone_plugin.go:254:	getSystemTimezone			0.0%
api-service/pkg/database/plugins/timezone_plugin.go:289:	convertTimezoneInResult			0.0%
api-service/pkg/database/plugins/timezone_plugin.go:332:	convertStructTimezone			0.0%
api-service/pkg/database/plugins/timezone_plugin.go:423:	isConvertibleField			0.0%
api-service/pkg/database/plugins/timezone_plugin.go:429:	convertTimeField			0.0%
api-service/pkg/database/plugins/timezone_plugin.go:466:	SkipTimezoneConversion			0.0%
api-service/pkg/database/sqlite_manager.go:35:			NewSQLiteManager			0.0%
api-service/pkg/database/sqlite_manager.go:51:			initializePragmas			0.0%
api-service/pkg/database/sqlite_manager.go:81:			WithRetry				0.0%
api-service/pkg/database/sqlite_manager.go:121:			Transaction				0.0%
api-service/pkg/database/sqlite_manager.go:128:			executeTransaction			0.0%
api-service/pkg/database/sqlite_manager.go:166:			Query					0.0%
api-service/pkg/database/sqlite_manager.go:173:			Create					0.0%
api-service/pkg/database/sqlite_manager.go:180:			Update					0.0%
api-service/pkg/database/sqlite_manager.go:187:			Delete					0.0%
api-service/pkg/database/sqlite_manager.go:194:			BatchCreate				0.0%
api-service/pkg/database/sqlite_manager.go:201:			GetDB					0.0%
api-service/pkg/database/sqlite_manager.go:206:			GetActiveTransactions			0.0%
api-service/pkg/database/sqlite_manager.go:213:			SetRetryHandler				0.0%
api-service/pkg/database/sqlite_manager.go:218:			HealthCheck				0.0%
api-service/pkg/database/sqlite_manager.go:237:			Close					0.0%
api-service/pkg/database/wrapper.go:26:				InitDBWrapper				0.0%
api-service/pkg/database/wrapper.go:46:				GetDBWrapper				0.0%
api-service/pkg/database/wrapper.go:51:				newDBWrapper				0.0%
api-service/pkg/database/wrapper.go:81:				GetManager				0.0%
api-service/pkg/database/wrapper.go:88:				GetDB					0.0%
api-service/pkg/database/wrapper.go:95:				Query					0.0%
api-service/pkg/database/wrapper.go:100:			Transaction				0.0%
api-service/pkg/database/wrapper.go:105:			Create					0.0%
api-service/pkg/database/wrapper.go:110:			Update					0.0%
api-service/pkg/database/wrapper.go:115:			Delete					0.0%
api-service/pkg/database/wrapper.go:120:			BatchCreate				0.0%
api-service/pkg/database/wrapper.go:125:			HealthCheck				0.0%
api-service/pkg/database/wrapper.go:130:			Close					0.0%
api-service/pkg/database/wrapper.go:148:			GetConfig				0.0%
api-service/pkg/database/wrapper.go:153:			IsSQLite				0.0%
api-service/pkg/database/wrapper.go:158:			GetActiveTransactions			0.0%
api-service/pkg/database/wrapper.go:166:			ResetConnection				0.0%
api-service/pkg/email/email.go:56:				NewEmailService				0.0%
api-service/pkg/email/email.go:66:				SendVerificationEmail			0.0%
api-service/pkg/email/email.go:90:				SendPasswordResetEmail			0.0%
api-service/pkg/email/email.go:114:				renderTemplate				0.0%
api-service/pkg/email/email.go:139:				getFieldValue				0.0%
api-service/pkg/email/email.go:179:				SendEmail				0.0%
api-service/pkg/email/email.go:217:				sendWithTLS				0.0%
api-service/pkg/email/email.go:277:				buildMessage				0.0%
api-service/pkg/errors/errors.go:21:				Error					0.0%
api-service/pkg/errors/errors.go:30:				GetI18nKey				0.0%
api-service/pkg/errors/errors.go:36:				NewAppError				0.0%
api-service/pkg/errors/errors.go:46:				NewAppErrorWithI18n			0.0%
api-service/pkg/errors/errors.go:57:				NewAppErrorWithMessage			0.0%
api-service/pkg/errors/errors.go:68:				NewAppErrorWithDetails			0.0%
api-service/pkg/errors/errors.go:79:				WrapError				0.0%
api-service/pkg/errors/errors.go:168:				getHTTPStatusByCode			0.0%
api-service/pkg/errors/errors.go:177:				getI18nKeyByCode			0.0%
api-service/pkg/errors/errors.go:186:				getDefaultStatusByCodeRange		0.0%
api-service/pkg/errors/errors.go:295:				GetErrCodeAndMessageKey			0.0%
api-service/pkg/errors/errors.go:308:				Is					0.0%
api-service/pkg/errors/handler.go:14:				ErrorHandlerMiddleware			0.0%
api-service/pkg/errors/handler.go:35:				HandleError				0.0%
api-service/pkg/errors/handler.go:65:				sendErrorResponse			0.0%
api-service/pkg/errors/handler.go:76:				IsAppError				0.0%
api-service/pkg/i18n/i18n.go:32:				Init					0.0%
api-service/pkg/i18n/i18n.go:37:				InitWithConfig				0.0%
api-service/pkg/i18n/i18n.go:63:				GetLocalizer				0.0%
api-service/pkg/i18n/i18n.go:80:				T					0.0%
api-service/pkg/i18n/i18n.go:102:				TWithPlural				0.0%
api-service/pkg/i18n/i18n.go:125:				NormalizeLanguage			0.0%
api-service/pkg/i18n/i18n.go:130:				normalizeLanguage			0.0%
api-service/pkg/i18n/i18n.go:152:				isLanguageSupported			0.0%
api-service/pkg/i18n/i18n.go:162:				GetSupportedLanguages			0.0%
api-service/pkg/i18n/i18n.go:167:				DetectLanguageFromHeader		0.0%
api-service/pkg/i18n/i18n.go:192:				MustT					0.0%
api-service/pkg/i18n/i18n.go:200:				GetAvailableKeys			0.0%
api-service/pkg/i18n/i18n.go:229:				GetLanguageInfo				0.0%
api-service/pkg/i18n/i18n.go:263:				GetInstance				0.0%
api-service/pkg/i18n/i18n.go:276:				NewI18n					0.0%
api-service/pkg/i18n/i18n.go:283:				T					0.0%
api-service/pkg/logger/logger.go:30:				String					0.0%
api-service/pkg/logger/logger.go:48:				ParseLevel				71.4%
api-service/pkg/logger/logger.go:112:				String					100.0%
api-service/pkg/logger/logger.go:117:				Int					100.0%
api-service/pkg/logger/logger.go:122:				Int64					100.0%
api-service/pkg/logger/logger.go:127:				Uint					100.0%
api-service/pkg/logger/logger.go:132:				Float64					100.0%
api-service/pkg/logger/logger.go:137:				Bool					100.0%
api-service/pkg/logger/logger.go:142:				Duration				0.0%
api-service/pkg/logger/logger.go:147:				Time					0.0%
api-service/pkg/logger/logger.go:152:				ErrorField				100.0%
api-service/pkg/logger/logger.go:160:				Any					100.0%
api-service/pkg/logger/logger.go:168:				SetDefault				0.0%
api-service/pkg/logger/logger.go:173:				GetDefault				0.0%
api-service/pkg/logger/logger.go:178:				Debug					0.0%
api-service/pkg/logger/logger.go:184:				Info					0.0%
api-service/pkg/logger/logger.go:190:				Warn					0.0%
api-service/pkg/logger/logger.go:196:				Error					0.0%
api-service/pkg/logger/logger.go:202:				Fatal					0.0%
api-service/pkg/logger/zap.go:54:				NewZapLogger				85.7%
api-service/pkg/logger/zap.go:77:				NewDefaultZapLogger			0.0%
api-service/pkg/logger/zap.go:82:				NewZapLoggerWithConfig			100.0%
api-service/pkg/logger/zap.go:95:				NewZapLoggerWithServerConfig		100.0%
api-service/pkg/logger/zap.go:109:				createEncoderConfig			100.0%
api-service/pkg/logger/zap.go:126:				createOutput				85.7%
api-service/pkg/logger/zap.go:145:				createFileOutput			75.0%
api-service/pkg/logger/zap.go:192:				ensureLogDir				83.3%
api-service/pkg/logger/zap.go:206:				validateFilePath			92.3%
api-service/pkg/logger/zap.go:238:				convertToZapLevel			85.7%
api-service/pkg/logger/zap.go:256:				Debug					100.0%
api-service/pkg/logger/zap.go:261:				Info					100.0%
api-service/pkg/logger/zap.go:266:				Warn					100.0%
api-service/pkg/logger/zap.go:271:				Error					100.0%
api-service/pkg/logger/zap.go:276:				Fatal					0.0%
api-service/pkg/logger/zap.go:281:				DebugContext				100.0%
api-service/pkg/logger/zap.go:286:				InfoContext				100.0%
api-service/pkg/logger/zap.go:291:				WarnContext				100.0%
api-service/pkg/logger/zap.go:296:				ErrorContext				100.0%
api-service/pkg/logger/zap.go:301:				IsDebugEnabled				100.0%
api-service/pkg/logger/zap.go:306:				IsInfoEnabled				100.0%
api-service/pkg/logger/zap.go:311:				IsWarnEnabled				100.0%
api-service/pkg/logger/zap.go:316:				IsErrorEnabled				100.0%
api-service/pkg/logger/zap.go:321:				WithFields				66.7%
api-service/pkg/logger/zap.go:333:				WithContext				100.0%
api-service/pkg/logger/zap.go:338:				SetLevel				100.0%
api-service/pkg/logger/zap.go:343:				SetOutput				0.0%
api-service/pkg/logger/zap.go:348:				convertFields				100.0%
api-service/pkg/logger/zap.go:361:				convertField				72.7%
api-service/pkg/logger/zap.go:386:				extractContextFields			100.0%
api-service/pkg/redis/redis.go:34:				Init					0.0%
api-service/pkg/redis/redis.go:72:				GetClient				0.0%
api-service/pkg/redis/redis.go:85:				Close					0.0%
api-service/pkg/redis/redis.go:94:				Ping					0.0%
api-service/pkg/redis/redis.go:102:				Set					0.0%
api-service/pkg/redis/redis.go:108:				Get					0.0%
api-service/pkg/redis/redis.go:114:				GetDel					0.0%
api-service/pkg/redis/redis.go:120:				Exists					0.0%
api-service/pkg/redis/redis.go:126:				Del					0.0%
api-service/pkg/redis/redis.go:132:				Expire					0.0%
api-service/pkg/redis/redis.go:138:				TTL					0.0%
api-service/pkg/redis/redis.go:144:				Incr					0.0%
api-service/pkg/redis/redis.go:150:				IncrBy					0.0%
api-service/pkg/redis/redis.go:156:				SetNX					0.0%
api-service/pkg/redis/redis.go:162:				MGet					0.0%
api-service/pkg/redis/redis.go:168:				MSet					0.0%
api-service/pkg/redis/redis.go:176:				LPush					0.0%
api-service/pkg/redis/redis.go:182:				RPush					0.0%
api-service/pkg/redis/redis.go:188:				LPop					0.0%
api-service/pkg/redis/redis.go:194:				RPop					0.0%
api-service/pkg/redis/redis.go:200:				LLen					0.0%
api-service/pkg/redis/redis.go:206:				LRange					0.0%
api-service/pkg/redis/redis.go:212:				LIndex					0.0%
api-service/pkg/redis/redis.go:218:				LSet					0.0%
api-service/pkg/redis/redis.go:224:				LTrim					0.0%
api-service/pkg/redis/redis.go:232:				HSet					0.0%
api-service/pkg/redis/redis.go:238:				HGet					0.0%
api-service/pkg/redis/redis.go:244:				HGetAll					0.0%
api-service/pkg/redis/redis.go:250:				HDel					0.0%
api-service/pkg/redis/redis.go:256:				HExists					0.0%
api-service/pkg/redis/redis.go:262:				HLen					0.0%
api-service/pkg/redis/redis.go:268:				HKeys					0.0%
api-service/pkg/redis/redis.go:274:				HVals					0.0%
api-service/pkg/redis/redis.go:280:				HIncrBy					0.0%
api-service/pkg/redis/redis.go:286:				HMGet					0.0%
api-service/pkg/redis/redis.go:294:				SAdd					0.0%
api-service/pkg/redis/redis.go:300:				SMembers				0.0%
api-service/pkg/redis/redis.go:306:				SIsMember				0.0%
api-service/pkg/redis/redis.go:312:				SCard					0.0%
api-service/pkg/redis/redis.go:318:				SRem					0.0%
api-service/pkg/redis/redis.go:324:				SPop					0.0%
api-service/pkg/redis/redis.go:330:				SRandMember				0.0%
api-service/pkg/redis/redis.go:336:				SDiff					0.0%
api-service/pkg/redis/redis.go:342:				SInter					0.0%
api-service/pkg/redis/redis.go:348:				SUnion					0.0%
api-service/pkg/redis/redis.go:356:				Publish					0.0%
api-service/pkg/redis/redis.go:362:				Subscribe				0.0%
api-service/pkg/redis/redis.go:368:				PSubscribe				0.0%
api-service/pkg/redis/redis.go:374:				BLPop					0.0%
api-service/pkg/redis/redis.go:380:				BRPop					0.0%
api-service/pkg/redis/redis.go:386:				RPoplPush				0.0%
api-service/pkg/redis/redis.go:392:				BRPopLPush				0.0%
api-service/pkg/redis/redis_keys.go:31:				FormatRedisKey				0.0%
api-service/pkg/redis/redis_keys.go:36:				FormatRedisKeyWithID			0.0%
api-service/pkg/utils/context.go:24:				GetUserIDFromContext			81.8%
api-service/pkg/utils/context.go:52:				SetUserIDInContext			100.0%
api-service/pkg/utils/context.go:58:				ContextWithUserID			100.0%
api-service/pkg/utils/context.go:69:				GetUserLangFromRedis			0.0%
api-service/pkg/utils/exporter.go:52:				NewDBExporter				0.0%
api-service/pkg/utils/exporter.go:57:				Export					0.0%
api-service/pkg/utils/exporter.go:73:				validateConfig				0.0%
api-service/pkg/utils/exporter.go:90:				setDefaultLimits			0.0%
api-service/pkg/utils/exporter.go:104:				executeQuery				0.0%
api-service/pkg/utils/exporter.go:137:				exportData				0.0%
api-service/pkg/utils/exporter.go:151:				exportToJSON				0.0%
api-service/pkg/utils/exporter.go:156:				exportToCSV				0.0%
api-service/pkg/utils/exporter.go:182:				prepareCSVHeaders			0.0%
api-service/pkg/utils/exporter.go:191:				writeCSVHeaders				0.0%
api-service/pkg/utils/exporter.go:199:				writeCSVData				0.0%
api-service/pkg/utils/exporter.go:215:				exportToExcel				0.0%
api-service/pkg/utils/exporter.go:245:				writeEmptyExcelFile			0.0%
api-service/pkg/utils/exporter.go:254:				prepareExcelHeaders			0.0%
api-service/pkg/utils/exporter.go:263:				extractSortedHeaders			0.0%
api-service/pkg/utils/exporter.go:280:				writeExcelHeaders			0.0%
api-service/pkg/utils/exporter.go:291:				writeExcelData				0.0%
api-service/pkg/utils/exporter.go:308:				saveExcelToBuffer			0.0%
api-service/pkg/utils/exporter.go:317:				formatValue				0.0%
api-service/pkg/utils/exporter.go:340:				columnName				0.0%
api-service/pkg/utils/exporter.go:350:				GetRowCount				0.0%
api-service/pkg/utils/exporter.go:375:				NewExportConfigBuilder			0.0%
api-service/pkg/utils/exporter.go:385:				TableName				0.0%
api-service/pkg/utils/exporter.go:391:				Fields					0.0%
api-service/pkg/utils/exporter.go:397:				QueryBuilder				0.0%
api-service/pkg/utils/exporter.go:403:				Format					0.0%
api-service/pkg/utils/exporter.go:409:				Limit					0.0%
api-service/pkg/utils/exporter.go:415:				OrderBy					0.0%
api-service/pkg/utils/exporter.go:421:				Build					0.0%
api-service/pkg/utils/exporter.go:437:				WhereEqual				0.0%
api-service/pkg/utils/exporter.go:444:				WhereBetween				0.0%
api-service/pkg/utils/exporter.go:451:				WhereLike				0.0%
api-service/pkg/utils/exporter.go:458:				WhereIn					0.0%
api-service/pkg/utils/exporter.go:465:				WhereNotNull				0.0%
api-service/pkg/utils/exporter.go:472:				WhereIsNull				0.0%
api-service/pkg/utils/exporter.go:479:				CombineQueryBuilders			0.0%
api-service/pkg/utils/network.go:26:				GetRealIP				85.7%
api-service/pkg/utils/network.go:53:				extractIPFromHeader			100.0%
api-service/pkg/utils/network.go:73:				getFirstValidIP				85.7%
api-service/pkg/utils/network.go:87:				extractIPFromForwardedHeader		83.3%
api-service/pkg/utils/network.go:109:				IsPrivateIP				100.0%
api-service/pkg/utils/network.go:119:				isPrivateIPv4				100.0%
api-service/pkg/utils/network.go:128:				isIPv4InPrivateRange			100.0%
api-service/pkg/utils/network.go:149:				isPrivateIPv6				100.0%
api-service/tools/create-user/main.go:26:			main					0.0%
api-service/tools/create-user/main.go:81:			createUser				0.0%
api-service/tools/create-user/main.go:142:			validateRoleByCode			0.0%
api-service/tools/create-user/main.go:164:			parseUsernameEmail			0.0%
api-service/tools/migrate-db/main.go:9:				main					0.0%
api-service/tools/test-db/main.go:9:				main					0.0%
total:								(statements)				14.5%

Websoft9 Agent:

websoft9-agent/cmd/agent/main.go:20:			main			0.0%
websoft9-agent/cmd/agent/main.go:65:			NewAgent		100.0%
websoft9-agent/cmd/agent/main.go:78:			StartMonitoring		0.0%
websoft9-agent/cmd/agent/main.go:97:			StartTaskExecutor	0.0%
websoft9-agent/cmd/agent/main.go:114:			StartCommunication	0.0%
websoft9-agent/cmd/agent/main.go:133:			ProcessTask		100.0%
websoft9-agent/cmd/agent/main.go:142:			GetSystemInfo		100.0%
websoft9-agent/internal/agent/agent.go:32:		New			0.0%
websoft9-agent/internal/agent/agent.go:60:		Start			0.0%
websoft9-agent/internal/agent/agent.go:88:		Stop			0.0%
websoft9-agent/internal/agent/agent.go:108:		startHeartbeat		0.0%
websoft9-agent/internal/agent/agent.go:128:		sendHeartbeat		0.0%
websoft9-agent/internal/communication/grpc.go:24:	NewGRPCClient		0.0%
websoft9-agent/internal/communication/grpc.go:31:	Start			0.0%
websoft9-agent/internal/communication/grpc.go:58:	Stop			0.0%
websoft9-agent/internal/communication/grpc.go:67:	SendHeartbeat		0.0%
websoft9-agent/internal/communication/grpc.go:83:	SendMetrics		0.0%
websoft9-agent/internal/communication/grpc.go:99:	SendTaskResult		0.0%
websoft9-agent/internal/communication/grpc.go:115:	ReceiveTasks		0.0%
websoft9-agent/internal/communication/manager.go:29:	NewManager		0.0%
websoft9-agent/internal/communication/manager.go:56:	Start			0.0%
websoft9-agent/internal/communication/manager.go:77:	Stop			0.0%
websoft9-agent/internal/communication/manager.go:96:	listenMessages		0.0%
websoft9-agent/internal/communication/manager.go:116:	handleMessage		0.0%
websoft9-agent/internal/communication/manager.go:128:	SendHeartbeat		0.0%
websoft9-agent/internal/communication/manager.go:133:	SendMetrics		0.0%
websoft9-agent/internal/communication/manager.go:138:	SendTaskResult		0.0%
websoft9-agent/internal/communication/manager.go:143:	SendEvent		0.0%
websoft9-agent/internal/config/config.go:51:		Load			0.0%
websoft9-agent/internal/config/config.go:90:		setDefaults		0.0%
websoft9-agent/internal/config/config.go:118:		validateConfig		0.0%
websoft9-agent/internal/monitor/container.go:47:	NewContainerMonitor	0.0%
websoft9-agent/internal/monitor/container.go:54:	Collect			0.0%
websoft9-agent/internal/monitor/health.go:38:		NewHealthChecker	0.0%
websoft9-agent/internal/monitor/health.go:48:		Check			0.0%
websoft9-agent/internal/monitor/health.go:63:		getHealthChecks		0.0%
websoft9-agent/internal/monitor/health.go:77:		performCheck		0.0%
websoft9-agent/internal/monitor/health.go:101:		httpCheck		0.0%
websoft9-agent/internal/monitor/health.go:122:		tcpCheck		0.0%
websoft9-agent/internal/monitor/health.go:132:		scriptCheck		0.0%
websoft9-agent/internal/monitor/monitor.go:30:		New			0.0%
websoft9-agent/internal/monitor/monitor.go:55:		Start			0.0%
websoft9-agent/internal/monitor/monitor.go:85:		Stop			0.0%
websoft9-agent/internal/monitor/monitor.go:93:		runSystemMonitor	0.0%
websoft9-agent/internal/monitor/monitor.go:110:		runContainerMonitor	0.0%
websoft9-agent/internal/monitor/monitor.go:127:		runHealthChecker	0.0%
websoft9-agent/internal/monitor/system.go:60:		NewSystemMonitor	0.0%
websoft9-agent/internal/monitor/system.go:67:		Collect			0.0%
websoft9-agent/internal/monitor/system.go:81:		collectMetrics		0.0%
websoft9-agent/internal/task/executor.go:51:		NewExecutor		0.0%
websoft9-agent/internal/task/executor.go:64:		Start			0.0%
websoft9-agent/internal/task/executor.go:80:		Stop			0.0%
websoft9-agent/internal/task/executor.go:88:		registerHandlers	0.0%
websoft9-agent/internal/task/executor.go:97:		listenTasks		0.0%
websoft9-agent/internal/task/handlers.go:17:		Execute			0.0%
websoft9-agent/internal/task/handlers.go:39:		Execute			0.0%
websoft9-agent/internal/task/handlers.go:61:		NewSystemCommandHandler	0.0%
websoft9-agent/internal/task/handlers.go:67:		Execute			0.0%
websoft9-agent/internal/task/handlers.go:134:		Execute			0.0%
websoft9-agent/internal/task/handlers.go:156:		NewServiceManageHandler	0.0%
websoft9-agent/internal/task/handlers.go:162:		Execute			0.0%
websoft9-agent/pkg/security/validator.go:27:		NewCommandValidator	100.0%
websoft9-agent/pkg/security/validator.go:64:		ValidateCommand		85.0%
websoft9-agent/pkg/security/validator.go:108:		ValidateSystemctlAction	100.0%
websoft9-agent/pkg/security/validator.go:127:		ValidateServiceName	100.0%
websoft9-agent/pkg/security/validator.go:157:		NewPathValidator	100.0%
websoft9-agent/pkg/security/validator.go:169:		ValidateConfigPath	94.1%
websoft9-agent/pkg/security/validator.go:211:		SanitizeInput		80.0%
websoft9-agent/pkg/security/validator.go:227:		ValidateTaskParams	100.0%
total:							(statements)		14.3%

@github-actions
Copy link

📊 PR Check Results Summary

Commit Message Check: success
Code Format Check: success
Unit Tests: success
Build Check: success
Security Scan: success

🎉 All checks passed! This PR can be merged.

@eoctet eoctet merged commit b366650 into develop Sep 25, 2025
8 checks passed
@eoctet eoctet deleted the develop-feat-plugins branch September 25, 2025 03:05
@eoctet eoctet mentioned this pull request Sep 25, 2025
1 task
zhaojing1987 pushed a commit that referenced this pull request Oct 15, 2025
feat(plugins): add timezone conversion and permission i18n hooks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

数据库层面的多语言

1 participant