Public Source Viewer
비나래아카이브 개발자 포털
실제 서비스 구조를 살펴볼 수 있는 공개용 코드 뷰어입니다. 인증, 세션, 외부 연동, 토큰, 관리자 식별 등 보안상 민감한 구현은 파일 단위 또는 줄 단위로 검열됩니다.
src/services/persona.service.ts
공개 가능
1
import fs from 'fs';
2
[SECURITY REDACTED] 민감한 설정/인증/토큰 관련 코드입니다.
3
import { Persona } from '../types/models';
4
5
function readPersonas(): Persona[] {
6
try {
7
[SECURITY REDACTED] 민감한 설정/인증/토큰 관련 코드입니다.
8
[SECURITY REDACTED] 민감한 설정/인증/토큰 관련 코드입니다.
9
} catch {
10
return [];
11
}
12
}
13
14
function writePersonas(personas: Persona[]): void {
15
[SECURITY REDACTED] 민감한 설정/인증/토큰 관련 코드입니다.
16
}
17
18
export function getPersonaByDiscordId(discordUserId: string): Persona | null {
19
return readPersonas().find(p => p.discordUserId === discordUserId) || null;
20
}
21
22
export function getPersonaByUsername(username: string): Persona | null {
23
return readPersonas().find(p => p.hinanaUsername === username) || null;
24
}
25
26
export function savePersona(data: Omit<Persona, 'createdAt' | 'updatedAt'>): void {
27
const personas = readPersonas();
28
const idx = personas.findIndex(p => p.discordUserId === data.discordUserId);
29
const now = new Date().toISOString();
30
if (idx !== -1) {
31
personas[idx] = { ...data, createdAt: personas[idx].createdAt, updatedAt: now };
32
} else {
33
personas.push({ ...data, createdAt: now, updatedAt: now });
34
}
35
writePersonas(personas);
36
}
37
38
export function hasPersona(discordUserId: string): boolean {
39
return readPersonas().some(p => p.discordUserId === discordUserId);
40
}
41