retro achievement integration

This commit is contained in:
roormonger
2026-03-26 07:13:42 -04:00
parent 3d593b83f0
commit 7ccc48ae0f
2 changed files with 184 additions and 45 deletions

View File

@@ -14,6 +14,43 @@ export interface Platform {
iconUrl?: string;
}
export interface RAAchievement {
ra_id: number | null;
title: string | null;
description: string | null;
points: number | null;
num_awarded: number | null;
num_awarded_hardcore: number | null;
badge_id: string | null;
}
export interface RomRAMetadata {
first_release_date?: number | null;
genres?: string[];
companies?: string[];
achievements: RAAchievement[];
}
export interface EarnedAchievement {
id: string;
date: string;
date_hardcore?: string;
}
export interface RAProgressionResult {
rom_ra_id: number | null;
max_possible: number | null;
num_awarded: number | null;
num_awarded_hardcore: number | null;
most_recent_awarded_date?: string | null;
earned_achievements: EarnedAchievement[];
}
export interface RAProgression {
total: number;
results: RAProgressionResult[];
}
export interface DetailedGame extends Game {
summary?: string;
developers?: string[];
@@ -35,6 +72,8 @@ export interface DetailedGame extends Game {
platformId?: number;
videoUrl?: string; // Direct video link
youtubeId?: string; // YouTube ID for embed
ra_id?: number;
merged_ra_metadata?: RomRAMetadata;
}
export interface RommCollection {
@@ -51,6 +90,8 @@ export interface UserProfile {
username: string;
avatarUrl?: string;
roleName: string;
ra_username?: string | null;
ra_progression?: RAProgression | null;
}
// Function to safely extract base URL
@@ -341,6 +382,8 @@ export const rommApiClient = {
platformId: json.platform_id,
videoUrl: getFullImageUrl(json.url_video || json.ss_metadata?.video_url),
youtubeId: json.youtube_video_id || json.igdb_metadata?.youtube_video_id || json.launchbox_metadata?.youtube_video_id,
ra_id: json.ra_id,
merged_ra_metadata: json.merged_ra_metadata,
screenshots: Array.from(new Set([
...(json.merged_screenshots || []).map((s: string) => getFullImageUrl(s)),
...(json.screenshots || []).map((s: any) => s.url ? getFullImageUrl(s.url) || '' : ''),
@@ -475,6 +518,8 @@ export const rommApiClient = {
username: json.username || 'Unknown',
avatarUrl: constructedAvatarUrl,
roleName: json.role?.role_name || json.role?.name || String(json.role) || 'User',
ra_username: json.ra_username,
ra_progression: json.ra_progression,
};
}
};