Code
Hub
Workspaces
Following
Trending
Connect
MCP
copy
Create free account
hub
/
github.com/Pandlagon/IELTS-Studio
/ functions
Functions
952 in github.com/Pandlagon/IELTS-Studio
⨍
Functions
952
◇
Types & classes
177
↓ 290 callers
Method
get
(String key)
backend/src/main/java/com/ieltsstudio/infra/RedisOps.java:8
↓ 94 callers
Method
isBlank
(String s)
backend/src/main/java/com/ieltsstudio/config/AdminBootstrapConfig.java:104
↓ 74 callers
Method
success
返回带数据的成功响应(200)
backend/src/main/java/com/ieltsstudio/common/Result.java:34
↓ 72 callers
Method
resolve
解析某用户在某任务类型下的凭据。 @param userId 登录用户 ID(为 null 时回退 BUILTIN) @param taskType 任务类型 @return 凭据快照(apiKey 仅存在于后端内存)
backend/src/main/java/com/ieltsstudio/ai/service/AiSettingsService.java:57
↓ 67 callers
Method
toString
脱敏 toString:只输出 key 是否已配置,不输出 key 本身。 避免被无意中打印到日志或异常栈。
backend/src/main/java/com/ieltsstudio/ai/model/AiCredentials.java:55
↓ 59 callers
Method
checkBeforeCall
AI 调用前守卫(旧签名,provider=null)。 <p>保留兼容;新调用点应使用 {@link #checkBeforeCall(Long, AiFeature, AiKeyMode, String)}。</p>
backend/src/main/java/com/ieltsstudio/ai/service/AiUsageGuard.java:91
↓ 57 callers
Method
chat
发送一次 chat completions 请求。 @param request 统一请求(含凭据、消息、参数) @return 统一响应(content / provider / model / statusCode) @throws Exception 网络 / 超时 / provider 错
backend/src/main/java/com/ieltsstudio/ai/client/OpenAiCompatibleClient.java:65
↓ 52 callers
Method
markSuccess
AI 调用成功后回调(旧签名,provider=null)。 <p>保留兼容;新调用点应使用 {@link #markSuccess(Long, AiFeature, AiKeyMode, String)}。</p>
backend/src/main/java/com/ieltsstudio/ai/service/AiUsageGuard.java:120
↓ 51 callers
Method
error
返回指定状态码的错误响应
backend/src/main/java/com/ieltsstudio/common/Result.java:50
↓ 49 callers
Method
markFailure
AI 调用失败后回调(旧签名,provider=null)。 <p>保留兼容;新调用点应使用 {@link #markFailure(Long, AiFeature, AiKeyMode, String, Exception)}。</p>
backend/src/main/java/com/ieltsstudio/ai/service/AiUsageGuard.java:145
↓ 34 callers
Method
selectUserIncludingDeleted
按主键查询用户(包含已逻辑删除的用户),用于管理端查看禁用用户详情。
backend/src/main/java/com/ieltsstudio/mapper/UserMapper.java:79
↓ 33 callers
Method
getRole
从 Token 中提取角色
backend/src/main/java/com/ieltsstudio/util/JwtUtil.java:91
↓ 29 callers
Method
getUserId
从 Token 中提取用户 ID
backend/src/main/java/com/ieltsstudio/util/JwtUtil.java:80
↓ 26 callers
Method
findBucket
(List<AdminAiUsageBucketDto> buckets, String name)
backend/src/test/java/com/ieltsstudio/ai/service/AdminAiUsageStatsServiceTest.java:227
↓ 24 callers
Method
set
(String key, Object val, Duration ttl)
backend/src/main/java/com/ieltsstudio/infra/RedisOps.java:10
↓ 19 callers
Method
user
构造 user 文本消息
backend/src/main/java/com/ieltsstudio/ai/model/AiChatMessage.java:41
↓ 18 callers
Method
notFound
返回 404 资源不存在响应
backend/src/main/java/com/ieltsstudio/common/Result.java:73
↓ 18 callers
Method
update
PUT /exam-collections/{id} — 更新试卷集
backend/src/main/java/com/ieltsstudio/controller/ExamCollectionController.java:56
↓ 17 callers
Method
encrypt
加密明文 API Key。 @param plainApiKey 明文 Key @return {@code Base64(IV||密文+tag)};null / 空白输入返回 null
backend/src/main/java/com/ieltsstudio/ai/util/AiApiKeyCrypto.java:102
↓ 17 callers
Method
getUsername
从 Token 中提取用户名
backend/src/main/java/com/ieltsstudio/util/JwtUtil.java:86
↓ 17 callers
Method
system
构造 system 文本消息
backend/src/main/java/com/ieltsstudio/ai/model/AiChatMessage.java:36
↓ 16 callers
Method
str
(Map<String, Object> map, String key)
backend/src/main/java/com/ieltsstudio/service/AsyncWordService.java:262
↓ 15 callers
Method
getPreset
根据 Provider 类型查找 preset。 @return preset;不存在时返回 {@link Optional#empty()}
backend/src/main/java/com/ieltsstudio/ai/service/AiProviderRegistry.java:99
↓ 14 callers
Method
isConfigured
Phase 5C-3:所有 AI 调用已接入新 Provider 架构,统一走 {@link AiSettingsService#resolve},本方法始终返回 true, 避免在 USER 模式下因站点内置 DeepSeek key 为空而被误判为“AI not configured”。
backend/src/main/java/com/ieltsstudio/service/AiParseService.java:142
↓ 12 callers
Method
existingDefault
构造一个已存在的默认 BUILTIN 实体(避免触发 insert)
backend/src/test/java/com/ieltsstudio/service/UserAiSettingsServiceTest.java:54
↓ 12 callers
Method
newRecord
(LocalDateTime createdAt, Long userId, String taskType, String feature, i
backend/src/test/java/com/ieltsstudio/ai/service/AdminAiUsageStatsServiceTest.java:211
↓ 12 callers
Method
providerName
仅返回 provider 枚举名或 null,避免在 usage record 中暴露 baseUrl / model / API Key
backend/src/main/java/com/ieltsstudio/service/AiParseService.java:994
↓ 12 callers
Method
updateSettings
更新当前用户 AI 设置,返回更新后的脱敏设置。 <p>本阶段允许在 USER 模式下保存不完整配置(如先填 provider/baseUrl/model 暂不填 key); 真正解析 credentials 时({@code AiSettingsService.resolve})才校验 key
backend/src/main/java/com/ieltsstudio/service/UserAiSettingsService.java:75
↓ 11 callers
Function
_saveStudyState
()
frontend/src/stores/word.js:194
↓ 11 callers
Method
aiCallFailed
把 provider 调用相关异常脱敏后转为业务异常, 避免把原始 response body / API Key 透传给前端。
backend/src/main/java/com/ieltsstudio/service/AiParseService.java:988
↓ 11 callers
Method
check
批改完形填空。 @param userId 当前登录用户 ID @param passage 短文全文(最长 6000 字符) @param blanks 题目列表(含 number, answer, options, correctOption),最多 20 题 @p
backend/src/main/java/com/ieltsstudio/service/ClozeService.java:195
↓ 11 callers
Method
decrypt
解密 API Key 密文。 @param encryptedApiKey {@code Base64(IV||密文+tag)} 密文 @return 明文 Key;null / 空白输入返回 null @throws IllegalStateException 解密失败(异常信息不含密文 / 明
backend/src/main/java/com/ieltsstudio/ai/util/AiApiKeyCrypto.java:132
↓ 11 callers
Method
newUser
(Long id, String username, String email, String role, Integer deleted)
backend/src/test/java/com/ieltsstudio/service/AdminUserServiceTest.java:296
↓ 11 callers
Method
newUser
(Long id, String username, String email, String role, Integer deleted)
backend/src/test/java/com/ieltsstudio/service/AdminPermissionServiceTest.java:262
↓ 11 callers
Method
providerConfig
(String provider, String baseUrl, String model, String apiKey, Boolean clear)
backend/src/test/java/com/ieltsstudio/service/UserAiSettingsServiceTest.java:76
↓ 11 callers
Method
recordSuccess
记录一条成功写操作审计日志。 <p>调用方应在主业务成功返回后调用本方法。{@code request} 用于读取 IP / User-Agent; 可为 null(例如异步场景),此时 IP / UA 字段为 null。</p> <p>写入失败不会抛异常(仅 warn log),避免影响主业务
backend/src/main/java/com/ieltsstudio/service/AdminAuditLogService.java:113
↓ 11 callers
Method
updateRequest
(String keyMode, AiProviderConfigRequest text, AiProviderConfigRequest vision)
backend/src/test/java/com/ieltsstudio/service/UserAiSettingsServiceTest.java:68
↓ 10 callers
Method
isAllowed
检查指定用户在指定 feature 上的当前分钟窗口是否允许调用。 @param userId 用户 ID @param feature AI 功能 @param limitPerMinute 每分钟允许调用次数上限 @return {@code true} 允
backend/src/main/java/com/ieltsstudio/ai/service/AiRedisRateLimiter.java:50
↓ 10 callers
Method
newUser
(Long id, String username, String email, String role, Integer deleted)
backend/src/test/java/com/ieltsstudio/service/AdminQuotaServiceTest.java:245
↓ 10 callers
Method
selectByUserId
查询某用户被分配的全部权限。 @param userId 用户 ID @return 权限记录列表(按 id 升序)
backend/src/main/java/com/ieltsstudio/mapper/AdminUserPermissionMapper.java:31
↓ 10 callers
Method
writeProgress
(Long bookId, int total, int saved, int skipped, String status, String error)
backend/src/main/java/com/ieltsstudio/service/AsyncWordService.java:233
↓ 9 callers
Method
countAdminUsers
管理端统计用户总数(包含已逻辑删除的用户),过滤条件与 {@link #selectAdminUsers} 一致。
backend/src/main/java/com/ieltsstudio/mapper/UserMapper.java:59
↓ 9 callers
Method
delete
DELETE /exam-collections/{id} — 删除试卷集(不删除内部试卷)
backend/src/main/java/com/ieltsstudio/controller/ExamCollectionController.java:67
↓ 9 callers
Method
findCurrentQuota
查询用户当前周期 quota 行,无则返回 null(不创建)
backend/src/main/java/com/ieltsstudio/service/AdminQuotaService.java:169
↓ 9 callers
Method
hasApiKey
是否已配置 API Key(非 null 且非空白)
backend/src/main/java/com/ieltsstudio/ai/model/AiCredentials.java:47
↓ 9 callers
Method
initAdminIfNeeded
幂等初始化管理员账号。 <p>包级可见以方便单元测试(不强制)。</p>
backend/src/main/java/com/ieltsstudio/config/AdminBootstrapConfig.java:61
↓ 9 callers
Method
newQuota
(Long id, Long userId, int total, int used)
backend/src/test/java/com/ieltsstudio/service/AdminQuotaServiceTest.java:255
↓ 9 callers
Method
parseWithAi
(Long userId, String rawText)
backend/src/main/java/com/ieltsstudio/service/AiParseService.java:179
↓ 8 callers
Method
buildWithKey
(String apiKey)
backend/src/test/java/com/ieltsstudio/ai/model/AiCredentialsTest.java:24
↓ 8 callers
Method
countAllPermissions
统计表中权限记录总数,用于判断是否进入显式权限模式。 @return 表中权限记录总数;0 表示仍处于兼容模式(所有 ADMIN 拥有全部权限)
backend/src/main/java/com/ieltsstudio/mapper/AdminUserPermissionMapper.java:39
↓ 8 callers
Method
create
新增用户。 <p>权限:{@link AdminPermission#ADMIN_USERS_MANAGE}</p> <p>规则:role 白名单(USER/ADMIN)、username/email 唯一性、密码 BCrypt 加密、不返回 password。 userId / role 一律
backend/src/main/java/com/ieltsstudio/controller/AdminUserController.java:93
↓ 8 callers
Method
generate
调用 AI 生成完形填空。 @param userId 当前登录用户 ID(由 Controller 从 AuthUser 注入,禁止前端传入) @param words 用户选择的单词列表(1-10 个) @param meanings 对应的中文释义列表(可为空或长度不足
backend/src/main/java/com/ieltsstudio/service/ClozeService.java:101
↓ 8 callers
Method
generateWordEntries
(Long userId, String inputText)
backend/src/main/java/com/ieltsstudio/service/AiParseService.java:491
↓ 8 callers
Method
gradeWriting
(Long userId, String taskPrompt, String userEssay, int wordLimit)
backend/src/main/java/com/ieltsstudio/service/AiParseService.java:398
↓ 8 callers
Method
hasField
(Class<?> clazz, String fieldName)
backend/src/test/java/com/ieltsstudio/service/AdminAuditLogServiceTest.java:293
↓ 8 callers
Method
loadUserOrThrow
加载用户(包含已禁用),不存在则抛业务异常。
backend/src/main/java/com/ieltsstudio/service/AdminUserService.java:237
↓ 8 callers
Method
parseImages
(Long userId, List<byte[]> imageBytes, List<String> filenames, String examType)
backend/src/main/java/com/ieltsstudio/service/QwenAiParseService.java:447
↓ 8 callers
Method
postProcess
Apply all post-processing fixes to a parsed result: - Enrich letter-only MCQ options with full descriptions - Enrich roman-numeral-only heading option
backend/src/main/java/com/ieltsstudio/service/AiParseService.java:237
↓ 8 callers
Function
safeNumber
(value, fallback = 0)
frontend/src/stores/word.js:20
↓ 8 callers
Method
selectAdminUsers
管理端分页查询用户(包含已逻辑删除的用户)。 <p>使用原生 SQL 而非 wrapper,避免 MyBatis-Plus {@code @TableLogic} 自动追加 {@code deleted = 0} 导致无法查到已禁用用户。</p> @param offset 偏移量({@cod
backend/src/main/java/com/ieltsstudio/mapper/UserMapper.java:35
↓ 8 callers
Method
supports
校验某 Provider 是否支持给定任务类型。 <p>规则:</p> <ul> <li>自定义模板(OPENAI_COMPATIBLE)默认支持 TEXT 与 VISION(具体能力由用户配置的模型决定)。</li> <li>其它 Provider:当 preset.taskType =
backend/src/main/java/com/ieltsstudio/ai/service/AiProviderRegistry.java:134
↓ 8 callers
Method
translateWithContext
(Long userId, String passage, String selectedText)
backend/src/main/java/com/ieltsstudio/service/AiParseService.java:887
↓ 8 callers
Method
updateDeletedById
更新用户启用/禁用状态(直接操作 deleted 字段,绕过 @TableLogic 的逻辑删除语义)。 @param id 用户 ID @param deleted 0=启用,1=禁用
backend/src/main/java/com/ieltsstudio/mapper/UserMapper.java:88
↓ 8 callers
Method
updateRoleById
更新用户角色。
backend/src/main/java/com/ieltsstudio/mapper/UserMapper.java:94
↓ 7 callers
Method
deleteByUserId
删除某用户的全部权限记录(用于更新权限时的先删后插策略)。 @param userId 用户 ID @return 被删除的记录数
backend/src/main/java/com/ieltsstudio/mapper/AdminUserPermissionMapper.java:57
↓ 7 callers
Method
hasField
(Class<?> clazz, String fieldName)
backend/src/test/java/com/ieltsstudio/service/AdminPermissionServiceTest.java:280
↓ 7 callers
Method
listUsers
分页查询用户列表(包含已禁用用户)。 @param page 页码,最小 1(小于 1 自动 clamp 到 1) @param pageSize 每页条数,范围 1~100(越界自动 clamp) @param keyword 关键字(匹配 username / email),可为 n
backend/src/main/java/com/ieltsstudio/service/AdminUserService.java:58
↓ 7 callers
Method
queryForUser
查询当前用户的 AI 用量视图。 @param userId 当前登录用户 ID(来自 AuthUser) @return 只读用量 DTO(含默认视图,永不返回 null)
backend/src/main/java/com/ieltsstudio/ai/service/AiUsageQueryService.java:54
↓ 7 callers
Method
requireAdmin
防御性 ADMIN 校验 + 精细权限校验(Phase 8C)。 <p>Spring Security 已在路由层做 {@code hasRole("ADMIN")} 拦截, 此处做二次校验防止配置遗漏,并要求精细权限以兼容模式/显式模式规则判断。</p>
backend/src/main/java/com/ieltsstudio/controller/AdminUserController.java:204
↓ 7 callers
Method
selectByUsernameOrEmailIncludingDeleted
按 username 或 email 查询用户(含已禁用 deleted=1),用于启动时管理员初始化的"升级现有账号"分支: 若目标用户名/邮箱已存在且为 USER,则升级为 ADMIN 并重置密码。
backend/src/main/java/com/ieltsstudio/mapper/UserMapper.java:128
↓ 7 callers
Method
userSettings
()
backend/src/test/java/com/ieltsstudio/ai/service/AiSettingsServiceUserModeTest.java:58
↓ 6 callers
Function
_storeKey
(bookId, type)
frontend/src/stores/word.js:306
↓ 6 callers
Method
chatWithContext
AI chat: answer user's question based on exam context. Returns plain text answer (not JSON).
backend/src/main/java/com/ieltsstudio/service/AiParseService.java:950
↓ 6 callers
Method
commitSection
Backward-compatible overload without rawText.
backend/src/main/java/com/ieltsstudio/service/AsyncParseService.java:757
↓ 6 callers
Method
countAllAdminsIncludingDeleted
统计所有 ADMIN 用户数量(包含已禁用 deleted=1),用于启动时管理员初始化的幂等判断: 只要库中曾存在过 ADMIN(即使被禁用),就不再用环境变量凭据自动创建新的管理员, 避免初始密码被重新激活。
backend/src/main/java/com/ieltsstudio/mapper/UserMapper.java:114
↓ 6 callers
Method
countByBookId
(Long bookId)
backend/src/main/java/com/ieltsstudio/mapper/WordEntryMapper.java:16
↓ 6 callers
Method
countUsersWithPermission
统计拥有指定权限的用户数量,用于"不能移除最后一个权限管理员"保护。 @param permission 权限名({@link com.ieltsstudio.entity.AdminPermission} 枚举名) @return 拥有该权限的用户数量
backend/src/main/java/com/ieltsstudio/mapper/AdminUserPermissionMapper.java:48
↓ 6 callers
Method
evictBooksCache
(Long userId)
backend/src/main/java/com/ieltsstudio/service/WordBookService.java:200
↓ 6 callers
Method
expire
(String key, Duration ttl)
backend/src/main/java/com/ieltsstudio/infra/RedisOps.java:16
↓ 6 callers
Method
hasField
(Class<?> clazz, String fieldName)
backend/src/test/java/com/ieltsstudio/service/AdminQuotaServiceTest.java:266
↓ 6 callers
Method
hasPermission
判断某用户是否拥有指定权限。 <p>规则: <ul> <li>USER → 永远 false。</li> <li>ADMIN + 兼容模式 → 永远 true。</li> <li>ADMIN + 显式模式 → 表中包含该权限时 true。</li> </ul> <p>注意:role
backend/src/main/java/com/ieltsstudio/service/AdminPermissionService.java:134
↓ 6 callers
Method
orDefault
(String value, String fallback)
backend/src/main/java/com/ieltsstudio/ai/service/AiSettingsService.java:232
↓ 6 callers
Method
requirePermission
要求当前用户拥有指定权限,否则抛 {@link org.springframework.security.access.AccessDeniedException}。 <p>Controller 内调用 {@code requirePermission(authUser.getId(), Admi
backend/src/main/java/com/ieltsstudio/service/AdminPermissionService.java:158
↓ 6 callers
Method
setTotal
设置当前周期 creditsTotal。 <ul> <li>无 quota 行:创建当前周期 quota 行(creditsTotal=request, creditsUsed=0)。</li> <li>已存在:更新 creditsTotal,不修改 creditsUsed。</li>
backend/src/main/java/com/ieltsstudio/service/AdminQuotaService.java:96
↓ 6 callers
Method
summarizeProviderError
摘要 provider 错误响应体:屏蔽疑似 key / Bearer 片段,并截断到 300 字符。 <p>用于把 provider 原始错误写入日志前的脱敏处理, <b>不得</b>把脱敏后的结果直接返回给前端(前端只看通用提示)。</p> @param body provider 返回的原
backend/src/main/java/com/ieltsstudio/ai/util/AiLogSanitizer.java:76
↓ 6 callers
Method
updatePasswordById
更新用户密码哈希(已通过 {@code PasswordEncoder.encode(...)} 加密)。
backend/src/main/java/com/ieltsstudio/mapper/UserMapper.java:100
↓ 6 callers
Method
updateUserPermissions
更新某 ADMIN 用户的权限集合(先删后插)。 <p>执行 5 条安全规则(见类注释),任一不满足时抛 {@link RuntimeException}。</p> <p><b>事务:</b>加 {@link Transactional} 防止"删除成功但插入失败"导致目标 ADMIN 权限被部
backend/src/main/java/com/ieltsstudio/service/AdminPermissionService.java:180
↓ 5 callers
Function
_historyKey
()
frontend/src/stores/exam.js:369
↓ 5 callers
Function
_saveProgress
()
frontend/src/stores/word.js:764
↓ 5 callers
Method
buildDto
(User user, AiUsageQuota quota, Period period)
backend/src/main/java/com/ieltsstudio/service/AdminQuotaService.java:213
↓ 5 callers
Function
clamp
(value, min, max)
frontend/src/stores/word.js:16
↓ 5 callers
Method
createUser
管理员新增用户。 <p>规则: <ul> <li>role 必须是 USER / ADMIN(白名单校验,不信任前端)。</li> <li>username / email 必须未被占用(含已禁用用户,避免唯一约束冲突)。</li> <li>密码使用 {@link PasswordEn
backend/src/main/java/com/ieltsstudio/service/AdminUserService.java:102
↓ 5 callers
Method
currentPeriod
当前自然周:周一 00:00:00 到下周一 00:00:00(与 AiUsageGuard 一致)
backend/src/main/java/com/ieltsstudio/service/AdminQuotaService.java:159
↓ 5 callers
Method
ensureDefaultBook
Ensure the user has a default 生词本; create one if absent.
backend/src/main/java/com/ieltsstudio/service/WordBookService.java:31
↓ 5 callers
Method
evictEntriesCache
(Long userId, Long bookId)
backend/src/main/java/com/ieltsstudio/service/WordBookService.java:205
↓ 5 callers
Method
getOrCreateEntity
获取或创建用户设置实体。无记录时插入一条默认 BUILTIN 记录(不含任何 API Key)。
backend/src/main/java/com/ieltsstudio/service/UserAiSettingsService.java:97
↓ 5 callers
Method
groupBy
(List<AiUsageRecord> records, Function<AiUsageRecord, String>
backend/src/main/java/com/ieltsstudio/ai/service/AdminAiUsageStatsService.java:105
↓ 5 callers
Method
maskApiKey
脱敏 API Key,保留首部前缀与尾部 4 位,中间用 {@code } 替代。 <p>示例:</p> <ul> <li>{@code maskApiKey("sk-abcdef123456")} → {@code sk- 3456}</li> <li>{@code mask
backend/src/main/java/com/ieltsstudio/ai/util/AiLogSanitizer.java:51
↓ 5 callers
Method
newPerm
(Long id, Long userId, String permission)
backend/src/test/java/com/ieltsstudio/service/AdminPermissionServiceTest.java:272
↓ 5 callers
Method
parseToken
解析 Token,返回 Claims(Payload) @throws JwtException Token 无效或已过期时抛出
backend/src/main/java/com/ieltsstudio/util/JwtUtil.java:71
next →
1–100 of 952, ranked by callers