use AWS for placeholder images in production

This commit is contained in:
Justin Edmund 2025-12-13 23:26:35 -08:00
parent 9c69db640e
commit 9429ccff53
2 changed files with 19 additions and 10 deletions

View file

@ -42,10 +42,18 @@ export function getBasePath(): string {
/**
* Gets the placeholder image for a given type and variant
* Placeholders are always served locally
* Uses AWS S3/CDN in production, local path in development
*/
export function getPlaceholderImage(type: ResourceType, variant: ImageVariant): string {
return `/images/placeholders/placeholder-${type}-${variant}.png`
return `${getBasePath()}/placeholders/placeholder-${type}-${variant}.png`
}
/**
* Gets a generic placeholder image (weapon-grid variant)
* Used as fallback for misc image types that don't have specific placeholders
*/
export function getGenericPlaceholder(): string {
return `${getBasePath()}/placeholders/placeholder-weapon-grid.png`
}
/**
@ -257,7 +265,7 @@ export function getJobSkillIcon(slug: string | undefined): string {
* Get accessory square image URL
*/
export function getAccessoryImage(granblueId: string | undefined): string {
if (!granblueId) return '/images/placeholders/placeholder-weapon-grid.png'
if (!granblueId) return getGenericPlaceholder()
return `${getBasePath()}/accessory-square/${granblueId}.jpg`
}
@ -376,7 +384,7 @@ export function getArtifactImage(
granblueId: string | number | null | undefined,
variant: ArtifactImageVariant = 'square'
): string {
if (!granblueId) return '/images/placeholders/placeholder-weapon-grid.png'
if (!granblueId) return getGenericPlaceholder()
const directory = `artifact-${variant}`
return `${getBasePath()}/${directory}/${granblueId}.jpg`
}
@ -387,7 +395,7 @@ export function getArtifactImage(
* Get guidebook image URL
*/
export function getGuidebookImage(granblueId: string | number | undefined): string {
if (!granblueId) return '/images/placeholders/placeholder-weapon-grid.png'
if (!granblueId) return getGenericPlaceholder()
return `${getBasePath()}/guidebooks/book_${granblueId}.png`
}
@ -395,6 +403,6 @@ export function getGuidebookImage(granblueId: string | number | undefined): stri
* Get raid image URL
*/
export function getRaidImage(slug: string | undefined): string {
if (!slug) return '/images/placeholders/placeholder-weapon-grid.png'
if (!slug) return getGenericPlaceholder()
return `${getBasePath()}/raids/${slug}.png`
}

View file

@ -8,6 +8,7 @@
import type { Job, JobSkill } from '$lib/types/api/entities'
import type { JobSkillList } from '$lib/types/api/party'
import { getImageBaseUrl } from '$lib/api/adapters/config'
import { getGenericPlaceholder } from './images'
/**
* Gets the base path for images
@ -32,7 +33,7 @@ export enum Gender {
*/
export function getJobPortraitUrl(job: Job | undefined, gender: Gender = Gender.Gran): string {
if (!job) {
return '/images/placeholders/placeholder-weapon-grid.png'
return getGenericPlaceholder()
}
// Convert job name to slug format (lowercase, spaces to hyphens)
@ -48,7 +49,7 @@ export function getJobPortraitUrl(job: Job | undefined, gender: Gender = Gender.
*/
export function getJobFullImageUrl(job: Job | undefined, gender: Gender = Gender.Gran): string {
if (!job) {
return '/images/placeholders/placeholder-weapon-grid.png'
return getGenericPlaceholder()
}
const genderSuffix = gender === Gender.Djeeta ? 'b' : 'a'
@ -62,7 +63,7 @@ export function getJobFullImageUrl(job: Job | undefined, gender: Gender = Gender
*/
export function getJobIconUrl(granblueId: string | undefined): string {
if (!granblueId) {
return '/images/placeholders/placeholder-weapon-grid.png'
return getGenericPlaceholder()
}
return `${getBasePath()}/job-icons/${granblueId}.png`
@ -74,7 +75,7 @@ export function getJobIconUrl(granblueId: string | undefined): string {
*/
export function getJobWideImageUrl(job: Job | undefined, gender: Gender = Gender.Gran): string {
if (!job) {
return '/images/placeholders/placeholder-weapon-grid.png'
return getGenericPlaceholder()
}
const genderSuffix = gender === Gender.Djeeta ? 'b' : 'a'