-- types
Types Communs
Ce document décrit les types TypeScript utilisés dans le système de panier.
Types de Base
// Types de base pour les identifiants
type UUID = string;
// Types pour les prix et quantités
type Price = number;
type Quantity = number;
// Types pour les statuts
type CartStatus = 'ON_GOING' | 'VALIDATED' | 'ARCHIVED';
type CartType = 'CART' | 'WISHLIST';
type OrderStatus = 'INITIALIZED' | 'PAID' | 'CANCELLED';
Types de Réponse
// Réponse pour la liste des paniers
interface GetCartsResponse {
carts: Cart[];
total: number;
page: number;
size: number;
}
// Réponse pour un panier spécifique
interface GetCartResponse {
cart: Cart;
}
// Réponse pour les lignes d'un panier
interface GetCartLinesResponse {
lines: CartLine[];
}
// Réponse pour la création d'un panier
interface CreateCartResponse {
cart: Cart;
}
// Réponse pour l'ajout de lignes
interface AddCartLinesResponse {
lines: CartLine[];
}
// Réponse pour la mise à jour des lignes
interface UpdateCartLinesResponse {
lines: CartLine[];
}
// Réponse pour la suppression des lignes
interface DeleteCartLinesResponse {
success: boolean;
}
// Réponse pour la validation du panier
interface ValidateCartResponse {
orderId: UUID;
}
Types d'Entités
// Panier
interface Cart {
id: UUID;
name: string;
type: CartType;
status: CartStatus;
userId: UUID;
createdAt: Date;
updatedAt: Date;
lineCount: number;
total: Price;
subtotal: Price;
tax: Price;
currency: string;
}
// Ligne de panier
interface CartLine {
id: UUID;
cartId: UUID;
product: Product;
quantity: Quantity;
unitPrice: Price;
total: Price;
tax: Price;
createdAt: Date;
updatedAt: Date;
}
// Produit
interface Product {
id: UUID;
name: string;
description: string;
image: string;
typeId: UUID;
offerPriceId: UUID;
price: Price;
stock: Quantity;
variants: ProductVariant[];
}
// Variante de produit
interface ProductVariant {
id: UUID;
productId: UUID;
name: string;
sku: string;
price: Price;
stock: Quantity;
}
Types de Requête
// Paramètres de pagination
interface Pageable {
page: number;
size: number;
}
// Paramètres de création de panier
interface CreateCartRequest {
name: string;
type?: CartType;
}
// Paramètres d'ajout au panier
interface AddCartLinesRequest {
typeId: UUID;
lines: Array<{
offerPriceId: UUID;
quantity: Quantity;
updateAction: 'ADD_QUANTITY' | 'REPLACE_QUANTITY';
}>;
}
// Paramètres de mise à jour des lignes
interface UpdateCartLinesRequest {
lines: Array<{
lineId: UUID;
quantity: Quantity;
}>;
}
// Paramètres de mise à jour des variantes
interface UpdateCartLinesByVariantsRequest {
variants: Array<{
variantId: UUID;
quantity: Quantity;
}>;
}
// Paramètres de suppression des lignes
interface DeleteCartLinesRequest {
lineIds: UUID[];
}
Types d'Erreur
// Erreur API
interface ApiError {
statusCode: number;
message: string;
details?: any;
}
// Résultat de validation
interface ValidationResult {
isValid: boolean;
message?: string;
details?: any;
}
Types de Store
// État du store de panier
interface CartState {
carts: Cart[];
currentCart: Cart | null;
cartLines: CartLine[];
orderId: UUID | null;
loading: boolean;
error: ApiError | null;
}
// Actions du store de panier
interface CartActions {
fetchCarts: (params?: {
currency?: string;
pageable?: Pageable;
status?: CartStatus[];
type?: CartType;
}) => Promise<void>;
fetchCartById: (
cartId: UUID,
params?: {
currency?: string;
}
) => Promise<void>;
fetchCartLines: (
cartId: UUID,
params?: {
currency?: string;
}
) => Promise<void>;
createCart: (data: CreateCartRequest) => Promise<void>;
addProductToCart: (cartId: UUID, data: AddCartLinesRequest) => Promise<void>;
updateCartLines: (cartId: UUID, data: UpdateCartLinesRequest) => Promise<void>;
updateCartLinesByVariants: (
cartId: UUID,
data: UpdateCartLinesByVariantsRequest
) => Promise<void>;
deleteCartLines: (cartId: UUID, data: DeleteCartLinesRequest) => Promise<void>;
validateCart: (cartId: UUID) => Promise<void>;
}
Updated about 2 months ago