import type { Cloud, CloudType, Profile } from '@/types/database' export interface BackendUserProfile { id: string name: string email: string avatar_id: string | null cloud_count: number received_like_count: number last_online: string | null role: Profile['role'] is_disabled: boolean created_at: string } export interface BackendCloudType { id: number name: string genus: string | null icon_id: string | null rarity: number description: string | null created_at: string } export interface BackendCloudOwner { id: string name: string } export interface BackendCloudInfo { id: string owner: BackendCloudOwner type: BackendCloudType latitude: number longitude: number description: string | null captured_at: string | null uploaded_at: string updated_at: string received_like_count: number status: Cloud['status'] is_hidden: boolean } export interface ActionResponse { status_code: number message: string } export interface CloudCreateResponse extends ActionResponse { cloud_id: string } export interface CloudTypeCreateResponse extends ActionResponse { cloud_type_id: number } // Internal view model. The backend profile is normalized here so existing // layout/admin consumers do not need to understand the wire representation. export interface AuthUser { id: string email: string username: string avatar_id: string | null role: Profile['role'] is_disabled: boolean cloud_count: number received_like_count: number created_at: string } export interface ApiCloudTypeSummary { id: number name: string rarity: CloudType['rarity'] rarity_value: number } export interface ApiCloudOwner { id: string username: string } export interface ApiCloud extends Cloud { updated_at: string cloud_type: ApiCloudTypeSummary | null owner: ApiCloudOwner | null cloud_type_name: string | null cloud_type_rarity: CloudType['rarity'] | null cloud_type_rarity_value: number | null username: string | null received_like_count: number }