Le projet

SyllVS est un SaaS de gestion de flotte : suivi des versements des chauffeurs, échéanciers, dashboards propriétaires. Backend Symfony (API REST + JWT), front React + Redux Toolkit.

Pourquoi React découplé ici

L'app est très interactive (tableaux filtrables temps réel, saisie rapide, dashboards). Ce n'est pas un site de contenu, c'est une application. D'où le découpage API / SPA.

RTK Query élimine le boilerplate

export const versementApi = createApi({
  baseQuery: fetchBaseQuery({
    baseUrl: '/api',
    prepareHeaders: (headers, { getState }) => {
      const token = getState().auth.token;
      if (token) headers.set('Authorization', `Bearer ${token}`);
      return headers;
    },
  }),
  tagTypes: ['Versement'],
  endpoints: (builder) => ({
    getVersements: builder.query({
      query: (params) => ({ url: '/versements', params }),
      providesTags: ['Versement'],
    }),
    addVersement: builder.mutation({
      query: (body) => ({ url: '/versements', method: 'POST', body }),
      invalidatesTags: ['Versement'], // refetch auto apres ajout
    }),
  }),
});

L'invalidatesTags rafraîchit la liste automatiquement après un ajout. Plus de gestion manuelle du cache.

L'argent en entier, jamais en float

#[ORM\Column]
private int $montant = 0; // en FCFA, entier

Les arrondis flottants en comptabilité = chiffres faux. Règle absolue.

Multi-tenant côté serveur

Chaque propriétaire ne voit que sa flotte, filtré côté serveur, jamais sur un paramètre client :

$qb->andWhere('v.chauffeur IN (:mine)')
   ->setParameter('mine', $owner->getChauffeurs());

Ce que je retiens

  • React découplé pour les applications ; Twig/Turbo pour le contenu.
  • RTK Query élimine le boilerplate Redux.
  • L'argent en entier, toujours.
  • Le filtrage multi-tenant se fait côté serveur, point.