mirror of
https://github.com/Wei-Shaw/sub2api.git
synced 2026-10-30 08:22:34 +00:00
Fix image billing size normalization
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
import type { UsageLog } from '@/types'
|
||||
|
||||
type Translate = (key: string) => string
|
||||
|
||||
const knownImageSizeSources = new Set(['output', 'input', 'default', 'legacy'])
|
||||
const knownImageBillingSizes = new Set(['1K', '2K', '4K', 'mixed'])
|
||||
|
||||
type ImageUsageRow = Pick<
|
||||
UsageLog,
|
||||
'image_size' | 'image_input_size' | 'image_output_size' | 'image_size_source' | 'image_size_breakdown'
|
||||
>
|
||||
|
||||
const trimmed = (value: string | null | undefined): string => value?.trim() ?? ''
|
||||
|
||||
export const formatImageBillingSize = (row: ImageUsageRow | null | undefined, t: Translate): string => {
|
||||
const size = trimmed(row?.image_size)
|
||||
if (!size) {
|
||||
return t('usage.imageSizeNotRecorded')
|
||||
}
|
||||
if (knownImageBillingSizes.has(size)) {
|
||||
return size
|
||||
}
|
||||
return `${t('usage.imageSizeLegacyUnstandardized')}: ${size}`
|
||||
}
|
||||
|
||||
export const formatImageInputSize = (row: ImageUsageRow | null | undefined, t: Translate): string => {
|
||||
const size = trimmed(row?.image_input_size)
|
||||
return size || t('usage.imageSizeUnknown')
|
||||
}
|
||||
|
||||
export const formatImageOutputSize = (row: ImageUsageRow | null | undefined, t: Translate): string => {
|
||||
const size = trimmed(row?.image_output_size)
|
||||
return size || t('usage.imageSizeUnknown')
|
||||
}
|
||||
|
||||
export const formatImageSizeSource = (row: ImageUsageRow | null | undefined, t: Translate): string => {
|
||||
const source = trimmed(row?.image_size_source).toLowerCase()
|
||||
if (knownImageSizeSources.has(source)) {
|
||||
return t(`usage.imageSizeSource${source.charAt(0).toUpperCase()}${source.slice(1)}`)
|
||||
}
|
||||
if (trimmed(row?.image_size)) {
|
||||
return t('usage.imageSizeSourceLegacy')
|
||||
}
|
||||
return t('usage.imageSizeSourceMissing')
|
||||
}
|
||||
|
||||
export const formatImageSizeBreakdown = (row: ImageUsageRow | null | undefined): string => {
|
||||
const breakdown = row?.image_size_breakdown
|
||||
if (!breakdown || Object.keys(breakdown).length === 0) {
|
||||
return ''
|
||||
}
|
||||
return ['1K', '2K', '4K']
|
||||
.filter((tier) => (breakdown[tier] ?? 0) > 0)
|
||||
.map((tier) => `${tier} x ${breakdown[tier]}`)
|
||||
.join(', ')
|
||||
}
|
||||
Reference in New Issue
Block a user