初次提交
Build VoiceHub FPK / build-fpk (push) Failing after 56m5s
Build and Push Docker Image / build-and-push (push) Canceled after 1h9m35s

This commit is contained in:
2026-09-06 08:19:02 +08:00
commit 4ce4649aaf
1061 changed files with 337258 additions and 0 deletions
+89
View File
@@ -0,0 +1,89 @@
import { maskStudentName } from './siteUtils'
/**
* 可脱敏的用户/参与者接口
*/
export interface MaskableUser {
id?: number | string
name?: string
displayName?: string
grade?: string | null
class?: string | null
[key: string]: any
}
/**
* 可脱敏的歌曲信息接口
*/
export interface MaskableSong {
requester?: string
requesterGrade?: string | null
requesterClass?: string | null
collaborators?: MaskableUser[]
replayRequesters?: MaskableUser[]
[key: string]: any
}
/**
* 对单个参与者(联合投稿人、重播申请人)进行脱敏
* @param user 参与者对象
*/
export function maskUserInfo(user: MaskableUser) {
if (user.name) user.name = maskStudentName(user.name)
if (user.displayName) user.displayName = maskStudentName(user.displayName)
user.grade = null
user.class = null
}
/**
* 对单首歌曲的投稿相关信息进行脱敏
* @param song 歌曲对象
*/
export function maskSongInfo(song: MaskableSong) {
// 脱敏主投稿人姓名
if (song.requester) {
song.requester = maskStudentName(song.requester)
}
// 隐藏主投稿人年级和班级
if (song.requesterGrade !== undefined) song.requesterGrade = null
if (song.requesterClass !== undefined) song.requesterClass = null
// 批量脱敏联合投稿人
if (song.collaborators && Array.isArray(song.collaborators)) {
song.collaborators.forEach(maskUserInfo)
}
// 批量脱敏重播申请人
if (song.replayRequesters && Array.isArray(song.replayRequesters)) {
song.replayRequesters.forEach(maskUserInfo)
}
}
/**
* 批量脱敏歌曲列表(通常用于 index.get.ts)
* @param songs 歌曲列表
*/
export function maskSongsInfo(songs: MaskableSong[]) {
songs.forEach(maskSongInfo)
}
/**
* 公共排期项接口
*/
export interface PublicScheduleItem {
song?: MaskableSong
[key: string]: any
}
/**
* 批量脱敏公共排期数据(通常用于 public.get.ts)
* @param data 排期数据列表
*/
export function maskPublicScheduleData(data: PublicScheduleItem[]) {
data.forEach(item => {
if (item.song) {
maskSongInfo(item.song)
}
})
}