112 lines
3.6 KiB
Markdown
112 lines
3.6 KiB
Markdown
# 5. API Specification
|
|
|
|
## Server Functions Pattern
|
|
|
|
TanStack Start utilise des "Server Functions" - des fonctions RPC type-safe qui s'exécutent côté serveur.
|
|
|
|
```typescript
|
|
// Définition
|
|
import { createServerFn } from '@tanstack/react-start/server';
|
|
import { z } from 'zod';
|
|
|
|
const inputSchema = z.object({
|
|
name: z.string().min(1),
|
|
});
|
|
|
|
export const createCharacter = createServerFn({ method: 'POST' })
|
|
.validator((data: unknown) => inputSchema.parse(data))
|
|
.handler(async ({ data }) => {
|
|
// Logique serveur avec accès DB
|
|
return await db.character.create({ data });
|
|
});
|
|
|
|
// Utilisation côté client
|
|
const result = await createCharacter({ data: { name: 'MyChar' } });
|
|
```
|
|
|
|
## API Endpoints (Server Functions)
|
|
|
|
### Characters
|
|
|
|
| Function | Method | Description |
|
|
|----------|--------|-------------|
|
|
| `getCharacters` | GET | Liste tous les personnages avec filtres |
|
|
| `getCharacter` | GET | Récupère un personnage par ID |
|
|
| `createCharacter` | POST | Crée un nouveau personnage |
|
|
| `updateCharacter` | POST | Met à jour un personnage |
|
|
| `deleteCharacter` | POST | Supprime un personnage |
|
|
| `bulkUpdateCharacters` | POST | Met à jour plusieurs personnages |
|
|
| `bulkDeleteCharacters` | POST | Supprime plusieurs personnages |
|
|
|
|
### Accounts
|
|
|
|
| Function | Method | Description |
|
|
|----------|--------|-------------|
|
|
| `getAccounts` | GET | Liste tous les comptes |
|
|
| `getAccount` | GET | Récupère un compte par ID |
|
|
| `createAccount` | POST | Crée un nouveau compte |
|
|
| `updateAccount` | POST | Met à jour un compte |
|
|
| `deleteAccount` | POST | Supprime un compte |
|
|
|
|
### Teams
|
|
|
|
| Function | Method | Description |
|
|
|----------|--------|-------------|
|
|
| `getTeams` | GET | Liste toutes les équipes |
|
|
| `getTeam` | GET | Récupère une équipe avec ses membres |
|
|
| `createTeam` | POST | Crée une nouvelle équipe |
|
|
| `updateTeam` | POST | Met à jour une équipe |
|
|
| `deleteTeam` | POST | Supprime une équipe |
|
|
| `addTeamMembers` | POST | Ajoute des personnages à une équipe |
|
|
| `removeTeamMembers` | POST | Retire des personnages d'une équipe |
|
|
|
|
### Progressions
|
|
|
|
| Function | Method | Description |
|
|
|----------|--------|-------------|
|
|
| `getProgressions` | GET | Liste toutes les progressions |
|
|
| `getCharacterProgressions` | GET | Progressions d'un personnage |
|
|
| `updateCharacterProgression` | POST | Met à jour une progression |
|
|
| `bulkUpdateProgressions` | POST | Met à jour plusieurs progressions |
|
|
| `syncFromDofusDb` | POST | Synchronise depuis DofusDB |
|
|
|
|
### Auth
|
|
|
|
| Function | Method | Description |
|
|
|----------|--------|-------------|
|
|
| `login` | POST | Authentification |
|
|
| `logout` | POST | Déconnexion |
|
|
| `getSession` | GET | Récupère la session courante |
|
|
|
|
## Validation Schemas
|
|
|
|
```typescript
|
|
// src/lib/schemas/character.ts
|
|
import { z } from 'zod';
|
|
|
|
export const createCharacterSchema = z.object({
|
|
name: z.string().min(2).max(50),
|
|
level: z.number().int().min(1).max(200),
|
|
classId: z.number().int().positive(),
|
|
serverId: z.number().int().positive(),
|
|
accountId: z.string().uuid(),
|
|
});
|
|
|
|
export const updateCharacterSchema = createCharacterSchema.partial();
|
|
|
|
export const characterFiltersSchema = z.object({
|
|
search: z.string().optional(),
|
|
classIds: z.array(z.number()).optional(),
|
|
serverIds: z.array(z.number()).optional(),
|
|
accountIds: z.array(z.string()).optional(),
|
|
minLevel: z.number().optional(),
|
|
maxLevel: z.number().optional(),
|
|
page: z.number().int().positive().default(1),
|
|
limit: z.number().int().min(1).max(100).default(20),
|
|
sortBy: z.enum(['name', 'level', 'class', 'server']).default('name'),
|
|
sortOrder: z.enum(['asc', 'desc']).default('asc'),
|
|
});
|
|
```
|
|
|
|
---
|