types/api.ts

function·mobile·53.5 KB · 2,101 lignes· Voir l'itinéraire
Annotation non disponible

Lance npm run annotate (nécessite ANTHROPIC_API_KEY dans .env.local) pour générer une annotation française par Claude Haiku 4.5.

244 exports

StatutProduitDisponibiliteStatutCommandeRoleMediaCategorieWariCategoriesVitrinesResponseCanalTypeTenantCanalQuickReplyConfigAccesVitrineTenantPublicVitrineSummaryVitrineTeaserTenantTeaserProduitTeaserAccesDemandeMobileDemanderAccesPayloadPrestationTeaserCategorieVarianteProduitProduitSpecTagAdminTagPublicProduitSummaryProduitDetailPrestationSummaryPrestationsResponseCatalogueResponseVitrinésResponseUserMobileNotificationsPrefsMonAccesItemMesAccesResponseAuthResponseSessionResponseMagicLinkResponseCheckUserResponseVerifierResponseOtpAuthResponseCanalLignePanierPanierSimilaireMatchPanierSimilairesResponseDemanderPrixResponseCommandeSummaryStatutCommandeAdminStatutPaiementAdminUpdateCommandePayloadClientVitrineCommandeAdminCommandeLigneAdminCommandeAdminDetailProduitAdminStockFaibleSparklinePointTopProduitDashboardDashboardVitrineResponseRdvStatsDashboardOnboardingChecklistItemOnboardingStatusResponseCommandesAdminResponseCatalogueAdminResponseModeAffichageTenantAdminModePaiementCommandeConfigPaiementGerantModePaiementInfoPaiementVitrineResponseGenererIcalTokenResponseCategorieWariMobileParametresUpdatePayloadCompteUpdatePayloadVariantePrestationAdminPrestationAdminCategorieServiceTenantServicesGerantResponsePrestationCreatePayloadPrestationUpdatePayloadClienteGerantClientesGerantResponseAbonneClientLiteAbonneVitrineAbonneProduitAbonnementsResponseInviterClientePayloadInviterClienteResponseClienteDetailCommandeClienteDetailReservationClienteDetailStatsClienteDetailResponseNiveauAccesStatutAccesAccesVitrineItemAccesVitrineResponseChangerNiveauPayloadChangerNiveauResponseChangerStatutPayloadRevoquerPayloadInviterAccesPayloadInviterAccesResponseStatutReservationStatutPaiementReservationModePaiementReservationClientReservationPrestationReservationPrestationReservationDetailReservationGerantReservationGerantDetailReservationsGerantResponseUpdateReservationPayloadModeContactModeConfirmationRDVTypeAcompteConfigReservationPublicPrestationVariantePublicPrestationCategorieRefPrestationDetailCreneauSlotDisponibilitesResponseReservationClientMesReservationsResponseCreateReservationPayloadCreatedReservationJourSemaineConfigReservationGerantConfigReservationGerantResponseUpdateConfigReservationPayloadCreneauDisponibleGerantCreneauxResponseCreateCreneauPayloadUpdateCreneauPayloadPlageIndisponibleGerantIndisponibilitesResponseCreateIndisponibilitePayloadModeCommandeRepasStatutCommandeRepasOptionPlatItemPlatItemMenuSectionWithPlatsConfigRestaurantCarteResponseTableRestaurantTableInfoResponseLigneCommandeRepasCommandeRepasCreerCommandeRepasPayloadRushSeverityRushCommandeActiveRushStatsResponseBuilderSectionTypeBuilderSectionBuilderDataBuilderSnapshotStatutBuilderSnapshotMetaBuilderSnapshotDetailAdminPageTypeAdminSectionTypeAdminBlocTypeAdminBlocAdminSectionAdminPageAdminPagesResponseAdminPageResponseAdminSectionsResponseAdminSectionResponseAdminBlocResponseClientsFiltreTypeClientAccesAgregeClientAgregeClientsAgregesResponseClientsAgregesFiltersClientAbonnementAgregeClientAccesAgregeDetailClientDetailAgregeResponseAuteurMessageMessageItemMessageSpecialTypeDevisPayloadAcomptePayloadCommandeConfirmeePayloadMessageFunnelPayloadConversationSummaryConversationDetailArrivageGerantArrivageUploadResponseProductSuggestionProduitSimilaireSnapToListResponseReviewTargetReviewStatutReviewReviewWithTenantReviewStatsReviewsListResponseCreateReviewPayloadReferralStatutCashbackTypeMonCodeStatsMonCodeResponseInviterPayloadInviterResponseValiderCodeResponseCashbackTransactionCashbackSoldeResponseUtiliserCashbackPayloadUtiliserCashbackResponseFeedItemTypeCollectionSummaryCollectionDetailArrivageFeedItemFeedItemExplorerFeedResponseCollectionsListResponseCollectionDetailResponseStoryPartOfDayStoryToneStorySeverityStoryMissionIconStoryMissionItemStoryKpiNumericStoryDuJourResponseSetupCheckSeveritySetupCheckCategorieSetupNiveauSetupCheckSetupScoreResponsePricingMarchePricingConseilTonePricingConseilPricingResponseSnapBulkItemSnapBulkResponseHeatmapZoneHeatmapClientsResponseTablesStatsTopTableTablesStatsOccupationTablesStatsResponseStoryMediaTypeVitrineStorySummaryVitrineStoriesListResponseStoryFeedItemStoryFeedTenantStoriesFeedResponse

