Files
gioco-mobile/client/src/api/api.ts
T

61 lines
2.0 KiB
TypeScript
Raw Normal View History

2026-06-09 23:42:22 +02:00
import { request } from './http';
import type {
ActiveMission,
AuthResponse,
City,
ClaimMissionResponse,
InventoryResponse,
LeaderboardResponse,
MarketResponse,
Mission,
PlayerMeResponse,
StartMissionResponse,
TradeResponse,
TravelResponse,
WorldEvent,
} from './types';
export const api = {
// Auth
register: (email: string, password: string, displayName: string) =>
request<AuthResponse>('/auth/register', {
method: 'POST',
body: { email, password, displayName },
}),
login: (email: string, password: string) =>
request<AuthResponse>('/auth/login', { method: 'POST', body: { email, password } }),
// Player
playerMe: () => request<PlayerMeResponse>('/player/me'),
travel: (cityId: string) =>
request<TravelResponse>('/player/travel', { method: 'POST', body: { cityId } }),
// Cities
cities: () => request<{ cities: City[] }>('/cities'),
// Market
market: () => request<MarketResponse>('/market/current'),
buy: (itemId: string, quantity: number) =>
request<TradeResponse>('/market/buy', { method: 'POST', body: { itemId, quantity } }),
sell: (itemId: string, quantity: number) =>
request<TradeResponse>('/market/sell', { method: 'POST', body: { itemId, quantity } }),
// Inventory
inventory: () => request<InventoryResponse>('/inventory'),
// Missions
missionsAvailable: () => request<{ missions: Mission[] }>('/missions/available'),
missionsActive: () => request<{ missions: ActiveMission[] }>('/missions/active'),
startMission: (missionId: string) =>
request<StartMissionResponse>(`/missions/${missionId}/start`, { method: 'POST' }),
claimMission: (playerMissionId: string) =>
request<ClaimMissionResponse>(`/missions/${playerMissionId}/claim`, { method: 'POST' }),
// Events
events: () => request<{ events: WorldEvent[] }>('/events/current'),
// Leaderboard
leaderboard: (metric: 'money' | 'reputation', limit = 20) =>
request<LeaderboardResponse>(`/leaderboard/${metric}?limit=${limit}`),
};