90 lines
2.1 KiB
TypeScript
90 lines
2.1 KiB
TypeScript
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)
|
||
}
|
||
})
|
||
}
|