Code source· typescript· tronqué à 200 lignes sur 2,101

// ─── Enums ────────────────────────────────────────────────────────────────────

export type StatutProduit =
  | 'DISPONIBLE'
  | 'SUR_COMMANDE'
  | 'BIENTOT_DISPONIBLE'
  | 'DISCONTINUE'
  | 'RUPTURE';

export type Disponibilite =
  | 'IMMEDIATE'
  | 'A_PARTIR_DE'
  | 'SUR_COMMANDE'
  | 'SUR_DEVIS';

export type StatutCommande =
  | 'EN_ATTENTE'
  | 'CONFIRMEE'
  | 'EN_PREPARATION'
  | 'EXPEDIE'
  | 'LIVRE'
  | 'ANNULE';

export type Role = 'TENANT_ADMIN' | 'CLIENT' | 'SUPERADMIN';

// ─── Media ────────────────────────────────────────────────────────────────────

export type Media = {
  id: string;
  url: string; // Absolue — ${MINIO_PUBLIC_URL}/${key}
  ordre: number;
  type: 'IMAGE' | 'VIDEO';
};

// ─── Catégorie vitrine ────────────────────────────────────────────────────────

export type CategorieWari = {
  id: string;
  nom: string;
  slug: string;
  emoji: string | null;
  couleur: string | null;
};

export type CategoriesVitrinesResponse = {
  categories: CategorieWari[];
};

// ─── Tenant / Vitrine ─────────────────────────────────────────────────────────

export type CanalType =
  | 'WHATSAPP'
  | 'TELEPHONE'
  | 'INSTAGRAM'
  | 'TELEGRAM'
  | 'SNAPCHAT'
  | 'EMAIL'
  | 'LIEN'
  | 'PANIER'
  | 'DEVIS';

export type TenantCanal = {
  /** Optionnel sur les sorties publiques (legacy non-id) ; toujours présent en CRUD gérant. */
  id?: string;
  type: CanalType;
  valeur: string;
  /** Optionnel sur sorties publiques (déjà filtré actif=true). */
  actif?: boolean;
  ordre: number;
};

// ─── Quick Replies (Sprint Chat V1.6) ────────────────────────────────────────

export type QuickReply = {
  id: string;
  texte: string;
  ordre: number;
  actif: boolean;
  createdAt: string;
};

// ─── ConfigAccesVitrine (WP-224 étape 2) ─────────────────────────────────────

export type ConfigAccesVitrine = {
  // Dimension 2 — Contenu visible
  nomsVisibles: boolean;
  photosVisibles: boolean;
  prixVisibles: boolean;
  descriptionsVisibles: boolean;
  stockVisible: boolean;
  coordonneesVisibles: boolean;
  // Dimension 3 — Actions sans compte
  panierSansCompte: boolean;
  commandeSansCompte: boolean;
  reservationSansCompte: boolean;
  contactSansCompte: boolean;
};

export type TenantPublic = {
  id: string;
  subdomain: string;
  nom: string;
  description: string | null;
  canaux?: TenantCanal[];
  logoUrl: string | null;
  banniere: string | null;
  whatsapp: string | null;
  ville: string | null;
  pays: string;
  themeCouleur: string;
  couleurAccent: string;
  vitrineActive: boolean;
  modeVitrineSiteWeb: boolean;
  siteWebUrl: string | null;
  modulesActifs?: string[];
  niveauAcces: NiveauAcces;
  configAcces: ConfigAccesVitrine;
};

export type VitrineSummary = TenantPublic & {
  categorieWari?: { id: string; nom: string; emoji?: string } | null;
};

// ─── Teaser accès refusé (WP-224 étape 4) ─────────────────────────────────────
// Retourné par les routes DETAIL quand verifierAccesTenant() = false.
// Permet à l'UI mobile d'afficher AccesRequis avec metadata minimale.

export type VitrineTeaser = {
  accessible: false;
  subdomain: string;
  nom: string;
  logoUrl: string | null;
  description: string | null;
  niveauAcces: NiveauAcces;
};

export type TenantTeaser = {
  id: string;
  subdomain: string;
  nom: string;
  logoUrl: string | null;
  description: string | null;
  niveauAcces: NiveauAcces;
};

export type ProduitTeaser = {
  accessible: false;
  tenant: TenantTeaser;
};

// ─── Demande accès vitrine SUR_DEMANDE (WP-224 étape 5) ───────────────────────

export type AccesDemandeMobile = {
  id: string;
  tenantId: string;
  clientId: string;
  niveau: string;
  statut: StatutAcces;
  produitId: string | null;
  prestationId: string | null;
  motif: string | null;
  createdAt: string;
  updatedAt: string;
  tenant: {
    id: string;
    subdomain: string;
    nom: string;
    logoUrl: string | null;
    niveauAcces: NiveauAcces;
  };
  produit: { id: string; nom: string } | null;
  prestation: { id: string; nom: string } | null;
};

export type DemanderAccesPayload = {
  tenantId: string;
  produitId?: string;
  prestationId?: string;
  motif?: string;
};

export type PrestationTeaser = {
  accessible: false;
  tenant: TenantTeaser;
};

// ─── Catégorie ────────────────────────────────────────────────────────────────

export type Categorie = {
  id: string;
  nom: string;
};

// ─── Variante Produit ─────────────────────────────────────────────────────────

export type VarianteProduit = {
  id: string;
  attributs: Record<string, string>;
  prix: number | null;
  stock: number;