94 lines
3.5 KiB
Markdown
94 lines
3.5 KiB
Markdown
# OptiqueStock
|
|
|
|
Application de gestion de magasin d'optique — full-stack Next.js avec gestion des clients, produits, ventes, achats, atelier et rapports.
|
|
|
|
## Modules
|
|
|
|
| Module | Description |
|
|
|---|---|
|
|
| **Accueil** | Dashboard avec accès aux modules |
|
|
| **Clients** | Gestion des clients, relevés de vision, ordonnances |
|
|
| **Produits** | Catalogue (montures, verres, lentilles, accessoires), alertes stock, codes QR, images |
|
|
| **Fournisseurs** | Gestion des fournisseurs |
|
|
| **Achats & Stock** | Factures d'achat, réception de stock, upload PDF |
|
|
| **Point de Vente** | Panier, paiements fractionnés, historique des ventes |
|
|
| **Atelier** | Suivi des commandes de montage (4 statuts : EN_ATTENTE → EN_COURS → TERMINE → PRET) |
|
|
| **Rapports** | KPIs, graphiques (ventes, catégories, stocks), export CSV |
|
|
|
|
## Stack
|
|
|
|
- **Framework**: Next.js 16 (App Router), React 19, TypeScript 5
|
|
- **Base de données**: SQLite via Prisma ORM
|
|
- **UI**: Tailwind CSS 4, shadcn/ui, lucide-react
|
|
- **État & données**: Zustand, TanStack Query, TanStack Table
|
|
- **Formulaires**: react-hook-form + Zod
|
|
- **Graphiques**: Recharts
|
|
- **Autre**: Framer Motion, DND Kit, Sharp, QR Code, Sonner (toasts)
|
|
|
|
## Démarrage rapide
|
|
|
|
```bash
|
|
# Cloner et configurer
|
|
bun install
|
|
echo 'DATABASE_URL="file:./dev.db"' > .env
|
|
|
|
# Base de données
|
|
bunx prisma generate
|
|
bunx prisma db push
|
|
|
|
# Lancer le serveur de développement
|
|
bun run dev
|
|
# → http://localhost:3000
|
|
```
|
|
|
|
## Scripts
|
|
|
|
| Commande | Description |
|
|
|---|---|
|
|
| `bun run dev` | Serveur de développement (port 3000) |
|
|
| `bun run build` | Build production |
|
|
| `bun start` | Serveur production |
|
|
| `bun run lint` | ESLint |
|
|
| `bun run db:push` | Push Prisma schema → DB |
|
|
| `bun run db:generate` | Générer client Prisma |
|
|
| `bun run db:migrate` | Migration Prisma |
|
|
| `bun run db:reset` | Reset base de données |
|
|
|
|
## Structure
|
|
|
|
```
|
|
src/
|
|
├── app/
|
|
│ ├── page.tsx # SPA — commutation de modules
|
|
│ ├── layout.tsx # Layout racine
|
|
│ ├── globals.css # Styles Tailwind + shadcn
|
|
│ └── api/ # API REST (12 groupes de routes)
|
|
├── components/
|
|
│ ├── clients/ # Module Clients
|
|
│ ├── products/ # Module Produits
|
|
│ ├── pos/ # Module Point de Vente
|
|
│ ├── purchases/ # Module Achats
|
|
│ ├── suppliers/ # Module Fournisseurs
|
|
│ ├── atelier/ # Module Atelier
|
|
│ ├── reports/ # Module Rapports
|
|
│ └── ui/ # Composants shadcn/ui
|
|
├── hooks/ # Hooks personnalisés
|
|
└── lib/ # Utilitaires (db, optical-utils, qr-code)
|
|
```
|
|
|
|
## API
|
|
|
|
Toutes les routes sous `/api/` suivent le pattern REST :
|
|
|
|
- `api/clients`, `api/clients/[id]`, `api/clients/[id]/patients`
|
|
- `api/patients`, `api/patients/[id]`, `api/patients/[id]/ordonnances`
|
|
- `api/produits`, `api/produits/[id]`, `api/produits/[id]/images`
|
|
- `api/fournisseurs`, `api/fournisseurs/[id]`, `api/fournisseurs/[id]/factures`
|
|
- `api/achats/factures`, `api/achats/factures/[id]`, `api/achats/factures/[id]/valider`
|
|
- `api/pos/products`, `api/pos/clients`, `api/pos/sales`, `api/pos/sales/[id]`
|
|
- `api/atelier/orders`, `api/atelier/orders/[id]`
|
|
- `api/reports/dashboard`, `api/reports/sales`, `api/reports/inventory`, `api/reports/export/*`
|
|
- `api/fichiers/[id]`
|
|
|
|
Base de données SQLite auto-contenue — aucun serveur externe requis.
|