Public Source Viewer

비나래아카이브 개발자 포털

실제 서비스 구조를 살펴볼 수 있는 공개용 코드 뷰어입니다. 인증, 세션, 외부 연동, 토큰, 관리자 식별 등 보안상 민감한 구현은 파일 단위 또는 줄 단위로 검열됩니다.

Redacted View
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