From 72672eec1d5c587497ad7913f45a4a06c36f3a27 Mon Sep 17 00:00:00 2001 From: Etienne Santoul <30403047+esantoul@users.noreply.github.com> Date: Thu, 20 Nov 2025 22:01:32 +0100 Subject: [PATCH 01/25] docs: add comprehensive project documentation Add detailed documentation to help contributors and developers: - Add ARCHITECTURE.md with system design and component overview - Add CONFIGURATION.md with environment and deployment setup - Add CONTRIBUTING.md with contribution guidelines and standards - Add DEVELOPMENT.md with setup and development workflow - Update README.md with links to new documentation This documentation provides a complete guide for new contributors to understand the project structure, set up their development environment, and follow best practices. --- README.md | 107 ++++++- docs/ARCHITECTURE.md | 537 +++++++++++++++++++++++++++++++++++ docs/CONFIGURATION.md | 369 ++++++++++++++++++++++++ docs/CONTRIBUTING.md | 520 ++++++++++++++++++++++++++++++++++ docs/DEVELOPMENT.md | 643 ++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 2165 insertions(+), 11 deletions(-) create mode 100644 docs/ARCHITECTURE.md create mode 100644 docs/CONFIGURATION.md create mode 100644 docs/CONTRIBUTING.md create mode 100644 docs/DEVELOPMENT.md diff --git a/README.md b/README.md index 2f58607..12b13c4 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,106 @@ -## Description +# Arrhes + +[![Licence MIT](https://img.shields.io/badge/licence-MIT-blue.svg)](LICENSE) +[![TypeScript](https://img.shields.io/badge/TypeScript-5.9-blue.svg)](https://www.typescriptlang.org/) +[![Node.js](https://img.shields.io/badge/Node.js-24.5-green.svg)](https://nodejs.org/) Application **open source** de gestion de comptabilité en partie double pour les associations et entreprises françaises. Elle permet de configurer les comptes, d'ajouter les écritures comptables, les pièces justificatives et de consulter les différents états financiers tels que le bilan ou le compte de résultat. +## Table des matières + +- [À propos](#à-propos) +- [Fonctionnalités](#fonctionnalités) +- [Démarrage rapide](#démarrage-rapide) +- [Documentation](#documentation) +- [Licence](#licence) +- [Support](#support) + +## À propos + +Arrhes est une solution complète de comptabilité conçue spécifiquement pour répondre aux besoins des associations et entreprises françaises. L'application adopte une architecture monorepo et une interface utilisateur simple et intuitive. + +**Public cible :** +- Associations loi 1901 +- Petites et moyennes entreprises +- Comptables et experts-comptables +- Trésoriers d'associations ## Fonctionnalités -- Configuration des comptes -- Création et gestion des écritures comptables -- Gestion des pièces justificatives -- Configuration et consultation des états financiers (bilan, compte de résultat, etc.) -- Gestion des exercices comptables -- Gestion des utilisateurs et des rôles +- ✅ Configuration et gestion des comptes comptables +- ✅ Création et gestion des écritures comptables en partie double +- ✅ Gestion des pièces justificatives avec stockage sécurisé +- ✅ Configuration et consultation des états financiers (bilan, compte de résultat) +- ✅ Gestion des exercices comptables +- ✅ Gestion multi-utilisateurs avec rôles et permissions +- ✅ Authentification sécurisée par magic link +- ✅ Support des journaux comptables multiples +- ✅ Calculs automatiques et validation des écritures + +## Démarrage rapide + +### Prérequis + +- Node.js 24.5+ +- pnpm +- PostgreSQL + +### Installation + +```bash +# Cloner le repository +git clone https://github.com/arrhes/arrhes.git +cd arrhes + +# Installer les dépendances +pnpm install + +# Configurer les variables d'environnement +cp packages/api/.env.example packages/api/.env +cp packages/tools/.env.example packages/tools/.env +# Éditer les fichiers .env avec vos valeurs + +# Initialiser la base de données +pnpm --filter tools run push +pnpm --filter tools run seed +# Lancer l'application +pnpm run dev +``` + +L'API sera accessible sur le port configuré (par défaut `http://localhost:3000`) et la plateforme sur `http://localhost:5173`. + +**Identifiants de démonstration :** `demo@arrhes.com` / `demo` + +## Documentation + +- 📚 [Architecture](docs/ARCHITECTURE.md) - Vue d'ensemble de l'architecture et du stack technique +- ⚙️ [Configuration](docs/CONFIGURATION.md) - Variables d'environnement et configuration des services +- 🛠️ [Développement](docs/DEVELOPMENT.md) - Guide complet pour les développeurs +- 🤝 [Contribution](docs/CONTRIBUTING.md) - Guidelines pour contribuer au projet ## Packages -- API -- metadata -- platform -- tools +Le projet est organisé en monorepo avec les packages suivants : + +- **@arrhes/api** - Backend REST API (Hono, PostgreSQL) +- **@arrhes/platform** - Interface web (React, TanStack Router) +- **@arrhes/metadata** - Schémas et modèles partagés (Valibot, Drizzle ORM) +- **@arrhes/tools** - Outils de migration et seed de base de données +- **@arrhes/website** - Site vitrine + +Pour plus de détails, consultez la [documentation d'architecture](docs/ARCHITECTURE.md). + +## Licence + +Ce projet est sous licence MIT. Voir le fichier [LICENSE](LICENSE) pour plus de détails. + +## Support + +- 🐛 [Signaler un bug](https://github.com/arrhes/arrhes/issues) +- 💡 [Proposer une fonctionnalité](https://github.com/arrhes/arrhes/issues) +- 📧 Contact : demo@arrhes.com + +--- + +Développé avec ❤️ pour la communauté française diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md new file mode 100644 index 0000000..816644f --- /dev/null +++ b/docs/ARCHITECTURE.md @@ -0,0 +1,537 @@ +# Architecture + +Ce document décrit l'architecture globale du projet Arrhes, un système de comptabilité en partie double pour associations et entreprises françaises. + +## Table des matières + +- [Vue d'ensemble](#vue-densemble) +- [Architecture monorepo](#architecture-monorepo) +- [Packages](#packages) +- [Stack technique](#stack-technique) +- [Flux de données](#flux-de-données) +- [Authentification](#authentification) +- [Base de données](#base-de-données) + +## Vue d'ensemble + +Arrhes est construit sur une architecture monorepo moderne utilisant **pnpm workspaces**. Le projet est divisé en plusieurs packages indépendants mais interconnectés, chacun ayant une responsabilité spécifique. + +``` +┌─────────────────────────────────────────────────────────┐ +│ Utilisateurs │ +└────────────────────────────┬────────────────────────────┘ + │ + ┌──────────▼──────────┐ + │ @arrhes/platform │ (Frontend React) + │ Port: 5173 │ + └──────────┬──────────┘ + │ + │ HTTP/REST + │ + ┌──────────▼──────────┐ + │ @arrhes/api │ (Backend Hono) + │ Port: 3000 │ + └──────────┬──────────┘ + │ + ┌───────────┼───────────┐ + │ │ │ + ┌────▼────┐ ┌───▼────┐ ┌───▼────┐ + │ DB │ │ S3 │ │ SMTP │ + │ (SQL) │ │ (File) │ │ (Mail) │ + └─────────┘ └────────┘ └────────┘ +``` + +## Architecture monorepo + +Le projet utilise **pnpm workspaces** pour gérer plusieurs packages dans un seul repository. Cette approche offre plusieurs avantages : + +- **Partage de code** : Les packages peuvent facilement partager du code via `@arrhes/metadata` +- **Dépendances optimisées** : pnpm déduplique les dépendances communes +- **Développement simplifié** : Build et développement coordonnés entre packages +- **Versioning cohérent** : Toutes les parties du projet évoluent ensemble + +### Structure du workspace + +``` +arrhes/ +├── packages/ +│ ├── api/ # Backend API +│ ├── platform/ # Interface utilisateur +│ ├── metadata/ # Schémas et types partagés +│ ├── tools/ # Outils de migration DB +│ └── website/ # Site vitrine +├── pnpm-workspace.yaml +└── package.json +``` + +## Packages + +### @arrhes/api + +**Rôle :** Backend REST API pour toutes les opérations métier + +**Technologies :** +- **Hono** : Framework web léger et performant +- **TypeScript** : Typage statique +- **Drizzle ORM** : ORM pour PostgreSQL +- **Valibot** : Validation des données +- **Nodemailer** : Envoi d'emails +- **AWS SDK** : Stockage de fichiers (S3-compatible) +- **Puppeteer** : Génération de PDF + +**Structure :** +``` +api/src/ +├── api.ts # Configuration de l'app Hono +├── server.ts # Point d'entrée du serveur +├── clients/ # Clients pour services externes +│ ├── sqlClient.ts +│ ├── emailClient.ts +│ └── storageClient.ts +├── factories/ # Factories Hono avec types +│ ├── apiFactory.ts +│ ├── authFactory.ts +│ └── publicFactory.ts +├── middlewares/ # Middlewares d'authentification +│ ├── authMiddleware.ts +│ ├── publicMiddleware.ts +│ └── userVerificationMiddleware.ts +├── routes/ # Routes de l'API +│ ├── auth/ # Routes authentifiées +│ │ ├── organizations/ # Gestion organisations +│ │ ├── settings/ # Paramètres utilisateur +│ │ └── support/ # Support +│ └── public/ # Routes publiques +│ ├── signIn.ts +│ ├── signUp.ts +│ ├── signOut.ts +│ └── sendMagicLink.ts +└── utilities/ # Utilitaires + ├── email/ # Templates et envoi emails + ├── sql/ # Helpers SQL + ├── storage/ # Helpers S3 + ├── cookies/ # Gestion cookies sécurisés + └── workspace/ # Logique métier +``` + +**Points d'entrée :** +- `server.ts` : Lance le serveur HTTP +- `api.ts` : Configure l'application Hono avec middlewares et routes + +**Responsabilités :** +- Gestion de l'authentification (magic links, sessions) +- CRUD pour toutes les entités (organisations, comptes, écritures, etc.) +- Validation des écritures comptables +- Génération des états financiers +- Gestion des pièces justificatives (upload/download via S3) +- Envoi d'emails transactionnels + +### @arrhes/platform + +**Rôle :** Interface utilisateur web pour interagir avec l'application + +**Technologies :** +- **React 19** : Framework UI +- **TanStack Router** : Routing type-safe +- **TanStack Query** : Gestion d'état serveur et cache +- **TanStack Table** : Tableaux de données performants +- **TanStack Virtual** : Virtualisation pour grandes listes +- **Radix UI** : Composants accessibles headless +- **Tailwind CSS** : Framework CSS utility-first +- **React Hook Form** : Gestion de formulaires +- **Valibot** : Validation côté client +- **Vite** : Build tool et dev server + +**Structure :** +``` +platform/src/ +├── root.tsx # Point d'entrée React +├── index.html # HTML principal +├── assets/ # Ressources statiques +│ ├── css/ +│ ├── fonts/ +│ ├── images/ +│ └── manifest/ # PWA manifest +├── components/ # Composants réutilisables +│ ├── buttons/ +│ ├── formats/ # Formatage de données +│ ├── forms/ +│ ├── inputs/ +│ ├── layouts/ +│ └── overlays/ # Modals, dropdowns, tooltips +├── contexts/ # Contexts React +│ ├── data/ # Context de données globales +│ ├── router/ # Configuration du router +│ └── toasts/ # Notifications +├── features/ # Features par domaine métier +│ ├── authLayout.tsx +│ ├── organizations/ # Gestion organisations +│ ├── settings/ +│ ├── signIn/ +│ ├── signUp/ +│ └── support/ +├── routes/ # Définition des routes +│ ├── platformRouter.tsx +│ ├── platformTree.ts +│ └── root/ # Routes de l'app +└── utilities/ # Utilitaires + ├── postAPI.ts # Client API + ├── useHTTPData.ts # Hook pour data fetching + └── cookies/ # Gestion cookies +``` + +**Responsabilités :** +- Interface utilisateur complète +- Formulaires de saisie avec validation +- Tableaux de données avec tri, filtrage, pagination +- Visualisation des états financiers +- Gestion des documents et pièces justificatives +- Notifications et retours utilisateur + +### @arrhes/metadata + +**Rôle :** Package partagé contenant tous les schémas, modèles et types utilisés par l'API et la plateforme + +**Technologies :** +- **Drizzle ORM** : Définition des schémas de base de données +- **Valibot** : Schémas de validation +- **TypeScript** : Types partagés + +**Structure :** +``` +metadata/src/ +├── models/ # Modèles Drizzle ORM +│ ├── user.ts +│ ├── organization.ts +│ ├── account.ts +│ ├── journal.ts +│ ├── record.ts # Écritures comptables +│ ├── recordRow.ts # Lignes d'écriture +│ ├── document.ts +│ ├── attachment.ts +│ ├── year.ts +│ ├── balanceSheet.ts +│ ├── incomeStatement.ts +│ └── computation.ts +├── schemas/ # Schémas Valibot pour validation +│ └── [mêmes fichiers que models/] +├── routes/ # Définitions de routes typées +│ ├── auth/ +│ └── public/ +├── components/ # Composants métier partagés +│ ├── models/ +│ ├── schemas/ +│ └── values/ # Valeurs par défaut et constantes +└── utilities/ # Utilitaires + ├── generate.ts + ├── generateId.ts + └── routeDefinition.ts +``` + +**Exports :** +```typescript +// Utilisable par l'API et la plateforme +import { models } from '@arrhes/metadata/models' +import { schemas } from '@arrhes/metadata/schemas' +import { routes } from '@arrhes/metadata/routes' +import { generateId } from '@arrhes/metadata/utilities' +``` + +**Responsabilités :** +- Définition unique des schémas de base de données +- Validation cohérente des données entre frontend et backend +- Types TypeScript partagés +- Génération d'IDs uniques (nanoid) +- Définitions de routes type-safe + +### @arrhes/tools + +**Rôle :** Outils de gestion de la base de données (migrations, seed, maintenance) + +**Technologies :** +- **Drizzle Kit** : CLI pour migrations +- **tsx** : Exécution TypeScript +- **Postgres** : Client PostgreSQL + +**Scripts disponibles :** +```bash +# Générer les migrations depuis le schéma +pnpm --filter tools run generate + +# Pousser le schéma directement vers la DB +pnpm --filter tools run push + +# Appliquer les migrations +pnpm --filter tools run migrate + +# Seed avec données de démonstration +pnpm --filter tools run seed + +# Vider la base de données +pnpm --filter tools run clear + +# Reset complet (clear + push + seed) +pnpm --filter tools run reset + +# Supprimer les migrations +pnpm --filter tools run drop +``` + +**Structure :** +``` +tools/src/ +├── env.ts # Configuration environnement +├── schemas.ts # Import des schémas metadata +├── migrate.ts # Script de migration +├── clearDB.ts # Script de nettoyage +└── seed/ # Scripts de seed + ├── seed.ts # Seed principal + ├── migration.ts # Migrations de données + ├── records2022.ts # Données exemple 2022 + └── records2023.ts # Données exemple 2023 +``` + +**Responsabilités :** +- Gestion du schéma de base de données +- Migrations de structure et de données +- Génération de données de test +- Maintenance de la base de données + +### @arrhes/website + +**Rôle :** Site vitrine pour présenter l'application + +**Technologies :** +- **React** : Framework UI +- **Vite** : Build tool + +**Note :** Package actuellement minimal, prévu pour évoluer en site marketing/landing page. + +## Stack technique + +### Backend (API) + +| Composant | Technologie | Rôle | +|-----------|-------------|------| +| Runtime | Node.js 24.5+ | Environnement d'exécution | +| Language | TypeScript 5.9 | Langage de programmation | +| Framework | Hono 4.9 | Framework web minimaliste | +| ORM | Drizzle 0.44 | Mapping objet-relationnel | +| Validation | Valibot 1.1 | Validation de schémas | +| Database | PostgreSQL | Base de données relationnelle | +| Storage | AWS S3 SDK | Stockage de fichiers | +| Email | Nodemailer 7.0 | Envoi d'emails | +| PDF | Puppeteer 24.22 | Génération de PDF | + +### Frontend (Platform) + +| Composant | Technologie | Rôle | +|-----------|-------------|------| +| Framework | React 19.1 | UI framework | +| Routing | TanStack Router 1.132 | Routing type-safe | +| State | TanStack Query 5.90 | Server state management | +| Tables | TanStack Table 8.21 | Data tables | +| Virtual | TanStack Virtual 3.13 | Virtualisation listes | +| UI | Radix UI | Composants accessibles | +| Styling | Tailwind CSS 4.1 | CSS utility-first | +| Forms | React Hook Form 7.63 | Gestion de formulaires | +| Validation | Valibot 1.1 | Validation client-side | +| Icons | Tabler Icons 3.35 | Icônes | +| Build | Vite 7.1 | Build tool moderne | + +### Tooling + +| Outil | Version | Rôle | +|-------|---------|------| +| pnpm | Latest | Package manager | +| TypeScript | 5.9 | Compilateur TypeScript | +| ESLint | 9.36 | Linter JavaScript/TypeScript | +| Drizzle Kit | 0.31 | Migrations de base de données | +| tsx | 4.20 | Exécution TypeScript | + +## Flux de données + +### Authentification par Magic Link + +``` +1. Utilisateur entre son email + └─> POST /api/public/sendMagicLink + └─> Génération token + envoi email + +2. Utilisateur clique sur le lien + └─> GET /api/public/signIn?token=xxx + └─> Validation token + └─> Création session + └─> Cookie sécurisé (httpOnly, signed) + └─> Redirection vers plateforme + +3. Requêtes authentifiées + └─> Cookie envoyé automatiquement + └─> authMiddleware vérifie session + └─> Accès aux routes protégées +``` + +### CRUD standard + +``` +Platform API Database +──────────────────────────────────────────────────────────── +1. User action + └─> postAPI() + └─> POST /api/auth/... + └─> authMiddleware + └─> Validation données (Valibot) + └─> Drizzle ORM + └─> SQL Query + └─> PostgreSQL + +2. Response + ┌─ JSON + └─ TanStack Query cache + └─ Invalidation automatique + └─ Re-fetch et mise à jour UI +``` + +### Upload de fichiers + +``` +1. Sélection fichier + └─> Demande URL signée PUT + └─> POST /api/auth/.../generatePutSignedUrl + └─> S3 génère URL temporaire (expires 15min) + +2. Upload direct vers S3 + └─> PUT https://s3.../file + (pas de passage par l'API) + +3. Sauvegarde référence + └─> POST /api/auth/.../attachment + └─> Stocke storageKey en DB +``` + +### Download de fichiers + +``` +1. Demande URL signée GET + └─> POST /api/auth/.../generateGetSignedUrl + └─> S3 génère URL temporaire (expires 1h) + +2. Download direct depuis S3 + └─> GET https://s3.../file + (pas de passage par l'API) +``` + +## Authentification + +### Stratégie + +Arrhes utilise une **authentification par magic link** (lien temporaire envoyé par email) combinée à des **sessions persistantes** côté serveur. + +### Flow complet + +1. **Inscription** (`/api/public/signUp`) + - Validation email + alias + - Hash du mot de passe (PBKDF2, 128000 itérations) + - Création user + - Envoi email de vérification + +2. **Connexion** (`/api/public/sendMagicLink`) + - Génération token de vérification unique + - Stockage temporaire en DB + - Envoi email avec lien + +3. **Validation** (`/api/public/signIn`) + - Vérification du token + - Création d'une session + - Cookie signé et httpOnly + - Redirection vers l'application + +4. **Requêtes authentifiées** + - Cookie envoyé automatiquement + - `authMiddleware` vérifie la session + - Charge l'utilisateur en contexte + - Vérifie l'appartenance à l'organisation si nécessaire + +5. **Déconnexion** (`/api/public/signOut`) + - Suppression de la session en DB + - Suppression du cookie + +### Sécurité + +- **Cookies signés** : Vérification de l'intégrité avec `COOKIES_KEY` +- **httpOnly** : Protection contre XSS +- **sameSite** : Protection contre CSRF +- **CORS configuré** : Origine autorisée uniquement +- **Tokens temporaires** : Expiration des magic links +- **Hashing sécurisé** : PBKDF2 avec salt unique par utilisateur + +## Base de données + +### Schéma principal + +Le schéma PostgreSQL contient les tables suivantes (via Drizzle ORM) : + +**Utilisateurs et organisations :** +- `user` : Utilisateurs de l'application +- `organization` : Organisations (entreprises/associations) +- `organizationUser` : Relation many-to-many avec rôles +- `userSession` : Sessions actives + +**Comptabilité :** +- `year` : Exercices comptables +- `account` : Plan comptable +- `journal` : Journaux comptables +- `record` : Écritures comptables +- `recordRow` : Lignes d'écriture (débit/crédit) +- `document` : Documents comptables +- `attachment` : Pièces justificatives + +**États financiers :** +- `balanceSheet` : Configuration du bilan +- `incomeStatement` : Configuration du compte de résultat +- `computation` : Calculs personnalisés +- `computationIncomeStatement` : Relation calculs/compte de résultat + +### Relations clés + +``` +organization 1──n organizationUser n──1 user + │ + ├── 1──n year + ├── 1──n account + ├── 1──n journal + └── 1──n document + │ + └── 1──n record + │ + └── 1──n recordRow + │ + └── n──1 account +``` + +### Migrations + +Les migrations sont gérées par **Drizzle Kit** : +- Le schéma source est défini dans `@arrhes/metadata` +- Drizzle Kit génère automatiquement les migrations SQL +- Application via `drizzle-kit migrate` ou `push` (dev) + +## Diagramme de dépendances + +``` +@arrhes/platform ──depends on──> @arrhes/metadata + ▲ + │ +@arrhes/api ──depends on───────────┘ + ▲ + │ +@arrhes/tools ──depends on───────────┘ + +@arrhes/website (indépendant) +``` + +Tous les packages dépendent de `@arrhes/metadata` pour partager les schémas, modèles et types. Cette architecture assure une cohérence totale entre le frontend et le backend. + +--- + +Pour plus d'informations sur la configuration, consultez [CONFIGURATION.md](CONFIGURATION.md). diff --git a/docs/CONFIGURATION.md b/docs/CONFIGURATION.md new file mode 100644 index 0000000..888e3a6 --- /dev/null +++ b/docs/CONFIGURATION.md @@ -0,0 +1,369 @@ +# Configuration + +Ce document décrit toutes les variables d'environnement et les configurations nécessaires pour faire fonctionner Arrhes en développement local. + +## Table des matières + +- [Vue d'ensemble](#vue-densemble) +- [Variables d'environnement - API](#variables-denvironnement---api) +- [Variables d'environnement - Tools](#variables-denvironnement---tools) +- [Configuration PostgreSQL](#configuration-postgresql) +- [Configuration S3 (Stockage)](#configuration-s3-stockage) +- [Configuration SMTP (Email)](#configuration-smtp-email) +- [Exemples de configuration](#exemples-de-configuration) +- [Sécurité](#sécurité) + +## Vue d'ensemble + +Arrhes nécessite deux fichiers de configuration `.env` : + +1. **`packages/api/.env`** : Configuration du backend API +2. **`packages/tools/.env`** : Configuration des outils de base de données + +Ces fichiers ne sont **pas versionnés** (`.gitignore`) pour des raisons de sécurité. + +## Variables d'environnement - API + +Fichier : `packages/api/.env` + +### Environnement général + +| Variable | Type | Description | Exemple | +|----------|------|-------------|---------| +| `ENV` | `"development"` \| `"production"` | Environnement d'exécution | `development` | +| `VERBOSE` | `"true"` \| `"false"` | Mode verbeux (logs détaillés) | `true` | +| `PORT` | `string` | Port d'écoute du serveur | `3000` | + +### CORS et Cookies + +| Variable | Type | Description | Exemple | +|----------|------|-------------|---------| +| `CORS_ORIGIN` | `string` | Origines autorisées (séparées par virgule) | `http://localhost:5173` | +| `COOKIES_DOMAIN` | `string` | Domaine des cookies | `localhost` | +| `COOKIES_KEY` | `string` | Clé secrète pour signer les cookies (min 32 chars) | `your-super-secret-key-min-32-characters-long` | + +### URLs des services + +| Variable | Type | Description | Exemple | +|----------|------|-------------|---------| +| `API_BASE_URL` | `string` | URL de base de l'API | `http://localhost:3000` | +| `PLATFORM_BASE_URL` | `string` | URL de la plateforme frontend | `http://localhost:5173` | +| `WEBSITE_BASE_URL` | `string` | URL du site vitrine | `http://localhost:5174` | + +### Base de données + +| Variable | Type | Description | Exemple | +|----------|------|-------------|---------| +| `SQL_DATABASE_URL` | `string` | URL de connexion PostgreSQL | `postgres://user:password@localhost:5432/arrhes` | + +### Stockage S3 + +| Variable | Type | Description | Exemple | +|----------|------|-------------|---------| +| `STORAGE_ENDPOINT` | `string` | Endpoint S3 (ou compatible) | `http://localhost:9000` (MinIO) | +| `STORAGE_NAME` | `string` | Nom du bucket S3 | `arrhes-files` | +| `STORAGE_ACCESS_KEY` | `string` | Clé d'accès S3 | `minioadmin` | +| `STORAGE_SECRET_KEY` | `string` | Clé secrète S3 | `minioadmin` | + +### Email SMTP + +| Variable | Type | Description | Exemple | +|----------|------|-------------|---------| +| `EMAIL_ENDPOINT` | `string` | Serveur SMTP | `smtp.gmail.com` | +| `EMAIL_USER` | `string` | Utilisateur SMTP | `your-email@gmail.com` | +| `EMAIL_PASSWORD` | `string` | Mot de passe ou app password SMTP | `your-app-password` | + +## Variables d'environnement - Tools + +Fichier : `packages/tools/.env` + +| Variable | Type | Description | Exemple | +|----------|------|-------------|---------| +| `DATABASE_URL` | `string` | URL de connexion PostgreSQL | `postgres://user:password@localhost:5432/arrhes` | + +**Note :** Cette variable doit être identique à `SQL_DATABASE_URL` de l'API. + +## Configuration PostgreSQL + +### Installation + +**Ubuntu/Debian :** +```bash +sudo apt update +sudo apt install postgresql postgresql-contrib +``` + +**macOS (Homebrew) :** +```bash +brew install postgresql@16 +brew services start postgresql@16 +``` + +**Windows :** +Télécharger l'installeur depuis [postgresql.org](https://www.postgresql.org/download/windows/) + +### Création de la base de données + +```bash +# Se connecter à PostgreSQL +sudo -u postgres psql + +# Créer un utilisateur +CREATE USER arrhes_user WITH PASSWORD 'your-secure-password'; + +# Créer la base de données +CREATE DATABASE arrhes OWNER arrhes_user; + +# Donner tous les privilèges +GRANT ALL PRIVILEGES ON DATABASE arrhes TO arrhes_user; + +# Quitter +\q +``` + +### URL de connexion + +Format : `postgres://[user]:[password]@[host]:[port]/[database]` + +Exemple : `postgres://arrhes_user:your-secure-password@localhost:5432/arrhes` + +### Vérification de la connexion + +```bash +psql postgres://arrhes_user:your-secure-password@localhost:5432/arrhes +``` + +## Configuration S3 (Stockage) + +Le système de stockage utilise l'API AWS S3 mais fonctionne avec n'importe quel service compatible S3. + +### Option 1 : MinIO (Développement local recommandé) + +**Installation avec Docker :** +```bash +docker run -d \ + -p 9000:9000 \ + -p 9001:9001 \ + --name minio \ + -e "MINIO_ROOT_USER=minioadmin" \ + -e "MINIO_ROOT_PASSWORD=minioadmin" \ + -v ~/minio/data:/data \ + quay.io/minio/minio server /data --console-address ":9001" +``` + +**Configuration :** +```env +STORAGE_ENDPOINT=http://localhost:9000 +STORAGE_NAME=arrhes-files +STORAGE_ACCESS_KEY=minioadmin +STORAGE_SECRET_KEY=minioadmin +``` + +**Création du bucket :** +1. Accéder à la console MinIO : http://localhost:9001 +2. Se connecter avec `minioadmin` / `minioadmin` +3. Créer un bucket nommé `arrhes-files` +4. Configurer la politique en lecture/écriture si nécessaire + +### Option 2 : AWS S3 (Production) + +**Configuration :** +```env +STORAGE_ENDPOINT=https://s3.eu-west-3.amazonaws.com +STORAGE_NAME=your-bucket-name +STORAGE_ACCESS_KEY=YOUR_AWS_ACCESS_KEY +STORAGE_SECRET_KEY=YOUR_AWS_SECRET_KEY +``` + +**Prérequis :** +- Créer un bucket S3 dans votre région +- Créer un utilisateur IAM avec les permissions S3 appropriées +- Générer des clés d'accès pour cet utilisateur + +### Option 3 : Autre service compatible S3 + +Cloudflare R2, DigitalOcean Spaces, Scaleway Object Storage, etc. sont également compatibles. + +## Configuration SMTP (Email) + +L'application envoie des emails pour : +- Magic links d'authentification +- Notifications importantes +- Invitations d'utilisateurs + +### Option 1 : Gmail (Développement) + +**Configuration :** +```env +EMAIL_ENDPOINT=smtp.gmail.com +EMAIL_USER=your-email@gmail.com +EMAIL_PASSWORD=your-app-specific-password +``` + +**Étapes :** +1. Activer l'authentification à deux facteurs sur votre compte Google +2. Générer un "mot de passe d'application" : https://myaccount.google.com/apppasswords +3. Utiliser ce mot de passe dans `EMAIL_PASSWORD` + +### Option 2 : Services SMTP dédiés + +**Brevo (ex-Sendinblue) :** +```env +EMAIL_ENDPOINT=smtp-relay.brevo.com +EMAIL_USER=your-email@example.com +EMAIL_PASSWORD=your-smtp-key +``` + +**SendGrid :** +```env +EMAIL_ENDPOINT=smtp.sendgrid.net +EMAIL_USER=apikey +EMAIL_PASSWORD=your-sendgrid-api-key +``` + +**Mailgun :** +```env +EMAIL_ENDPOINT=smtp.mailgun.org +EMAIL_USER=postmaster@your-domain.mailgun.org +EMAIL_PASSWORD=your-smtp-password +``` + +### Option 3 : Serveur SMTP local (Test) + +Pour tester sans envoyer de vrais emails, utilisez [MailHog](https://github.com/mailhog/MailHog) : + +```bash +# Avec Docker +docker run -d -p 1025:1025 -p 8025:8025 mailhog/mailhog +``` + +```env +EMAIL_ENDPOINT=localhost:1025 +EMAIL_USER=test +EMAIL_PASSWORD=test +``` + +Interface web disponible sur http://localhost:8025 + +## Exemples de configuration + +### Configuration complète - Développement local + +**`packages/api/.env` :** +```env +# Environnement +ENV=development +VERBOSE=true +PORT=3000 + +# CORS et Cookies +CORS_ORIGIN=http://localhost:5173 +COOKIES_DOMAIN=localhost +COOKIES_KEY=my-super-secret-development-key-at-least-32-chars + +# URLs +API_BASE_URL=http://localhost:3000 +PLATFORM_BASE_URL=http://localhost:5173 +WEBSITE_BASE_URL=http://localhost:5174 + +# Base de données +SQL_DATABASE_URL=postgres://arrhes_user:arrhes_password@localhost:5432/arrhes + +# Stockage MinIO +STORAGE_ENDPOINT=http://localhost:9000 +STORAGE_NAME=arrhes-files +STORAGE_ACCESS_KEY=minioadmin +STORAGE_SECRET_KEY=minioadmin + +# Email (MailHog pour test) +EMAIL_ENDPOINT=localhost:1025 +EMAIL_USER=test +EMAIL_PASSWORD=test +``` + +**`packages/tools/.env` :** +```env +DATABASE_URL=postgres://arrhes_user:arrhes_password@localhost:5432/arrhes +``` + +### Configuration avec services externes + +**`packages/api/.env` :** +```env +# Environnement +ENV=development +VERBOSE=true +PORT=3000 + +# CORS et Cookies +CORS_ORIGIN=http://localhost:5173 +COOKIES_DOMAIN=localhost +COOKIES_KEY=generate-a-strong-random-key-here-minimum-32-characters + +# URLs +API_BASE_URL=http://localhost:3000 +PLATFORM_BASE_URL=http://localhost:5173 +WEBSITE_BASE_URL=http://localhost:5174 + +# Base de données (PostgreSQL hébergé) +SQL_DATABASE_URL=postgres://user:pass@db.provider.com:5432/arrhes + +# Stockage AWS S3 +STORAGE_ENDPOINT=https://s3.eu-west-3.amazonaws.com +STORAGE_NAME=my-arrhes-bucket +STORAGE_ACCESS_KEY=AKIAIOSFODNN7EXAMPLE +STORAGE_SECRET_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY + +# Email (Gmail) +EMAIL_ENDPOINT=smtp.gmail.com +EMAIL_USER=myemail@gmail.com +EMAIL_PASSWORD=abcd efgh ijkl mnop +``` + +## Sécurité + +### Bonnes pratiques + +1. **Ne jamais commiter les fichiers `.env`** + - Vérifiez que `.env` est dans `.gitignore` + - Utilisez des templates `.env.example` sans valeurs sensibles + +2. **Générer des secrets forts** + ```bash + # Générer une clé aléatoire pour COOKIES_KEY + openssl rand -base64 32 + ``` + +3. **Permissions de fichiers** + ```bash + # Restreindre l'accès aux fichiers .env + chmod 600 packages/api/.env + chmod 600 packages/tools/.env + ``` + +4. **Variables séparées par environnement** + - Dev : `.env.development` + - Production : `.env.production` + - Ne jamais mélanger les credentials + +5. **Rotation des secrets** + - Changez régulièrement `COOKIES_KEY` + - Renouvelez les clés API et mots de passe + - Révoquez les accès inutilisés + +### Vérification de la configuration + +Pour vérifier que toutes les variables sont correctement définies, l'API affichera une erreur au démarrage si des variables sont manquantes ou invalides (validation via Valibot dans `getEnv.ts`). + +### Valeurs recommandées + +| Variable | Recommandation | +|----------|----------------| +| `COOKIES_KEY` | Minimum 32 caractères aléatoires | +| `SQL_DATABASE_URL` | Connexion SSL en production (`?sslmode=require`) | +| `STORAGE_*` | Credentials avec permissions minimales (lecture/écriture bucket uniquement) | +| `EMAIL_*` | Utiliser des app passwords, pas le mot de passe principal | + +--- + +Pour poursuivre l'installation, consultez [DEVELOPMENT.md](DEVELOPMENT.md). diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md new file mode 100644 index 0000000..0ba7cd9 --- /dev/null +++ b/docs/CONTRIBUTING.md @@ -0,0 +1,520 @@ +# Guide de contribution + +Merci de votre intérêt pour contribuer à Arrhes ! Ce document explique comment participer au développement du projet. + +## Table des matières + +- [Code de conduite](#code-de-conduite) +- [Comment contribuer](#comment-contribuer) +- [Configuration de l'environnement](#configuration-de-lenvironnement) +- [Standards de code](#standards-de-code) +- [Convention de commits](#convention-de-commits) +- [Process de pull request](#process-de-pull-request) +- [Tests](#tests) +- [Code review](#code-review) +- [Signaler un bug](#signaler-un-bug) +- [Proposer une fonctionnalité](#proposer-une-fonctionnalité) + +## Code de conduite + +En participant à ce projet, vous vous engagez à maintenir un environnement respectueux et inclusif. Nous attendons de tous les contributeurs : + +- Respect et courtoisie envers les autres contributeurs +- Ouverture d'esprit face aux critiques constructives +- Concentration sur ce qui est le mieux pour la communauté +- Empathie envers les autres membres de la communauté + +Les comportements inacceptables incluent le harcèlement, les insultes, et tout comportement discriminatoire. + +## Comment contribuer + +Il existe plusieurs façons de contribuer à Arrhes : + +### 🐛 Signaler des bugs +Ouvrez une issue sur GitHub avec le label `bug` + +### 💡 Proposer des fonctionnalités +Ouvrez une issue sur GitHub avec le label `enhancement` + +### 📝 Améliorer la documentation +La documentation est aussi importante que le code ! + +### 💻 Contribuer du code +Suivez le process décrit dans ce document + +### 🌍 Traductions +Aidez à traduire l'application dans d'autres langues + +### 🎨 Design et UX +Proposez des améliorations d'interface + +## Configuration de l'environnement + +Avant de commencer à contribuer, configurez votre environnement de développement : + +1. **Fork le repository** sur votre compte GitHub + +2. **Cloner votre fork** + ```bash + git clone https://github.com/votre-username/arrhes.git + cd arrhes + ``` + +3. **Ajouter le repository principal comme remote** + ```bash + git remote add upstream https://github.com/arrhes/arrhes.git + ``` + +4. **Installer les dépendances** + ```bash + pnpm install + ``` + +5. **Configurer l'environnement** + Suivez les instructions dans [DEVELOPMENT.md](DEVELOPMENT.md) + +6. **Créer une branche pour votre contribution** + ```bash + git checkout -b feature/ma-fonctionnalite + # ou + git checkout -b fix/mon-correctif + ``` + +## Standards de code + +### TypeScript + +- **Utiliser TypeScript strict** : Pas de `any`, sauf exception justifiée +- **Typage explicite** pour les fonctions publiques +- **Interfaces vs Types** : Préférer `type` pour les objets simples, `interface` pour l'extension + +**Bon exemple :** +```typescript +type User = { + id: string + email: string + alias: string +} + +function createUser(data: { email: string, alias: string }): User { + return { + id: generateId(), + ...data, + } +} +``` + +**Mauvais exemple :** +```typescript +function createUser(data: any) { // ❌ any + return { + id: generateId(), + ...data, + } +} +``` + +### Naming conventions + +- **Variables et fonctions** : `camelCase` +- **Types et interfaces** : `PascalCase` +- **Constantes** : `UPPER_SNAKE_CASE` (si vraiment constante) +- **Fichiers** : `camelCase.ts` +- **Composants React** : `PascalCase.tsx` + +```typescript +// Variables et fonctions +const userName = 'John' +function getUserById(id: string) { } + +// Types +type UserProfile = { } +interface ApiResponse { } + +// Constantes +const MAX_RETRY_COUNT = 3 + +// Fichiers +// api/routes/auth/userProfile.ts +// platform/components/buttons/PrimaryButton.tsx +``` + +### Structure du code + +**Ordre des imports :** +```typescript +// 1. Imports de packages externes +import { Hono } from 'hono' +import * as v from 'valibot' + +// 2. Imports de workspace packages +import { models } from '@arrhes/metadata/models' +import { schemas } from '@arrhes/metadata/schemas' + +// 3. Imports relatifs du package actuel +import { authFactory } from '#/factories/authFactory.js' +import { validate } from '#/utilities/validate.js' +``` + +**Ordre dans les fichiers :** +```typescript +// 1. Imports +import { ... } from '...' + +// 2. Types et interfaces +type MyType = { } + +// 3. Constantes +const MY_CONSTANT = 'value' + +// 4. Fonctions/composants +export function myFunction() { } + +// 5. Export par défaut (si applicable) +export default MyComponent +``` + +### ESLint + +Le projet utilise ESLint pour maintenir la qualité du code. + +**Vérifier le linting :** +```bash +pnpm --filter platform run lint +``` + +**Fix automatique :** +```bash +pnpm --filter platform run lint --fix +``` + +**Configuration :** +- ESLint est configuré pour TypeScript et React +- Les règles sont définies dans `packages/platform/eslint.config.js` + +### Formatage + +**Indentation :** 4 espaces (pas de tabs) + +**Longueur de ligne :** Pas de limite stricte, mais restez raisonnable (~120 caractères) + +**Points-virgules :** Non requis (sauf cas spécifiques) + +**Quotes :** Simples `'` ou doubles `"` (soyez cohérent dans un fichier) + +**Trailing commas :** Oui pour les objets et arrays multilignes + +```typescript +const user = { + id: '123', + name: 'John', + email: 'john@example.com', // trailing comma +} +``` + +### React + +**Composants fonctionnels uniquement** +```typescript +export function MyComponent() { + return
Hello
+} +``` + +**Hooks en début de composant** +```typescript +export function MyComponent() { + // Hooks en premier + const [state, setState] = useState() + const query = useQuery() + + // Puis logique + const handleClick = () => { } + + // Puis render + return
...
+} +``` + +**Props destructurées** +```typescript +export function MyComponent({ title, description, onClose }: MyComponentProps) { + return
{title}
+} +``` + +**Éviter les inline styles** (utiliser Tailwind CSS) +```typescript +// ✅ Bon +
+ +// ❌ Éviter +
+``` + +## Convention de commits + +Nous utilisons une convention de commits inspirée de [Conventional Commits](https://www.conventionalcommits.org/). + +### Format + +``` +(): + +[corps optionnel] + +[footer optionnel] +``` + +### Types + +- `feat` : Nouvelle fonctionnalité +- `fix` : Correction de bug +- `docs` : Documentation uniquement +- `style` : Formatage, points-virgules manquants, etc. +- `refactor` : Refactoring sans changement de fonctionnalité +- `perf` : Amélioration de performance +- `test` : Ajout ou correction de tests +- `chore` : Maintenance, dépendances, etc. + +### Scopes (optionnel) + +- `api` : Backend +- `platform` : Frontend +- `metadata` : Package metadata +- `tools` : Outils de base de données +- `docs` : Documentation + +### Exemples + +```bash +# Nouvelle fonctionnalité +git commit -m "feat(platform): add dark mode toggle" + +# Correction de bug +git commit -m "fix(api): correct balance calculation in income statement" + +# Documentation +git commit -m "docs: update installation instructions" + +# Refactoring +git commit -m "refactor(api): extract email templates to separate files" + +# Maintenance +git commit -m "chore(deps): update drizzle to v0.45" +``` + +### Description + +- Utiliser l'impératif ("add" et non "added" ou "adds") +- Pas de majuscule au début +- Pas de point à la fin +- Maximum 72 caractères + +### Corps du commit (optionnel) + +Pour les changements complexes, ajoutez un corps explicatif : + +``` +feat(api): add export to Excel functionality + +Implement Excel export for financial statements using ExcelJS library. +Users can now export balance sheets and income statements. + +- Add ExcelJS dependency +- Create export utility functions +- Add export routes for both statement types +- Update documentation +``` + +## Process de pull request + +### 1. Vérifier avant de soumettre + +```bash +# Vérifier que tout compile +pnpm run build + +# Vérifier le linting (pour platform) +pnpm --filter platform run lint + +# Tester manuellement les changements +pnpm run dev +``` + +### 2. Mettre à jour votre branche + +```bash +# Récupérer les derniers changements +git fetch upstream +git rebase upstream/main +``` + +### 3. Pousser votre branche + +```bash +git push origin feature/ma-fonctionnalite +``` + +### 4. Créer la pull request + +Sur GitHub : +1. Cliquez sur "New Pull Request" +2. Sélectionnez votre branche +3. Remplissez le template de PR : + +```markdown +## Description +Brève description des changements + +## Type de changement +- [ ] Bug fix +- [ ] Nouvelle fonctionnalité +- [ ] Breaking change +- [ ] Documentation + +## Checklist +- [ ] Mon code suit les standards du projet +- [ ] J'ai commenté les parties complexes +- [ ] J'ai mis à jour la documentation si nécessaire +- [ ] Mes changements ne génèrent pas de nouveaux warnings +- [ ] J'ai testé localement + +## Screenshots (si applicable) +``` + +### 5. Attendre la review + +- Un mainteneur reviewera votre PR +- Répondez aux commentaires et effectuez les modifications demandées +- Une fois approuvée, votre PR sera mergée + +## Tests + +Actuellement, le projet n'a pas de suite de tests automatisés. Les contributions pour ajouter des tests sont bienvenues ! + +### Tests manuels requis + +Avant de soumettre une PR, testez manuellement : + +1. **Fonctionnalité ajoutée/modifiée** : Vérifiez qu'elle fonctionne comme prévu +2. **Régressions** : Vérifiez que vous n'avez rien cassé +3. **Cas limites** : Testez les edge cases (valeurs vides, très grandes, etc.) +4. **Différents navigateurs** : Chrome, Firefox, Safari (si frontend) + +### Tests futurs + +Nous prévoyons d'ajouter : +- Tests unitaires (Vitest) +- Tests d'intégration (Playwright) +- Tests E2E (Playwright) + +Les contributions dans ce sens sont encouragées ! + +## Code review + +### Pour les reviewers + +- Soyez constructif et respectueux +- Expliquez le "pourquoi" de vos suggestions +- Distinguez les suggestions obligatoires des optionnelles +- Approuvez si les changements sont satisfaisants + +### Pour les auteurs de PR + +- Ne prenez pas les commentaires personnellement +- Répondez à tous les commentaires (même avec "Done" ou "Fixed") +- Demandez des clarifications si nécessaire +- Remerciez les reviewers pour leur temps + +## Signaler un bug + +Pour signaler un bug, ouvrez une issue sur GitHub avec : + +### Titre +Résumé clair et concis du problème + +### Description +- **Description du bug** : Que se passe-t-il ? +- **Comportement attendu** : Que devrait-il se passer ? +- **Étapes pour reproduire** : + 1. Aller sur '...' + 2. Cliquer sur '...' + 3. Voir l'erreur +- **Screenshots** : Si applicable +- **Environnement** : + - OS : [ex: Ubuntu 22.04] + - Navigateur : [ex: Chrome 120] + - Version Node.js : [ex: 24.5.0] + - Version : [ex: commit SHA ou release] + +### Exemple + +```markdown +**Description** +Le calcul du compte de résultat affiche des montants négatifs incorrects. + +**Comportement attendu** +Les charges doivent apparaître en positif et être soustraites du résultat. + +**Étapes pour reproduire** +1. Créer un exercice comptable +2. Ajouter des écritures de charges +3. Consulter le compte de résultat +4. Observer que les montants sont négatifs + +**Screenshots** +[capture d'écran] + +**Environnement** +- OS: macOS 14.2 +- Navigateur: Firefox 121 +- Version: commit abc123 +``` + +## Proposer une fonctionnalité + +Pour proposer une nouvelle fonctionnalité, ouvrez une issue sur GitHub avec : + +### Titre +Description claire de la fonctionnalité + +### Description +- **Problème à résoudre** : Quel besoin cette fonctionnalité comble-t-elle ? +- **Solution proposée** : Comment voyez-vous cette fonctionnalité ? +- **Alternatives considérées** : Avez-vous pensé à d'autres approches ? +- **Contexte supplémentaire** : Captures d'écran, exemples d'autres apps, etc. + +### Exemple + +```markdown +**Problème** +Les utilisateurs ne peuvent pas exporter les données comptables pour les traiter dans Excel. + +**Solution proposée** +Ajouter un bouton "Exporter en Excel" sur chaque état financier qui génère un fichier .xlsx avec les données formatées. + +**Alternatives considérées** +- Export CSV : Moins convivial mais plus simple à implémenter +- Export PDF : Déjà disponible, mais pas éditable + +**Contexte** +Plusieurs utilisateurs ont demandé cette fonctionnalité pour faire des analyses complémentaires. +``` + +## Ressources additionnelles + +- [Documentation d'architecture](ARCHITECTURE.md) +- [Guide de développement](DEVELOPMENT.md) +- [Configuration](CONFIGURATION.md) +- [Issues GitHub](https://github.com/arrhes/arrhes/issues) +- [Discussions GitHub](https://github.com/arrhes/arrhes/discussions) + +## Questions ? + +Si vous avez des questions sur la contribution, n'hésitez pas à : +- Ouvrir une discussion sur GitHub +- Contacter les mainteneurs +- Consulter les issues et PR existantes + +Merci de contribuer à Arrhes ! 🎉 diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md new file mode 100644 index 0000000..c210a85 --- /dev/null +++ b/docs/DEVELOPMENT.md @@ -0,0 +1,643 @@ +# Guide de développement + +Ce document vous guidera pour installer, configurer et développer Arrhes sur votre machine locale. + +## Table des matières + +- [Prérequis](#prérequis) +- [Installation](#installation) +- [Configuration](#configuration) +- [Initialisation de la base de données](#initialisation-de-la-base-de-données) +- [Lancement en développement](#lancement-en-développement) +- [Structure du projet](#structure-du-projet) +- [Scripts disponibles](#scripts-disponibles) +- [Workflow de développement](#workflow-de-développement) +- [Debugging](#debugging) +- [Conseils](#conseils) + +## Prérequis + +Avant de commencer, assurez-vous d'avoir installé les outils suivants : + +### Node.js et pnpm + +- **Node.js** : Version 24.5 ou supérieure + ```bash + node --version # Devrait afficher v24.5.x ou supérieur + ``` + + Installation : https://nodejs.org/ + +- **pnpm** : Version 9 ou supérieure + ```bash + pnpm --version + ``` + + Installation : + ```bash + npm install -g pnpm + # ou + curl -fsSL https://get.pnpm.io/install.sh | sh - + ``` + +### PostgreSQL + +- **PostgreSQL** : Version 14 ou supérieure recommandée + ```bash + psql --version + ``` + + **Installation :** + + **Ubuntu/Debian :** + ```bash + sudo apt update + sudo apt install postgresql postgresql-contrib + sudo systemctl start postgresql + ``` + + **macOS :** + ```bash + brew install postgresql@16 + brew services start postgresql@16 + ``` + + **Windows :** + Télécharger depuis https://www.postgresql.org/download/windows/ + +### Services optionnels (pour développement complet) + +- **Docker** (pour MinIO et MailHog) : https://www.docker.com/get-started +- Ou configurez des services S3 et SMTP alternatifs + +## Installation + +### 1. Cloner le repository + +```bash +git clone https://github.com/arrhes/arrhes.git +cd arrhes +``` + +### 2. Installer les dépendances + +```bash +pnpm install +``` + +Cette commande installera toutes les dépendances de tous les packages du monorepo. + +### 3. Vérifier l'installation + +```bash +pnpm ls --depth=0 +``` + +Vous devriez voir tous les packages workspace listés. + +## Configuration + +### 1. Créer la base de données PostgreSQL + +```bash +# Se connecter à PostgreSQL +sudo -u postgres psql + +# Dans le shell PostgreSQL : +CREATE USER arrhes_user WITH PASSWORD 'arrhes_password'; +CREATE DATABASE arrhes OWNER arrhes_user; +GRANT ALL PRIVILEGES ON DATABASE arrhes TO arrhes_user; +\q +``` + +### 2. Configurer les services externes (optionnel) + +#### MinIO (Stockage de fichiers) + +```bash +# Lancer MinIO avec Docker +docker run -d \ + -p 9000:9000 \ + -p 9001:9001 \ + --name minio \ + -e "MINIO_ROOT_USER=minioadmin" \ + -e "MINIO_ROOT_PASSWORD=minioadmin" \ + -v ~/minio/data:/data \ + quay.io/minio/minio server /data --console-address ":9001" + +# Accéder à la console : http://localhost:9001 +# Créer un bucket nommé "arrhes-files" +``` + +#### MailHog (Test d'emails) + +```bash +# Lancer MailHog avec Docker +docker run -d -p 1025:1025 -p 8025:8025 mailhog/mailhog + +# Interface web : http://localhost:8025 +``` + +### 3. Créer les fichiers de configuration + +**`packages/api/.env` :** + +```bash +cd packages/api +cat > .env << 'EOF' +# Environnement +ENV=development +VERBOSE=true +PORT=3000 + +# CORS et Cookies +CORS_ORIGIN=http://localhost:5173 +COOKIES_DOMAIN=localhost +COOKIES_KEY=development-secret-key-change-in-production-min-32-chars + +# URLs +API_BASE_URL=http://localhost:3000 +PLATFORM_BASE_URL=http://localhost:5173 +WEBSITE_BASE_URL=http://localhost:5174 + +# Base de données +SQL_DATABASE_URL=postgres://arrhes_user:arrhes_password@localhost:5432/arrhes + +# Stockage MinIO +STORAGE_ENDPOINT=http://localhost:9000 +STORAGE_NAME=arrhes-files +STORAGE_ACCESS_KEY=minioadmin +STORAGE_SECRET_KEY=minioadmin + +# Email MailHog +EMAIL_ENDPOINT=localhost:1025 +EMAIL_USER=test +EMAIL_PASSWORD=test +EOF +cd ../.. +``` + +**`packages/tools/.env` :** + +```bash +cd packages/tools +cat > .env << 'EOF' +DATABASE_URL=postgres://arrhes_user:arrhes_password@localhost:5432/arrhes +EOF +cd ../.. +``` + +Pour plus de détails sur la configuration, consultez [CONFIGURATION.md](CONFIGURATION.md). + +## Initialisation de la base de données + +### 1. Pousser le schéma vers la base de données + +```bash +pnpm --filter tools run push +``` + +Cette commande crée toutes les tables nécessaires dans PostgreSQL à partir des schémas définis dans `@arrhes/metadata`. + +### 2. Seed avec des données de démonstration + +```bash +pnpm --filter tools run seed +``` + +Cette commande insère : +- Un utilisateur de démonstration : `demo@arrhes.com` / `demo` +- Une organisation exemple : "Arrhes" +- Des comptes comptables de base +- Des journaux +- Des écritures comptables d'exemple pour 2022 et 2023 +- Des documents et états financiers + +### 3. Réinitialiser la base (si nécessaire) + +Pour tout supprimer et recommencer : + +```bash +pnpm --filter tools run reset +``` + +Cette commande exécute : `clear` + `push` + `seed` + +## Lancement en développement + +### Option 1 : Tout lancer ensemble (recommandé) + +```bash +pnpm run dev +``` + +Cette commande lance simultanément : +- **API** sur http://localhost:3000 +- **Platform** sur http://localhost:5173 + +Les deux processus tournent en parallèle avec hot-reload activé. + +### Option 2 : Lancer individuellement + +Dans des terminaux séparés : + +**Terminal 1 - API :** +```bash +pnpm --filter api run dev +``` + +**Terminal 2 - Platform :** +```bash +pnpm --filter platform run dev +``` + +**Terminal 3 - Metadata (optionnel, watch mode) :** +```bash +pnpm --filter metadata run dev +``` + +### Accès à l'application + +- **Frontend** : http://localhost:5173 +- **API** : http://localhost:3000 +- **MinIO Console** : http://localhost:9001 (si configuré) +- **MailHog** : http://localhost:8025 (si configuré) + +### Identifiants de démonstration + +``` +Email : demo@arrhes.com +Password : demo +``` + +## Structure du projet + +``` +arrhes/ +├── packages/ +│ ├── api/ # Backend API +│ │ ├── src/ +│ │ │ ├── api.ts # Configuration Hono +│ │ │ ├── server.ts # Point d'entrée +│ │ │ ├── clients/ # Clients services externes +│ │ │ ├── factories/ # Factories Hono typées +│ │ │ ├── middlewares/ # Auth, validation, etc. +│ │ │ ├── routes/ # Routes API +│ │ │ │ ├── auth/ # Routes authentifiées +│ │ │ │ └── public/ # Routes publiques +│ │ │ └── utilities/ # Utilitaires +│ │ ├── .env # Variables d'environnement +│ │ ├── package.json +│ │ └── tsconfig.json +│ │ +│ ├── platform/ # Frontend React +│ │ ├── src/ +│ │ │ ├── root.tsx # Point d'entrée React +│ │ │ ├── index.html # HTML principal +│ │ │ ├── assets/ # CSS, fonts, images +│ │ │ ├── components/ # Composants UI réutilisables +│ │ │ ├── contexts/ # React contexts +│ │ │ ├── features/ # Features par domaine +│ │ │ ├── routes/ # Définition routes +│ │ │ └── utilities/ # Utilitaires +│ │ ├── package.json +│ │ ├── tsconfig.json +│ │ └── vite.config.ts +│ │ +│ ├── metadata/ # Schémas et types partagés +│ │ ├── src/ +│ │ │ ├── models/ # Modèles Drizzle ORM +│ │ │ ├── schemas/ # Schémas Valibot +│ │ │ ├── routes/ # Définitions routes API +│ │ │ ├── components/ # Composants métier +│ │ │ └── utilities/ # Utilitaires +│ │ ├── package.json +│ │ └── tsconfig.json +│ │ +│ ├── tools/ # Outils base de données +│ │ ├── src/ +│ │ │ ├── clearDB.ts # Vider la DB +│ │ │ ├── migrate.ts # Migrations +│ │ │ ├── schemas.ts # Import schémas +│ │ │ └── seed/ # Scripts de seed +│ │ ├── .env # Variables d'environnement +│ │ ├── drizzle.config.ts # Config Drizzle Kit +│ │ ├── package.json +│ │ └── tsconfig.json +│ │ +│ └── website/ # Site vitrine +│ ├── src/ +│ ├── package.json +│ └── vite.config.ts +│ +├── docs/ # Documentation +│ ├── ARCHITECTURE.md +│ ├── CONFIGURATION.md +│ ├── DEVELOPMENT.md +│ └── CONTRIBUTING.md +│ +├── pnpm-workspace.yaml # Configuration workspace +├── package.json # Scripts racine +├── tsconfig.json # Config TypeScript globale +├── LICENSE +└── README.md +``` + +## Scripts disponibles + +### Scripts racine (depuis `/`) + +```bash +# Lancer API + Platform en développement +pnpm run dev + +# Builder tous les packages +pnpm run build +``` + +### Scripts API (`packages/api/`) + +```bash +# Développement avec hot-reload +pnpm --filter api run dev + +# Build pour production +pnpm --filter api run build + +# Lancer en production (après build) +pnpm --filter api run start +``` + +### Scripts Platform (`packages/platform/`) + +```bash +# Développement avec hot-reload +pnpm --filter platform run dev + +# Build pour production +pnpm --filter platform run build + +# Linter +pnpm --filter platform run lint +``` + +### Scripts Metadata (`packages/metadata/`) + +```bash +# Build avec watch mode +pnpm --filter metadata run dev + +# Build une fois +pnpm --filter metadata run build +``` + +### Scripts Tools (`packages/tools/`) + +```bash +# Générer les migrations depuis le schéma +pnpm --filter tools run generate + +# Pousser le schéma vers la DB (dev) +pnpm --filter tools run push + +# Appliquer les migrations (production) +pnpm --filter tools run migrate + +# Seed avec données de démo +pnpm --filter tools run seed + +# Vider complètement la DB +pnpm --filter tools run clear + +# Reset complet : clear + push + seed +pnpm --filter tools run reset + +# Supprimer les migrations +pnpm --filter tools run drop +``` + +## Workflow de développement + +### Développement typique + +1. **Lancer les services externes** + ```bash + # PostgreSQL (si pas démarré) + sudo systemctl start postgresql + + # MinIO (si arrêté) + docker start minio + + # MailHog (si arrêté) + docker start [container-id] + ``` + +2. **Lancer l'application** + ```bash + pnpm run dev + ``` + +3. **Développer avec hot-reload** + - Modifications dans `packages/api/src/` → Rechargement automatique de l'API + - Modifications dans `packages/platform/src/` → HMR (Hot Module Replacement) + - Modifications dans `packages/metadata/src/` → Nécessite rebuild (ou mode watch) + +### Modifier le schéma de base de données + +1. **Modifier les modèles** dans `packages/metadata/src/models/` + +2. **Rebuild metadata** + ```bash + pnpm --filter metadata run build + ``` + +3. **Générer la migration** (optionnel, pour production) + ```bash + pnpm --filter tools run generate + ``` + +4. **Appliquer les changements** + ```bash + # Développement : push direct + pnpm --filter tools run push + + # Production : migrations + pnpm --filter tools run migrate + ``` + +5. **Mettre à jour le seed** si nécessaire dans `packages/tools/src/seed/` + +### Ajouter une nouvelle route API + +1. **Créer la définition de route** dans `packages/metadata/src/routes/` + ```typescript + // packages/metadata/src/routes/auth/myFeature.ts + import { routeDefinition } from '#src/utilities/routeDefinition.js' + import * as v from 'valibot' + + export const myFeatureRoute = routeDefinition({ + path: '/api/auth/my-feature', + paramsSchema: v.object({ /* ... */ }), + bodySchema: v.object({ /* ... */ }), + responseSchema: v.object({ /* ... */ }), + }) + ``` + +2. **Créer l'implémentation** dans `packages/api/src/routes/auth/` + ```typescript + // packages/api/src/routes/auth/myFeature.ts + import { myFeatureRoute } from '@arrhes/metadata/routes' + import { authFactory } from '#/factories/authFactory.js' + + export const myFeature = authFactory.createApp().post( + myFeatureRoute.path, + async (c) => { + // Implémentation + return c.json({ /* ... */ }) + } + ) + ``` + +3. **Enregistrer la route** dans `packages/api/src/routes/routes.ts` + +4. **Utiliser côté frontend** dans `packages/platform/src/utilities/postAPI.ts` + +### Ajouter une nouvelle page + +1. **Créer le composant** dans `packages/platform/src/features/` + +2. **Définir la route** dans `packages/platform/src/routes/root/` + +3. **Mettre à jour le tree** dans `packages/platform/src/routes/platformTree.ts` + +4. **Ajouter la navigation** si nécessaire dans les layouts + +## Debugging + +### API (Backend) + +**Logs verbeux :** +```env +VERBOSE=true +``` + +**Debugger Node.js :** + +Modifier `packages/api/package.json` : +```json +{ + "scripts": { + "dev:debug": "tsx watch --inspect --env-file=.env ./src/server.ts" + } +} +``` + +Lancer : +```bash +pnpm --filter api run dev:debug +``` + +Attacher le debugger dans VS Code avec cette configuration (`.vscode/launch.json`) : +```json +{ + "type": "node", + "request": "attach", + "name": "Attach to API", + "port": 9229, + "skipFiles": ["/**"] +} +``` + +### Platform (Frontend) + +**Console du navigateur :** +- Ouvrir DevTools (F12) +- Voir les erreurs, warnings, et logs + +**React DevTools :** +- Installer l'extension React DevTools +- Inspecter les composants et leur state + +**TanStack Query DevTools :** +Déjà intégré dans l'application, visible en bas de l'écran en mode dev. + +### Base de données + +**Inspecter la DB :** +```bash +psql postgres://arrhes_user:arrhes_password@localhost:5432/arrhes +``` + +**Commandes SQL utiles :** +```sql +-- Lister les tables +\dt + +-- Voir le schéma d'une table +\d table_name + +-- Compter les enregistrements +SELECT COUNT(*) FROM users; + +-- Voir les derniers enregistrements +SELECT * FROM users ORDER BY "createdAt" DESC LIMIT 10; +``` + +**Drizzle Studio** (GUI pour visualiser la DB) : +```bash +pnpm dlx drizzle-kit studio --config=packages/tools/drizzle.config.ts +``` + +## Conseils + +### Performance + +- **Hot-reload lent ?** Redémarrez le serveur de développement +- **Build lent ?** Vérifiez que Node.js est à jour +- **pnpm lent ?** Nettoyez le cache : `pnpm store prune` + +### Problèmes courants + +**"Cannot connect to database" :** +- Vérifiez que PostgreSQL est démarré +- Testez la connexion : `psql ` +- Vérifiez les credentials dans `.env` + +**"Module not found @arrhes/metadata" :** +- Rebuild metadata : `pnpm --filter metadata run build` +- Ou lancez en mode watch : `pnpm --filter metadata run dev` + +**"CORS error" :** +- Vérifiez `CORS_ORIGIN` dans `packages/api/.env` +- Assurez-vous que l'URL correspond exactement + +**"Cookie not set" :** +- Vérifiez `COOKIES_DOMAIN` (doit être `localhost` en dev) +- Vérifiez que l'API et la platform sont sur le même domaine + +**"S3/Storage error" :** +- Vérifiez que MinIO est démarré : `docker ps` +- Vérifiez que le bucket existe +- Testez l'endpoint : `curl http://localhost:9000` + +### Bonnes pratiques + +1. **Commits atomiques** : Un commit = une fonctionnalité/fix +2. **Messages de commit clairs** : Suivez les conventions (voir CONTRIBUTING.md) +3. **Tester avant de commit** : Vérifiez que tout fonctionne +4. **Suivre les patterns existants** : Regardez le code existant pour rester cohérent +5. **Documenter les changements** : Commentaires pour la logique complexe + +### Ressources utiles + +- **Hono** : https://hono.dev/ +- **Drizzle ORM** : https://orm.drizzle.team/ +- **Valibot** : https://valibot.dev/ +- **TanStack Router** : https://tanstack.com/router/ +- **TanStack Query** : https://tanstack.com/query/ +- **Radix UI** : https://www.radix-ui.com/ +- **Tailwind CSS** : https://tailwindcss.com/ + +--- + +Pour contribuer au projet, consultez [CONTRIBUTING.md](CONTRIBUTING.md). From b643d054ee91545574d7705a3d63bd2189f68e4b Mon Sep 17 00:00:00 2001 From: Etienne Santoul <30403047+esantoul@users.noreply.github.com> Date: Fri, 21 Nov 2025 13:36:41 +0100 Subject: [PATCH 02/25] feat(dev): add dev container and docker compose setup Add Dev Container configuration for VS Code/Cursor with automatic environment setup. Add Docker Compose configuration for PostgreSQL, MinIO, and MailHog services. Update documentation to include three development options: Dev Container, Docker Compose, and native setup. - Add .devcontainer configuration (Dockerfile, devcontainer.json, post-create.sh) - Add docker-compose.yml with PostgreSQL, MinIO, and MailHog services - Add .dockerignore for Docker builds - Update README.md with Dev Container quick start guide - Update docs/DEVELOPMENT.md with environment choice section - Update docs/CONFIGURATION.md with Docker Compose options - Update docs/CONTRIBUTING.md with Dev Container instructions - Add .pnpm-store to .gitignore - Add # alias to platform vite.config.ts --- .devcontainer/Dockerfile | 20 ++ .devcontainer/README.md | 193 ++++++++++++++ .devcontainer/devcontainer.json | 118 +++++++++ .devcontainer/post-create.sh | 95 +++++++ .dockerignore | 54 ++++ .gitignore | 2 + README.md | 71 +++++- docker-compose.yml | 78 ++++++ docs/CONFIGURATION.md | 230 ++++++++++++++--- docs/CONTRIBUTING.md | 41 ++- docs/DEVELOPMENT.md | 423 +++++++++++++++++++++++++++---- packages/platform/vite.config.ts | 1 + 12 files changed, 1220 insertions(+), 106 deletions(-) create mode 100644 .devcontainer/Dockerfile create mode 100644 .devcontainer/README.md create mode 100644 .devcontainer/devcontainer.json create mode 100644 .devcontainer/post-create.sh create mode 100644 .dockerignore create mode 100644 docker-compose.yml diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 0000000..3451d5f --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,20 @@ +ARG NODE_VERSION=24 +FROM mcr.microsoft.com/devcontainers/typescript-node:${NODE_VERSION} + +# Installer pnpm globalement +RUN npm install -g pnpm + +# Installer des outils utiles +RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ + && apt-get -y install --no-install-recommends \ + postgresql-client \ + curl \ + vim \ + && apt-get clean -y && rm -rf /var/lib/apt/lists/* + +# Configurer le workspace +WORKDIR /workspace + +# Note: Les dépendances seront installées via postCreateCommand +# car le workspace sera monté depuis le host + diff --git a/.devcontainer/README.md b/.devcontainer/README.md new file mode 100644 index 0000000..f82711d --- /dev/null +++ b/.devcontainer/README.md @@ -0,0 +1,193 @@ +# Dev Container Configuration + +Ce répertoire contient la configuration pour développer Arrhes dans un Dev Container (VS Code/Cursor). + +## Qu'est-ce qu'un Dev Container ? + +Un Dev Container est un environnement de développement complet qui s'exécute dans un container Docker. Il offre : +- Une configuration d'environnement reproductible +- Tous les outils nécessaires préinstallés +- Les extensions d'éditeur recommandées +- Un onboarding instantané pour les nouveaux contributeurs + +## Fichiers + +### `devcontainer.json` +Fichier de configuration principal qui définit : +- Le container de développement à utiliser +- Les ports à exposer +- Les extensions VS Code/Cursor à installer +- Les commandes à exécuter lors de la création/démarrage du container +- Les paramètres de l'éditeur + +### `Dockerfile` +Définit l'image Docker pour le container de développement : +- Basé sur l'image officielle Microsoft Node.js + TypeScript +- Installe pnpm globalement +- Installe les outils CLI utiles (PostgreSQL client, curl, vim) + +### `post-create.sh` +Script exécuté automatiquement après la création du container : +1. Installe les dépendances pnpm +2. Crée les fichiers `.env` avec les bonnes valeurs +3. Attend que PostgreSQL soit prêt +4. Initialise le schéma de base de données +5. Insère les données de démonstration + +## Utilisation + +### Première utilisation + +1. Ouvrir le projet dans VS Code/Cursor +2. Cliquer sur "Reopen in Container" quand demandé +3. Attendre que le container se construise et se configure (2-5 minutes) +4. Lancer `pnpm run dev` + +### Utilisation quotidienne + +Le container conserve son état entre les sessions. Lors de la réouverture : +1. Le container redémarre (quelques secondes) +2. Les services (PostgreSQL, MinIO, MailHog) se relancent automatiquement +3. Vous pouvez directement lancer `pnpm run dev` + +### Rebuild du container + +Si vous modifiez les fichiers de configuration du Dev Container : + +**Via VS Code/Cursor :** +- `Cmd/Ctrl + Shift + P` +- "Dev Containers: Rebuild Container" + +**Via CLI :** +```bash +docker-compose build devcontainer +``` + +## Services inclus + +Tous les services sont automatiquement démarrés et configurés : + +| Service | URL/Port | Credentials | +|---------|----------|-------------| +| PostgreSQL | `postgres:5432` | `arrhes_user` / `arrhes_password` | +| MinIO API | `minio:9000` | `minioadmin` / `minioadmin` | +| MinIO Console | http://localhost:9001 | `minioadmin` / `minioadmin` | +| MailHog SMTP | `mailhog:1025` | - | +| MailHog Web | http://localhost:8025 | - | + +**Note :** Dans le Dev Container, les services sont accessibles via leur nom Docker (`postgres`, `minio`, `mailhog`) plutôt que `localhost`. + +## Extensions installées + +Le Dev Container installe automatiquement : +- **ESLint** : Linting JavaScript/TypeScript +- **Prettier** : Formatage de code +- **GitLens** : Git amélioré +- **Tailwind CSS IntelliSense** : Autocomplétion Tailwind +- **ES7+ React/Redux snippets** : Snippets React +- **SQLTools** + **PostgreSQL Driver** : Client PostgreSQL intégré +- **Docker** : Gestion des containers +- **Error Lens** : Affichage des erreurs inline +- **Path Intellisense** : Autocomplétion des chemins +- **Code Spell Checker** : Vérification orthographique + +## Configuration de l'éditeur + +Le Dev Container applique automatiquement les paramètres suivants : +- Format on save activé (Prettier) +- ESLint fix on save +- TypeScript workspace version +- Tab size: 4 espaces +- EOL: LF (Unix) + +## Personnalisation + +### Ajouter une extension + +Éditez `.devcontainer/devcontainer.json` : +```json +{ + "customizations": { + "vscode": { + "extensions": [ + // ... extensions existantes + "publisher.extension-name" + ] + } + } +} +``` + +Puis rebuild le container. + +### Modifier la configuration + +Pour personnaliser : +- **Environnement** : Modifiez `Dockerfile` +- **Extensions/Settings** : Modifiez `devcontainer.json` +- **Setup initial** : Modifiez `post-create.sh` + +Après toute modification, pensez à rebuild le container. + +## Troubleshooting + +### Le container ne démarre pas +```bash +# Voir les logs du container +docker logs arrhes-devcontainer-1 + +# Rebuild depuis zéro +docker-compose down -v +docker-compose build --no-cache devcontainer +``` + +### PostgreSQL n'est pas prêt +```bash +# Vérifier l'état de PostgreSQL +docker-compose ps postgres + +# Voir les logs +docker-compose logs postgres + +# Redémarrer PostgreSQL +docker-compose restart postgres +``` + +### Les dépendances ne s'installent pas +```bash +# Dans le terminal du Dev Container +rm -rf node_modules +pnpm install +``` + +### Réinitialiser complètement +```bash +# Fermer VS Code/Cursor +# Depuis votre machine locale : +docker-compose down -v +# Réouvrir le projet dans le Dev Container +``` + +## Performance + +**Volumes bindés :** +Le projet utilise des volumes "cached" pour de meilleures performances sur macOS/Windows. + +**WSL2 (Windows) :** +Pour de meilleures performances, clonez le projet dans le filesystem WSL2 : +```bash +# Dans WSL2 +cd ~ +git clone https://github.com/arrhes/arrhes.git +code arrhes +``` + +**macOS :** +Les volumes Docker peuvent être lents. Si vous rencontrez des problèmes de performance, envisagez l'option Docker Compose (sans Dev Container) pour un développement natif. + +## Ressources + +- [Dev Containers documentation](https://containers.dev/) +- [VS Code Dev Containers](https://code.visualstudio.com/docs/devcontainers/containers) +- [Docker Compose documentation](https://docs.docker.com/compose/) + diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..8cacfda --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,118 @@ +{ + "name": "Arrhes Development", + "dockerComposeFile": "../docker-compose.yml", + "service": "devcontainer", + "workspaceFolder": "/workspace", + + // Monter le workspace + "mounts": [ + "source=${localWorkspaceFolder},target=/workspace,type=bind,consistency=cached" + ], + + // Exposer les ports pour accéder aux services + "forwardPorts": [ + 3000, // API + 5173, // Platform (Vite) + 5432, // PostgreSQL + 9000, // MinIO API + 9001, // MinIO Console + 1025, // MailHog SMTP + 8025 // MailHog Web UI + ], + + // Labels pour les ports + "portsAttributes": { + "3000": { + "label": "API", + "onAutoForward": "notify" + }, + "5173": { + "label": "Platform", + "onAutoForward": "openBrowser" + }, + "9001": { + "label": "MinIO Console", + "onAutoForward": "ignore" + }, + "8025": { + "label": "MailHog Web", + "onAutoForward": "ignore" + } + }, + + // Extensions VS Code/Cursor recommandées + "customizations": { + "vscode": { + "extensions": [ + // TypeScript + "dbaeumer.vscode-eslint", + "esbenp.prettier-vscode", + + // Git + "eamodio.gitlens", + + // Développement + "bradlc.vscode-tailwindcss", + "formulahendry.auto-rename-tag", + "dsznajder.es7-react-js-snippets", + + // Base de données + "mtxr.sqltools", + "mtxr.sqltools-driver-pg", + + // Docker + "ms-azuretools.vscode-docker", + + // Utilitaires + "usernamehw.errorlens", + "christian-kohler.path-intellisense", + "streetsidesoftware.code-spell-checker" + ], + "settings": { + "typescript.tsdk": "node_modules/typescript/lib", + "typescript.enablePromptUseWorkspaceTsdk": true, + "editor.formatOnSave": true, + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.codeActionsOnSave": { + "source.fixAll.eslint": "explicit" + }, + "files.eol": "\n", + "terminal.integrated.defaultProfile.linux": "bash", + "[typescript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[typescriptreact]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + } + } + } + }, + + // Commandes post-création du container + "postCreateCommand": "bash .devcontainer/post-create.sh", + + // Commande post-démarrage (vide pour éviter les erreurs avec docker-compose) + "postStartCommand": "", + + // Fonctionnalités à ajouter + "features": { + "ghcr.io/devcontainers/features/common-utils:2": { + "installZsh": true, + "installOhMyZsh": true, + "configureZshAsDefaultShell": true, + "username": "node" + }, + "ghcr.io/devcontainers/features/git:1": { + "version": "latest" + } + }, + + // Utilisateur non-root + "remoteUser": "node", + + // Variables d'environnement + "remoteEnv": { + "NODE_ENV": "development" + } +} + diff --git a/.devcontainer/post-create.sh b/.devcontainer/post-create.sh new file mode 100644 index 0000000..f84e5ce --- /dev/null +++ b/.devcontainer/post-create.sh @@ -0,0 +1,95 @@ +#!/bin/bash +set -e + +echo "🚀 Configuration de l'environnement de développement Arrhes..." + +# Installer les dépendances si nécessaire +if [ ! -d "node_modules" ]; then + echo "📦 Installation des dépendances..." + pnpm install +else + echo "✅ Dépendances déjà installées" +fi + +# Build les packages nécessaires (metadata doit être compilé avant tools) +echo "🔨 Compilation des packages..." +pnpm --filter @arrhes/metadata run build + +# Créer les fichiers .env s'ils n'existent pas +if [ ! -f "packages/api/.env" ]; then + echo "⚙️ Création de packages/api/.env..." + cat > packages/api/.env << 'EOF' +# Environnement +ENV=development +VERBOSE=true +PORT=3000 + +# CORS et Cookies +CORS_ORIGIN=http://localhost:5173 +COOKIES_DOMAIN=localhost +COOKIES_KEY=development-secret-key-change-in-production-min-32-chars + +# URLs +API_BASE_URL=http://localhost:3000 +PLATFORM_BASE_URL=http://localhost:5173 +WEBSITE_BASE_URL=http://localhost:5174 + +# Base de données (Docker Compose) +SQL_DATABASE_URL=postgres://arrhes_user:arrhes_password@postgres:5432/arrhes + +# Stockage MinIO (Docker Compose) +STORAGE_ENDPOINT=http://minio:9000 +STORAGE_NAME=arrhes-files +STORAGE_ACCESS_KEY=minioadmin +STORAGE_SECRET_KEY=minioadmin + +# Email MailHog (Docker Compose) +EMAIL_ENDPOINT=mailhog:1025 +EMAIL_USER=test +EMAIL_PASSWORD=test +EOF +else + echo "✅ packages/api/.env existe déjà" +fi + +if [ ! -f "packages/tools/.env" ]; then + echo "⚙️ Création de packages/tools/.env..." + cat > packages/tools/.env << 'EOF' +DATABASE_URL=postgres://arrhes_user:arrhes_password@postgres:5432/arrhes +EOF +else + echo "✅ packages/tools/.env existe déjà" +fi + +# Attendre que PostgreSQL soit prêt +echo "⏳ Attente du démarrage de PostgreSQL..." +until pg_isready -h postgres -U arrhes_user; do + sleep 1 +done +echo "✅ PostgreSQL est prêt" + +# Initialiser la base de données +echo "🗄️ Initialisation de la base de données..." +pnpm --filter tools run push + +# Seed avec des données de démonstration +echo "🌱 Insertion des données de démonstration..." +pnpm --filter tools run seed + +echo "" +echo "✨ Configuration terminée !" +echo "" +echo "Pour démarrer le développement, lancez :" +echo " pnpm run dev" +echo "" +echo "Services disponibles :" +echo " - API : http://localhost:3000" +echo " - Platform : http://localhost:5173" +echo " - MinIO Console : http://localhost:9001" +echo " - MailHog : http://localhost:8025" +echo "" +echo "Identifiants de démonstration :" +echo " Email : demo@arrhes.com" +echo " Mot de passe : demo" +echo "" + diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..df87d9b --- /dev/null +++ b/.dockerignore @@ -0,0 +1,54 @@ +# Git +.git +.gitignore + +# Dependencies +node_modules +**/node_modules + +# Build outputs +build +**/build +dist +**/dist +*.tsbuildinfo + +# Environment files +.env +**/.env +.env.* +**/.env.* + +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# IDE +.vscode +.idea +*.swp +*.swo +*~ +.DS_Store + +# Testing +coverage +.nyc_output + +# Misc +.cache +*.tgz +.npmrc +.continue +.dev +.old + +# Docker +Dockerfile +docker-compose.yml +.dockerignore + diff --git a/.gitignore b/.gitignore index 0a523f4..5fb0e1a 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,6 @@ build .vscode pnpm-lock.yaml +.pnpm-store + *.tsbuildinfo \ No newline at end of file diff --git a/README.md b/README.md index 12b13c4..2121aae 100644 --- a/README.md +++ b/README.md @@ -39,13 +39,62 @@ Arrhes est une solution complète de comptabilité conçue spécifiquement pour ## Démarrage rapide -### Prérequis +### Option 1 : Dev Container 🚀 (Le plus simple) -- Node.js 24.5+ -- pnpm -- PostgreSQL +Prérequis : Docker, VS Code ou Cursor avec l'extension Dev Containers -### Installation +```bash +# Cloner le repository +git clone https://github.com/arrhes/arrhes.git +cd arrhes + +# Ouvrir dans VS Code/Cursor +code . + +# Cliquer sur "Reopen in Container" quand demandé +# Ou : Cmd/Ctrl+Shift+P > "Dev Containers: Reopen in Container" + +# L'environnement se configure automatiquement ! +# Une fois prêt, lancer l'application : +pnpm run dev +``` + +Tout est configuré automatiquement : Node.js, pnpm, PostgreSQL, MinIO, MailHog, et les données de démonstration ! + +### Option 2 : Avec Docker Compose 🐳 + +Prérequis : Node.js 24.5+, pnpm, Docker + +```bash +# Cloner le repository +git clone https://github.com/arrhes/arrhes.git +cd arrhes + +# Installer les dépendances +pnpm install + +# Lancer les services (PostgreSQL, MinIO, MailHog) +docker-compose up -d + +# Créer le bucket MinIO +# Accéder à http://localhost:9001 (minioadmin / minioadmin) +# Créer un bucket nommé "arrhes-files" + +# Configurer les variables d'environnement +# Créer packages/api/.env et packages/tools/.env +# (voir la documentation complète) + +# Initialiser la base de données +pnpm --filter tools run push +pnpm --filter tools run seed + +# Lancer l'application +pnpm run dev +``` + +### Option 3 : Installation native + +Prérequis : Node.js 24.5+, pnpm, PostgreSQL ```bash # Cloner le repository @@ -55,10 +104,12 @@ cd arrhes # Installer les dépendances pnpm install +# Créer la base de données PostgreSQL +# (voir la documentation complète) + # Configurer les variables d'environnement -cp packages/api/.env.example packages/api/.env -cp packages/tools/.env.example packages/tools/.env -# Éditer les fichiers .env avec vos valeurs +# Créer packages/api/.env et packages/tools/.env +# (voir la documentation complète) # Initialiser la base de données pnpm --filter tools run push @@ -68,10 +119,12 @@ pnpm --filter tools run seed pnpm run dev ``` -L'API sera accessible sur le port configuré (par défaut `http://localhost:3000`) et la plateforme sur `http://localhost:5173`. +L'API sera accessible sur `http://localhost:3000` et la plateforme sur `http://localhost:5173`. **Identifiants de démonstration :** `demo@arrhes.com` / `demo` +**Pour plus de détails, consultez le [Guide de développement](docs/DEVELOPMENT.md).** + ## Documentation - 📚 [Architecture](docs/ARCHITECTURE.md) - Vue d'ensemble de l'architecture et du stack technique diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..aee6cee --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,78 @@ +version: '3.8' + +services: + # Container de développement (pour Dev Containers) + devcontainer: + build: + context: . + dockerfile: .devcontainer/Dockerfile + args: + NODE_VERSION: "24" + volumes: + - .:/workspace:cached + command: sleep infinity + depends_on: + - postgres + - minio + - mailhog + network_mode: service:postgres + + # Base de données PostgreSQL + postgres: + image: postgres:16-alpine + container_name: arrhes-postgres + restart: unless-stopped + environment: + POSTGRES_USER: arrhes_user + POSTGRES_PASSWORD: arrhes_password + POSTGRES_DB: arrhes + ports: + - "5432:5432" + volumes: + - postgres_data:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -U arrhes_user -d arrhes"] + interval: 10s + timeout: 5s + retries: 5 + + # Stockage S3 compatible (MinIO) + minio: + image: quay.io/minio/minio:latest + container_name: arrhes-minio + restart: unless-stopped + command: server /data --console-address ":9001" + environment: + MINIO_ROOT_USER: minioadmin + MINIO_ROOT_PASSWORD: minioadmin + ports: + - "9000:9000" # API + - "9001:9001" # Console web + volumes: + - minio_data:/data + healthcheck: + test: ["CMD", "mc", "ready", "local"] + interval: 10s + timeout: 5s + retries: 5 + + # Serveur SMTP de test (MailHog) + mailhog: + image: mailhog/mailhog:latest + container_name: arrhes-mailhog + restart: unless-stopped + ports: + - "1025:1025" # SMTP + - "8025:8025" # Interface web + healthcheck: + test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:8025"] + interval: 10s + timeout: 5s + retries: 5 + +volumes: + postgres_data: + name: arrhes_postgres_data + minio_data: + name: arrhes_minio_data + diff --git a/docs/CONFIGURATION.md b/docs/CONFIGURATION.md index 888e3a6..861bd29 100644 --- a/docs/CONFIGURATION.md +++ b/docs/CONFIGURATION.md @@ -22,6 +22,18 @@ Arrhes nécessite deux fichiers de configuration `.env` : Ces fichiers ne sont **pas versionnés** (`.gitignore`) pour des raisons de sécurité. +### Approches de configuration + +**Option 1 : Avec Docker Compose (Recommandé) 🐳** + +Le fichier `docker-compose.yml` à la racine du projet lance automatiquement PostgreSQL, MinIO et MailHog avec des valeurs par défaut prêtes à l'emploi. Cette option simplifie grandement la configuration. + +**Option 2 : Installation native** + +Vous installez et configurez manuellement chaque service sur votre machine. + +Ce document couvre les deux approches. + ## Variables d'environnement - API Fichier : `packages/api/.env` @@ -85,12 +97,47 @@ Fichier : `packages/tools/.env` ## Configuration PostgreSQL -### Installation +### Option 1 : Avec Docker Compose (Recommandé) 🐳 + +Aucune installation manuelle requise ! Le fichier `docker-compose.yml` configure automatiquement PostgreSQL. + +**Lancer PostgreSQL :** +```bash +docker-compose up -d postgres +``` + +**Configuration par défaut :** +- **Host** : `localhost` +- **Port** : `5432` +- **Database** : `arrhes` +- **User** : `arrhes_user` +- **Password** : `arrhes_password` +- **URL** : `postgres://arrhes_user:arrhes_password@localhost:5432/arrhes` + +**Vérification de la connexion :** +```bash +psql postgres://arrhes_user:arrhes_password@localhost:5432/arrhes +``` + +**Commandes utiles :** +```bash +# Voir les logs +docker-compose logs postgres + +# Redémarrer +docker-compose restart postgres + +# Arrêter +docker-compose stop postgres +``` + +### Option 2 : Installation native **Ubuntu/Debian :** ```bash sudo apt update sudo apt install postgresql postgresql-contrib +sudo systemctl start postgresql ``` **macOS (Homebrew) :** @@ -102,8 +149,7 @@ brew services start postgresql@16 **Windows :** Télécharger l'installeur depuis [postgresql.org](https://www.postgresql.org/download/windows/) -### Création de la base de données - +**Création de la base de données :** ```bash # Se connecter à PostgreSQL sudo -u postgres psql @@ -121,14 +167,13 @@ GRANT ALL PRIVILEGES ON DATABASE arrhes TO arrhes_user; \q ``` -### URL de connexion +**URL de connexion :** Format : `postgres://[user]:[password]@[host]:[port]/[database]` Exemple : `postgres://arrhes_user:your-secure-password@localhost:5432/arrhes` -### Vérification de la connexion - +**Vérification de la connexion :** ```bash psql postgres://arrhes_user:your-secure-password@localhost:5432/arrhes ``` @@ -137,21 +182,23 @@ psql postgres://arrhes_user:your-secure-password@localhost:5432/arrhes Le système de stockage utilise l'API AWS S3 mais fonctionne avec n'importe quel service compatible S3. -### Option 1 : MinIO (Développement local recommandé) +### Option 1 : Avec Docker Compose (Recommandé) 🐳 -**Installation avec Docker :** +Le fichier `docker-compose.yml` lance automatiquement MinIO. + +**Lancer MinIO :** ```bash -docker run -d \ - -p 9000:9000 \ - -p 9001:9001 \ - --name minio \ - -e "MINIO_ROOT_USER=minioadmin" \ - -e "MINIO_ROOT_PASSWORD=minioadmin" \ - -v ~/minio/data:/data \ - quay.io/minio/minio server /data --console-address ":9001" +docker-compose up -d minio ``` -**Configuration :** +**Configuration par défaut :** +- **Endpoint** : `http://localhost:9000` +- **Console** : http://localhost:9001 +- **Access Key** : `minioadmin` +- **Secret Key** : `minioadmin` +- **Bucket** : `arrhes-files` (à créer) + +**Variables d'environnement :** ```env STORAGE_ENDPOINT=http://localhost:9000 STORAGE_NAME=arrhes-files @@ -160,12 +207,46 @@ STORAGE_SECRET_KEY=minioadmin ``` **Création du bucket :** -1. Accéder à la console MinIO : http://localhost:9001 + +Via l'interface web : +1. Accéder à http://localhost:9001 2. Se connecter avec `minioadmin` / `minioadmin` -3. Créer un bucket nommé `arrhes-files` -4. Configurer la politique en lecture/écriture si nécessaire +3. Cliquer sur "Buckets" > "Create Bucket" +4. Nommer le bucket `arrhes-files` + +Ou via la ligne de commande : +```bash +docker exec arrhes-minio mc alias set local http://localhost:9000 minioadmin minioadmin +docker exec arrhes-minio mc mb local/arrhes-files +docker exec arrhes-minio mc anonymous set public local/arrhes-files +``` + +**Commandes utiles :** +```bash +# Voir les logs +docker-compose logs minio + +# Redémarrer +docker-compose restart minio +``` + +### Option 2 : MinIO standalone (sans Docker Compose) + +**Installation avec Docker :** +```bash +docker run -d \ + -p 9000:9000 \ + -p 9001:9001 \ + --name minio \ + -e "MINIO_ROOT_USER=minioadmin" \ + -e "MINIO_ROOT_PASSWORD=minioadmin" \ + -v ~/minio/data:/data \ + quay.io/minio/minio server /data --console-address ":9001" +``` -### Option 2 : AWS S3 (Production) +Suivez ensuite les mêmes étapes de création de bucket que ci-dessus. + +### Option 3 : AWS S3 (Production) **Configuration :** ```env @@ -191,7 +272,52 @@ L'application envoie des emails pour : - Notifications importantes - Invitations d'utilisateurs -### Option 1 : Gmail (Développement) +### Option 1 : Avec Docker Compose (Recommandé pour le développement) 🐳 + +Le fichier `docker-compose.yml` lance automatiquement MailHog, un serveur SMTP de test. + +**Lancer MailHog :** +```bash +docker-compose up -d mailhog +``` + +**Configuration par défaut :** +- **SMTP** : `localhost:1025` +- **Interface web** : http://localhost:8025 + +**Variables d'environnement :** +```env +EMAIL_ENDPOINT=localhost:1025 +EMAIL_USER=test +EMAIL_PASSWORD=test +``` + +**Interface web :** +Accédez à http://localhost:8025 pour voir tous les emails envoyés par l'application. + +**Avantages :** +- Aucun email réel n'est envoyé +- Visualisation de tous les emails +- Idéal pour le développement et les tests + +**Commandes utiles :** +```bash +# Voir les logs +docker-compose logs mailhog + +# Redémarrer +docker-compose restart mailhog +``` + +### Option 2 : MailHog standalone (sans Docker Compose) + +```bash +docker run -d -p 1025:1025 -p 8025:8025 mailhog/mailhog +``` + +Utilisez la même configuration que ci-dessus. + +### Option 3 : Gmail (Test avec vrais emails) **Configuration :** ```env @@ -205,7 +331,7 @@ EMAIL_PASSWORD=your-app-specific-password 2. Générer un "mot de passe d'application" : https://myaccount.google.com/apppasswords 3. Utiliser ce mot de passe dans `EMAIL_PASSWORD` -### Option 2 : Services SMTP dédiés +### Option 4 : Services SMTP dédiés (Production) **Brevo (ex-Sendinblue) :** ```env @@ -228,26 +354,58 @@ EMAIL_USER=postmaster@your-domain.mailgun.org EMAIL_PASSWORD=your-smtp-password ``` -### Option 3 : Serveur SMTP local (Test) +## Exemples de configuration + +### Configuration avec Docker Compose 🐳 (Recommandé) -Pour tester sans envoyer de vrais emails, utilisez [MailHog](https://github.com/mailhog/MailHog) : +Cette configuration utilise tous les services lancés par `docker-compose.yml`. +**Étape 1 : Lancer les services** ```bash -# Avec Docker -docker run -d -p 1025:1025 -p 8025:8025 mailhog/mailhog +docker-compose up -d ``` +**Étape 2 : `packages/api/.env`** ```env +# Environnement +ENV=development +VERBOSE=true +PORT=3000 + +# CORS et Cookies +CORS_ORIGIN=http://localhost:5173 +COOKIES_DOMAIN=localhost +COOKIES_KEY=development-secret-key-change-in-production-min-32-chars + +# URLs +API_BASE_URL=http://localhost:3000 +PLATFORM_BASE_URL=http://localhost:5173 +WEBSITE_BASE_URL=http://localhost:5174 + +# Base de données (Docker Compose) +SQL_DATABASE_URL=postgres://arrhes_user:arrhes_password@localhost:5432/arrhes + +# Stockage MinIO (Docker Compose) +STORAGE_ENDPOINT=http://localhost:9000 +STORAGE_NAME=arrhes-files +STORAGE_ACCESS_KEY=minioadmin +STORAGE_SECRET_KEY=minioadmin + +# Email MailHog (Docker Compose) EMAIL_ENDPOINT=localhost:1025 EMAIL_USER=test EMAIL_PASSWORD=test ``` -Interface web disponible sur http://localhost:8025 +**Étape 3 : `packages/tools/.env`** +```env +DATABASE_URL=postgres://arrhes_user:arrhes_password@localhost:5432/arrhes +``` -## Exemples de configuration +**Étape 4 : Créer le bucket MinIO** +Accédez à http://localhost:9001 (minioadmin / minioadmin) et créez un bucket `arrhes-files`. -### Configuration complète - Développement local +### Configuration native (PostgreSQL local + MinIO Docker) **`packages/api/.env` :** ```env @@ -266,16 +424,16 @@ API_BASE_URL=http://localhost:3000 PLATFORM_BASE_URL=http://localhost:5173 WEBSITE_BASE_URL=http://localhost:5174 -# Base de données -SQL_DATABASE_URL=postgres://arrhes_user:arrhes_password@localhost:5432/arrhes +# Base de données (PostgreSQL local) +SQL_DATABASE_URL=postgres://arrhes_user:your-password@localhost:5432/arrhes -# Stockage MinIO +# Stockage MinIO (Docker standalone) STORAGE_ENDPOINT=http://localhost:9000 STORAGE_NAME=arrhes-files STORAGE_ACCESS_KEY=minioadmin STORAGE_SECRET_KEY=minioadmin -# Email (MailHog pour test) +# Email (MailHog Docker standalone) EMAIL_ENDPOINT=localhost:1025 EMAIL_USER=test EMAIL_PASSWORD=test @@ -283,10 +441,10 @@ EMAIL_PASSWORD=test **`packages/tools/.env` :** ```env -DATABASE_URL=postgres://arrhes_user:arrhes_password@localhost:5432/arrhes +DATABASE_URL=postgres://arrhes_user:your-password@localhost:5432/arrhes ``` -### Configuration avec services externes +### Configuration avec services externes (Production) **`packages/api/.env` :** ```env diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index 0ba7cd9..89ba2a3 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -65,21 +65,52 @@ Avant de commencer à contribuer, configurez votre environnement de développeme git remote add upstream https://github.com/arrhes/arrhes.git ``` -4. **Installer les dépendances** +4. **Choisir votre méthode de développement** + + **Option A : Dev Container (Recommandé pour les nouveaux contributeurs) 🚀** + + C'est la méthode la plus simple pour démarrer rapidement : + + ```bash + # Ouvrir dans VS Code/Cursor + code . # ou cursor . + + # Cliquer sur "Reopen in Container" quand demandé + # Tout sera configuré automatiquement ! + ``` + + **Option B : Docker Compose** + ```bash + # Installer les dépendances pnpm install + + # Lancer les services + docker-compose up -d + + # Configurer l'environnement + # Suivez les instructions dans DEVELOPMENT.md + ``` + + **Option C : Installation native** + + ```bash + # Installer les dépendances + pnpm install + + # Configurer l'environnement + # Suivez les instructions complètes dans DEVELOPMENT.md ``` -5. **Configurer l'environnement** - Suivez les instructions dans [DEVELOPMENT.md](DEVELOPMENT.md) - -6. **Créer une branche pour votre contribution** +5. **Créer une branche pour votre contribution** ```bash git checkout -b feature/ma-fonctionnalite # ou git checkout -b fix/mon-correctif ``` +Pour plus de détails, consultez [DEVELOPMENT.md](DEVELOPMENT.md). + ## Standards de code ### TypeScript diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md index c210a85..864515d 100644 --- a/docs/DEVELOPMENT.md +++ b/docs/DEVELOPMENT.md @@ -4,6 +4,7 @@ Ce document vous guidera pour installer, configurer et développer Arrhes sur vo ## Table des matières +- [Choix de l'environnement](#choix-de-lenvironnement) - [Prérequis](#prérequis) - [Installation](#installation) - [Configuration](#configuration) @@ -15,11 +16,79 @@ Ce document vous guidera pour installer, configurer et développer Arrhes sur vo - [Debugging](#debugging) - [Conseils](#conseils) +## Choix de l'environnement + +Vous avez trois options pour développer Arrhes : + +### Option 1 : Dev Container 🚀 (Le plus simple) + +**Avantages :** +- ✨ Configuration 100% automatique +- Environnement de développement complet dans un container +- Tous les services préconfigurés (PostgreSQL, MinIO, MailHog) +- Base de données initialisée automatiquement avec données de démo +- Extensions VS Code/Cursor installées automatiquement +- Zéro configuration manuelle + +**Prérequis :** +- Docker et Docker Compose +- VS Code ou Cursor avec l'extension "Dev Containers" + +**Idéal pour :** Nouveaux contributeurs, onboarding ultra-rapide, environnement unifié + +### Option 2 : Développement avec Docker Compose 🐳 + +**Avantages :** +- Configuration simplifiée (pas d'installation de PostgreSQL, MinIO, etc.) +- Environnement standardisé et reproductible +- Isolation complète des services +- Node.js et pnpm installés localement (meilleure performance) + +**Prérequis :** +- Node.js 24.5+ +- pnpm +- Docker et Docker Compose + +**Idéal pour :** Développement quotidien, bonne balance performance/simplicité + +### Option 3 : Développement natif + +**Avantages :** +- Contrôle total sur chaque service +- Peut être plus rapide sur certaines machines +- Pas besoin de Docker + +**Prérequis :** +- Node.js 24.5+ +- pnpm +- PostgreSQL installé localement +- Optionnellement Docker pour MinIO et MailHog + +**Idéal pour :** Développeurs expérimentés, personnalisation avancée + +--- + +**💡 Conseil :** +- **Première contribution ?** → Choisissez l'**Option 1 (Dev Container)** pour démarrer en 2 minutes +- **Développement quotidien ?** → Choisissez l'**Option 2 (Docker Compose)** pour la meilleure expérience + ## Prérequis -Avant de commencer, assurez-vous d'avoir installé les outils suivants : +### Option 1 : Dev Container + +- **Docker** et **Docker Compose** : https://www.docker.com/get-started + ```bash + docker --version + docker-compose --version + ``` + +- **VS Code** ou **Cursor** avec l'extension Dev Containers : + - VS Code : https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers + - Cursor : Installer depuis le marketplace d'extensions -### Node.js et pnpm +C'est tout ! Node.js, pnpm, PostgreSQL, MinIO et MailHog seront configurés automatiquement dans le container. + +### Prérequis communs (Options 2 et 3) - **Node.js** : Version 24.5 ou supérieure ```bash @@ -40,7 +109,17 @@ Avant de commencer, assurez-vous d'avoir installé les outils suivants : curl -fsSL https://get.pnpm.io/install.sh | sh - ``` -### PostgreSQL +### Option 2 : Avec Docker Compose + +- **Docker** et **Docker Compose** : https://www.docker.com/get-started + ```bash + docker --version + docker-compose --version + ``` + +C'est tout ! PostgreSQL, MinIO et MailHog seront lancés automatiquement dans des containers. + +### Option 3 : Développement natif - **PostgreSQL** : Version 14 ou supérieure recommandée ```bash @@ -65,21 +144,83 @@ Avant de commencer, assurez-vous d'avoir installé les outils suivants : **Windows :** Télécharger depuis https://www.postgresql.org/download/windows/ -### Services optionnels (pour développement complet) - -- **Docker** (pour MinIO et MailHog) : https://www.docker.com/get-started +- **Docker** (optionnel, pour MinIO et MailHog) : https://www.docker.com/get-started - Ou configurez des services S3 et SMTP alternatifs ## Installation -### 1. Cloner le repository +### Option 1 : Avec Dev Container 🚀 + +**Étape 1 : Cloner le repository** + +```bash +git clone https://github.com/arrhes/arrhes.git +cd arrhes +``` + +**Étape 2 : Ouvrir dans VS Code/Cursor** + +```bash +# Avec VS Code +code . + +# Avec Cursor +cursor . +``` + +**Étape 3 : Reopen in Container** + +Lorsque VS Code/Cursor détecte le fichier `.devcontainer/devcontainer.json`, une notification apparaît : + +> "Folder contains a Dev Container configuration file. Reopen folder to develop in a container?" + +Cliquez sur **"Reopen in Container"** ou utilisez la palette de commandes : +- `Cmd/Ctrl + Shift + P` +- Tapez "Dev Containers: Reopen in Container" +- Appuyez sur Entrée + +**Ce qui se passe automatiquement :** +1. 🐳 Construction du container de développement +2. 📦 Installation de toutes les dépendances (pnpm install) +3. 🚀 Démarrage de PostgreSQL, MinIO et MailHog +4. ⏳ Attente que PostgreSQL soit prêt +5. 🗄️ Création du schéma de base de données +6. 🌱 Insertion des données de démonstration +7. ⚙️ Création automatique des fichiers `.env` +8. 🎨 Installation des extensions VS Code recommandées + +**Étape 4 : Lancer l'application** + +Une fois le container prêt (vous verrez "✨ Configuration terminée !" dans le terminal) : + +```bash +pnpm run dev +``` + +C'est tout ! Vous êtes prêt à développer. 🎉 + +**URLs d'accès :** +- **Platform** : http://localhost:5173 +- **API** : http://localhost:3000 +- **MinIO Console** : http://localhost:9001 (minioadmin / minioadmin) +- **MailHog** : http://localhost:8025 + +**Identifiants de démonstration :** +- Email : `demo@arrhes.com` +- Mot de passe : `demo` + +--- + +### Option 2 : Avec Docker Compose 🐳 + +**Étape 1 : Cloner le repository** ```bash git clone https://github.com/arrhes/arrhes.git cd arrhes ``` -### 2. Installer les dépendances +**Étape 2 : Installer les dépendances** ```bash pnpm install @@ -87,7 +228,7 @@ pnpm install Cette commande installera toutes les dépendances de tous les packages du monorepo. -### 3. Vérifier l'installation +**Étape 3 : Vérifier l'installation** ```bash pnpm ls --depth=0 @@ -95,50 +236,85 @@ pnpm ls --depth=0 Vous devriez voir tous les packages workspace listés. -## Configuration +--- -### 1. Créer la base de données PostgreSQL +### Option 3 : Installation native + +**Étape 1 : Cloner le repository** ```bash -# Se connecter à PostgreSQL -sudo -u postgres psql +git clone https://github.com/arrhes/arrhes.git +cd arrhes +``` -# Dans le shell PostgreSQL : -CREATE USER arrhes_user WITH PASSWORD 'arrhes_password'; -CREATE DATABASE arrhes OWNER arrhes_user; -GRANT ALL PRIVILEGES ON DATABASE arrhes TO arrhes_user; -\q +**Étape 2 : Installer les dépendances** + +```bash +pnpm install +``` + +**Étape 3 : Vérifier l'installation** + +```bash +pnpm ls --depth=0 ``` -### 2. Configurer les services externes (optionnel) +## Configuration + +### Option 1 : Avec Dev Container 🚀 + +**Aucune configuration manuelle nécessaire !** + +Le script `post-create.sh` s'exécute automatiquement et crée les fichiers `.env` avec les bonnes valeurs pour l'environnement containerisé. + +Les fichiers suivants sont créés automatiquement : +- `packages/api/.env` (avec connexion aux services Docker) +- `packages/tools/.env` (avec connexion à PostgreSQL) -#### MinIO (Stockage de fichiers) +**Note importante :** Dans le Dev Container, les URLs pointent vers les noms de services Docker : +- PostgreSQL : `postgres:5432` (au lieu de `localhost:5432`) +- MinIO : `minio:9000` (au lieu de `localhost:9000`) +- MailHog : `mailhog:1025` (au lieu de `localhost:1025`) + +Si vous souhaitez modifier la configuration, éditez directement les fichiers `.env` créés. + +--- + +### Option 2 : Configuration avec Docker Compose 🐳 + +#### 1. Lancer les services avec Docker Compose ```bash -# Lancer MinIO avec Docker -docker run -d \ - -p 9000:9000 \ - -p 9001:9001 \ - --name minio \ - -e "MINIO_ROOT_USER=minioadmin" \ - -e "MINIO_ROOT_PASSWORD=minioadmin" \ - -v ~/minio/data:/data \ - quay.io/minio/minio server /data --console-address ":9001" +# Lancer tous les services (PostgreSQL, MinIO, MailHog) +docker-compose up -d -# Accéder à la console : http://localhost:9001 -# Créer un bucket nommé "arrhes-files" +# Vérifier que tout fonctionne +docker-compose ps ``` -#### MailHog (Test d'emails) +Les services seront disponibles sur : +- **PostgreSQL** : `localhost:5432` +- **MinIO API** : `localhost:9000` +- **MinIO Console** : http://localhost:9001 +- **MailHog SMTP** : `localhost:1025` +- **MailHog Web** : http://localhost:8025 + +#### 2. Créer le bucket MinIO ```bash -# Lancer MailHog avec Docker -docker run -d -p 1025:1025 -p 8025:8025 mailhog/mailhog +# Accéder à la console MinIO : http://localhost:9001 +# Credentials : minioadmin / minioadmin +# Créer un bucket nommé "arrhes-files" +``` -# Interface web : http://localhost:8025 +Ou via la ligne de commande : +```bash +# Installer le client MinIO +docker exec arrhes-minio mc alias set local http://localhost:9000 minioadmin minioadmin +docker exec arrhes-minio mc mb local/arrhes-files ``` -### 3. Créer les fichiers de configuration +#### 3. Créer les fichiers de configuration **`packages/api/.env` :** @@ -160,16 +336,16 @@ API_BASE_URL=http://localhost:3000 PLATFORM_BASE_URL=http://localhost:5173 WEBSITE_BASE_URL=http://localhost:5174 -# Base de données +# Base de données (Docker Compose) SQL_DATABASE_URL=postgres://arrhes_user:arrhes_password@localhost:5432/arrhes -# Stockage MinIO +# Stockage MinIO (Docker Compose) STORAGE_ENDPOINT=http://localhost:9000 STORAGE_NAME=arrhes-files STORAGE_ACCESS_KEY=minioadmin STORAGE_SECRET_KEY=minioadmin -# Email MailHog +# Email MailHog (Docker Compose) EMAIL_ENDPOINT=localhost:1025 EMAIL_USER=test EMAIL_PASSWORD=test @@ -187,11 +363,79 @@ EOF cd ../.. ``` -Pour plus de détails sur la configuration, consultez [CONFIGURATION.md](CONFIGURATION.md). +--- + +### Option 2 : Configuration native + +#### 1. Créer la base de données PostgreSQL + +```bash +# Se connecter à PostgreSQL +sudo -u postgres psql + +# Dans le shell PostgreSQL : +CREATE USER arrhes_user WITH PASSWORD 'arrhes_password'; +CREATE DATABASE arrhes OWNER arrhes_user; +GRANT ALL PRIVILEGES ON DATABASE arrhes TO arrhes_user; +\q +``` + +#### 2. Configurer les services externes (optionnel) + +**MinIO (Stockage de fichiers) :** + +```bash +# Lancer MinIO avec Docker +docker run -d \ + -p 9000:9000 \ + -p 9001:9001 \ + --name minio \ + -e "MINIO_ROOT_USER=minioadmin" \ + -e "MINIO_ROOT_PASSWORD=minioadmin" \ + -v ~/minio/data:/data \ + quay.io/minio/minio server /data --console-address ":9001" + +# Accéder à la console : http://localhost:9001 +# Créer un bucket nommé "arrhes-files" +``` + +**MailHog (Test d'emails) :** + +```bash +# Lancer MailHog avec Docker +docker run -d -p 1025:1025 -p 8025:8025 mailhog/mailhog + +# Interface web : http://localhost:8025 +``` + +#### 3. Créer les fichiers de configuration + +Utilisez les mêmes commandes que dans l'Option 1, étape 3 ci-dessus. + +--- + +**Pour plus de détails sur la configuration, consultez [CONFIGURATION.md](CONFIGURATION.md).** ## Initialisation de la base de données -### 1. Pousser le schéma vers la base de données +### Option 1 : Avec Dev Container 🚀 + +**Aucune action nécessaire !** + +La base de données est automatiquement initialisée lors de la création du container. Le script `post-create.sh` exécute : +1. `pnpm --filter tools run push` (création du schéma) +2. `pnpm --filter tools run seed` (insertion des données de démo) + +Si vous souhaitez réinitialiser la base : +```bash +pnpm --filter tools run reset +``` + +--- + +### Options 2 et 3 : Configuration manuelle + +**Étape 1 : Pousser le schéma vers la base de données** ```bash pnpm --filter tools run push @@ -199,7 +443,7 @@ pnpm --filter tools run push Cette commande crée toutes les tables nécessaires dans PostgreSQL à partir des schémas définis dans `@arrhes/metadata`. -### 2. Seed avec des données de démonstration +**Étape 2 : Seed avec des données de démonstration** ```bash pnpm --filter tools run seed @@ -213,7 +457,7 @@ Cette commande insère : - Des écritures comptables d'exemple pour 2022 et 2023 - Des documents et états financiers -### 3. Réinitialiser la base (si nécessaire) +**Étape 3 : Réinitialiser la base (si nécessaire)** Pour tout supprimer et recommencer : @@ -225,7 +469,7 @@ Cette commande exécute : `clear` + `push` + `seed` ## Lancement en développement -### Option 1 : Tout lancer ensemble (recommandé) +### Commande principale (toutes options) ```bash pnpm run dev @@ -237,7 +481,7 @@ Cette commande lance simultanément : Les deux processus tournent en parallèle avec hot-reload activé. -### Option 2 : Lancer individuellement +### Lancer individuellement (optionnel) Dans des terminaux séparés : @@ -258,10 +502,10 @@ pnpm --filter metadata run dev ### Accès à l'application -- **Frontend** : http://localhost:5173 +- **Frontend (Platform)** : http://localhost:5173 - **API** : http://localhost:3000 -- **MinIO Console** : http://localhost:9001 (si configuré) -- **MailHog** : http://localhost:8025 (si configuré) +- **MinIO Console** : http://localhost:9001 (minioadmin / minioadmin) +- **MailHog Web UI** : http://localhost:8025 ### Identifiants de démonstration @@ -270,6 +514,21 @@ Email : demo@arrhes.com Password : demo ``` +### Notes par option + +**Dev Container :** +- Les services (PostgreSQL, MinIO, MailHog) sont déjà démarrés automatiquement +- Les ports sont automatiquement forwardés vers votre machine locale +- Vous pouvez cliquer sur les ports dans VS Code/Cursor pour ouvrir les URLs + +**Docker Compose :** +- Assurez-vous que les services sont lancés : `docker-compose ps` +- Si les services ne sont pas démarrés : `docker-compose up -d` + +**Natif :** +- Assurez-vous que PostgreSQL est démarré +- Si vous utilisez MinIO/MailHog avec Docker, vérifiez qu'ils tournent : `docker ps` + ## Structure du projet ``` @@ -420,16 +679,48 @@ pnpm --filter tools run drop ### Développement typique +#### Avec Docker Compose 🐳 + +1. **Lancer les services** + ```bash + # Lancer tous les services (PostgreSQL, MinIO, MailHog) + docker-compose up -d + ``` + +2. **Lancer l'application** + ```bash + pnpm run dev + ``` + +3. **Développer avec hot-reload** + - Modifications dans `packages/api/src/` → Rechargement automatique de l'API + - Modifications dans `packages/platform/src/` → HMR (Hot Module Replacement) + - Modifications dans `packages/metadata/src/` → Nécessite rebuild (ou mode watch) + +4. **Arrêter les services (à la fin de la session)** + ```bash + # Arrêter sans supprimer les données + docker-compose stop + + # Ou arrêter et supprimer les containers (garde les volumes) + docker-compose down + + # Ou tout supprimer (containers + volumes = perte de données) + docker-compose down -v + ``` + +#### Avec installation native + 1. **Lancer les services externes** ```bash # PostgreSQL (si pas démarré) sudo systemctl start postgresql - # MinIO (si arrêté) + # MinIO (si utilisé avec Docker) docker start minio - # MailHog (si arrêté) - docker start [container-id] + # MailHog (si utilisé avec Docker) + docker start mailhog ``` 2. **Lancer l'application** @@ -599,8 +890,9 @@ pnpm dlx drizzle-kit studio --config=packages/tools/drizzle.config.ts ### Problèmes courants **"Cannot connect to database" :** -- Vérifiez que PostgreSQL est démarré -- Testez la connexion : `psql ` +- **Avec Docker :** Vérifiez que les containers sont lancés : `docker-compose ps` +- **Natif :** Vérifiez que PostgreSQL est démarré : `sudo systemctl status postgresql` +- Testez la connexion : `psql postgres://arrhes_user:arrhes_password@localhost:5432/arrhes` - Vérifiez les credentials dans `.env` **"Module not found @arrhes/metadata" :** @@ -616,9 +908,28 @@ pnpm dlx drizzle-kit studio --config=packages/tools/drizzle.config.ts - Vérifiez que l'API et la platform sont sur le même domaine **"S3/Storage error" :** -- Vérifiez que MinIO est démarré : `docker ps` -- Vérifiez que le bucket existe -- Testez l'endpoint : `curl http://localhost:9000` +- Vérifiez que MinIO est démarré : `docker ps | grep minio` +- Vérifiez que le bucket existe (console : http://localhost:9001) +- Testez l'endpoint : `curl http://localhost:9000/minio/health/live` + +**Problèmes Docker :** +- **Port déjà utilisé :** Un autre service utilise le même port + ```bash + # Voir ce qui utilise le port 5432 (PostgreSQL) + sudo lsof -i :5432 + # Ou arrêter l'autre service + ``` +- **Container ne démarre pas :** Voir les logs + ```bash + docker-compose logs postgres + docker-compose logs minio + docker-compose logs mailhog + ``` +- **Réinitialiser complètement :** + ```bash + docker-compose down -v + docker-compose up -d + ``` ### Bonnes pratiques diff --git a/packages/platform/vite.config.ts b/packages/platform/vite.config.ts index deed5dc..1e94823 100644 --- a/packages/platform/vite.config.ts +++ b/packages/platform/vite.config.ts @@ -43,6 +43,7 @@ export default defineConfig(() => { alias: { // /esm/icons/index.mjs only exports the icons statically, so no separate chunks are created '@tabler/icons-react': '@tabler/icons-react/dist/esm/icons/index.mjs', + "#": resolve(__dirname, "./src"), "assets": resolve(__dirname, "./src/assets"), "contexts": resolve(__dirname, "./src/contexts"), "components": resolve(__dirname, "./src/components"), From 70b88868c7aa2eec1260e216865e947a6b09cb33 Mon Sep 17 00:00:00 2001 From: Etienne Santoul <30403047+esantoul@users.noreply.github.com> Date: Fri, 21 Nov 2025 14:16:25 +0100 Subject: [PATCH 03/25] docs: update repository URLs to arrhes-platform --- .devcontainer/README.md | 4 ++-- README.md | 16 ++++++++-------- docs/CONTRIBUTING.md | 6 +++--- docs/DEVELOPMENT.md | 12 ++++++------ 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/.devcontainer/README.md b/.devcontainer/README.md index f82711d..3548268 100644 --- a/.devcontainer/README.md +++ b/.devcontainer/README.md @@ -178,8 +178,8 @@ Pour de meilleures performances, clonez le projet dans le filesystem WSL2 : ```bash # Dans WSL2 cd ~ -git clone https://github.com/arrhes/arrhes.git -code arrhes +git clone https://github.com/arrhes/arrhes-platform.git +code arrhes-platform ``` **macOS :** diff --git a/README.md b/README.md index 2121aae..9851061 100644 --- a/README.md +++ b/README.md @@ -45,8 +45,8 @@ Prérequis : Docker, VS Code ou Cursor avec l'extension Dev Containers ```bash # Cloner le repository -git clone https://github.com/arrhes/arrhes.git -cd arrhes +git clone https://github.com/arrhes/arrhes-platform.git +cd arrhes-platform # Ouvrir dans VS Code/Cursor code . @@ -67,8 +67,8 @@ Prérequis : Node.js 24.5+, pnpm, Docker ```bash # Cloner le repository -git clone https://github.com/arrhes/arrhes.git -cd arrhes +git clone https://github.com/arrhes/arrhes-platform.git +cd arrhes-platform # Installer les dépendances pnpm install @@ -98,8 +98,8 @@ Prérequis : Node.js 24.5+, pnpm, PostgreSQL ```bash # Cloner le repository -git clone https://github.com/arrhes/arrhes.git -cd arrhes +git clone https://github.com/arrhes/arrhes-platform.git +cd arrhes-platform # Installer les dépendances pnpm install @@ -150,8 +150,8 @@ Ce projet est sous licence MIT. Voir le fichier [LICENSE](LICENSE) pour plus de ## Support -- 🐛 [Signaler un bug](https://github.com/arrhes/arrhes/issues) -- 💡 [Proposer une fonctionnalité](https://github.com/arrhes/arrhes/issues) +- 🐛 [Signaler un bug](https://github.com/arrhes/arrhes-platform/issues) +- 💡 [Proposer une fonctionnalité](https://github.com/arrhes/arrhes-platform/issues) - 📧 Contact : demo@arrhes.com --- diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index 89ba2a3..400b8e3 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -62,7 +62,7 @@ Avant de commencer à contribuer, configurez votre environnement de développeme 3. **Ajouter le repository principal comme remote** ```bash - git remote add upstream https://github.com/arrhes/arrhes.git + git remote add upstream https://github.com/arrhes/arrhes-platform.git ``` 4. **Choisir votre méthode de développement** @@ -538,8 +538,8 @@ Plusieurs utilisateurs ont demandé cette fonctionnalité pour faire des analyse - [Documentation d'architecture](ARCHITECTURE.md) - [Guide de développement](DEVELOPMENT.md) - [Configuration](CONFIGURATION.md) -- [Issues GitHub](https://github.com/arrhes/arrhes/issues) -- [Discussions GitHub](https://github.com/arrhes/arrhes/discussions) +- [Issues GitHub](https://github.com/arrhes/arrhes-platform/issues) +- [Discussions GitHub](https://github.com/arrhes/arrhes-platform/discussions) ## Questions ? diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md index 864515d..e7d0284 100644 --- a/docs/DEVELOPMENT.md +++ b/docs/DEVELOPMENT.md @@ -154,8 +154,8 @@ C'est tout ! PostgreSQL, MinIO et MailHog seront lancés automatiquement dans de **Étape 1 : Cloner le repository** ```bash -git clone https://github.com/arrhes/arrhes.git -cd arrhes +git clone https://github.com/arrhes/arrhes-platform.git +cd arrhes-platform ``` **Étape 2 : Ouvrir dans VS Code/Cursor** @@ -216,8 +216,8 @@ C'est tout ! Vous êtes prêt à développer. 🎉 **Étape 1 : Cloner le repository** ```bash -git clone https://github.com/arrhes/arrhes.git -cd arrhes +git clone https://github.com/arrhes/arrhes-platform.git +cd arrhes-platform ``` **Étape 2 : Installer les dépendances** @@ -243,8 +243,8 @@ Vous devriez voir tous les packages workspace listés. **Étape 1 : Cloner le repository** ```bash -git clone https://github.com/arrhes/arrhes.git -cd arrhes +git clone https://github.com/arrhes/arrhes-platform.git +cd arrhes-platform ``` **Étape 2 : Installer les dépendances** From 1329d7955eb910ff42d7585897ca5f11ade43995 Mon Sep 17 00:00:00 2001 From: &mile Date: Fri, 28 Nov 2025 19:53:04 +0100 Subject: [PATCH 04/25] Update README to remove MinIO and MailHog details Removed references to MinIO and MailHog services in the README. --- .devcontainer/README.md | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/.devcontainer/README.md b/.devcontainer/README.md index 3548268..4c5eeba 100644 --- a/.devcontainer/README.md +++ b/.devcontainer/README.md @@ -1,6 +1,6 @@ # Dev Container Configuration -Ce répertoire contient la configuration pour développer Arrhes dans un Dev Container (VS Code/Cursor). +Ce répertoire contient la configuration pour développer Arrhes dans un Dev Container. ## Qu'est-ce qu'un Dev Container ? @@ -70,12 +70,8 @@ Tous les services sont automatiquement démarrés et configurés : | Service | URL/Port | Credentials | |---------|----------|-------------| | PostgreSQL | `postgres:5432` | `arrhes_user` / `arrhes_password` | -| MinIO API | `minio:9000` | `minioadmin` / `minioadmin` | -| MinIO Console | http://localhost:9001 | `minioadmin` / `minioadmin` | -| MailHog SMTP | `mailhog:1025` | - | -| MailHog Web | http://localhost:8025 | - | -**Note :** Dans le Dev Container, les services sont accessibles via leur nom Docker (`postgres`, `minio`, `mailhog`) plutôt que `localhost`. +**Note :** Dans le Dev Container, les services sont accessibles via leur nom Docker (`postgres`) plutôt que `localhost`. ## Extensions installées From 2b4e6168864db5d22eb8ad9c000257afa440c4b5 Mon Sep 17 00:00:00 2001 From: &mile Date: Fri, 28 Nov 2025 19:54:27 +0100 Subject: [PATCH 05/25] Modify forwarded ports in devcontainer.json Updated the forwarded ports and their attributes in the devcontainer configuration. --- .devcontainer/devcontainer.json | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 8cacfda..2ec4344 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -11,32 +11,24 @@ // Exposer les ports pour accéder aux services "forwardPorts": [ - 3000, // API - 5173, // Platform (Vite) - 5432, // PostgreSQL - 9000, // MinIO API - 9001, // MinIO Console - 1025, // MailHog SMTP - 8025 // MailHog Web UI + 3100, // API + 3101, // Platform + 3102, // Website (with docs) ], // Labels pour les ports "portsAttributes": { - "3000": { + "3100": { "label": "API", "onAutoForward": "notify" }, - "5173": { + "3101": { "label": "Platform", "onAutoForward": "openBrowser" }, - "9001": { - "label": "MinIO Console", - "onAutoForward": "ignore" - }, - "8025": { - "label": "MailHog Web", - "onAutoForward": "ignore" + "3102": { + "label": "Platform", + "onAutoForward": "openBrowser" } }, From c718e54a612a67604fef61daf582316ad570d8c8 Mon Sep 17 00:00:00 2001 From: &mile Date: Fri, 28 Nov 2025 19:57:54 +0100 Subject: [PATCH 06/25] Update README.md --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 9851061..7ac0289 100644 --- a/README.md +++ b/README.md @@ -119,7 +119,7 @@ pnpm --filter tools run seed pnpm run dev ``` -L'API sera accessible sur `http://localhost:3000` et la plateforme sur `http://localhost:5173`. +L'API sera accessible sur `http://localhost:3101`, la plateforme sur `http://localhost:3101` et le website sur `http://localhost:3102. **Identifiants de démonstration :** `demo@arrhes.com` / `demo` @@ -140,7 +140,7 @@ Le projet est organisé en monorepo avec les packages suivants : - **@arrhes/platform** - Interface web (React, TanStack Router) - **@arrhes/metadata** - Schémas et modèles partagés (Valibot, Drizzle ORM) - **@arrhes/tools** - Outils de migration et seed de base de données -- **@arrhes/website** - Site vitrine +- **@arrhes/website** - Site vitrine + Documentation Pour plus de détails, consultez la [documentation d'architecture](docs/ARCHITECTURE.md). @@ -152,8 +152,9 @@ Ce projet est sous licence MIT. Voir le fichier [LICENSE](LICENSE) pour plus de - 🐛 [Signaler un bug](https://github.com/arrhes/arrhes-platform/issues) - 💡 [Proposer une fonctionnalité](https://github.com/arrhes/arrhes-platform/issues) -- 📧 Contact : demo@arrhes.com +- 📧 Contact : contact@arrhes.com --- Développé avec ❤️ pour la communauté française + From 90d265334f126e74b95a9409dbbbc1ad86ab5565 Mon Sep 17 00:00:00 2001 From: &mile Date: Fri, 28 Nov 2025 20:08:34 +0100 Subject: [PATCH 07/25] Update devcontainer.json --- .devcontainer/devcontainer.json | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 2ec4344..70183db 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -14,6 +14,10 @@ 3100, // API 3101, // Platform 3102, // Website (with docs) + 9000, // MinIO API + 9001, // MinIO Console + 1025, // MailHog SMTP + 8025 // MailHog Web UI ], // Labels pour les ports @@ -29,7 +33,14 @@ "3102": { "label": "Platform", "onAutoForward": "openBrowser" - } + }, + "9001": { + "label": "MinIO Console", + "onAutoForward": "ignore" + }, + "8025": { + "label": "MailHog Web", + "onAutoForward": "ignore" }, // Extensions VS Code/Cursor recommandées From ac9bd10648aec7ef5deae005ebd94dcd92e895c4 Mon Sep 17 00:00:00 2001 From: &mile Date: Fri, 28 Nov 2025 20:09:50 +0100 Subject: [PATCH 08/25] Add MinIO service and update access notes --- .devcontainer/README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.devcontainer/README.md b/.devcontainer/README.md index 4c5eeba..ad49f4e 100644 --- a/.devcontainer/README.md +++ b/.devcontainer/README.md @@ -70,8 +70,12 @@ Tous les services sont automatiquement démarrés et configurés : | Service | URL/Port | Credentials | |---------|----------|-------------| | PostgreSQL | `postgres:5432` | `arrhes_user` / `arrhes_password` | +| MinIO API | `minio:9000` | `minioadmin` / `minioadmin` | +| MinIO Console | http://localhost:9001 | `minioadmin` / `minioadmin` | +| MailHog SMTP | `mailhog:1025` | - | +| MailHog Web | http://localhost:8025 | - | -**Note :** Dans le Dev Container, les services sont accessibles via leur nom Docker (`postgres`) plutôt que `localhost`. +**Note :** Dans le Dev Container, les services sont accessibles via leur nom Docker (`postgres`, `minio`, `mailhog`) plutôt que `localhost`. ## Extensions installées From aa2eee21484dc0cb72a2cbe51ad1d27ee6387325 Mon Sep 17 00:00:00 2001 From: &mile Date: Fri, 19 Dec 2025 18:19:06 +0100 Subject: [PATCH 09/25] devcontainer: accept build args via compose; expose PNPM_VERSION and NODE_VERSION --- .devcontainer/Dockerfile | 36 ++++++++++------- .devcontainer/compose.yml | 81 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 103 insertions(+), 14 deletions(-) create mode 100644 .devcontainer/compose.yml diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 3451d5f..a95c64d 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,20 +1,28 @@ -ARG NODE_VERSION=24 -FROM mcr.microsoft.com/devcontainers/typescript-node:${NODE_VERSION} +ARG NODE_VERSION +ARG PNPM_VERSION -# Installer pnpm globalement -RUN npm install -g pnpm +FROM node:${NODE_VERSION}-bullseye-slim -# Installer des outils utiles -RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ - && apt-get -y install --no-install-recommends \ - postgresql-client \ - curl \ - vim \ - && apt-get clean -y && rm -rf /var/lib/apt/lists/* +# Minimal runtime + tools +ENV DEBIAN_FRONTEND=noninteractive -# Configurer le workspace +# Update package lists (no default packages installed here) +RUN apt-get update + +# Install pnpm using the PNPM_VERSION build arg +RUN npm install -g "pnpm@${PNPM_VERSION}" + +# Reduce image size +RUN apt-get clean +RUN rm -rf /var/lib/apt/lists/* + +# Create workspace directory and set permissions WORKDIR /workspace +RUN mkdir -p /workspace \ + && chown -R node:node /workspace -# Note: Les dépendances seront installées via postCreateCommand -# car le workspace sera monté depuis le host +# Use non-root node user by default +USER node +# Note: dependencies are installed during the bootstrap step (post-create) +# The workspace is mounted from the host at runtime. diff --git a/.devcontainer/compose.yml b/.devcontainer/compose.yml new file mode 100644 index 0000000..d5930c8 --- /dev/null +++ b/.devcontainer/compose.yml @@ -0,0 +1,81 @@ +services: + devcontainer: + build: + context: . + dockerfile: .devcontainer/Dockerfile + args: + NODE_VERSION: "25.2.1" + PNPM_VERSION: "10.26.1" + volumes: + - .:/workspace:cached + command: sleep infinity + ports: + - "3000:3000" # API dev port (pnpm run dev) + - "5173:5173" # Platform dev port (Vite) + - "5174:5174" # Website dev port (Vite) + depends_on: + - postgres + - rustfs + - mailhog + + # Base de données PostgreSQL + postgres: + image: postgres:16-alpine + container_name: arrhes-postgres + restart: unless-stopped + environment: + POSTGRES_USER: arrhes_user + POSTGRES_PASSWORD: arrhes_password + POSTGRES_DB: arrhes + ports: + - "5432:5432" + volumes: + - postgres_data:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -U arrhes_user -d arrhes"] + interval: 10s + timeout: 5s + retries: 5 + + # Object storage (RustFS) + rustfs: + image: rustfs/rustfs:latest + container_name: arrhes-rustfs + restart: unless-stopped + command: server /data --web-ui-address ":9001" + environment: + RUSTFS_ROOT_USER: arrhes_rustfs + RUSTFS_ROOT_PASSWORD: arrhes_rustfs_secret + STORAGE_ACCESS_KEY: arrhes_rustfs + STORAGE_SECRET_KEY: arrhes_rustfs_secret + ports: + - "9000:9000" # API + - "9001:9001" # Web UI + volumes: + - rustfs_data:/data + healthcheck: + test: ["CMD-SHELL", "wget --quiet --tries=1 --spider http://localhost:9000 || exit 1"] + interval: 10s + timeout: 5s + retries: 5 + + # Serveur SMTP de test (MailHog) + mailhog: + image: mailhog/mailhog:latest + container_name: arrhes-mailhog + restart: unless-stopped + ports: + - "1025:1025" # SMTP + - "8025:8025" # Interface web + healthcheck: + test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:8025"] + interval: 10s + timeout: 5s + retries: 5 + +volumes: + postgres_data: + name: arrhes_postgres_data + rustfs_data: + name: arrhes_rustfs_data + From 012fce8cc42f24d8e22bea69161b41740939cf38 Mon Sep 17 00:00:00 2001 From: &mile Date: Fri, 19 Dec 2025 18:32:52 +0100 Subject: [PATCH 10/25] replace MailHog with Mailpit --- .dev-container/compose.yml | 81 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 .dev-container/compose.yml diff --git a/.dev-container/compose.yml b/.dev-container/compose.yml new file mode 100644 index 0000000..ef4f29e --- /dev/null +++ b/.dev-container/compose.yml @@ -0,0 +1,81 @@ +services: + arrhes-platform: + container_name: arrhes-platform + build: + context: . + dockerfile: .devcontainer/Dockerfile + args: + NODE_VERSION: "25.2.1" + PNPM_VERSION: "10.26.1" + volumes: + - .:/workspace:cached + command: sleep infinity + ports: + - "3000:3000" # API dev port (pnpm run dev) + - "5173:5173" # Platform dev port (Vite) + - "5174:5174" # Website dev port (Vite) + depends_on: + - postgres + - rustfs + - mailhog + + # Base de données PostgreSQL + postgres: + image: postgres:18.1 + container_name: arrhes-postgres + restart: unless-stopped + environment: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: demo + POSTGRES_DB: default + ports: + - "5432:5432" + volumes: + - postgres_data:/var/lib/postgresql + healthcheck: + test: ["CMD-SHELL", "pg_isready -U postgres -d arrhes"] + interval: 10s + timeout: 5s + retries: 5 + + # Object storage (RustFS) + rustfs: + image: rustfs/rustfs:latest + container_name: arrhes-rustfs + restart: unless-stopped + command: server /data --web-ui-address ":9001" + environment: + RUSTFS_CONSOLE_ENABLE: true + RUSTFS_ACCESS_KEY: rustfsadmin + RUSTFS_SECRET_KEY: rustfsadmin + ports: + - "9000:9000" # API + - "9001:9001" # Web UI + volumes: + - rustfs_data:/data + healthcheck: + test: ["CMD-SHELL", "wget --quiet --tries=1 --spider http://localhost:9000 || exit 1"] + interval: 10s + timeout: 5s + retries: 5 + + # Serveur SMTP de test (Mailpit) + mailpit: + image: axllent/mailpit:latest + container_name: arrhes-mailpit + restart: unless-stopped + ports: + - "1025:1025" # SMTP + - "8025:8025" # Web UI + healthcheck: + test: ["CMD-SHELL", "wget --quiet --tries=1 --spider http://localhost:8025 || exit 1"] + interval: 10s + timeout: 5s + retries: 5 + +volumes: + postgres_data: + name: arrhes_postgres_data + rustfs_data: + name: arrhes_rustfs_data + From f937ec11812c91d20be1aad84515488f7af98896 Mon Sep 17 00:00:00 2001 From: &mile Date: Fri, 19 Dec 2025 22:58:52 +0100 Subject: [PATCH 11/25] chore: apply workspace updates (dev scripts, docs, tooling, package configs) --- .dockerignore => .dev/.dockerignore | 3 +- {.devcontainer => .dev}/Dockerfile | 4 +- .dev/README.md | 99 +++++++ {.dev-container => .dev}/compose.yml | 15 +- .dev/scripts/.api.env | 28 ++ .dev/scripts/.tools.env | 2 + .dev/scripts/initialize.sh | 73 +++++ .dev/scripts/start.sh | 33 +++ .devcontainer/README.md | 193 ------------- .devcontainer/compose.yml | 81 ------ .devcontainer/devcontainer.json | 121 --------- .devcontainer/post-create.sh | 95 ------- .gitignore | 5 +- .old.env | 22 ++ AGENTS.md | 23 ++ README.md | 61 +++-- docker-compose.yml | 78 ------ docs/CONFIGURATION.md | 103 ++----- docs/DEVELOPMENT.md | 80 +++--- packages/api/src/utilities/getEnv.ts | 2 +- .../api/src/utilities/storage/deleteObject.ts | 2 +- .../storage/generateDeleteSignedUrl.ts | 2 +- .../utilities/storage/generateGetSignedUrl.ts | 2 +- .../utilities/storage/generatePutSignedUrl.ts | 2 +- .../api/src/utilities/storage/getObject.ts | 2 +- .../api/src/utilities/storage/putObject.ts | 2 +- packages/platform/vite.config.ts | 2 +- packages/tools/package.json | 12 +- packages/tools/src/clearDB.ts | 12 +- packages/tools/src/dbClient.ts | 7 +- packages/tools/{ => src}/drizzle.config.ts | 4 +- packages/tools/src/env.ts | 2 +- packages/tools/src/migrate.ts | 2 +- packages/tools/src/seed/migration.ts | 9 +- packages/tools/src/seed/recordRows.ts | 11 +- packages/tools/src/seed/seed.ts | 257 +++++++++--------- packages/tools/src/utilities/insertMany.ts | 2 +- packages/tools/src/utilities/insertOne.ts | 2 +- packages/tools/tsconfig.json | 9 +- packages/website/package.json | 2 +- packages/website/vite.config.ts | 2 +- 41 files changed, 563 insertions(+), 905 deletions(-) rename .dockerignore => .dev/.dockerignore (98%) rename {.devcontainer => .dev}/Dockerfile (92%) create mode 100644 .dev/README.md rename {.dev-container => .dev}/compose.yml (85%) create mode 100644 .dev/scripts/.api.env create mode 100644 .dev/scripts/.tools.env create mode 100644 .dev/scripts/initialize.sh create mode 100644 .dev/scripts/start.sh delete mode 100644 .devcontainer/README.md delete mode 100644 .devcontainer/compose.yml delete mode 100644 .devcontainer/devcontainer.json delete mode 100644 .devcontainer/post-create.sh create mode 100644 .old.env create mode 100644 AGENTS.md delete mode 100644 docker-compose.yml rename packages/tools/{ => src}/drizzle.config.ts (71%) diff --git a/.dockerignore b/.dev/.dockerignore similarity index 98% rename from .dockerignore rename to .dev/.dockerignore index df87d9b..4ad3745 100644 --- a/.dockerignore +++ b/.dev/.dockerignore @@ -44,7 +44,6 @@ coverage *.tgz .npmrc .continue -.dev .old # Docker @@ -52,3 +51,5 @@ Dockerfile docker-compose.yml .dockerignore + +!.dev diff --git a/.devcontainer/Dockerfile b/.dev/Dockerfile similarity index 92% rename from .devcontainer/Dockerfile rename to .dev/Dockerfile index a95c64d..0e8de7f 100644 --- a/.devcontainer/Dockerfile +++ b/.dev/Dockerfile @@ -1,5 +1,5 @@ -ARG NODE_VERSION -ARG PNPM_VERSION +ARG NODE_VERSION="latest" +ARG PNPM_VERSION="latest" FROM node:${NODE_VERSION}-bullseye-slim diff --git a/.dev/README.md b/.dev/README.md new file mode 100644 index 0000000..0cbb6cb --- /dev/null +++ b/.dev/README.md @@ -0,0 +1,99 @@ +# Dev Container Configuration + +Ce répertoire contient la configuration pour développer Arrhes dans un environnement de developpement (docker container). + +## Aperçu + +Le projet utilise désormais un fichier Compose canonique situé dans `.dev/compose.yml` et un script d'orchestration simple `.dev/scripts/start.sh` à la racine du dépôt pour démarrer et initialiser l'environnement de développement. + +- Le script `.dev/scripts/start.sh` : démarre les services Docker (Postgres, RustFS, Mailpit, devcontainer) puis exécute le script de bootstrap à l'intérieur du conteneur de développement. +- Le bootstrap (`.dev/scripts/initialize.sh`) installe les dépendances, construit `@arrhes/metadata`, crée les fichiers `.env`, initialise la base de données et injecte les données de démonstration. + +## Fichiers importants + +- `.dev/scripts/start.sh` — script d'aide pour démarrer les services et lancer le bootstrap (à la racine). +- `.dev/compose.yml` — compose canonique utilisé par les scripts. +- `.dev/Dockerfile` — image du devcontainer (Node + pnpm, utilisateur non-root). +- `.dev/scripts/initialize.sh` — script exécuté dans le conteneur après démarrage pour préparer l'environnement. + +## Démarrage rapide (recommandé) + +1. Depuis la racine du dépôt, lancer : + + ```bash + .dev/scripts/start.sh + ``` + + - Cette commande exécute `docker compose -f .dev/compose.yml up -d` puis lance le bootstrap à l'intérieur du service `arrhes-platform`. + - Le bootstrap crée les fichiers `.env` nécessaires si absents, construit `@arrhes/metadata`, pousse la migration de la BDD et insère les données de démonstration. + +2. Ouvrir un shell dans le conteneur (si nécessaire) : + + ```bash + docker compose -f .dev/compose.yml exec arrhes-platform bash + ``` + + +## Ports & services + +- PostgreSQL : `localhost:5432` (container `postgres`) +- RustFS API : `http://localhost:9000` (service `rustfs`) +- RustFS Console (web) : `http://localhost:9001` +- Mailpit SMTP : `1025` (SMTP) +- Mailpit UI (web) : `http://localhost:8025` +- API : `http://localhost:3000` +- Platform : `http://localhost:5173` +- Website : `http://localhost:5174` + +> Dans le conteneur, les services sont accessibles par leur nom Docker (`postgres`, `rustfs`, `mailpit`) ; depuis l'hôte, utilisez `localhost` et les ports exposés ci‑dessus. + +## Rebuild du container + +Si vous modifiez le `Dockerfile` ou le compose, rebuild l'image : + +```bash +# Reconstruire l'image devcontainer +docker compose -f .dev/compose.yml build --no-cache arrhes-platform + +# Redémarrer les services +docker compose -f .dev/compose.yml up -d +``` + + +## Troubleshooting + +- Voir les services en cours : + +```bash +docker compose -f .dev/compose.yml ps +``` + +- Logs d'un service (ex : `postgres`) : + +```bash +docker compose -f .dev/compose.yml logs postgres +``` + +- Forcer une remise à zéro (supprime les volumes) : + +```bash +docker compose -f .dev/compose.yml down -v +``` + +- Si les dépendances ne s'installent pas correctement (dans le conteneur) : + +```bash +rm -rf node_modules +pnpm install +``` + +## Performance + +- Le dépôt utilise un bind mount (`.:/workspace`) pour que les modifications effectuées depuis l'IDE hôte soient visibles immédiatement dans le conteneur (HMR, tests, etc.). +- Si vous développez sur macOS/Windows et constatez des lenteurs, testez les options Docker (volumes `cached`) ou développez via WSL2 sous Windows. + +## Ressources + +- Docker Compose : https://docs.docker.com/compose/ + + diff --git a/.dev-container/compose.yml b/.dev/compose.yml similarity index 85% rename from .dev-container/compose.yml rename to .dev/compose.yml index ef4f29e..f3c0403 100644 --- a/.dev-container/compose.yml +++ b/.dev/compose.yml @@ -3,10 +3,11 @@ services: container_name: arrhes-platform build: context: . - dockerfile: .devcontainer/Dockerfile + dockerfile: .dev/Dockerfile args: NODE_VERSION: "25.2.1" PNPM_VERSION: "10.26.1" + image: arrhes-platform volumes: - .:/workspace:cached command: sleep infinity @@ -17,7 +18,7 @@ services: depends_on: - postgres - rustfs - - mailhog + - mailpit # Base de données PostgreSQL postgres: @@ -26,14 +27,14 @@ services: restart: unless-stopped environment: POSTGRES_USER: postgres - POSTGRES_PASSWORD: demo + POSTGRES_PASSWORD: admin POSTGRES_DB: default ports: - "5432:5432" volumes: - postgres_data:/var/lib/postgresql healthcheck: - test: ["CMD-SHELL", "pg_isready -U postgres -d arrhes"] + test: ["CMD-SHELL", "pg_isready -U postgres -d default"] interval: 10s timeout: 5s retries: 5 @@ -43,16 +44,18 @@ services: image: rustfs/rustfs:latest container_name: arrhes-rustfs restart: unless-stopped - command: server /data --web-ui-address ":9001" + command: server /data --console-address ":9001" environment: RUSTFS_CONSOLE_ENABLE: true RUSTFS_ACCESS_KEY: rustfsadmin RUSTFS_SECRET_KEY: rustfsadmin + RUSTFS_VOLUMES: /data ports: - "9000:9000" # API - "9001:9001" # Web UI volumes: - rustfs_data:/data + init: true healthcheck: test: ["CMD-SHELL", "wget --quiet --tries=1 --spider http://localhost:9000 || exit 1"] interval: 10s @@ -76,6 +79,8 @@ services: volumes: postgres_data: name: arrhes_postgres_data + external: true rustfs_data: name: arrhes_rustfs_data + external: true diff --git a/.dev/scripts/.api.env b/.dev/scripts/.api.env new file mode 100644 index 0000000..c1c1db5 --- /dev/null +++ b/.dev/scripts/.api.env @@ -0,0 +1,28 @@ +# Environment +ENV="development" +VERBOSE="true" +PORT="3000" + +# CORS and Cookies +CORS_ORIGIN="http://localhost:5173" +COOKIES_DOMAIN="localhost" +COOKIES_KEY="development-secret-key-change-in-production-min-32-chars" + +# URLs +API_BASE_URL="http://localhost:3000" +PLATFORM_BASE_URL="http://localhost:5173" +WEBSITE_BASE_URL="http://localhost:5174" + +# Database (Docker Compose) +SQL_DATABASE_URL="postgres://postgres:admin@postgres:5432/default" + +# Storage (RustFS via Docker Compose) +STORAGE_ENDPOINT="http://rustfs:9000" +STORAGE_BUCKET_NAME="arrhes-files" +STORAGE_ACCESS_KEY="rustfsadmin" +STORAGE_SECRET_KEY="rustfsadmin" + +# Email Mailpit (Docker Compose) +EMAIL_ENDPOINT="mailpit:1025" +EMAIL_USER="test" +EMAIL_PASSWORD="test" diff --git a/.dev/scripts/.tools.env b/.dev/scripts/.tools.env new file mode 100644 index 0000000..c2697d4 --- /dev/null +++ b/.dev/scripts/.tools.env @@ -0,0 +1,2 @@ +NODE_ENV="development" +SQL_DATABASE_URL="postgres://postgres:admin@postgres:5432/default" diff --git a/.dev/scripts/initialize.sh b/.dev/scripts/initialize.sh new file mode 100644 index 0000000..38fb8c8 --- /dev/null +++ b/.dev/scripts/initialize.sh @@ -0,0 +1,73 @@ +#!/bin/bash +set -e + +echo "🚀 Configuring Arrhes development environment..." + +# Install dependencies if needed +if [ ! -d "node_modules" ]; then + echo "📦 Installing dependencies..." + pnpm install +else + echo "✅ Dependencies already installed" +fi + +# Build packages (metadata must be built before tools) +echo "🔨 Building packages..." +pnpm --filter @arrhes/metadata run build + +# Create .env files if they don't exist +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +API_ENV_SOURCE="$SCRIPT_DIR/.api.env" +if [ ! -f "packages/api/.env" ]; then + if [ -f "$API_ENV_SOURCE" ]; then + echo "⚙️ Creating packages/api/.env from $API_ENV_SOURCE..." + cp "$API_ENV_SOURCE" packages/api/.env + else + echo "❌ Missing $API_ENV_SOURCE. Please create it before running this script." + echo " You can copy .dev/scripts/.api.env as a starting point." + exit 1 + fi +else + echo "✅ packages/api/.env already exists" +fi + +TOOLS_ENV_SOURCE="$SCRIPT_DIR/.tools.env" +if [ ! -f "packages/tools/.env" ]; then + if [ -f "$TOOLS_ENV_SOURCE" ]; then + echo "⚙️ Creating packages/tools/.env from $TOOLS_ENV_SOURCE..." + cp "$TOOLS_ENV_SOURCE" packages/tools/.env + else + echo "❌ Missing $TOOLS_ENV_SOURCE. Please create it before running this script." + echo " You can copy .dev/scripts/.tools.env as a starting point." + exit 1 + fi +else + echo "✅ packages/tools/.env already exists" +fi + +# Initialize database +echo "🗄️ Initializing database..." +pnpm --filter="tools" run push + +# Seed demo data +echo "🌱 Seeding demo data..." +pnpm --filter="tools" run seed + +# Starting +echo "🚀 Starting dev server..." +pnpm run dev + +echo "" +echo "✨ Setup complete!" +echo "" +echo "Services available:" +echo " - API : http://localhost:3000" +echo " - Platform : http://localhost:5173" +echo " - Rustfs Console : http://localhost:9001" +echo " - Mailpit : http://localhost:8025" +echo "" +echo "Demo credentials:" +echo " Email : demo@arrhes.com" +echo " Password : demo" +echo "" diff --git a/.dev/scripts/start.sh b/.dev/scripts/start.sh new file mode 100644 index 0000000..f6b1abc --- /dev/null +++ b/.dev/scripts/start.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env bash +set -euo pipefail + +COMPOSE_FILE=".dev/compose.yml" +SERVICE="arrhes-platform" + +echo "Remove previous containers" +docker ps -a --filter="name=arrhes-" -q | xargs -r docker rm -f + +ensure_volume() { + name="$1" + if ! docker volume inspect "$name" >/dev/null 2>&1; then + echo "Creating docker volume: $name" + docker volume create --name "$name" + else + echo "Volume exists: $name" + fi +} +ensure_volume arrhes_postgres_data +ensure_volume arrhes_rustfs_data + +echo "Starting dev services (docker compose up -d)..." +docker compose --project-directory="." --file="$COMPOSE_FILE" up -d --build + +echo "Services started:" +docker compose --project-directory="." --file="$COMPOSE_FILE" ps + +echo "Bootstrapping workspace inside the dev container (install deps, build metadata, push/seed DB)..." +# Run the bootstrap as the node user to match container expectations +docker compose --project-directory="." --file="$COMPOSE_FILE" exec -u node $SERVICE bash -lc "bash .dev/scripts/initialize.sh" + +echo "Bootstrap complete. To open a shell inside the dev container run:" +echo " docker compose -f $COMPOSE_FILE exec $SERVICE bash" diff --git a/.devcontainer/README.md b/.devcontainer/README.md deleted file mode 100644 index ad49f4e..0000000 --- a/.devcontainer/README.md +++ /dev/null @@ -1,193 +0,0 @@ -# Dev Container Configuration - -Ce répertoire contient la configuration pour développer Arrhes dans un Dev Container. - -## Qu'est-ce qu'un Dev Container ? - -Un Dev Container est un environnement de développement complet qui s'exécute dans un container Docker. Il offre : -- Une configuration d'environnement reproductible -- Tous les outils nécessaires préinstallés -- Les extensions d'éditeur recommandées -- Un onboarding instantané pour les nouveaux contributeurs - -## Fichiers - -### `devcontainer.json` -Fichier de configuration principal qui définit : -- Le container de développement à utiliser -- Les ports à exposer -- Les extensions VS Code/Cursor à installer -- Les commandes à exécuter lors de la création/démarrage du container -- Les paramètres de l'éditeur - -### `Dockerfile` -Définit l'image Docker pour le container de développement : -- Basé sur l'image officielle Microsoft Node.js + TypeScript -- Installe pnpm globalement -- Installe les outils CLI utiles (PostgreSQL client, curl, vim) - -### `post-create.sh` -Script exécuté automatiquement après la création du container : -1. Installe les dépendances pnpm -2. Crée les fichiers `.env` avec les bonnes valeurs -3. Attend que PostgreSQL soit prêt -4. Initialise le schéma de base de données -5. Insère les données de démonstration - -## Utilisation - -### Première utilisation - -1. Ouvrir le projet dans VS Code/Cursor -2. Cliquer sur "Reopen in Container" quand demandé -3. Attendre que le container se construise et se configure (2-5 minutes) -4. Lancer `pnpm run dev` - -### Utilisation quotidienne - -Le container conserve son état entre les sessions. Lors de la réouverture : -1. Le container redémarre (quelques secondes) -2. Les services (PostgreSQL, MinIO, MailHog) se relancent automatiquement -3. Vous pouvez directement lancer `pnpm run dev` - -### Rebuild du container - -Si vous modifiez les fichiers de configuration du Dev Container : - -**Via VS Code/Cursor :** -- `Cmd/Ctrl + Shift + P` -- "Dev Containers: Rebuild Container" - -**Via CLI :** -```bash -docker-compose build devcontainer -``` - -## Services inclus - -Tous les services sont automatiquement démarrés et configurés : - -| Service | URL/Port | Credentials | -|---------|----------|-------------| -| PostgreSQL | `postgres:5432` | `arrhes_user` / `arrhes_password` | -| MinIO API | `minio:9000` | `minioadmin` / `minioadmin` | -| MinIO Console | http://localhost:9001 | `minioadmin` / `minioadmin` | -| MailHog SMTP | `mailhog:1025` | - | -| MailHog Web | http://localhost:8025 | - | - -**Note :** Dans le Dev Container, les services sont accessibles via leur nom Docker (`postgres`, `minio`, `mailhog`) plutôt que `localhost`. - -## Extensions installées - -Le Dev Container installe automatiquement : -- **ESLint** : Linting JavaScript/TypeScript -- **Prettier** : Formatage de code -- **GitLens** : Git amélioré -- **Tailwind CSS IntelliSense** : Autocomplétion Tailwind -- **ES7+ React/Redux snippets** : Snippets React -- **SQLTools** + **PostgreSQL Driver** : Client PostgreSQL intégré -- **Docker** : Gestion des containers -- **Error Lens** : Affichage des erreurs inline -- **Path Intellisense** : Autocomplétion des chemins -- **Code Spell Checker** : Vérification orthographique - -## Configuration de l'éditeur - -Le Dev Container applique automatiquement les paramètres suivants : -- Format on save activé (Prettier) -- ESLint fix on save -- TypeScript workspace version -- Tab size: 4 espaces -- EOL: LF (Unix) - -## Personnalisation - -### Ajouter une extension - -Éditez `.devcontainer/devcontainer.json` : -```json -{ - "customizations": { - "vscode": { - "extensions": [ - // ... extensions existantes - "publisher.extension-name" - ] - } - } -} -``` - -Puis rebuild le container. - -### Modifier la configuration - -Pour personnaliser : -- **Environnement** : Modifiez `Dockerfile` -- **Extensions/Settings** : Modifiez `devcontainer.json` -- **Setup initial** : Modifiez `post-create.sh` - -Après toute modification, pensez à rebuild le container. - -## Troubleshooting - -### Le container ne démarre pas -```bash -# Voir les logs du container -docker logs arrhes-devcontainer-1 - -# Rebuild depuis zéro -docker-compose down -v -docker-compose build --no-cache devcontainer -``` - -### PostgreSQL n'est pas prêt -```bash -# Vérifier l'état de PostgreSQL -docker-compose ps postgres - -# Voir les logs -docker-compose logs postgres - -# Redémarrer PostgreSQL -docker-compose restart postgres -``` - -### Les dépendances ne s'installent pas -```bash -# Dans le terminal du Dev Container -rm -rf node_modules -pnpm install -``` - -### Réinitialiser complètement -```bash -# Fermer VS Code/Cursor -# Depuis votre machine locale : -docker-compose down -v -# Réouvrir le projet dans le Dev Container -``` - -## Performance - -**Volumes bindés :** -Le projet utilise des volumes "cached" pour de meilleures performances sur macOS/Windows. - -**WSL2 (Windows) :** -Pour de meilleures performances, clonez le projet dans le filesystem WSL2 : -```bash -# Dans WSL2 -cd ~ -git clone https://github.com/arrhes/arrhes-platform.git -code arrhes-platform -``` - -**macOS :** -Les volumes Docker peuvent être lents. Si vous rencontrez des problèmes de performance, envisagez l'option Docker Compose (sans Dev Container) pour un développement natif. - -## Ressources - -- [Dev Containers documentation](https://containers.dev/) -- [VS Code Dev Containers](https://code.visualstudio.com/docs/devcontainers/containers) -- [Docker Compose documentation](https://docs.docker.com/compose/) - diff --git a/.devcontainer/compose.yml b/.devcontainer/compose.yml deleted file mode 100644 index d5930c8..0000000 --- a/.devcontainer/compose.yml +++ /dev/null @@ -1,81 +0,0 @@ -services: - devcontainer: - build: - context: . - dockerfile: .devcontainer/Dockerfile - args: - NODE_VERSION: "25.2.1" - PNPM_VERSION: "10.26.1" - volumes: - - .:/workspace:cached - command: sleep infinity - ports: - - "3000:3000" # API dev port (pnpm run dev) - - "5173:5173" # Platform dev port (Vite) - - "5174:5174" # Website dev port (Vite) - depends_on: - - postgres - - rustfs - - mailhog - - # Base de données PostgreSQL - postgres: - image: postgres:16-alpine - container_name: arrhes-postgres - restart: unless-stopped - environment: - POSTGRES_USER: arrhes_user - POSTGRES_PASSWORD: arrhes_password - POSTGRES_DB: arrhes - ports: - - "5432:5432" - volumes: - - postgres_data:/var/lib/postgresql/data - healthcheck: - test: ["CMD-SHELL", "pg_isready -U arrhes_user -d arrhes"] - interval: 10s - timeout: 5s - retries: 5 - - # Object storage (RustFS) - rustfs: - image: rustfs/rustfs:latest - container_name: arrhes-rustfs - restart: unless-stopped - command: server /data --web-ui-address ":9001" - environment: - RUSTFS_ROOT_USER: arrhes_rustfs - RUSTFS_ROOT_PASSWORD: arrhes_rustfs_secret - STORAGE_ACCESS_KEY: arrhes_rustfs - STORAGE_SECRET_KEY: arrhes_rustfs_secret - ports: - - "9000:9000" # API - - "9001:9001" # Web UI - volumes: - - rustfs_data:/data - healthcheck: - test: ["CMD-SHELL", "wget --quiet --tries=1 --spider http://localhost:9000 || exit 1"] - interval: 10s - timeout: 5s - retries: 5 - - # Serveur SMTP de test (MailHog) - mailhog: - image: mailhog/mailhog:latest - container_name: arrhes-mailhog - restart: unless-stopped - ports: - - "1025:1025" # SMTP - - "8025:8025" # Interface web - healthcheck: - test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:8025"] - interval: 10s - timeout: 5s - retries: 5 - -volumes: - postgres_data: - name: arrhes_postgres_data - rustfs_data: - name: arrhes_rustfs_data - diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json deleted file mode 100644 index 70183db..0000000 --- a/.devcontainer/devcontainer.json +++ /dev/null @@ -1,121 +0,0 @@ -{ - "name": "Arrhes Development", - "dockerComposeFile": "../docker-compose.yml", - "service": "devcontainer", - "workspaceFolder": "/workspace", - - // Monter le workspace - "mounts": [ - "source=${localWorkspaceFolder},target=/workspace,type=bind,consistency=cached" - ], - - // Exposer les ports pour accéder aux services - "forwardPorts": [ - 3100, // API - 3101, // Platform - 3102, // Website (with docs) - 9000, // MinIO API - 9001, // MinIO Console - 1025, // MailHog SMTP - 8025 // MailHog Web UI - ], - - // Labels pour les ports - "portsAttributes": { - "3100": { - "label": "API", - "onAutoForward": "notify" - }, - "3101": { - "label": "Platform", - "onAutoForward": "openBrowser" - }, - "3102": { - "label": "Platform", - "onAutoForward": "openBrowser" - }, - "9001": { - "label": "MinIO Console", - "onAutoForward": "ignore" - }, - "8025": { - "label": "MailHog Web", - "onAutoForward": "ignore" - }, - - // Extensions VS Code/Cursor recommandées - "customizations": { - "vscode": { - "extensions": [ - // TypeScript - "dbaeumer.vscode-eslint", - "esbenp.prettier-vscode", - - // Git - "eamodio.gitlens", - - // Développement - "bradlc.vscode-tailwindcss", - "formulahendry.auto-rename-tag", - "dsznajder.es7-react-js-snippets", - - // Base de données - "mtxr.sqltools", - "mtxr.sqltools-driver-pg", - - // Docker - "ms-azuretools.vscode-docker", - - // Utilitaires - "usernamehw.errorlens", - "christian-kohler.path-intellisense", - "streetsidesoftware.code-spell-checker" - ], - "settings": { - "typescript.tsdk": "node_modules/typescript/lib", - "typescript.enablePromptUseWorkspaceTsdk": true, - "editor.formatOnSave": true, - "editor.defaultFormatter": "esbenp.prettier-vscode", - "editor.codeActionsOnSave": { - "source.fixAll.eslint": "explicit" - }, - "files.eol": "\n", - "terminal.integrated.defaultProfile.linux": "bash", - "[typescript]": { - "editor.defaultFormatter": "esbenp.prettier-vscode" - }, - "[typescriptreact]": { - "editor.defaultFormatter": "esbenp.prettier-vscode" - } - } - } - }, - - // Commandes post-création du container - "postCreateCommand": "bash .devcontainer/post-create.sh", - - // Commande post-démarrage (vide pour éviter les erreurs avec docker-compose) - "postStartCommand": "", - - // Fonctionnalités à ajouter - "features": { - "ghcr.io/devcontainers/features/common-utils:2": { - "installZsh": true, - "installOhMyZsh": true, - "configureZshAsDefaultShell": true, - "username": "node" - }, - "ghcr.io/devcontainers/features/git:1": { - "version": "latest" - } - }, - - // Utilisateur non-root - "remoteUser": "node", - - // Variables d'environnement - "remoteEnv": { - "NODE_ENV": "development" - } -} - diff --git a/.devcontainer/post-create.sh b/.devcontainer/post-create.sh deleted file mode 100644 index f84e5ce..0000000 --- a/.devcontainer/post-create.sh +++ /dev/null @@ -1,95 +0,0 @@ -#!/bin/bash -set -e - -echo "🚀 Configuration de l'environnement de développement Arrhes..." - -# Installer les dépendances si nécessaire -if [ ! -d "node_modules" ]; then - echo "📦 Installation des dépendances..." - pnpm install -else - echo "✅ Dépendances déjà installées" -fi - -# Build les packages nécessaires (metadata doit être compilé avant tools) -echo "🔨 Compilation des packages..." -pnpm --filter @arrhes/metadata run build - -# Créer les fichiers .env s'ils n'existent pas -if [ ! -f "packages/api/.env" ]; then - echo "⚙️ Création de packages/api/.env..." - cat > packages/api/.env << 'EOF' -# Environnement -ENV=development -VERBOSE=true -PORT=3000 - -# CORS et Cookies -CORS_ORIGIN=http://localhost:5173 -COOKIES_DOMAIN=localhost -COOKIES_KEY=development-secret-key-change-in-production-min-32-chars - -# URLs -API_BASE_URL=http://localhost:3000 -PLATFORM_BASE_URL=http://localhost:5173 -WEBSITE_BASE_URL=http://localhost:5174 - -# Base de données (Docker Compose) -SQL_DATABASE_URL=postgres://arrhes_user:arrhes_password@postgres:5432/arrhes - -# Stockage MinIO (Docker Compose) -STORAGE_ENDPOINT=http://minio:9000 -STORAGE_NAME=arrhes-files -STORAGE_ACCESS_KEY=minioadmin -STORAGE_SECRET_KEY=minioadmin - -# Email MailHog (Docker Compose) -EMAIL_ENDPOINT=mailhog:1025 -EMAIL_USER=test -EMAIL_PASSWORD=test -EOF -else - echo "✅ packages/api/.env existe déjà" -fi - -if [ ! -f "packages/tools/.env" ]; then - echo "⚙️ Création de packages/tools/.env..." - cat > packages/tools/.env << 'EOF' -DATABASE_URL=postgres://arrhes_user:arrhes_password@postgres:5432/arrhes -EOF -else - echo "✅ packages/tools/.env existe déjà" -fi - -# Attendre que PostgreSQL soit prêt -echo "⏳ Attente du démarrage de PostgreSQL..." -until pg_isready -h postgres -U arrhes_user; do - sleep 1 -done -echo "✅ PostgreSQL est prêt" - -# Initialiser la base de données -echo "🗄️ Initialisation de la base de données..." -pnpm --filter tools run push - -# Seed avec des données de démonstration -echo "🌱 Insertion des données de démonstration..." -pnpm --filter tools run seed - -echo "" -echo "✨ Configuration terminée !" -echo "" -echo "Pour démarrer le développement, lancez :" -echo " pnpm run dev" -echo "" -echo "Services disponibles :" -echo " - API : http://localhost:3000" -echo " - Platform : http://localhost:5173" -echo " - MinIO Console : http://localhost:9001" -echo " - MailHog : http://localhost:8025" -echo "" -echo "Identifiants de démonstration :" -echo " Email : demo@arrhes.com" -echo " Mot de passe : demo" -echo "" - diff --git a/.gitignore b/.gitignore index 5fb0e1a..a4d08a7 100644 --- a/.gitignore +++ b/.gitignore @@ -5,11 +5,12 @@ build .env .npmrc .continue -.dev .old .vscode pnpm-lock.yaml .pnpm-store -*.tsbuildinfo \ No newline at end of file +*.tsbuildinfo + +!.dev diff --git a/.old.env b/.old.env new file mode 100644 index 0000000..c541bcf --- /dev/null +++ b/.old.env @@ -0,0 +1,22 @@ +ENV="development" +VERBOSE="true" +PORT="3000" + +CORS_ORIGIN="http://localhost:3101,http://localhost:3102" +COOKIES_DOMAIN="localhost" +COOKIES_KEY="nLR54unTYqW%Pn" + +API_BASE_URL="http://localhost:3100" +PLATFORM_BASE_URL="http://localhost:3101" +WEBSITE_BASE_URL="https//localhost:3102" + +SQL_DATABASE_URL="postgres://development:76KeGDObGLjzn1s12&@195.154.70.77:20960/development" + +STORAGE_ENDPOINT="https://s3.fr-par.scw.cloud" +STORAGE_BUCKET_NAME="arrhes.development" +STORAGE_ACCESS_KEY="SCW0MY50MZT3B2HHZM1K" +STORAGE_SECRET_KEY="11126f13-73bf-4c42-b555-4a8108bb2c82" + +EMAIL_ENDPOINT="smtp.tem.scw.cloud" +EMAIL_USER="17d4af36-78b5-4175-8b2b-8f8c497b616b" +EMAIL_PASSWORD="c37e79af-2b9e-4e44-9d21-ce22526d8fa0" \ No newline at end of file diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..15928b4 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,23 @@ +# Agent Guidelines + +## Commands +- Build (all packages): `pnpm build` (recursive across packages) +- Dev (parallel): `pnpm dev` +- Lint: `pnpm -w --filter packages/platform run lint` (or `cd packages/platform && npm run lint`) +- Test: repository has no global test framework; to run a single package/test, install its dev deps and run that package's test script, e.g. `cd packages/tools && pnpm test` or `pnpm -w --filter packages/tools test` + +## Code Style +- Imports: external deps first, then internal; use package-specific path prefixes: `#/` (api), `#/*` (platform), `#src/*` (metadata) +- Formatting & Types: TypeScript strict mode enabled; ES modules (`"type": "module"`); API uses Hono JSX; Platform uses React with StrictMode; use `valibot` for validation +- Naming: models `camelCase` with `Model` suffix (e.g. `accountModel`), files `camelCase.ts[x]`, components `PascalCase.tsx`, utilities `camelCase.ts` +- Error handling: prefer try/catch with structured logging; handle `uncaughtException` and `unhandledRejection` in server entry; return structured error responses via Hono + +## Contributing Notes +- Monorepo layout: `packages/{api,platform,metadata,tools}` +- Prefer editing existing files; follow local tsconfig and lint rules +- Running a single test: use package scope with PNPM filters: `pnpm -w --filter packages/ test` + +## Tooling Rules +- No Cursor or Copilot rules detected in `.cursor/` or `.github/copilot-instructions.md`; if added, include them here and follow their directives. + +(Keep this file short; agents must follow these conventions when modifying code.) \ No newline at end of file diff --git a/README.md b/README.md index 7ac0289..97bed75 100644 --- a/README.md +++ b/README.md @@ -39,27 +39,40 @@ Arrhes est une solution complète de comptabilité conçue spécifiquement pour ## Démarrage rapide -### Option 1 : Dev Container 🚀 (Le plus simple) - -Prérequis : Docker, VS Code ou Cursor avec l'extension Dev Containers - -```bash -# Cloner le repository -git clone https://github.com/arrhes/arrhes-platform.git -cd arrhes-platform - -# Ouvrir dans VS Code/Cursor -code . - -# Cliquer sur "Reopen in Container" quand demandé -# Ou : Cmd/Ctrl+Shift+P > "Dev Containers: Reopen in Container" - -# L'environnement se configure automatiquement ! -# Une fois prêt, lancer l'application : -pnpm run dev -``` - -Tout est configuré automatiquement : Node.js, pnpm, PostgreSQL, MinIO, MailHog, et les données de démonstration ! +### Option 1 : Dev Container 🚀 (Le plus simple) + +Prérequis : Docker + +Quick CLI workflow (no editor integration required): + +```bash +# Clone & enter repo +git clone https://github.com/arrhes/arrhes-platform.git +cd arrhes-platform + +# Start the devcontainer services (bind-mounts your workspace) +./devcontainer-start.sh + +# Bootstrap the workspace (run inside the devcontainer): installs deps, builds metadata, pushes schema and seeds DB +./dev/scripts/initialize.sh + +# Open an interactive shell inside the devcontainer (one-line) +docker compose -f .dev/compose.yml exec devcontainer bash + +# From that shell you can start the dev servers (they must bind to 0.0.0.0 to be reachable from the host): +# API +pnpm --filter api run dev +# Platform (Vite) - ensure host binding +pnpm --filter platform run dev -- --host +# Website (Vite) - ensure host binding +pnpm --filter website run dev -- --host +``` + +If you prefer to attach VS Code to the running container instead of using an in-container shell, install the "Dev Containers" extension and use "Dev Containers: Attach to Running Container..." then select the `devcontainer` container. Edits are persisted on the host because the service mount `.:/workspace` is a bind mount. + + + +Tout est configuré automatiquement : Node.js, pnpm, PostgreSQL, RustFS, MailHog, et les données de démonstration ! ### Option 2 : Avec Docker Compose 🐳 @@ -73,11 +86,11 @@ cd arrhes-platform # Installer les dépendances pnpm install -# Lancer les services (PostgreSQL, MinIO, MailHog) +# Lancer les services (PostgreSQL, RustFS, MailHog) docker-compose up -d -# Créer le bucket MinIO -# Accéder à http://localhost:9001 (minioadmin / minioadmin) +# Créer le bucket RustFS +# Accéder à http://localhost:9001 (arrhes_rustfs / arrhes_rustfs_secret) # Créer un bucket nommé "arrhes-files" # Configurer les variables d'environnement diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index aee6cee..0000000 --- a/docker-compose.yml +++ /dev/null @@ -1,78 +0,0 @@ -version: '3.8' - -services: - # Container de développement (pour Dev Containers) - devcontainer: - build: - context: . - dockerfile: .devcontainer/Dockerfile - args: - NODE_VERSION: "24" - volumes: - - .:/workspace:cached - command: sleep infinity - depends_on: - - postgres - - minio - - mailhog - network_mode: service:postgres - - # Base de données PostgreSQL - postgres: - image: postgres:16-alpine - container_name: arrhes-postgres - restart: unless-stopped - environment: - POSTGRES_USER: arrhes_user - POSTGRES_PASSWORD: arrhes_password - POSTGRES_DB: arrhes - ports: - - "5432:5432" - volumes: - - postgres_data:/var/lib/postgresql/data - healthcheck: - test: ["CMD-SHELL", "pg_isready -U arrhes_user -d arrhes"] - interval: 10s - timeout: 5s - retries: 5 - - # Stockage S3 compatible (MinIO) - minio: - image: quay.io/minio/minio:latest - container_name: arrhes-minio - restart: unless-stopped - command: server /data --console-address ":9001" - environment: - MINIO_ROOT_USER: minioadmin - MINIO_ROOT_PASSWORD: minioadmin - ports: - - "9000:9000" # API - - "9001:9001" # Console web - volumes: - - minio_data:/data - healthcheck: - test: ["CMD", "mc", "ready", "local"] - interval: 10s - timeout: 5s - retries: 5 - - # Serveur SMTP de test (MailHog) - mailhog: - image: mailhog/mailhog:latest - container_name: arrhes-mailhog - restart: unless-stopped - ports: - - "1025:1025" # SMTP - - "8025:8025" # Interface web - healthcheck: - test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:8025"] - interval: 10s - timeout: 5s - retries: 5 - -volumes: - postgres_data: - name: arrhes_postgres_data - minio_data: - name: arrhes_minio_data - diff --git a/docs/CONFIGURATION.md b/docs/CONFIGURATION.md index 861bd29..5a92889 100644 --- a/docs/CONFIGURATION.md +++ b/docs/CONFIGURATION.md @@ -26,7 +26,7 @@ Ces fichiers ne sont **pas versionnés** (`.gitignore`) pour des raisons de séc **Option 1 : Avec Docker Compose (Recommandé) 🐳** -Le fichier `docker-compose.yml` à la racine du projet lance automatiquement PostgreSQL, MinIO et MailHog avec des valeurs par défaut prêtes à l'emploi. Cette option simplifie grandement la configuration. +Le fichier `docker-compose.yml` à la racine du projet lance automatiquement PostgreSQL, RustFS et MailHog avec des valeurs par défaut prêtes à l'emploi. Cette option simplifie la configuration. **Option 2 : Installation native** @@ -72,10 +72,10 @@ Fichier : `packages/api/.env` | Variable | Type | Description | Exemple | |----------|------|-------------|---------| -| `STORAGE_ENDPOINT` | `string` | Endpoint S3 (ou compatible) | `http://localhost:9000` (MinIO) | -| `STORAGE_NAME` | `string` | Nom du bucket S3 | `arrhes-files` | -| `STORAGE_ACCESS_KEY` | `string` | Clé d'accès S3 | `minioadmin` | -| `STORAGE_SECRET_KEY` | `string` | Clé secrète S3 | `minioadmin` | +| `STORAGE_ENDPOINT` | `string` | Endpoint S3 (ou compatible) | `http://localhost:9000` (RustFS) | +| `STORAGE_BUCKET_NAME` | `string` | Nom du bucket S3 | `arrhes-files` | +| `STORAGE_ACCESS_KEY` | `string` | Clé d'accès S3 | `arrhes_rustfs` | +| `STORAGE_SECRET_KEY` | `string` | Clé secrète S3 | `arrhes_rustfs_secret` | ### Email SMTP @@ -184,50 +184,43 @@ Le système de stockage utilise l'API AWS S3 mais fonctionne avec n'importe quel ### Option 1 : Avec Docker Compose (Recommandé) 🐳 -Le fichier `docker-compose.yml` lance automatiquement MinIO. +Le fichier `docker-compose.yml` lance automatiquement RustFS. -**Lancer MinIO :** +**Lancer RustFS :** ```bash -docker-compose up -d minio +docker-compose up -d rustfs ``` **Configuration par défaut :** - **Endpoint** : `http://localhost:9000` -- **Console** : http://localhost:9001 -- **Access Key** : `minioadmin` -- **Secret Key** : `minioadmin` +- **Web UI** : http://localhost:9001 +- **Access Key** : `arrhes_rustfs` +- **Secret Key** : `arrhes_rustfs_secret` - **Bucket** : `arrhes-files` (à créer) **Variables d'environnement :** ```env STORAGE_ENDPOINT=http://localhost:9000 -STORAGE_NAME=arrhes-files -STORAGE_ACCESS_KEY=minioadmin -STORAGE_SECRET_KEY=minioadmin +STORAGE_BUCKET_NAME=arrhes-files +STORAGE_ACCESS_KEY=arrhes_rustfs +STORAGE_SECRET_KEY=arrhes_rustfs_secret ``` **Création du bucket :** Via l'interface web : 1. Accéder à http://localhost:9001 -2. Se connecter avec `minioadmin` / `minioadmin` +2. Se connecter avec `arrhes_rustfs` / `arrhes_rustfs_secret` 3. Cliquer sur "Buckets" > "Create Bucket" 4. Nommer le bucket `arrhes-files` -Ou via la ligne de commande : -```bash -docker exec arrhes-minio mc alias set local http://localhost:9000 minioadmin minioadmin -docker exec arrhes-minio mc mb local/arrhes-files -docker exec arrhes-minio mc anonymous set public local/arrhes-files -``` - **Commandes utiles :** ```bash # Voir les logs -docker-compose logs minio +docker-compose logs rustfs # Redémarrer -docker-compose restart minio +docker-compose restart rustfs ``` ### Option 2 : MinIO standalone (sans Docker Compose) @@ -237,11 +230,12 @@ docker-compose restart minio docker run -d \ -p 9000:9000 \ -p 9001:9001 \ - --name minio \ - -e "MINIO_ROOT_USER=minioadmin" \ - -e "MINIO_ROOT_PASSWORD=minioadmin" \ - -v ~/minio/data:/data \ - quay.io/minio/minio server /data --console-address ":9001" + --name rustfs \ + + -e "RUSTFS_ROOT_USER=arrhes_rustfs" \ + -e "RUSTFS_ROOT_PASSWORD=arrhes_rustfs_secret" \ + -v ~/rustfs/data:/data \ + rustfs/rustfs:latest server /data --web-ui-address ":9001" ``` Suivez ensuite les mêmes étapes de création de bucket que ci-dessus. @@ -251,7 +245,7 @@ Suivez ensuite les mêmes étapes de création de bucket que ci-dessus. **Configuration :** ```env STORAGE_ENDPOINT=https://s3.eu-west-3.amazonaws.com -STORAGE_NAME=your-bucket-name +STORAGE_BUCKET_NAME=your-bucket-name STORAGE_ACCESS_KEY=YOUR_AWS_ACCESS_KEY STORAGE_SECRET_KEY=YOUR_AWS_SECRET_KEY ``` @@ -387,51 +381,10 @@ SQL_DATABASE_URL=postgres://arrhes_user:arrhes_password@localhost:5432/arrhes # Stockage MinIO (Docker Compose) STORAGE_ENDPOINT=http://localhost:9000 -STORAGE_NAME=arrhes-files -STORAGE_ACCESS_KEY=minioadmin -STORAGE_SECRET_KEY=minioadmin - -# Email MailHog (Docker Compose) -EMAIL_ENDPOINT=localhost:1025 -EMAIL_USER=test -EMAIL_PASSWORD=test -``` - -**Étape 3 : `packages/tools/.env`** -```env -DATABASE_URL=postgres://arrhes_user:arrhes_password@localhost:5432/arrhes -``` - -**Étape 4 : Créer le bucket MinIO** -Accédez à http://localhost:9001 (minioadmin / minioadmin) et créez un bucket `arrhes-files`. - -### Configuration native (PostgreSQL local + MinIO Docker) - -**`packages/api/.env` :** -```env -# Environnement -ENV=development -VERBOSE=true -PORT=3000 - -# CORS et Cookies -CORS_ORIGIN=http://localhost:5173 -COOKIES_DOMAIN=localhost -COOKIES_KEY=my-super-secret-development-key-at-least-32-chars - -# URLs -API_BASE_URL=http://localhost:3000 -PLATFORM_BASE_URL=http://localhost:5173 -WEBSITE_BASE_URL=http://localhost:5174 +STORAGE_BUCKET_NAME=arrhes-files +STORAGE_ACCESS_KEY=arrhes_rustfs +STORAGE_SECRET_KEY=arrhes_rustfs_secret -# Base de données (PostgreSQL local) -SQL_DATABASE_URL=postgres://arrhes_user:your-password@localhost:5432/arrhes - -# Stockage MinIO (Docker standalone) -STORAGE_ENDPOINT=http://localhost:9000 -STORAGE_NAME=arrhes-files -STORAGE_ACCESS_KEY=minioadmin -STORAGE_SECRET_KEY=minioadmin # Email (MailHog Docker standalone) EMAIL_ENDPOINT=localhost:1025 @@ -468,7 +421,7 @@ SQL_DATABASE_URL=postgres://user:pass@db.provider.com:5432/arrhes # Stockage AWS S3 STORAGE_ENDPOINT=https://s3.eu-west-3.amazonaws.com -STORAGE_NAME=my-arrhes-bucket +STORAGE_BUCKET_NAME=my-arrhes-bucket STORAGE_ACCESS_KEY=AKIAIOSFODNN7EXAMPLE STORAGE_SECRET_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md index e7d0284..93ba59c 100644 --- a/docs/DEVELOPMENT.md +++ b/docs/DEVELOPMENT.md @@ -25,7 +25,7 @@ Vous avez trois options pour développer Arrhes : **Avantages :** - ✨ Configuration 100% automatique - Environnement de développement complet dans un container -- Tous les services préconfigurés (PostgreSQL, MinIO, MailHog) +- Tous les services préconfigurés (PostgreSQL, RustFS, MailHog) - Base de données initialisée automatiquement avec données de démo - Extensions VS Code/Cursor installées automatiquement - Zéro configuration manuelle @@ -39,7 +39,7 @@ Vous avez trois options pour développer Arrhes : ### Option 2 : Développement avec Docker Compose 🐳 **Avantages :** -- Configuration simplifiée (pas d'installation de PostgreSQL, MinIO, etc.) +- Configuration simplifiée (pas d'installation de PostgreSQL, RustFS, etc.) - Environnement standardisé et reproductible - Isolation complète des services - Node.js et pnpm installés localement (meilleure performance) @@ -62,7 +62,7 @@ Vous avez trois options pour développer Arrhes : - Node.js 24.5+ - pnpm - PostgreSQL installé localement -- Optionnellement Docker pour MinIO et MailHog +- Optionnellement Docker pour RustFS et MailHog **Idéal pour :** Développeurs expérimentés, personnalisation avancée @@ -86,7 +86,7 @@ Vous avez trois options pour développer Arrhes : - VS Code : https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers - Cursor : Installer depuis le marketplace d'extensions -C'est tout ! Node.js, pnpm, PostgreSQL, MinIO et MailHog seront configurés automatiquement dans le container. +C'est tout ! Node.js, pnpm, PostgreSQL, RustFS et MailHog seront configurés automatiquement dans le container. ### Prérequis communs (Options 2 et 3) @@ -117,7 +117,7 @@ C'est tout ! Node.js, pnpm, PostgreSQL, MinIO et MailHog seront configurés auto docker-compose --version ``` -C'est tout ! PostgreSQL, MinIO et MailHog seront lancés automatiquement dans des containers. +C'est tout ! PostgreSQL, RustFS et MailHog seront lancés automatiquement dans des containers. ### Option 3 : Développement natif @@ -144,7 +144,7 @@ C'est tout ! PostgreSQL, MinIO et MailHog seront lancés automatiquement dans de **Windows :** Télécharger depuis https://www.postgresql.org/download/windows/ -- **Docker** (optionnel, pour MinIO et MailHog) : https://www.docker.com/get-started +- **Docker** (optionnel, pour RustFS et MailHog) : https://www.docker.com/get-started - Ou configurez des services S3 et SMTP alternatifs ## Installation @@ -170,7 +170,7 @@ cursor . **Étape 3 : Reopen in Container** -Lorsque VS Code/Cursor détecte le fichier `.devcontainer/devcontainer.json`, une notification apparaît : +Lorsque VS Code/Cursor détecte le fichier `.dev/devcontainer.json`, une notification apparaît : > "Folder contains a Dev Container configuration file. Reopen folder to develop in a container?" @@ -182,7 +182,7 @@ Cliquez sur **"Reopen in Container"** ou utilisez la palette de commandes : **Ce qui se passe automatiquement :** 1. 🐳 Construction du container de développement 2. 📦 Installation de toutes les dépendances (pnpm install) -3. 🚀 Démarrage de PostgreSQL, MinIO et MailHog +3. 🚀 Démarrage de PostgreSQL, RustFS et MailHog 4. ⏳ Attente que PostgreSQL soit prêt 5. 🗄️ Création du schéma de base de données 6. 🌱 Insertion des données de démonstration @@ -202,7 +202,7 @@ C'est tout ! Vous êtes prêt à développer. 🎉 **URLs d'accès :** - **Platform** : http://localhost:5173 - **API** : http://localhost:3000 -- **MinIO Console** : http://localhost:9001 (minioadmin / minioadmin) +- **RustFS Console** : http://localhost:9001 (arrhes_rustfs / arrhes_rustfs_secret) - **MailHog** : http://localhost:8025 **Identifiants de démonstration :** @@ -273,7 +273,7 @@ Les fichiers suivants sont créés automatiquement : **Note importante :** Dans le Dev Container, les URLs pointent vers les noms de services Docker : - PostgreSQL : `postgres:5432` (au lieu de `localhost:5432`) -- MinIO : `minio:9000` (au lieu de `localhost:9000`) +- RustFS : `rustfs:9000` (au lieu de `localhost:9000`) - MailHog : `mailhog:1025` (au lieu de `localhost:1025`) Si vous souhaitez modifier la configuration, éditez directement les fichiers `.env` créés. @@ -285,7 +285,7 @@ Si vous souhaitez modifier la configuration, éditez directement les fichiers `. #### 1. Lancer les services avec Docker Compose ```bash -# Lancer tous les services (PostgreSQL, MinIO, MailHog) +# Lancer tous les services (PostgreSQL, RustFS, MailHog) docker-compose up -d # Vérifier que tout fonctionne @@ -294,24 +294,23 @@ docker-compose ps Les services seront disponibles sur : - **PostgreSQL** : `localhost:5432` -- **MinIO API** : `localhost:9000` -- **MinIO Console** : http://localhost:9001 +- **RustFS API** : `localhost:9000` +- **RustFS Console** : http://localhost:9001 - **MailHog SMTP** : `localhost:1025` - **MailHog Web** : http://localhost:8025 -#### 2. Créer le bucket MinIO +#### 2. Créer le bucket RustFS ```bash -# Accéder à la console MinIO : http://localhost:9001 -# Credentials : minioadmin / minioadmin +# Accéder à la console RustFS : http://localhost:9001 +# Credentials : arrhes_rustfs / arrhes_rustfs_secret # Créer un bucket nommé "arrhes-files" ``` Ou via la ligne de commande : ```bash -# Installer le client MinIO -docker exec arrhes-minio mc alias set local http://localhost:9000 minioadmin minioadmin -docker exec arrhes-minio mc mb local/arrhes-files +# Installer le client RustFS +# Create the bucket via the RustFS web UI at http://localhost:9001 or use an S3-compatible client to create `arrhes-files`. ``` #### 3. Créer les fichiers de configuration @@ -339,11 +338,11 @@ WEBSITE_BASE_URL=http://localhost:5174 # Base de données (Docker Compose) SQL_DATABASE_URL=postgres://arrhes_user:arrhes_password@localhost:5432/arrhes -# Stockage MinIO (Docker Compose) +# Stockage RustFS (Docker Compose) STORAGE_ENDPOINT=http://localhost:9000 -STORAGE_NAME=arrhes-files -STORAGE_ACCESS_KEY=minioadmin -STORAGE_SECRET_KEY=minioadmin +STORAGE_BUCKET_NAME=arrhes-files +STORAGE_ACCESS_KEY=arrhes_rustfs +STORAGE_SECRET_KEY=arrhes_rustfs_secret # Email MailHog (Docker Compose) EMAIL_ENDPOINT=localhost:1025 @@ -382,20 +381,21 @@ GRANT ALL PRIVILEGES ON DATABASE arrhes TO arrhes_user; #### 2. Configurer les services externes (optionnel) -**MinIO (Stockage de fichiers) :** +**RustFS (Stockage de fichiers) :** ```bash -# Lancer MinIO avec Docker +# Lancer RustFS avec Docker docker run -d \ -p 9000:9000 \ -p 9001:9001 \ - --name minio \ - -e "MINIO_ROOT_USER=minioadmin" \ - -e "MINIO_ROOT_PASSWORD=minioadmin" \ - -v ~/minio/data:/data \ - quay.io/minio/minio server /data --console-address ":9001" + --name rustfs \ -# Accéder à la console : http://localhost:9001 + -e "RUSTFS_ROOT_USER=arrhes_rustfs" \ + -e "RUSTFS_ROOT_PASSWORD=arrhes_rustfs_secret" \ + -v ~/rustfs/data:/data \ + rustfs/rustfs:latest server /data --web-ui-address ":9001" + +# Accéder à la web UI : http://localhost:9001 # Créer un bucket nommé "arrhes-files" ``` @@ -504,7 +504,7 @@ pnpm --filter metadata run dev - **Frontend (Platform)** : http://localhost:5173 - **API** : http://localhost:3000 -- **MinIO Console** : http://localhost:9001 (minioadmin / minioadmin) +- **RustFS Console** : http://localhost:9001 (arrhes_rustfs / arrhes_rustfs_secret) - **MailHog Web UI** : http://localhost:8025 ### Identifiants de démonstration @@ -517,7 +517,7 @@ Password : demo ### Notes par option **Dev Container :** -- Les services (PostgreSQL, MinIO, MailHog) sont déjà démarrés automatiquement +- Les services (PostgreSQL, RustFS, MailHog) sont déjà démarrés automatiquement - Les ports sont automatiquement forwardés vers votre machine locale - Vous pouvez cliquer sur les ports dans VS Code/Cursor pour ouvrir les URLs @@ -527,7 +527,7 @@ Password : demo **Natif :** - Assurez-vous que PostgreSQL est démarré -- Si vous utilisez MinIO/MailHog avec Docker, vérifiez qu'ils tournent : `docker ps` +- Si vous utilisez RustFS/MailHog avec Docker, vérifiez qu'ils tournent : `docker ps` ## Structure du projet @@ -683,7 +683,7 @@ pnpm --filter tools run drop 1. **Lancer les services** ```bash - # Lancer tous les services (PostgreSQL, MinIO, MailHog) + # Lancer tous les services (PostgreSQL, RustFS, MailHog) docker-compose up -d ``` @@ -716,8 +716,8 @@ pnpm --filter tools run drop # PostgreSQL (si pas démarré) sudo systemctl start postgresql - # MinIO (si utilisé avec Docker) - docker start minio + # RustFS (si utilisé avec Docker) + docker start rustfs # MailHog (si utilisé avec Docker) docker start mailhog @@ -908,9 +908,9 @@ pnpm dlx drizzle-kit studio --config=packages/tools/drizzle.config.ts - Vérifiez que l'API et la platform sont sur le même domaine **"S3/Storage error" :** -- Vérifiez que MinIO est démarré : `docker ps | grep minio` +- Vérifiez que RustFS est démarré : `docker ps | grep rustfs` - Vérifiez que le bucket existe (console : http://localhost:9001) -- Testez l'endpoint : `curl http://localhost:9000/minio/health/live` +- Testez l'endpoint : `curl http://localhost:9000/health || curl http://localhost:9000/health/live` **Problèmes Docker :** - **Port déjà utilisé :** Un autre service utilise le même port @@ -922,7 +922,7 @@ pnpm dlx drizzle-kit studio --config=packages/tools/drizzle.config.ts - **Container ne démarre pas :** Voir les logs ```bash docker-compose logs postgres - docker-compose logs minio + docker-compose logs rustfs docker-compose logs mailhog ``` - **Réinitialiser complètement :** diff --git a/packages/api/src/utilities/getEnv.ts b/packages/api/src/utilities/getEnv.ts index 2b80264..2307402 100644 --- a/packages/api/src/utilities/getEnv.ts +++ b/packages/api/src/utilities/getEnv.ts @@ -23,7 +23,7 @@ const envSchema = v.object({ SQL_DATABASE_URL: v.string(), STORAGE_ENDPOINT: v.string(), - STORAGE_NAME: v.string(), + STORAGE_BUCKET_NAME: v.string(), STORAGE_ACCESS_KEY: v.string(), STORAGE_SECRET_KEY: v.string(), diff --git a/packages/api/src/utilities/storage/deleteObject.ts b/packages/api/src/utilities/storage/deleteObject.ts index 667ec6b..4031767 100644 --- a/packages/api/src/utilities/storage/deleteObject.ts +++ b/packages/api/src/utilities/storage/deleteObject.ts @@ -14,7 +14,7 @@ export async function deleteObject(parameters: { try { const command = new DeleteObjectCommand({ - Bucket: parameters.var.env.STORAGE_NAME, + Bucket: parameters.var.env.STORAGE_BUCKET_NAME, Key: parameters.storageKey }) diff --git a/packages/api/src/utilities/storage/generateDeleteSignedUrl.ts b/packages/api/src/utilities/storage/generateDeleteSignedUrl.ts index 5666260..e273e3c 100644 --- a/packages/api/src/utilities/storage/generateDeleteSignedUrl.ts +++ b/packages/api/src/utilities/storage/generateDeleteSignedUrl.ts @@ -17,7 +17,7 @@ export async function generateDeleteSignedUrl(parameters: { const signedUrl = await getSignedUrl( parameters.var.clients.storage, new DeleteObjectCommand({ - Bucket: parameters.var.env.STORAGE_NAME, + Bucket: parameters.var.env.STORAGE_BUCKET_NAME, Key: parameters.storageKey }), { diff --git a/packages/api/src/utilities/storage/generateGetSignedUrl.ts b/packages/api/src/utilities/storage/generateGetSignedUrl.ts index 296551c..9e71b40 100644 --- a/packages/api/src/utilities/storage/generateGetSignedUrl.ts +++ b/packages/api/src/utilities/storage/generateGetSignedUrl.ts @@ -18,7 +18,7 @@ export async function generateGetSignedUrl(parameters: { const signedUrl = await getSignedUrl( parameters.var.clients.storage, new GetObjectCommand({ - Bucket: parameters.var.env.STORAGE_NAME, + Bucket: parameters.var.env.STORAGE_BUCKET_NAME, Key: parameters.storageKey }), { diff --git a/packages/api/src/utilities/storage/generatePutSignedUrl.ts b/packages/api/src/utilities/storage/generatePutSignedUrl.ts index a3d6d7c..6b705d9 100644 --- a/packages/api/src/utilities/storage/generatePutSignedUrl.ts +++ b/packages/api/src/utilities/storage/generatePutSignedUrl.ts @@ -21,7 +21,7 @@ export async function generatePutSignedUrl(parameters: { parameters.var.clients.storage, new PutObjectCommand({ ACL: "private", - Bucket: parameters.var.env.STORAGE_NAME, + Bucket: parameters.var.env.STORAGE_BUCKET_NAME, Key: parameters.storageKey, ContentLength: parameters.contentLength, ContentType: parameters.contentType, diff --git a/packages/api/src/utilities/storage/getObject.ts b/packages/api/src/utilities/storage/getObject.ts index 569eb47..9ed7c48 100644 --- a/packages/api/src/utilities/storage/getObject.ts +++ b/packages/api/src/utilities/storage/getObject.ts @@ -14,7 +14,7 @@ export async function getObject(parameters: { try { const command = new GetObjectCommand({ - Bucket: parameters.var.env.STORAGE_NAME, + Bucket: parameters.var.env.STORAGE_BUCKET_NAME, Key: parameters.storageKey ?? undefined }) diff --git a/packages/api/src/utilities/storage/putObject.ts b/packages/api/src/utilities/storage/putObject.ts index 6bcdb63..7cdb68d 100644 --- a/packages/api/src/utilities/storage/putObject.ts +++ b/packages/api/src/utilities/storage/putObject.ts @@ -19,7 +19,7 @@ export async function putObject(parameters: { const command = new PutObjectCommand({ ACL: "private", - Bucket: parameters.var.env.STORAGE_NAME, + Bucket: parameters.var.env.STORAGE_BUCKET_NAME, Key: parameters.storageKey, ContentLength: parameters.contentLength, ContentType: parameters.contentType, diff --git a/packages/platform/vite.config.ts b/packages/platform/vite.config.ts index 1e94823..dde45b2 100644 --- a/packages/platform/vite.config.ts +++ b/packages/platform/vite.config.ts @@ -16,7 +16,7 @@ export default defineConfig(() => { envDir: "../", server: { host: true, - port: 3101, + port: 5173, watch: { usePolling: true }, diff --git a/packages/tools/package.json b/packages/tools/package.json index aab3422..9faa32a 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -3,15 +3,15 @@ "type": "module", "private": true, "scripts": { - "generate": "pnpm drizzle-kit generate --config=drizzle.config.ts", - "push": "pnpm drizzle-kit push --config=drizzle.config.ts", - "pull": "pnpm drizzle-kit introspect --config=drizzle.config.ts", - "migrate": "pnpm drizzle-kit migrate --config=drizzle.config.ts", + "generate": "pnpm drizzle-kit generate --config=./src/drizzle.config.ts", + "push": "pnpm drizzle-kit push --config=./src/drizzle.config.ts", + "pull": "pnpm drizzle-kit introspect --config=./src/drizzle.config.ts", + "migrate": "pnpm drizzle-kit migrate --config=./src/drizzle.config.ts", "seed": "tsx --env-file=.env ./src/seed/seed.ts", "clear": "tsx --env-file=.env ./src/clearDB.ts", "sendSQL": "tsx --env-file=.env ./src/sendSQL.ts", "reset": "tsx --env-file=.env ./src/clearDB.ts && pnpm run push && tsx --env-file=.env ./src/seed/seed.ts", - "drop": "pnpm drizzle-kit drop --config=drizzle.config.ts" + "drop": "pnpm drizzle-kit drop --config=./src/drizzle.config.ts" }, "devDependencies": { "@types/node": "24.10.1", @@ -27,4 +27,4 @@ "postgres": "3.4.7", "valibot": "1.2.0" } -} +} \ No newline at end of file diff --git a/packages/tools/src/clearDB.ts b/packages/tools/src/clearDB.ts index feaa13f..1bdc1a9 100644 --- a/packages/tools/src/clearDB.ts +++ b/packages/tools/src/clearDB.ts @@ -1,11 +1,5 @@ import { sql } from 'drizzle-orm' -import { drizzle } from "drizzle-orm/postgres-js" -import postgres from "postgres" -import { env } from './env.js' - - -const connection = postgres(env()?.DATABASE_URL ?? "", { max: 1 }) -const db = drizzle(connection) +import { dbClient } from './dbClient.js' async function clearDb() { @@ -17,11 +11,11 @@ async function clearDb() { ` // CREATE EXTENSION IF NOT EXISTS pg_trgm; - const tables = await db.execute(query) + const tables = await dbClient.execute(query) for (let table of tables) { const query = sql.raw(`DROP TABLE ${table.table_name} CASCADE;`) - await db.execute(query) + await dbClient.execute(query) } return diff --git a/packages/tools/src/dbClient.ts b/packages/tools/src/dbClient.ts index 66a24f7..516a74f 100644 --- a/packages/tools/src/dbClient.ts +++ b/packages/tools/src/dbClient.ts @@ -1,7 +1,8 @@ -import { env } from "#/env.js" +import { modelSchemas } from "@arrhes/metadata/models" import { drizzle } from "drizzle-orm/postgres-js" import postgres from "postgres" +import { env } from "./env.js" -const connection = postgres(env()?.DATABASE_URL ?? "", { max: 1 }) -export const dbClient = drizzle(connection) +const connection = postgres(env()?.SQL_DATABASE_URL ?? "", { max: 1 }) +export const dbClient = drizzle(connection, { schema: modelSchemas }) diff --git a/packages/tools/drizzle.config.ts b/packages/tools/src/drizzle.config.ts similarity index 71% rename from packages/tools/drizzle.config.ts rename to packages/tools/src/drizzle.config.ts index fb657d4..ae95a24 100644 --- a/packages/tools/drizzle.config.ts +++ b/packages/tools/src/drizzle.config.ts @@ -1,5 +1,5 @@ import type { Config } from "drizzle-kit" -import { env } from "./src/env" +import { env } from "./env.js" export default { @@ -8,7 +8,7 @@ export default { dialect: "postgresql", strict: true, dbCredentials: { - url: env()?.DATABASE_URL ?? "", + url: env()?.SQL_DATABASE_URL ?? "", }, verbose: true, } satisfies Config diff --git a/packages/tools/src/env.ts b/packages/tools/src/env.ts index f277b69..0bc16dc 100644 --- a/packages/tools/src/env.ts +++ b/packages/tools/src/env.ts @@ -6,7 +6,7 @@ export function env() { return v.parse( v.object({ NODE_ENV: v.picklist(["development", "production"]), - DATABASE_URL: v.string() + SQL_DATABASE_URL: v.string() }), process.env, ) diff --git a/packages/tools/src/migrate.ts b/packages/tools/src/migrate.ts index 0170a2a..24512c3 100644 --- a/packages/tools/src/migrate.ts +++ b/packages/tools/src/migrate.ts @@ -4,7 +4,7 @@ import postgres from "postgres" import { env } from "./env.js" -const sql = postgres(env()?.DATABASE_URL ?? "", { max: 1 }) +const sql = postgres(env()?.SQL_DATABASE_URL ?? "", { max: 1 }) const db = drizzle(sql) await migrate(db, { migrationsFolder: "drizzle" }) diff --git a/packages/tools/src/seed/migration.ts b/packages/tools/src/seed/migration.ts index eb856c7..d730f09 100644 --- a/packages/tools/src/seed/migration.ts +++ b/packages/tools/src/seed/migration.ts @@ -1,14 +1,9 @@ -import { drizzle } from "drizzle-orm/postgres-js" -import postgres from "postgres" -import { env } from '../env.js' +import { dbClient } from "../dbClient.js" -const connection = postgres(env()?.DATABASE_URL ?? "", { max: 1 }) -const db = drizzle(connection) - async function migration() { try { - await db.transaction(async (tx) => { + await dbClient.transaction(async (tx) => { }) diff --git a/packages/tools/src/seed/recordRows.ts b/packages/tools/src/seed/recordRows.ts index e96e877..b8be2ed 100644 --- a/packages/tools/src/seed/recordRows.ts +++ b/packages/tools/src/seed/recordRows.ts @@ -1,17 +1,10 @@ -import { modelSchemas } from "@arrhes/metadata/models" import { and, eq } from "drizzle-orm" -import { drizzle } from "drizzle-orm/postgres-js" -import postgres from "postgres" -import { env } from '../env.js' - - -const connection = postgres(env()?.DATABASE_URL ?? "", { max: 1 }) -const db = drizzle(connection, { schema: modelSchemas }) +import { dbClient } from "../dbClient.js" async function recordRows() { try { - await db.transaction(async (tx) => { + await dbClient.transaction(async (tx) => { // recordrows diff --git a/packages/tools/src/seed/seed.ts b/packages/tools/src/seed/seed.ts index 4445059..3faa6b4 100644 --- a/packages/tools/src/seed/seed.ts +++ b/packages/tools/src/seed/seed.ts @@ -1,20 +1,14 @@ -import { DefaultBalanceSheet, defaultCompanyBalanceSheets, defaultCompanyIncomeStatements, DefaultComputation, defaultComputations, defaultJournals } from '@arrhes/metadata/components' +import { defaultJournals } from '@arrhes/metadata/components' import { models } from '@arrhes/metadata/models' import { generateId } from '@arrhes/metadata/utilities' import { randFirstName } from '@ngneat/falso' import { pbkdf2Sync, randomBytes } from "crypto" -import { drizzle } from "drizzle-orm/postgres-js" -import postgres from "postgres" -import { env } from '../env.js' - - -const connection = postgres(env()?.DATABASE_URL ?? "", { max: 1 }) -const db = drizzle(connection) +import { dbClient } from '../dbClient.js' async function seed() { try { - await db.transaction(async (tx) => { + await dbClient.transaction(async (tx) => { // User @@ -41,7 +35,7 @@ async function seed() { isArchived: false, scope: "company", siren: "123456789", - name: "Arrhes", + name: "Demo company", email: "demo@arrhes.com", createdAt: new Date().toISOString(), } @@ -63,13 +57,14 @@ async function seed() { // Years console.log("Add years") + const currentDate = new Date() const newYear: (typeof models.year.$inferInsert) = { id: generateId(), idOrganization: newOrganization.id, isClosed: false, - label: "Exercice 2024", - startingAt: new Date(2024, 0, 1, 0, 0).toISOString(), - endingAt: new Date(2024, 11, 31, 23, 59, 99).toISOString(), + label: `Exercice ${currentDate.getFullYear()}`, + startingAt: new Date(currentDate.getFullYear(), 0, 1, 0, 0).toISOString(), + endingAt: new Date(currentDate.getFullYear(), 11, 31, 23, 59, 99).toISOString(), createdAt: new Date().toISOString(), } await tx.insert(models.year).values(newYear) @@ -88,138 +83,138 @@ async function seed() { await tx.insert(models.journal).values(newJournals) - // Accounts - // console.log("Add accounts") - // let newAccounts: (typeof models.account.$inferInsert)[] = defaultCompanyAccounts.map((_account) => ({ + // // Accounts + // // console.log("Add accounts") + // // let newAccounts: (typeof models.account.$inferInsert)[] = defaultCompanyAccounts.map((_account) => ({ + // // id: generateId(), + // // idOrganization: newOrganization.id, + // // idYear: newYear.id, + // // idParent: undefined, + // // isDefault: true, + // // number: _account.number.toString(), + // // isMandatory: _account.isMandatory, + // // isClass: _account.isClass, + // // isSelectable: _account.isSelectable, + // // label: _account.label, + // // type: _account.type, + // // scope: "company", + // // createdAt: new Date().toISOString(), + // // })) + // // newAccounts = newAccounts.map((_account) => { + // // const parent = newAccounts.find((x) => x.number !== _account.number && _account.number.toString().includes(x.number.toString()) && _account.number.toString().length === x.number.toString().length + 1) + + // // return ({ + // // ..._account, + // // idParent: parent?.id + // // }) + // // }) + // // await tx.insert(models.account).values(newAccounts) + + + // // Sheets + // console.log("Add sheets") + // let newBalanceSheets: (typeof models.balanceSheet.$inferInsert & { numberParent: number | undefined, accounts: DefaultBalanceSheet["accounts"][number][] })[] = defaultCompanyBalanceSheets.map((_balanceSheet) => ({ // id: generateId(), // idOrganization: newOrganization.id, // idYear: newYear.id, - // idParent: undefined, // isDefault: true, - // number: _account.number.toString(), - // isMandatory: _account.isMandatory, - // isClass: _account.isClass, - // isSelectable: _account.isSelectable, - // label: _account.label, - // type: _account.type, - // scope: "company", + // isComputed: true, + // side: _balanceSheet.side, + // number: _balanceSheet.number.toString(), + // label: _balanceSheet.label, + // grossAmountAdded: "0", + // amortizationAmountAdded: "0", + // netAmountAdded: "0", // createdAt: new Date().toISOString(), + // numberParent: _balanceSheet.numberParent, + // accounts: _balanceSheet.accounts, // })) - // newAccounts = newAccounts.map((_account) => { - // const parent = newAccounts.find((x) => x.number !== _account.number && _account.number.toString().includes(x.number.toString()) && _account.number.toString().length === x.number.toString().length + 1) - + // // newSheets = newSheets.map((_sheet) => { + // // const parent = newSheets.find((x) => (x.number === _sheet.numberParent) && (x.side === _sheet.side)) + + // // return ({ + // // ..._sheet, + // // idParent: parent?.id + // // }) + // // }) + // await tx.insert(models.balanceSheet).values(newBalanceSheets) + + + // // Statements + // console.log("Add statements") + // let newIncomeStatements: Array< + // & typeof models.incomeStatement.$inferInsert + // & { + // numberParent: number | undefined, + // accounts: number[] + // } + // > = defaultCompanyIncomeStatements + // .map((_incomeStatement) => ({ + // id: generateId(), + // idOrganization: newOrganization.id, + // idYear: newYear.id, + // isDefault: true, + // isComputed: true, + // number: _incomeStatement.number.toString(), + // label: _incomeStatement.label, + // netAmountAdded: "0", + // createdAt: new Date().toISOString(), + // numberParent: _incomeStatement.numberParent, + // accounts: _incomeStatement.accounts + // })) + // // newStatements = newStatements.map((_statement) => { + // // const parent = newStatements.find((x) => x.number === _statement.numberParent) + + // // return ({ + // // ..._statement, + // // idParent: parent?.id + // // }) + // // }) + // await tx.insert(models.incomeStatement).values(newIncomeStatements) + + + + // // Computations + // console.log("Add computations") + // const newComputations: Array< + // & typeof models.computation.$inferInsert + // & { incomeStatements: DefaultComputation["incomeStatements"][number][] } + // > = defaultComputations.map((_computation, index) => { // return ({ - // ..._account, - // idParent: parent?.id + // id: generateId(), + // idOrganization: newOrganization.id, + // idYear: newYear.id, + // index: index, + // number: _computation.number.toString(), + // label: _computation.label, + // createdAt: new Date().toISOString(), + // incomeStatements: _computation.incomeStatements // }) // }) - // await tx.insert(models.account).values(newAccounts) + // await tx.insert(models.computation).values(newComputations) - // Sheets - console.log("Add sheets") - let newBalanceSheets: (typeof models.balanceSheet.$inferInsert & { numberParent: number | undefined, accounts: DefaultBalanceSheet["accounts"][number][] })[] = defaultCompanyBalanceSheets.map((_balanceSheet) => ({ - id: generateId(), - idOrganization: newOrganization.id, - idYear: newYear.id, - isDefault: true, - isComputed: true, - side: _balanceSheet.side, - number: _balanceSheet.number.toString(), - label: _balanceSheet.label, - grossAmountAdded: "0", - amortizationAmountAdded: "0", - netAmountAdded: "0", - createdAt: new Date().toISOString(), - numberParent: _balanceSheet.numberParent, - accounts: _balanceSheet.accounts, - })) - // newSheets = newSheets.map((_sheet) => { - // const parent = newSheets.find((x) => (x.number === _sheet.numberParent) && (x.side === _sheet.side)) - - // return ({ - // ..._sheet, - // idParent: parent?.id - // }) - // }) - await tx.insert(models.balanceSheet).values(newBalanceSheets) - - - // Statements - console.log("Add statements") - let newIncomeStatements: Array< - & typeof models.incomeStatement.$inferInsert - & { - numberParent: number | undefined, - accounts: number[] - } - > = defaultCompanyIncomeStatements - .map((_incomeStatement) => ({ - id: generateId(), - idOrganization: newOrganization.id, - idYear: newYear.id, - isDefault: true, - isComputed: true, - number: _incomeStatement.number.toString(), - label: _incomeStatement.label, - netAmountAdded: "0", - createdAt: new Date().toISOString(), - numberParent: _incomeStatement.numberParent, - accounts: _incomeStatement.accounts - })) - // newStatements = newStatements.map((_statement) => { - // const parent = newStatements.find((x) => x.number === _statement.numberParent) + // // ComputationStatements + // console.log("Add computationStatements") + // const newComputationIncomeStatements: Array<(typeof models.computationIncomeStatement.$inferInsert)> = [] + // newComputations.forEach((_computation) => { + // _computation.incomeStatements.forEach((_incomeStatement, index) => { + // const incomeStatement = newIncomeStatements.find((x) => x.number === _incomeStatement.number.toString()) - // return ({ - // ..._statement, - // idParent: parent?.id + // if (!incomeStatement) return console.log(`Statement not found ${_computation.number} ${_incomeStatement.number}`) + // newComputationIncomeStatements.push({ + // id: generateId(), + // idOrganization: newOrganization.id, + // idYear: newYear.id, + // idComputation: _computation.id, + // idIncomeStatement: incomeStatement.id, + // index: index, + // operation: _incomeStatement.operation, + // createdAt: new Date().toISOString(), + // }) // }) // }) - await tx.insert(models.incomeStatement).values(newIncomeStatements) - - - - // Computations - console.log("Add computations") - const newComputations: Array< - & typeof models.computation.$inferInsert - & { incomeStatements: DefaultComputation["incomeStatements"][number][] } - > = defaultComputations.map((_computation, index) => { - return ({ - id: generateId(), - idOrganization: newOrganization.id, - idYear: newYear.id, - index: index, - number: _computation.number.toString(), - label: _computation.label, - createdAt: new Date().toISOString(), - incomeStatements: _computation.incomeStatements - }) - }) - await tx.insert(models.computation).values(newComputations) - - - // ComputationStatements - console.log("Add computationStatements") - const newComputationIncomeStatements: Array<(typeof models.computationIncomeStatement.$inferInsert)> = [] - newComputations.forEach((_computation) => { - _computation.incomeStatements.forEach((_incomeStatement, index) => { - const incomeStatement = newIncomeStatements.find((x) => x.number === _incomeStatement.number.toString()) - - if (!incomeStatement) return console.log(`Statement not found ${_computation.number} ${_incomeStatement.number}`) - newComputationIncomeStatements.push({ - id: generateId(), - idOrganization: newOrganization.id, - idYear: newYear.id, - idComputation: _computation.id, - idIncomeStatement: incomeStatement.id, - index: index, - operation: _incomeStatement.operation, - createdAt: new Date().toISOString(), - }) - }) - }) - await tx.insert(models.computationIncomeStatement).values(newComputationIncomeStatements) + // await tx.insert(models.computationIncomeStatement).values(newComputationIncomeStatements) // Check accounts diff --git a/packages/tools/src/utilities/insertMany.ts b/packages/tools/src/utilities/insertMany.ts index fb6cf17..01c2d98 100644 --- a/packages/tools/src/utilities/insertMany.ts +++ b/packages/tools/src/utilities/insertMany.ts @@ -1,5 +1,5 @@ -import { dbClient } from "#/dbClient.js" import { PgInsertValue, PgTable, TableConfig } from "drizzle-orm/pg-core" +import { dbClient } from "../dbClient.js" // : Promise> diff --git a/packages/tools/src/utilities/insertOne.ts b/packages/tools/src/utilities/insertOne.ts index 97f495d..be2fc93 100644 --- a/packages/tools/src/utilities/insertOne.ts +++ b/packages/tools/src/utilities/insertOne.ts @@ -1,6 +1,6 @@ -import { dbClient } from "#/dbClient.js" import { TableConfig } from "drizzle-orm" import { PgInsertValue, PgTable } from "drizzle-orm/pg-core" +import { dbClient } from "../dbClient.js" export async function insertOne< diff --git a/packages/tools/tsconfig.json b/packages/tools/tsconfig.json index 21f1b21..9931605 100644 --- a/packages/tools/tsconfig.json +++ b/packages/tools/tsconfig.json @@ -2,19 +2,14 @@ "extends": "../../tsconfig.json", "compilerOptions": { "verbatimModuleSyntax": false, - "rootDir": "./src", + "rootDir": ".", "outDir": "./build", - "paths": { - "#/*": [ - "./src/*" - ] - } }, "exclude": [ "./node_modules", "./build", ], "include": [ - "./src" + "./src", ] } \ No newline at end of file diff --git a/packages/website/package.json b/packages/website/package.json index adb1dab..bf3a84b 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -1,5 +1,5 @@ { - "name": "website", + "name": "@arrhes/website", "private": true, "type": "module", "scripts": { diff --git a/packages/website/vite.config.ts b/packages/website/vite.config.ts index 1a2974f..f2bfe88 100644 --- a/packages/website/vite.config.ts +++ b/packages/website/vite.config.ts @@ -7,7 +7,7 @@ export default defineConfig({ assetsInclude: ["**/*.md", "**/*.woff2"], server: { host: true, - port: 3102, + port: 5174, watch: { usePolling: true }, From 581b511db78082b0dcf002493e9642a199b969c4 Mon Sep 17 00:00:00 2001 From: &mile Date: Mon, 22 Dec 2025 00:12:49 +0100 Subject: [PATCH 12/25] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20refactor(platform):?= =?UTF-8?q?=20consolidate=20dashboard=20into=20platform=20and=20add=20dev?= =?UTF-8?q?=20docker=20scripts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - move packages/dashboard to packages/platform and update assets, components, and routes - add development .dev files: .dev/packages/api/Dockerfile, entrypoint.sh, .dev/compose.yml, and updated start.sh - remove .dev/scripts/.api.env and .dev/scripts/.tools.env - add justfile for developer tasks - update README.md, docs/CONTRIBUTING.md, docs/DEVELOPMENT.md - update packages/api package.json and tsconfig.json --- .dev/Dockerfile | 28 ------- .dev/README.md | 6 +- .dev/compose.yml | 62 +++++++------- .dev/packages/api/Dockerfile | 41 ++++++++++ .dev/packages/api/entrypoint.sh | 71 ++++++++++++++++ .dev/scripts/.api.env | 28 ------- .dev/scripts/.tools.env | 2 - .dev/scripts/start.sh | 2 +- README.md | 76 +++++++++--------- docs/CONTRIBUTING.md | 6 +- docs/DEVELOPMENT.md | 12 +-- justfile | 10 +++ packages/api/package.json | 4 +- packages/api/tsconfig.json | 16 +++- .../.docker/.dockerignore | 0 .../.docker/Dockerfile | 0 .../.docker/nginx/default.conf | 0 .../{platform => dashboard}/eslint.config.js | 0 packages/{platform => dashboard}/package.json | 4 +- .../{platform => dashboard}/public/robots.txt | 0 .../public/sitemap.xml | 0 .../src/assets/css/fonts.css | 0 .../src/assets/css/root.css | 0 .../src/assets/css/theme.css | 0 .../fonts/SometypeMono-VariableFont_wght.ttf | Bin .../images/favicons/apple-touch-icon.png | Bin .../assets/images/favicons/favicon-96x96.png | Bin .../src/assets/images/favicons/favicon.ico | Bin .../src/assets/images/favicons/favicon.svg | 0 .../src/assets/manifest/site.webmanifest | 0 .../manifest/web-app-manifest-192x192.png | Bin .../manifest/web-app-manifest-512x512.png | Bin .../src/components/buttons/button.tsx | 0 .../src/components/buttons/buttonGhost.tsx | 0 .../components/buttons/buttonGhostContent.tsx | 0 .../src/components/buttons/buttonOutline.tsx | 0 .../buttons/buttonOutlineContent.tsx | 0 .../src/components/buttons/buttonPlain.tsx | 0 .../components/buttons/buttonPlainContent.tsx | 0 .../src/components/formats/formatBase.tsx | 0 .../src/components/formats/formatBoolean.tsx | 0 .../src/components/formats/formatDate.tsx | 0 .../src/components/formats/formatDateTime.tsx | 0 .../src/components/formats/formatError.tsx | 0 .../src/components/formats/formatFileSize.tsx | 0 .../src/components/formats/formatLink.tsx | 0 .../src/components/formats/formatNull.tsx | 0 .../src/components/formats/formatPrice.tsx | 0 .../src/components/formats/formatSelect.tsx | 0 .../src/components/formats/formatText.tsx | 0 .../src/components/forms/formControl.tsx | 0 .../src/components/forms/formError.tsx | 0 .../src/components/forms/formField.tsx | 0 .../src/components/forms/formFieldContext.tsx | 0 .../src/components/forms/formItem.tsx | 0 .../src/components/forms/formItemContext.tsx | 0 .../src/components/forms/formLabel.tsx | 0 .../src/components/forms/formRoot.tsx | 0 .../src/components/forms/formSubmit.tsx | 0 .../src/components/forms/useFormField.tsx | 0 .../src/components/inputs/inputCombobox.tsx | 0 .../inputs/inputComboboxMultiple.tsx | 0 .../components/inputs/inputDataCombobox.tsx | 0 .../src/components/inputs/inputDate.tsx | 0 .../src/components/inputs/inputDebounced.tsx | 0 .../src/components/inputs/inputDisabled.tsx | 0 .../src/components/inputs/inputFile.tsx | 0 .../src/components/inputs/inputNumber.tsx | 0 .../src/components/inputs/inputPassword.tsx | 0 .../src/components/inputs/inputRating.tsx | 0 .../src/components/inputs/inputSelect.tsx | 0 .../src/components/inputs/inputSwitch.tsx | 0 .../src/components/inputs/inputText.tsx | 0 .../src/components/inputs/inputTextArea.tsx | 0 .../src/components/inputs/inputToggle.tsx | 0 .../src/components/layouts/banner.tsx | 0 .../src/components/layouts/box.tsx | 0 .../src/components/layouts/card/card.tsx | 0 .../components/layouts/card/cardContent.tsx | 0 .../components/layouts/card/cardHeader.tsx | 0 .../src/components/layouts/card/cardRoot.tsx | 0 .../src/components/layouts/chip.tsx | 0 .../src/components/layouts/circularLoader.tsx | 0 .../src/components/layouts/command.tsx | 0 .../layouts/dataBlock/dataBlock.tsx | 0 .../layouts/dataBlock/dataBlockContent.tsx | 0 .../layouts/dataBlock/dataBlockHeader.tsx | 0 .../layouts/dataBlock/dataBlockItem.tsx | 0 .../layouts/dataBlock/dataBlockRoot.tsx | 0 .../src/components/layouts/dataTable.tsx | 0 .../src/components/layouts/dataWrapper.tsx | 0 .../layouts/dropdownMenu/dropdown.tsx | 0 .../layouts/dropdownMenu/dropdownContent.tsx | 0 .../layouts/dropdownMenu/dropdownItem.tsx | 0 .../layouts/dropdownMenu/dropdownLabel.tsx | 0 .../layouts/dropdownMenu/dropdownRoot.tsx | 0 .../dropdownMenu/dropdownSeparator.tsx | 0 .../layouts/dropdownMenu/dropdownTrigger.tsx | 0 .../src/components/layouts/logo.tsx | 0 .../src/components/layouts/page/page.tsx | 0 .../components/layouts/page/pageContent.tsx | 0 .../components/layouts/page/pageHeader.tsx | 0 .../src/components/layouts/page/pageRoot.tsx | 0 .../components/layouts/page/pageSeparator.tsx | 0 .../src/components/layouts/pageLayout.tsx | 0 .../components/layouts/section/section.tsx | 0 .../layouts/section/sectionItem.tsx | 0 .../layouts/section/sectionRoot.tsx | 0 .../src/components/layouts/subPageLayout.tsx | 0 .../src/components/layouts/table/table.tsx | 0 .../layouts/table/tableBody/tableBodyCell.tsx | 0 .../layouts/table/tableBody/tableBodyRoot.tsx | 0 .../layouts/table/tableBody/tableBodyRow.tsx | 0 .../table/tableHeader/tableHeaderCell.tsx | 0 .../table/tableHeader/tableHeaderRoot.tsx | 0 .../table/tableHeader/tableHeaderRow.tsx | 0 .../components/layouts/table/tableRoot.tsx | 0 .../src/components/layouts/title.tsx | 0 .../src/components/layouts/virtualizer.tsx | 0 .../src/components/overlays/dialog/dialog.tsx | 0 .../overlays/dialog/dialogContent.tsx | 0 .../overlays/dialog/dialogDescription.tsx | 0 .../overlays/dialog/dialogFooter.tsx | 0 .../overlays/dialog/dialogHeader.tsx | 0 .../overlays/dialog/dialogOverlay.tsx | 0 .../overlays/dialog/dialogPortal.tsx | 0 .../components/overlays/dialog/dialogRoot.tsx | 0 .../overlays/dialog/dialogTitle.tsx | 0 .../overlays/dialog/dialogTrigger.tsx | 0 .../src/components/overlays/drawer/drawer.tsx | 0 .../components/overlays/drawer/drawerBody.tsx | 0 .../overlays/drawer/drawerContent.tsx | 0 .../overlays/drawer/drawerHeader.tsx | 0 .../components/overlays/drawer/drawerRoot.tsx | 0 .../overlays/drawer/drawerTrigger.tsx | 0 .../components/overlays/popover/popover.tsx | 0 .../overlays/popover/popoverClose.tsx | 0 .../overlays/popover/popoverContent.tsx | 0 .../overlays/popover/popoverRoot.tsx | 0 .../overlays/popover/popoverTrigger.tsx | 0 .../src/components/overlays/toast/toast.tsx | 0 .../components/overlays/toast/toastAction.tsx | 0 .../components/overlays/toast/toastClose.tsx | 0 .../overlays/toast/toastContent.tsx | 0 .../overlays/toast/toastDescription.tsx | 0 .../overlays/toast/toastProvider.tsx | 0 .../components/overlays/toast/toastTitle.tsx | 0 .../overlays/toast/toastViewport.tsx | 0 .../components/overlays/tooltip/tooltip.tsx | 0 .../overlays/tooltip/tooltipContent.tsx | 0 .../overlays/tooltip/tooltipPortal.tsx | 0 .../overlays/tooltip/tooltipProvider.tsx | 0 .../overlays/tooltip/tooltipRoot.tsx | 0 .../overlays/tooltip/tooltipTrigger.tsx | 0 .../src/contexts/data/dataProvider.tsx | 0 .../src/contexts/data/queryClient.ts | 0 .../src/contexts/rootProvider.tsx | 0 .../src/contexts/router/routerProvider.tsx | 0 .../src/contexts/toasts/toastProvider.tsx | 0 .../src/contexts/toasts/useToast.ts | 0 .../src/features/authLayout.tsx | 0 .../src/features/breadcrumbs.tsx | 0 .../src/features/error/errorPage.tsx | 0 .../src/features/home/documentationBanner.tsx | 0 .../src/features/home/homePage.tsx | 0 .../src/features/home/organizationsBanner.tsx | 0 .../$idOrganization/organizationLayout.tsx | 0 .../deleteOneOrganization.tsx | 0 .../organizationSettingsLayout.tsx | 0 .../organizationSettingsPage.tsx | 0 .../deleteOneOrganizationUser.tsx | 0 .../updateOneOrganizationUser.tsx | 0 .../createOneOrganizationUser.tsx | 0 .../organizationUsersPage.tsx | 0 .../organizationUsersTable.tsx | 0 .../updateOneOrganization.tsx | 0 .../$idAttachment/attachmentData.tsx | 0 .../$idAttachment/attachmentFile.tsx | 0 .../$idAttachment/attachmentPage.tsx | 0 .../$idAttachment/deleteOneAttachment.tsx | 0 .../$idAttachment/updateOneAttachment.tsx | 0 .../$idYear/attachments/attachmentSelect.tsx | 0 .../$idYear/attachments/attachmentsPage.tsx | 0 .../$idYear/attachments/attachmentsTable.tsx | 0 .../attachments/createOneAttachment.tsx | 0 .../$idRecordRow/deleteOneRecordRow.tsx | 0 .../$idRecord/$idRecordRow/recordRowPage.tsx | 0 .../$idRecordRow/updateOneRecordRow.tsx | 0 .../records/$idRecord/createOneRecordRow.tsx | 0 .../records/$idRecord/deleteOneRecord.tsx | 0 .../records/$idRecord/duplicateOneRecord.tsx | 0 .../$idYear/records/$idRecord/recordPage.tsx | 0 .../records/$idRecord/recordRowsTable.tsx | 0 .../$idRecord/updateManyRecordRows.tsx | 0 .../records/$idRecord/updateOneRecord.tsx | 0 .../years/$idYear/records/createOneRecord.tsx | 0 .../years/$idYear/records/recordsPage.tsx | 0 .../balanceReport/balanceReportPage.tsx | 0 .../balanceReport/balanceReportTable.tsx | 0 .../balanceSheetAssetsReportItem.tsx | 0 .../balanceSheetAssetsReportRow.tsx | 0 .../balanceSheetAssetsReportTable.tsx | 0 .../balanceSheetLiabilitiesReportItem.tsx | 0 .../balanceSheetLiabilitiesReportTable.tsx | 0 .../balanceSheetLiabilityiesReportRow.tsx | 0 .../balanceSheetReportPage.tsx | 0 .../downloadBalanceSheetReport.tsx | 0 .../downloadIncomeStatementReport.tsx | 0 .../incomeStatementReportItem.tsx | 0 .../incomeStatementReportPage.tsx | 0 .../incomeStatementReportRow.tsx | 0 .../incomeStatementsReportTable.tsx | 0 .../journalReport/journalReportPage.tsx | 0 .../journalReport/journalReportTable.tsx | 0 .../reports/ledgerReport/ledgerReportPage.tsx | 0 .../ledgerReport/ledgerReportTable.tsx | 0 .../years/$idYear/reports/reportsLayout.tsx | 0 .../years/$idYear/yearLayout.tsx | 0 .../accounts/$idAccount/accountPage.tsx | 0 .../accounts/$idAccount/deleteOneAccount.tsx | 0 .../accounts/$idAccount/updateOneAccount.tsx | 0 .../yearSettings/accounts/accountItem.tsx | 0 .../yearSettings/accounts/accountSelect.tsx | 0 .../yearSettings/accounts/accountsPage.tsx | 0 .../yearSettings/accounts/accountsTable.tsx | 0 .../accounts/createOneAccount.tsx | 0 .../accounts/generateAccounts.tsx | 0 .../yearSettings/accounts/groupAccounts.tsx | 0 .../yearSettings/accounts/sortAccounts.tsx | 0 .../$idBalanceSheet/balanceSheetPage.tsx | 0 .../$idBalanceSheet/deleteOneBalanceSheet.tsx | 0 .../$idBalanceSheet/updateOneBalanceSheet.tsx | 0 .../balanceSheets/balanceSheetItem.tsx | 0 .../balanceSheets/balanceSheetRow.tsx | 0 .../balanceSheets/balanceSheetSelect.tsx | 0 .../balanceSheets/balanceSheetTable.tsx | 0 .../balanceSheets/balanceSheetsPage.tsx | 0 .../connectAccountsToBalanceSheets.tsx | 0 .../balanceSheets/createOneBalanceSheet.tsx | 0 .../balanceSheets/generateBalanceSheets.tsx | 0 .../balanceSheets/getBalanceSheetChildren.tsx | 0 .../balanceSheets/getBalanceSheetLevel.tsx | 0 .../$idYear/yearSettings/deleteOneYear.tsx | 0 .../deleteOneIncomeStatement.tsx | 0 .../incomeStatementPage.tsx | 0 .../updateOneIncomeStatement.tsx | 0 .../computationIncomeStatementPage.tsx | 0 .../deleteOneComputationIncomeStatement.tsx | 0 .../updateOneComputationIncomeStatement.tsx | 0 .../computationIncomeStatementTable.tsx | 0 .../createOneComputationIncomeStatement.tsx | 0 .../$idComputation/computationPage.tsx | 0 .../$idComputation/deleteOneComputation.tsx | 0 .../$idComputation/updateOneComputation.tsx | 0 .../computations/computationsTable.tsx | 0 .../computations/createOneComputation.tsx | 0 .../computations/generateComputations.tsx | 0 .../connectAccountsToIncomeStatements.tsx | 0 .../createOneIncomeStatement.tsx | 0 .../generateIncomeStatement.tsx | 0 .../getIncomeStatementChildren.tsx | 0 .../getIncomeStatementLevel.tsx | 0 .../incomeStatements/incomeStatementItem.tsx | 0 .../incomeStatements/incomeStatementRow.tsx | 0 .../incomeStatements/incomeStatementsPage.tsx | 0 .../incomeStatementsTable.tsx | 0 .../journals/$idJournal/deleteOneJournal.tsx | 0 .../journals/$idJournal/journalPage.tsx | 0 .../journals/$idJournal/updateOneJournal.tsx | 0 .../journals/createOneJournal.tsx | 0 .../journals/generateJournals.tsx | 0 .../yearSettings/journals/journalSelect.tsx | 0 .../yearSettings/journals/journalsPage.tsx | 0 .../$idRecordLabel/deleteOneRecordLabel.tsx | 0 .../$idRecordLabel/recordLabelPage.tsx | 0 .../$idRecordLabel/updateOneRecordLabel.tsx | 0 .../recordLabels/createOneRecordLabel.tsx | 0 .../recordLabels/recordLabelSelect.tsx | 0 .../recordLabels/recordLabelsPage.tsx | 0 .../$idYear/yearSettings/updateOneYear.tsx | 0 .../yearSettings/yearSettingsLayout.tsx | 0 .../$idYear/yearSettings/yearSettingsPage.tsx | 0 .../$idOrganization/years/createOneYear.tsx | 0 .../$idOrganization/years/yearSelect.tsx | 0 .../$idOrganization/years/yearsPage.tsx | 0 .../organizations/addNewOrganization.tsx | 0 .../organizations/organizationsPage.tsx | 0 .../src/features/rootLayout.tsx | 0 .../src/features/settings/settingsPage.tsx | 0 .../features/signIn/resetPassword.form.tsx | 0 .../src/features/signIn/signInPage.tsx | 0 .../src/features/signUp/signUpPage.tsx | 0 .../features/support/contactSupportForm.tsx | 0 .../src/features/support/supportPage.tsx | 0 .../{platform => dashboard}/src/index.html | 0 packages/{platform => dashboard}/src/root.tsx | 0 .../src/routes/catchRoute.tsx | 0 .../src/routes/platformRouter.tsx | 0 .../src/routes/platformTree.ts | 0 .../src/routes/root/auth/homeRoute.tsx | 0 .../organizationLayoutRoute.tsx | 0 .../$idOrganization/organizationPathRoute.tsx | 0 .../$idOrganization/organizationRoute.tsx | 0 .../organizationSettingsLayoutRoute.tsx | 0 .../organizationSettingsRoute.tsx | 0 .../organizationUsersLayoutRoute.tsx | 0 .../organizationUsersRoute.tsx | 0 .../$idAttachment/attachmentLayoutRoute.tsx | 0 .../$idAttachment/attachmentRoute.tsx | 0 .../attachments/attachmentsLayoutRoute.tsx | 0 .../$idYear/attachments/attachmentsRoute.tsx | 0 .../$idRecordRow/recordRowLayoutRoute.tsx | 0 .../$idRecord/$idRecordRow/recordRowRoute.tsx | 0 .../records/$idRecord/recordLayoutRoute.tsx | 0 .../$idYear/records/$idRecord/recordRoute.tsx | 0 .../$idYear/records/recordsLayoutRoute.tsx | 0 .../years/$idYear/records/recordsRoute.tsx | 0 .../$idYear/reports/balanceReportRoute.tsx | 0 .../reports/balanceSheetReportRoute.tsx | 0 .../reports/incomeStatementReportRoute.tsx | 0 .../$idYear/reports/journalReportRoute.tsx | 0 .../$idYear/reports/ledgerReportRoute.tsx | 0 .../$idYear/reports/reportsLayoutRoute.tsx | 0 .../years/$idYear/reports/reportsRoute.tsx | 0 .../years/$idYear/yearLayoutRoute.tsx | 0 .../years/$idYear/yearPathRoute.tsx | 0 .../years/$idYear/yearRoute.tsx | 0 .../$idAccount/accountLayoutRoute.tsx | 0 .../accounts/$idAccount/accountRoute.tsx | 0 .../accounts/accountsLayoutRoute.tsx | 0 .../yearSettings/accounts/accountsRoute.tsx | 0 .../balanceSheetLayoutRoute.tsx | 0 .../$idBalanceSheet/balanceSheetRoute.tsx | 0 .../balanceSheetsLayoutRoute.tsx | 0 .../balanceSheets/balanceSheetsRoute.tsx | 0 .../incomeStatementLayoutRoute.tsx | 0 .../incomeStatementRoute.tsx | 0 .../computationIncomeStatementLayoutRoute.tsx | 0 .../computationIncomeStatementRoute.tsx | 0 .../$idComputation/computationLayoutRoute.tsx | 0 .../$idComputation/computationRoute.tsx | 0 .../computations/computationsLayoutRoute.tsx | 0 .../computations/computationsRoute.tsx | 0 .../incomeStatementsLayoutRoute.tsx | 0 .../incomeStatementsRoute.tsx | 0 .../$idJournal/journalLayoutRoute.tsx | 0 .../journals/$idJournal/journalRoute.tsx | 0 .../journals/journalsLayoutRoute.tsx | 0 .../yearSettings/journals/journalsRoute.tsx | 0 .../$idRecordLabel/recordLabelLayoutRoute.tsx | 0 .../$idRecordLabel/recordLabelRoute.tsx | 0 .../recordLabels/recordLabelsLayoutRoute.tsx | 0 .../recordLabels/recordLabelsRoute.tsx | 0 .../yearSettings/yearSettingsLayoutRoute.tsx | 0 .../yearSettings/yearSettingsRoute.tsx | 0 .../years/yearsLayoutRoute.tsx | 0 .../$idOrganization/years/yearsPathRoute.tsx | 0 .../$idOrganization/years/yearsRoute.tsx | 0 .../organizationsLayoutRoute.tsx | 0 .../auth/organizations/organizationsRoute.tsx | 0 .../auth/settings/settingsLayoutRoute.tsx | 0 .../root/auth/settings/settingsRoute.tsx | 0 .../routes/root/auth/support/supportRoute.tsx | 0 .../src/routes/root/authLayoutRoute.tsx | 0 .../src/routes/root/errorRoute.tsx | 0 .../src/routes/root/public/signInRoute.tsx | 0 .../src/routes/root/public/signUpRoute.tsx | 0 .../src/routes/root/publicLayoutRoute.tsx | 0 .../src/routes/rootLayoutRoute.tsx | 0 .../src/utilities/clientError.ts | 0 .../src/utilities/cn.ts | 0 .../src/utilities/compareAmounts.ts | 0 .../src/utilities/cookies/deleteCookies.ts | 0 .../src/utilities/cookies/getCookie.ts | 0 .../utilities/cookies/getIsAuthenticated.ts | 0 .../src/utilities/cookies/getUserSession.ts | 0 .../src/utilities/debounce.ts | 0 .../src/utilities/fileToBase64.ts | 0 .../src/utilities/getOptions.ts | 0 .../src/utilities/invalidateData.ts | 0 .../src/utilities/levenshtein.ts | 0 .../src/utilities/postAPI.ts | 0 .../src/utilities/sleep.ts | 0 .../src/utilities/throttledFunction.ts | 0 .../src/utilities/toRoman.ts | 0 .../src/utilities/useDeviceDetect.ts | 0 .../src/utilities/useHTTPData.ts | 0 .../src/utilities/validate.ts | 0 .../src/utilities/variables.ts | 0 .../{platform => dashboard}/src/vite-env.d.ts | 0 .../dashboard/tsconfig.json | 50 +++++++----- .../{platform => dashboard}/vite.config.ts | 0 packages/metadata/package.json | 2 +- packages/metadata/tsconfig.json | 16 +++- packages/platform/tsconfig.json | 21 ----- packages/tools/package.json | 4 +- packages/tools/tsconfig.json | 16 +++- packages/website/package.json | 2 +- packages/website/tsconfig.json | 9 +++ 399 files changed, 300 insertions(+), 188 deletions(-) delete mode 100644 .dev/Dockerfile create mode 100644 .dev/packages/api/Dockerfile create mode 100644 .dev/packages/api/entrypoint.sh delete mode 100644 .dev/scripts/.api.env delete mode 100644 .dev/scripts/.tools.env create mode 100644 justfile rename packages/{platform => dashboard}/.docker/.dockerignore (100%) rename packages/{platform => dashboard}/.docker/Dockerfile (100%) rename packages/{platform => dashboard}/.docker/nginx/default.conf (100%) rename packages/{platform => dashboard}/eslint.config.js (100%) rename packages/{platform => dashboard}/package.json (95%) rename packages/{platform => dashboard}/public/robots.txt (100%) rename packages/{platform => dashboard}/public/sitemap.xml (100%) rename packages/{platform => dashboard}/src/assets/css/fonts.css (100%) rename packages/{platform => dashboard}/src/assets/css/root.css (100%) rename packages/{platform => dashboard}/src/assets/css/theme.css (100%) rename packages/{platform => dashboard}/src/assets/fonts/SometypeMono-VariableFont_wght.ttf (100%) rename packages/{platform => dashboard}/src/assets/images/favicons/apple-touch-icon.png (100%) rename packages/{platform => dashboard}/src/assets/images/favicons/favicon-96x96.png (100%) rename packages/{platform => dashboard}/src/assets/images/favicons/favicon.ico (100%) rename packages/{platform => dashboard}/src/assets/images/favicons/favicon.svg (100%) rename packages/{platform => dashboard}/src/assets/manifest/site.webmanifest (100%) rename packages/{platform => dashboard}/src/assets/manifest/web-app-manifest-192x192.png (100%) rename packages/{platform => dashboard}/src/assets/manifest/web-app-manifest-512x512.png (100%) rename packages/{platform => dashboard}/src/components/buttons/button.tsx (100%) rename packages/{platform => dashboard}/src/components/buttons/buttonGhost.tsx (100%) rename packages/{platform => dashboard}/src/components/buttons/buttonGhostContent.tsx (100%) rename packages/{platform => dashboard}/src/components/buttons/buttonOutline.tsx (100%) rename packages/{platform => dashboard}/src/components/buttons/buttonOutlineContent.tsx (100%) rename packages/{platform => dashboard}/src/components/buttons/buttonPlain.tsx (100%) rename packages/{platform => dashboard}/src/components/buttons/buttonPlainContent.tsx (100%) rename packages/{platform => dashboard}/src/components/formats/formatBase.tsx (100%) rename packages/{platform => dashboard}/src/components/formats/formatBoolean.tsx (100%) rename packages/{platform => dashboard}/src/components/formats/formatDate.tsx (100%) rename packages/{platform => dashboard}/src/components/formats/formatDateTime.tsx (100%) rename packages/{platform => dashboard}/src/components/formats/formatError.tsx (100%) rename packages/{platform => dashboard}/src/components/formats/formatFileSize.tsx (100%) rename packages/{platform => dashboard}/src/components/formats/formatLink.tsx (100%) rename packages/{platform => dashboard}/src/components/formats/formatNull.tsx (100%) rename packages/{platform => dashboard}/src/components/formats/formatPrice.tsx (100%) rename packages/{platform => dashboard}/src/components/formats/formatSelect.tsx (100%) rename packages/{platform => dashboard}/src/components/formats/formatText.tsx (100%) rename packages/{platform => dashboard}/src/components/forms/formControl.tsx (100%) rename packages/{platform => dashboard}/src/components/forms/formError.tsx (100%) rename packages/{platform => dashboard}/src/components/forms/formField.tsx (100%) rename packages/{platform => dashboard}/src/components/forms/formFieldContext.tsx (100%) rename packages/{platform => dashboard}/src/components/forms/formItem.tsx (100%) rename packages/{platform => dashboard}/src/components/forms/formItemContext.tsx (100%) rename packages/{platform => dashboard}/src/components/forms/formLabel.tsx (100%) rename packages/{platform => dashboard}/src/components/forms/formRoot.tsx (100%) rename packages/{platform => dashboard}/src/components/forms/formSubmit.tsx (100%) rename packages/{platform => dashboard}/src/components/forms/useFormField.tsx (100%) rename packages/{platform => dashboard}/src/components/inputs/inputCombobox.tsx (100%) rename packages/{platform => dashboard}/src/components/inputs/inputComboboxMultiple.tsx (100%) rename packages/{platform => dashboard}/src/components/inputs/inputDataCombobox.tsx (100%) rename packages/{platform => dashboard}/src/components/inputs/inputDate.tsx (100%) rename packages/{platform => dashboard}/src/components/inputs/inputDebounced.tsx (100%) rename packages/{platform => dashboard}/src/components/inputs/inputDisabled.tsx (100%) rename packages/{platform => dashboard}/src/components/inputs/inputFile.tsx (100%) rename packages/{platform => dashboard}/src/components/inputs/inputNumber.tsx (100%) rename packages/{platform => dashboard}/src/components/inputs/inputPassword.tsx (100%) rename packages/{platform => dashboard}/src/components/inputs/inputRating.tsx (100%) rename packages/{platform => dashboard}/src/components/inputs/inputSelect.tsx (100%) rename packages/{platform => dashboard}/src/components/inputs/inputSwitch.tsx (100%) rename packages/{platform => dashboard}/src/components/inputs/inputText.tsx (100%) rename packages/{platform => dashboard}/src/components/inputs/inputTextArea.tsx (100%) rename packages/{platform => dashboard}/src/components/inputs/inputToggle.tsx (100%) rename packages/{platform => dashboard}/src/components/layouts/banner.tsx (100%) rename packages/{platform => dashboard}/src/components/layouts/box.tsx (100%) rename packages/{platform => dashboard}/src/components/layouts/card/card.tsx (100%) rename packages/{platform => dashboard}/src/components/layouts/card/cardContent.tsx (100%) rename packages/{platform => dashboard}/src/components/layouts/card/cardHeader.tsx (100%) rename packages/{platform => dashboard}/src/components/layouts/card/cardRoot.tsx (100%) rename packages/{platform => dashboard}/src/components/layouts/chip.tsx (100%) rename packages/{platform => dashboard}/src/components/layouts/circularLoader.tsx (100%) rename packages/{platform => dashboard}/src/components/layouts/command.tsx (100%) rename packages/{platform => dashboard}/src/components/layouts/dataBlock/dataBlock.tsx (100%) rename packages/{platform => dashboard}/src/components/layouts/dataBlock/dataBlockContent.tsx (100%) rename packages/{platform => dashboard}/src/components/layouts/dataBlock/dataBlockHeader.tsx (100%) rename packages/{platform => dashboard}/src/components/layouts/dataBlock/dataBlockItem.tsx (100%) rename packages/{platform => dashboard}/src/components/layouts/dataBlock/dataBlockRoot.tsx (100%) rename packages/{platform => dashboard}/src/components/layouts/dataTable.tsx (100%) rename packages/{platform => dashboard}/src/components/layouts/dataWrapper.tsx (100%) rename packages/{platform => dashboard}/src/components/layouts/dropdownMenu/dropdown.tsx (100%) rename packages/{platform => dashboard}/src/components/layouts/dropdownMenu/dropdownContent.tsx (100%) rename packages/{platform => dashboard}/src/components/layouts/dropdownMenu/dropdownItem.tsx (100%) rename packages/{platform => dashboard}/src/components/layouts/dropdownMenu/dropdownLabel.tsx (100%) rename packages/{platform => dashboard}/src/components/layouts/dropdownMenu/dropdownRoot.tsx (100%) rename packages/{platform => dashboard}/src/components/layouts/dropdownMenu/dropdownSeparator.tsx (100%) rename packages/{platform => dashboard}/src/components/layouts/dropdownMenu/dropdownTrigger.tsx (100%) rename packages/{platform => dashboard}/src/components/layouts/logo.tsx (100%) rename packages/{platform => dashboard}/src/components/layouts/page/page.tsx (100%) rename packages/{platform => dashboard}/src/components/layouts/page/pageContent.tsx (100%) rename packages/{platform => dashboard}/src/components/layouts/page/pageHeader.tsx (100%) rename packages/{platform => dashboard}/src/components/layouts/page/pageRoot.tsx (100%) rename packages/{platform => dashboard}/src/components/layouts/page/pageSeparator.tsx (100%) rename packages/{platform => dashboard}/src/components/layouts/pageLayout.tsx (100%) rename packages/{platform => dashboard}/src/components/layouts/section/section.tsx (100%) rename packages/{platform => dashboard}/src/components/layouts/section/sectionItem.tsx (100%) rename packages/{platform => dashboard}/src/components/layouts/section/sectionRoot.tsx (100%) rename packages/{platform => dashboard}/src/components/layouts/subPageLayout.tsx (100%) rename packages/{platform => dashboard}/src/components/layouts/table/table.tsx (100%) rename packages/{platform => dashboard}/src/components/layouts/table/tableBody/tableBodyCell.tsx (100%) rename packages/{platform => dashboard}/src/components/layouts/table/tableBody/tableBodyRoot.tsx (100%) rename packages/{platform => dashboard}/src/components/layouts/table/tableBody/tableBodyRow.tsx (100%) rename packages/{platform => dashboard}/src/components/layouts/table/tableHeader/tableHeaderCell.tsx (100%) rename packages/{platform => dashboard}/src/components/layouts/table/tableHeader/tableHeaderRoot.tsx (100%) rename packages/{platform => dashboard}/src/components/layouts/table/tableHeader/tableHeaderRow.tsx (100%) rename packages/{platform => dashboard}/src/components/layouts/table/tableRoot.tsx (100%) rename packages/{platform => dashboard}/src/components/layouts/title.tsx (100%) rename packages/{platform => dashboard}/src/components/layouts/virtualizer.tsx (100%) rename packages/{platform => dashboard}/src/components/overlays/dialog/dialog.tsx (100%) rename packages/{platform => dashboard}/src/components/overlays/dialog/dialogContent.tsx (100%) rename packages/{platform => dashboard}/src/components/overlays/dialog/dialogDescription.tsx (100%) rename packages/{platform => dashboard}/src/components/overlays/dialog/dialogFooter.tsx (100%) rename packages/{platform => dashboard}/src/components/overlays/dialog/dialogHeader.tsx (100%) rename packages/{platform => dashboard}/src/components/overlays/dialog/dialogOverlay.tsx (100%) rename packages/{platform => dashboard}/src/components/overlays/dialog/dialogPortal.tsx (100%) rename packages/{platform => dashboard}/src/components/overlays/dialog/dialogRoot.tsx (100%) rename packages/{platform => dashboard}/src/components/overlays/dialog/dialogTitle.tsx (100%) rename packages/{platform => dashboard}/src/components/overlays/dialog/dialogTrigger.tsx (100%) rename packages/{platform => dashboard}/src/components/overlays/drawer/drawer.tsx (100%) rename packages/{platform => dashboard}/src/components/overlays/drawer/drawerBody.tsx (100%) rename packages/{platform => dashboard}/src/components/overlays/drawer/drawerContent.tsx (100%) rename packages/{platform => dashboard}/src/components/overlays/drawer/drawerHeader.tsx (100%) rename packages/{platform => dashboard}/src/components/overlays/drawer/drawerRoot.tsx (100%) rename packages/{platform => dashboard}/src/components/overlays/drawer/drawerTrigger.tsx (100%) rename packages/{platform => dashboard}/src/components/overlays/popover/popover.tsx (100%) rename packages/{platform => dashboard}/src/components/overlays/popover/popoverClose.tsx (100%) rename packages/{platform => dashboard}/src/components/overlays/popover/popoverContent.tsx (100%) rename packages/{platform => dashboard}/src/components/overlays/popover/popoverRoot.tsx (100%) rename packages/{platform => dashboard}/src/components/overlays/popover/popoverTrigger.tsx (100%) rename packages/{platform => dashboard}/src/components/overlays/toast/toast.tsx (100%) rename packages/{platform => dashboard}/src/components/overlays/toast/toastAction.tsx (100%) rename packages/{platform => dashboard}/src/components/overlays/toast/toastClose.tsx (100%) rename packages/{platform => dashboard}/src/components/overlays/toast/toastContent.tsx (100%) rename packages/{platform => dashboard}/src/components/overlays/toast/toastDescription.tsx (100%) rename packages/{platform => dashboard}/src/components/overlays/toast/toastProvider.tsx (100%) rename packages/{platform => dashboard}/src/components/overlays/toast/toastTitle.tsx (100%) rename packages/{platform => dashboard}/src/components/overlays/toast/toastViewport.tsx (100%) rename packages/{platform => dashboard}/src/components/overlays/tooltip/tooltip.tsx (100%) rename packages/{platform => dashboard}/src/components/overlays/tooltip/tooltipContent.tsx (100%) rename packages/{platform => dashboard}/src/components/overlays/tooltip/tooltipPortal.tsx (100%) rename packages/{platform => dashboard}/src/components/overlays/tooltip/tooltipProvider.tsx (100%) rename packages/{platform => dashboard}/src/components/overlays/tooltip/tooltipRoot.tsx (100%) rename packages/{platform => dashboard}/src/components/overlays/tooltip/tooltipTrigger.tsx (100%) rename packages/{platform => dashboard}/src/contexts/data/dataProvider.tsx (100%) rename packages/{platform => dashboard}/src/contexts/data/queryClient.ts (100%) rename packages/{platform => dashboard}/src/contexts/rootProvider.tsx (100%) rename packages/{platform => dashboard}/src/contexts/router/routerProvider.tsx (100%) rename packages/{platform => dashboard}/src/contexts/toasts/toastProvider.tsx (100%) rename packages/{platform => dashboard}/src/contexts/toasts/useToast.ts (100%) rename packages/{platform => dashboard}/src/features/authLayout.tsx (100%) rename packages/{platform => dashboard}/src/features/breadcrumbs.tsx (100%) rename packages/{platform => dashboard}/src/features/error/errorPage.tsx (100%) rename packages/{platform => dashboard}/src/features/home/documentationBanner.tsx (100%) rename packages/{platform => dashboard}/src/features/home/homePage.tsx (100%) rename packages/{platform => dashboard}/src/features/home/organizationsBanner.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/organizationLayout.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/organizationSettings/deleteOneOrganization.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/organizationSettings/organizationSettingsLayout.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/organizationSettings/organizationSettingsPage.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/organizationSettings/organizationUsers/$idOrganizationUser/deleteOneOrganizationUser.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/organizationSettings/organizationUsers/$idOrganizationUser/updateOneOrganizationUser.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/organizationSettings/organizationUsers/createOneOrganizationUser.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/organizationSettings/organizationUsers/organizationUsersPage.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/organizationSettings/organizationUsers/organizationUsersTable.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/organizationSettings/updateOneOrganization.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/attachmentData.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/attachmentFile.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/attachmentPage.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/deleteOneAttachment.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/updateOneAttachment.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/attachments/attachmentSelect.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/attachments/attachmentsPage.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/attachments/attachmentsTable.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/attachments/createOneAttachment.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/deleteOneRecordRow.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/recordRowPage.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/updateOneRecordRow.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/createOneRecordRow.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/deleteOneRecord.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/duplicateOneRecord.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/recordPage.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/recordRowsTable.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/updateManyRecordRows.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/updateOneRecord.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/records/createOneRecord.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/records/recordsPage.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/reports/balanceReport/balanceReportPage.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/reports/balanceReport/balanceReportTable.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetAsset/balanceSheetAssetsReportItem.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetAsset/balanceSheetAssetsReportRow.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetAsset/balanceSheetAssetsReportTable.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetLiability/balanceSheetLiabilitiesReportItem.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetLiability/balanceSheetLiabilitiesReportTable.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetLiability/balanceSheetLiabilityiesReportRow.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetReportPage.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/downloadBalanceSheetReport.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/downloadIncomeStatementReport.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/incomeStatementReportItem.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/incomeStatementReportPage.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/incomeStatementReportRow.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/incomeStatementsReportTable.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/reports/journalReport/journalReportPage.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/reports/journalReport/journalReportTable.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/reports/ledgerReport/ledgerReportPage.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/reports/ledgerReport/ledgerReportTable.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/reports/reportsLayout.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearLayout.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/accountPage.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/deleteOneAccount.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/updateOneAccount.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountItem.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountSelect.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountsPage.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountsTable.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/createOneAccount.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/generateAccounts.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/groupAccounts.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/sortAccounts.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/balanceSheetPage.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/deleteOneBalanceSheet.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/updateOneBalanceSheet.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetItem.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetRow.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetSelect.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetTable.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetsPage.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/connectAccountsToBalanceSheets.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/createOneBalanceSheet.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/generateBalanceSheets.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/getBalanceSheetChildren.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/getBalanceSheetLevel.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/deleteOneYear.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/deleteOneIncomeStatement.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/incomeStatementPage.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/updateOneIncomeStatement.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/computationIncomeStatementPage.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/deleteOneComputationIncomeStatement.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/updateOneComputationIncomeStatement.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/computationIncomeStatementTable.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/createOneComputationIncomeStatement.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationPage.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/deleteOneComputation.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/updateOneComputation.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/computationsTable.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/createOneComputation.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/generateComputations.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/connectAccountsToIncomeStatements.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/createOneIncomeStatement.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/generateIncomeStatement.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/getIncomeStatementChildren.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/getIncomeStatementLevel.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementItem.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementRow.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementsPage.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementsTable.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/deleteOneJournal.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/journalPage.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/updateOneJournal.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/createOneJournal.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/generateJournals.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/journalSelect.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/journalsPage.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/deleteOneRecordLabel.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/recordLabelPage.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/updateOneRecordLabel.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/createOneRecordLabel.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/recordLabelSelect.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/recordLabelsPage.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/updateOneYear.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/yearSettingsLayout.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/$idYear/yearSettings/yearSettingsPage.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/createOneYear.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/yearSelect.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/$idOrganization/years/yearsPage.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/addNewOrganization.tsx (100%) rename packages/{platform => dashboard}/src/features/organizations/organizationsPage.tsx (100%) rename packages/{platform => dashboard}/src/features/rootLayout.tsx (100%) rename packages/{platform => dashboard}/src/features/settings/settingsPage.tsx (100%) rename packages/{platform => dashboard}/src/features/signIn/resetPassword.form.tsx (100%) rename packages/{platform => dashboard}/src/features/signIn/signInPage.tsx (100%) rename packages/{platform => dashboard}/src/features/signUp/signUpPage.tsx (100%) rename packages/{platform => dashboard}/src/features/support/contactSupportForm.tsx (100%) rename packages/{platform => dashboard}/src/features/support/supportPage.tsx (100%) rename packages/{platform => dashboard}/src/index.html (100%) rename packages/{platform => dashboard}/src/root.tsx (100%) rename packages/{platform => dashboard}/src/routes/catchRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/platformRouter.tsx (100%) rename packages/{platform => dashboard}/src/routes/platformTree.ts (100%) rename packages/{platform => dashboard}/src/routes/root/auth/homeRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/organizationLayoutRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/organizationPathRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/organizationRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/organizationSettings/organizationSettingsLayoutRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/organizationSettings/organizationSettingsRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/organizationSettings/organizationUsers/organizationUsersLayoutRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/organizationSettings/organizationUsers/organizationUsersRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/attachmentLayoutRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/attachmentRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/attachments/attachmentsLayoutRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/attachments/attachmentsRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/recordRowLayoutRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/recordRowRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/recordLayoutRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/recordRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/records/recordsLayoutRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/records/recordsRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/reports/balanceReportRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/reports/balanceSheetReportRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/reports/incomeStatementReportRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/reports/journalReportRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/reports/ledgerReportRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/reports/reportsLayoutRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/reports/reportsRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearLayoutRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearPathRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/accountLayoutRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/accountRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountsLayoutRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountsRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/balanceSheetLayoutRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/balanceSheetRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetsLayoutRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetsRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/incomeStatementLayoutRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/incomeStatementRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/$idComputationIncomeStatement/computationIncomeStatementLayoutRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/$idComputationIncomeStatement/computationIncomeStatementRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationLayoutRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/computationsLayoutRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/computationsRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementsLayoutRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementsRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/journalLayoutRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/journalRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/journalsLayoutRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/journalsRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/recordLabelLayoutRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/recordLabelRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/recordLabelsLayoutRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/recordLabelsRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/yearSettingsLayoutRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/yearSettingsRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/yearsLayoutRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/yearsPathRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/$idOrganization/years/yearsRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/organizationsLayoutRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/organizations/organizationsRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/settings/settingsLayoutRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/settings/settingsRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/auth/support/supportRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/authLayoutRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/errorRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/public/signInRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/public/signUpRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/root/publicLayoutRoute.tsx (100%) rename packages/{platform => dashboard}/src/routes/rootLayoutRoute.tsx (100%) rename packages/{platform => dashboard}/src/utilities/clientError.ts (100%) rename packages/{platform => dashboard}/src/utilities/cn.ts (100%) rename packages/{platform => dashboard}/src/utilities/compareAmounts.ts (100%) rename packages/{platform => dashboard}/src/utilities/cookies/deleteCookies.ts (100%) rename packages/{platform => dashboard}/src/utilities/cookies/getCookie.ts (100%) rename packages/{platform => dashboard}/src/utilities/cookies/getIsAuthenticated.ts (100%) rename packages/{platform => dashboard}/src/utilities/cookies/getUserSession.ts (100%) rename packages/{platform => dashboard}/src/utilities/debounce.ts (100%) rename packages/{platform => dashboard}/src/utilities/fileToBase64.ts (100%) rename packages/{platform => dashboard}/src/utilities/getOptions.ts (100%) rename packages/{platform => dashboard}/src/utilities/invalidateData.ts (100%) rename packages/{platform => dashboard}/src/utilities/levenshtein.ts (100%) rename packages/{platform => dashboard}/src/utilities/postAPI.ts (100%) rename packages/{platform => dashboard}/src/utilities/sleep.ts (100%) rename packages/{platform => dashboard}/src/utilities/throttledFunction.ts (100%) rename packages/{platform => dashboard}/src/utilities/toRoman.ts (100%) rename packages/{platform => dashboard}/src/utilities/useDeviceDetect.ts (100%) rename packages/{platform => dashboard}/src/utilities/useHTTPData.ts (100%) rename packages/{platform => dashboard}/src/utilities/validate.ts (100%) rename packages/{platform => dashboard}/src/utilities/variables.ts (100%) rename packages/{platform => dashboard}/src/vite-env.d.ts (100%) rename tsconfig.json => packages/dashboard/tsconfig.json (55%) rename packages/{platform => dashboard}/vite.config.ts (100%) delete mode 100644 packages/platform/tsconfig.json diff --git a/.dev/Dockerfile b/.dev/Dockerfile deleted file mode 100644 index 0e8de7f..0000000 --- a/.dev/Dockerfile +++ /dev/null @@ -1,28 +0,0 @@ -ARG NODE_VERSION="latest" -ARG PNPM_VERSION="latest" - -FROM node:${NODE_VERSION}-bullseye-slim - -# Minimal runtime + tools -ENV DEBIAN_FRONTEND=noninteractive - -# Update package lists (no default packages installed here) -RUN apt-get update - -# Install pnpm using the PNPM_VERSION build arg -RUN npm install -g "pnpm@${PNPM_VERSION}" - -# Reduce image size -RUN apt-get clean -RUN rm -rf /var/lib/apt/lists/* - -# Create workspace directory and set permissions -WORKDIR /workspace -RUN mkdir -p /workspace \ - && chown -R node:node /workspace - -# Use non-root node user by default -USER node - -# Note: dependencies are installed during the bootstrap step (post-create) -# The workspace is mounted from the host at runtime. diff --git a/.dev/README.md b/.dev/README.md index 0cbb6cb..dfebc97 100644 --- a/.dev/README.md +++ b/.dev/README.md @@ -24,13 +24,13 @@ Le projet utilise désormais un fichier Compose canonique situé dans `.dev/comp .dev/scripts/start.sh ``` - - Cette commande exécute `docker compose -f .dev/compose.yml up -d` puis lance le bootstrap à l'intérieur du service `arrhes-platform`. + - Cette commande exécute `docker compose -f .dev/compose.yml up -d` puis lance le bootstrap à l'intérieur du service `arrhes-application`. - Le bootstrap crée les fichiers `.env` nécessaires si absents, construit `@arrhes/metadata`, pousse la migration de la BDD et insère les données de démonstration. 2. Ouvrir un shell dans le conteneur (si nécessaire) : ```bash - docker compose -f .dev/compose.yml exec arrhes-platform bash + docker compose -f .dev/compose.yml exec arrhes-application bash ``` @@ -53,7 +53,7 @@ Si vous modifiez le `Dockerfile` ou le compose, rebuild l'image : ```bash # Reconstruire l'image devcontainer -docker compose -f .dev/compose.yml build --no-cache arrhes-platform +docker compose -f .dev/compose.yml build --no-cache arrhes-application # Redémarrer les services docker compose -f .dev/compose.yml up -d diff --git a/.dev/compose.yml b/.dev/compose.yml index f3c0403..926cd8d 100644 --- a/.dev/compose.yml +++ b/.dev/compose.yml @@ -1,36 +1,16 @@ -services: - arrhes-platform: - container_name: arrhes-platform - build: - context: . - dockerfile: .dev/Dockerfile - args: - NODE_VERSION: "25.2.1" - PNPM_VERSION: "10.26.1" - image: arrhes-platform - volumes: - - .:/workspace:cached - command: sleep infinity - ports: - - "3000:3000" # API dev port (pnpm run dev) - - "5173:5173" # Platform dev port (Vite) - - "5174:5174" # Website dev port (Vite) - depends_on: - - postgres - - rustfs - - mailpit +# name: arrhes-application - # Base de données PostgreSQL +services: + # Database (PostgreSQL) postgres: image: postgres:18.1 - container_name: arrhes-postgres restart: unless-stopped environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: admin POSTGRES_DB: default ports: - - "5432:5432" + - "5432:5432" # Postgresql volumes: - postgres_data:/var/lib/postgresql healthcheck: @@ -42,9 +22,7 @@ services: # Object storage (RustFS) rustfs: image: rustfs/rustfs:latest - container_name: arrhes-rustfs restart: unless-stopped - command: server /data --console-address ":9001" environment: RUSTFS_CONSOLE_ENABLE: true RUSTFS_ACCESS_KEY: rustfsadmin @@ -62,10 +40,9 @@ services: timeout: 5s retries: 5 - # Serveur SMTP de test (Mailpit) + # Mail server (Mailpit) mailpit: image: axllent/mailpit:latest - container_name: arrhes-mailpit restart: unless-stopped ports: - "1025:1025" # SMTP @@ -76,11 +53,38 @@ services: timeout: 5s retries: 5 + # API (Node.js) + api: + build: + context: . + dockerfile: .dev/packages/api/Dockerfile + args: + NODE_VERSION: "25.2.1" + PNPM_VERSION: "10.26.1" + volumes: + - .:/workspace:delegated + - root_node_modules:/workspace/node_modules # hoisted workspace node_modules + - api_node_modules:/workspace/packages/api/node_modules # per-package mask if needed + - api_env:/workspace/packages/api/.env # masked .env file (will be created inside container) + - pnpm_store:/root/.pnpm-store # pnpm store kept in docker volume (optional) + working_dir: /workspace/packages/api + command: pnpm --filter="@arrhes/@arrhes/platform-api" dev + ports: + - "3000:3000" + depends_on: + - postgres + - rustfs + - mailpit + + volumes: + api_node_modules: + api_env: + root_node_modules: + pnpm_store: postgres_data: name: arrhes_postgres_data external: true rustfs_data: name: arrhes_rustfs_data external: true - diff --git a/.dev/packages/api/Dockerfile b/.dev/packages/api/Dockerfile new file mode 100644 index 0000000..56f7e15 --- /dev/null +++ b/.dev/packages/api/Dockerfile @@ -0,0 +1,41 @@ +ARG NODE_VERSION="latest" +ARG PNPM_VERSION="latest" + +FROM node:${NODE_VERSION}-bullseye-slim AS node +# Minimal runtime + tools +ENV DEBIAN_FRONTEND=noninteractive + +# Update package lists (no default packages installed here) +RUN apt-get update + +# Install pnpm using the PNPM_VERSION build arg +RUN npm install -g "pnpm@${PNPM_VERSION}" + +# Reduce image size +RUN apt-get clean +RUN rm -rf /var/lib/apt/lists/* + +# Copy the files and install dependencies +WORKDIR /workspace +COPY .dev ./.dev +COPY package.json pnpm-workspace.yaml ./ +COPY packages/metadata ./packages/metadata +COPY packages/tools ./packages/tools +COPY packages/api ./packages/api + +# Install all dependencies +RUN ls -la ./ +RUN pnpm install +# RUN ls -la node_modules/.pnpm + + +# Build the api +RUN pnpm --filter="@retrievall/platform-metadata" run build +RUN pnpm --filter="@retrievall/platform-api" run build + +USER node + +# RUN chmod +x ./.dev/packages/api/entrypoint.sh +RUN ./.dev/packages/api/entrypoint.sh + +CMD "pnpm", "--filter=@arrhes/@arrhes/platform-api", "dev" diff --git a/.dev/packages/api/entrypoint.sh b/.dev/packages/api/entrypoint.sh new file mode 100644 index 0000000..a504dbe --- /dev/null +++ b/.dev/packages/api/entrypoint.sh @@ -0,0 +1,71 @@ +#!/bin/bash +set -e + +echo "🚀 Entrypoint for arrhes-application-api" + +# Install dependencies if needed +if [ ! -d "node_modules" ]; then + echo "📦 Installing dependencies..." + pnpm install +else + echo "✅ Dependencies already installed" +fi + +# Build packages (metadata must be built before tools) +echo "🔨 Building packages..." +pnpm --filter="@arrhes/application-metadata" run build + +# Create .env files if they don't exist +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +API_ENV_SOURCE=".dev/packages/api/.env" +if [ ! -f "packages/api/.env" ]; then + if [ -f "$API_ENV_SOURCE" ]; then + echo "⚙️ Creating packages/api/.env from $API_ENV_SOURCE..." + cp "$API_ENV_SOURCE" packages/api/.env + else + echo "❌ Missing $API_ENV_SOURCE. Please create it before running this script." + exit 1 + fi +else + echo "✅ packages/api/.env already exists" +fi + +TOOLS_ENV_SOURCE=".dev/packages/tools/.env" +if [ ! -f "packages/tools/.env" ]; then + if [ -f "$TOOLS_ENV_SOURCE" ]; then + echo "⚙️ Creating packages/tools/.env from $TOOLS_ENV_SOURCE..." + cp "$TOOLS_ENV_SOURCE" packages/tools/.env + else + echo "❌ Missing $TOOLS_ENV_SOURCE. Please create it before running this script." + exit 1 + fi +else + echo "✅ packages/tools/.env already exists" +fi + +# Initialize database +echo "🗄️ Initializing database..." +pnpm --filter="@arrhes/application-tools" run push + +# Seed demo data +echo "🌱 Seeding demo data..." +pnpm --filter="@arrhes/application-tools" run seed + +# Starting +echo "🚀 Starting dev server..." +pnpm --filter="@arrhes/application-api" run dev + +echo "" +echo "✨ Setup complete!" +echo "" +echo "Services available:" +echo " - API : http://localhost:3000" +echo " - Platform : http://localhost:5173" +echo " - Rustfs Console : http://localhost:9001" +echo " - Mailpit : http://localhost:8025" +echo "" +echo "Demo credentials:" +echo " Email : demo@arrhes.com" +echo " Password : demo" +echo "" diff --git a/.dev/scripts/.api.env b/.dev/scripts/.api.env deleted file mode 100644 index c1c1db5..0000000 --- a/.dev/scripts/.api.env +++ /dev/null @@ -1,28 +0,0 @@ -# Environment -ENV="development" -VERBOSE="true" -PORT="3000" - -# CORS and Cookies -CORS_ORIGIN="http://localhost:5173" -COOKIES_DOMAIN="localhost" -COOKIES_KEY="development-secret-key-change-in-production-min-32-chars" - -# URLs -API_BASE_URL="http://localhost:3000" -PLATFORM_BASE_URL="http://localhost:5173" -WEBSITE_BASE_URL="http://localhost:5174" - -# Database (Docker Compose) -SQL_DATABASE_URL="postgres://postgres:admin@postgres:5432/default" - -# Storage (RustFS via Docker Compose) -STORAGE_ENDPOINT="http://rustfs:9000" -STORAGE_BUCKET_NAME="arrhes-files" -STORAGE_ACCESS_KEY="rustfsadmin" -STORAGE_SECRET_KEY="rustfsadmin" - -# Email Mailpit (Docker Compose) -EMAIL_ENDPOINT="mailpit:1025" -EMAIL_USER="test" -EMAIL_PASSWORD="test" diff --git a/.dev/scripts/.tools.env b/.dev/scripts/.tools.env deleted file mode 100644 index c2697d4..0000000 --- a/.dev/scripts/.tools.env +++ /dev/null @@ -1,2 +0,0 @@ -NODE_ENV="development" -SQL_DATABASE_URL="postgres://postgres:admin@postgres:5432/default" diff --git a/.dev/scripts/start.sh b/.dev/scripts/start.sh index f6b1abc..4d31713 100644 --- a/.dev/scripts/start.sh +++ b/.dev/scripts/start.sh @@ -2,7 +2,7 @@ set -euo pipefail COMPOSE_FILE=".dev/compose.yml" -SERVICE="arrhes-platform" +SERVICE="arrhes-application" echo "Remove previous containers" docker ps -a --filter="name=arrhes-" -q | xargs -r docker rm -f diff --git a/README.md b/README.md index 97bed75..7942cab 100644 --- a/README.md +++ b/README.md @@ -39,38 +39,38 @@ Arrhes est une solution complète de comptabilité conçue spécifiquement pour ## Démarrage rapide -### Option 1 : Dev Container 🚀 (Le plus simple) - -Prérequis : Docker - -Quick CLI workflow (no editor integration required): - -```bash -# Clone & enter repo -git clone https://github.com/arrhes/arrhes-platform.git -cd arrhes-platform - -# Start the devcontainer services (bind-mounts your workspace) -./devcontainer-start.sh - -# Bootstrap the workspace (run inside the devcontainer): installs deps, builds metadata, pushes schema and seeds DB -./dev/scripts/initialize.sh - -# Open an interactive shell inside the devcontainer (one-line) -docker compose -f .dev/compose.yml exec devcontainer bash - -# From that shell you can start the dev servers (they must bind to 0.0.0.0 to be reachable from the host): -# API -pnpm --filter api run dev -# Platform (Vite) - ensure host binding -pnpm --filter platform run dev -- --host -# Website (Vite) - ensure host binding -pnpm --filter website run dev -- --host -``` - -If you prefer to attach VS Code to the running container instead of using an in-container shell, install the "Dev Containers" extension and use "Dev Containers: Attach to Running Container..." then select the `devcontainer` container. Edits are persisted on the host because the service mount `.:/workspace` is a bind mount. - - +### Option 1 : Dev Container 🚀 (Le plus simple) + +Prérequis : Docker + +Quick CLI workflow (no editor integration required): + +```bash +# Clone & enter repo +git clone https://github.com/arrhes/arrhes-application.git +cd arrhes-application + +# Start the devcontainer services (bind-mounts your workspace) +./devcontainer-start.sh + +# Bootstrap the workspace (run inside the devcontainer): installs deps, builds metadata, pushes schema and seeds DB +./dev/scripts/initialize.sh + +# Open an interactive shell inside the devcontainer (one-line) +docker compose -f .dev/compose.yml exec devcontainer bash + +# From that shell you can start the dev servers (they must bind to 0.0.0.0 to be reachable from the host): +# API +pnpm --filter api run dev +# Platform (Vite) - ensure host binding +pnpm --filter platform run dev -- --host +# Website (Vite) - ensure host binding +pnpm --filter website run dev -- --host +``` + +If you prefer to attach VS Code to the running container instead of using an in-container shell, install the "Dev Containers" extension and use "Dev Containers: Attach to Running Container..." then select the `devcontainer` container. Edits are persisted on the host because the service mount `.:/workspace` is a bind mount. + + Tout est configuré automatiquement : Node.js, pnpm, PostgreSQL, RustFS, MailHog, et les données de démonstration ! @@ -80,8 +80,8 @@ Prérequis : Node.js 24.5+, pnpm, Docker ```bash # Cloner le repository -git clone https://github.com/arrhes/arrhes-platform.git -cd arrhes-platform +git clone https://github.com/arrhes/arrhes-application.git +cd arrhes-application # Installer les dépendances pnpm install @@ -111,8 +111,8 @@ Prérequis : Node.js 24.5+, pnpm, PostgreSQL ```bash # Cloner le repository -git clone https://github.com/arrhes/arrhes-platform.git -cd arrhes-platform +git clone https://github.com/arrhes/arrhes-application.git +cd arrhes-application # Installer les dépendances pnpm install @@ -163,8 +163,8 @@ Ce projet est sous licence MIT. Voir le fichier [LICENSE](LICENSE) pour plus de ## Support -- 🐛 [Signaler un bug](https://github.com/arrhes/arrhes-platform/issues) -- 💡 [Proposer une fonctionnalité](https://github.com/arrhes/arrhes-platform/issues) +- 🐛 [Signaler un bug](https://github.com/arrhes/arrhes-application/issues) +- 💡 [Proposer une fonctionnalité](https://github.com/arrhes/arrhes-application/issues) - 📧 Contact : contact@arrhes.com --- diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index 400b8e3..6a6ccfd 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -62,7 +62,7 @@ Avant de commencer à contribuer, configurez votre environnement de développeme 3. **Ajouter le repository principal comme remote** ```bash - git remote add upstream https://github.com/arrhes/arrhes-platform.git + git remote add upstream https://github.com/arrhes/arrhes-application.git ``` 4. **Choisir votre méthode de développement** @@ -538,8 +538,8 @@ Plusieurs utilisateurs ont demandé cette fonctionnalité pour faire des analyse - [Documentation d'architecture](ARCHITECTURE.md) - [Guide de développement](DEVELOPMENT.md) - [Configuration](CONFIGURATION.md) -- [Issues GitHub](https://github.com/arrhes/arrhes-platform/issues) -- [Discussions GitHub](https://github.com/arrhes/arrhes-platform/discussions) +- [Issues GitHub](https://github.com/arrhes/arrhes-application/issues) +- [Discussions GitHub](https://github.com/arrhes/arrhes-application/discussions) ## Questions ? diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md index 93ba59c..5d1a0c1 100644 --- a/docs/DEVELOPMENT.md +++ b/docs/DEVELOPMENT.md @@ -154,8 +154,8 @@ C'est tout ! PostgreSQL, RustFS et MailHog seront lancés automatiquement dans d **Étape 1 : Cloner le repository** ```bash -git clone https://github.com/arrhes/arrhes-platform.git -cd arrhes-platform +git clone https://github.com/arrhes/arrhes-application.git +cd arrhes-application ``` **Étape 2 : Ouvrir dans VS Code/Cursor** @@ -216,8 +216,8 @@ C'est tout ! Vous êtes prêt à développer. 🎉 **Étape 1 : Cloner le repository** ```bash -git clone https://github.com/arrhes/arrhes-platform.git -cd arrhes-platform +git clone https://github.com/arrhes/arrhes-application.git +cd arrhes-application ``` **Étape 2 : Installer les dépendances** @@ -243,8 +243,8 @@ Vous devriez voir tous les packages workspace listés. **Étape 1 : Cloner le repository** ```bash -git clone https://github.com/arrhes/arrhes-platform.git -cd arrhes-platform +git clone https://github.com/arrhes/arrhes-application.git +cd arrhes-application ``` **Étape 2 : Installer les dépendances** diff --git a/justfile b/justfile new file mode 100644 index 0000000..f2b0e4c --- /dev/null +++ b/justfile @@ -0,0 +1,10 @@ +set shell := ["bash", "-cu"] +COMPOSE_FILE := ".dev/compose.yml" +PROJECT := "arrhes-application" + +up: + export HOST_UID=$(id -u) HOST_GID=$(id -g) && \ + docker compose --project-directory="." --file="{{COMPOSE_FILE}}" --project-name="{{PROJECT}}" up -d --build + +down: + docker compose --project-directory="." --file="{{COMPOSE_FILE}}" --project-name="{{PROJECT}}" down diff --git a/packages/api/package.json b/packages/api/package.json index 701300f..d779f43 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -1,5 +1,5 @@ { - "name": "@arrhes/api", + "name": "@arrhes/application-api", "type": "module", "private": false, "scripts": { @@ -14,7 +14,7 @@ "typescript": "5.9.3" }, "dependencies": { - "@arrhes/metadata": "workspace:*", + "@arrhes/application-metadata": "workspace:*", "@aws-sdk/client-s3": "3.940.0", "@aws-sdk/s3-request-presigner": "3.940.0", "drizzle-orm": "0.44.7", diff --git a/packages/api/tsconfig.json b/packages/api/tsconfig.json index 7f744e1..89970cf 100644 --- a/packages/api/tsconfig.json +++ b/packages/api/tsconfig.json @@ -1,6 +1,20 @@ { - "extends": "../../tsconfig.json", "compilerOptions": { + "jsx": "react-jsx", + "target": "ESNext", + "noImplicitAny": true, + "skipLibCheck": true, + "strict": true, + "strictNullChecks": true, + "forceConsistentCasingInFileNames": true, + "esModuleInterop": true, + "module": "NodeNext", + "moduleResolution": "NodeNext", + "resolveJsonModule": true, + "isolatedModules": true, + "declaration": true, + "declarationMap": true, + "sourceMap": true, "jsxImportSource": "hono/jsx", "rootDir": "./src", "outDir": "./build", diff --git a/packages/platform/.docker/.dockerignore b/packages/dashboard/.docker/.dockerignore similarity index 100% rename from packages/platform/.docker/.dockerignore rename to packages/dashboard/.docker/.dockerignore diff --git a/packages/platform/.docker/Dockerfile b/packages/dashboard/.docker/Dockerfile similarity index 100% rename from packages/platform/.docker/Dockerfile rename to packages/dashboard/.docker/Dockerfile diff --git a/packages/platform/.docker/nginx/default.conf b/packages/dashboard/.docker/nginx/default.conf similarity index 100% rename from packages/platform/.docker/nginx/default.conf rename to packages/dashboard/.docker/nginx/default.conf diff --git a/packages/platform/eslint.config.js b/packages/dashboard/eslint.config.js similarity index 100% rename from packages/platform/eslint.config.js rename to packages/dashboard/eslint.config.js diff --git a/packages/platform/package.json b/packages/dashboard/package.json similarity index 95% rename from packages/platform/package.json rename to packages/dashboard/package.json index 2a4a251..1a88874 100644 --- a/packages/platform/package.json +++ b/packages/dashboard/package.json @@ -1,5 +1,5 @@ { - "name": "@arrhes/platform", + "name": "@arrhes/application-dashboard", "type": "module", "private": false, "scripts": { @@ -26,7 +26,7 @@ "vite": "7.2.4" }, "dependencies": { - "@arrhes/metadata": "workspace:*", + "@arrhes/application-metadata": "workspace:*", "@hookform/resolvers": "5.2.2", "@radix-ui/react-dialog": "1.1.15", "@radix-ui/react-dropdown-menu": "2.1.16", diff --git a/packages/platform/public/robots.txt b/packages/dashboard/public/robots.txt similarity index 100% rename from packages/platform/public/robots.txt rename to packages/dashboard/public/robots.txt diff --git a/packages/platform/public/sitemap.xml b/packages/dashboard/public/sitemap.xml similarity index 100% rename from packages/platform/public/sitemap.xml rename to packages/dashboard/public/sitemap.xml diff --git a/packages/platform/src/assets/css/fonts.css b/packages/dashboard/src/assets/css/fonts.css similarity index 100% rename from packages/platform/src/assets/css/fonts.css rename to packages/dashboard/src/assets/css/fonts.css diff --git a/packages/platform/src/assets/css/root.css b/packages/dashboard/src/assets/css/root.css similarity index 100% rename from packages/platform/src/assets/css/root.css rename to packages/dashboard/src/assets/css/root.css diff --git a/packages/platform/src/assets/css/theme.css b/packages/dashboard/src/assets/css/theme.css similarity index 100% rename from packages/platform/src/assets/css/theme.css rename to packages/dashboard/src/assets/css/theme.css diff --git a/packages/platform/src/assets/fonts/SometypeMono-VariableFont_wght.ttf b/packages/dashboard/src/assets/fonts/SometypeMono-VariableFont_wght.ttf similarity index 100% rename from packages/platform/src/assets/fonts/SometypeMono-VariableFont_wght.ttf rename to packages/dashboard/src/assets/fonts/SometypeMono-VariableFont_wght.ttf diff --git a/packages/platform/src/assets/images/favicons/apple-touch-icon.png b/packages/dashboard/src/assets/images/favicons/apple-touch-icon.png similarity index 100% rename from packages/platform/src/assets/images/favicons/apple-touch-icon.png rename to packages/dashboard/src/assets/images/favicons/apple-touch-icon.png diff --git a/packages/platform/src/assets/images/favicons/favicon-96x96.png b/packages/dashboard/src/assets/images/favicons/favicon-96x96.png similarity index 100% rename from packages/platform/src/assets/images/favicons/favicon-96x96.png rename to packages/dashboard/src/assets/images/favicons/favicon-96x96.png diff --git a/packages/platform/src/assets/images/favicons/favicon.ico b/packages/dashboard/src/assets/images/favicons/favicon.ico similarity index 100% rename from packages/platform/src/assets/images/favicons/favicon.ico rename to packages/dashboard/src/assets/images/favicons/favicon.ico diff --git a/packages/platform/src/assets/images/favicons/favicon.svg b/packages/dashboard/src/assets/images/favicons/favicon.svg similarity index 100% rename from packages/platform/src/assets/images/favicons/favicon.svg rename to packages/dashboard/src/assets/images/favicons/favicon.svg diff --git a/packages/platform/src/assets/manifest/site.webmanifest b/packages/dashboard/src/assets/manifest/site.webmanifest similarity index 100% rename from packages/platform/src/assets/manifest/site.webmanifest rename to packages/dashboard/src/assets/manifest/site.webmanifest diff --git a/packages/platform/src/assets/manifest/web-app-manifest-192x192.png b/packages/dashboard/src/assets/manifest/web-app-manifest-192x192.png similarity index 100% rename from packages/platform/src/assets/manifest/web-app-manifest-192x192.png rename to packages/dashboard/src/assets/manifest/web-app-manifest-192x192.png diff --git a/packages/platform/src/assets/manifest/web-app-manifest-512x512.png b/packages/dashboard/src/assets/manifest/web-app-manifest-512x512.png similarity index 100% rename from packages/platform/src/assets/manifest/web-app-manifest-512x512.png rename to packages/dashboard/src/assets/manifest/web-app-manifest-512x512.png diff --git a/packages/platform/src/components/buttons/button.tsx b/packages/dashboard/src/components/buttons/button.tsx similarity index 100% rename from packages/platform/src/components/buttons/button.tsx rename to packages/dashboard/src/components/buttons/button.tsx diff --git a/packages/platform/src/components/buttons/buttonGhost.tsx b/packages/dashboard/src/components/buttons/buttonGhost.tsx similarity index 100% rename from packages/platform/src/components/buttons/buttonGhost.tsx rename to packages/dashboard/src/components/buttons/buttonGhost.tsx diff --git a/packages/platform/src/components/buttons/buttonGhostContent.tsx b/packages/dashboard/src/components/buttons/buttonGhostContent.tsx similarity index 100% rename from packages/platform/src/components/buttons/buttonGhostContent.tsx rename to packages/dashboard/src/components/buttons/buttonGhostContent.tsx diff --git a/packages/platform/src/components/buttons/buttonOutline.tsx b/packages/dashboard/src/components/buttons/buttonOutline.tsx similarity index 100% rename from packages/platform/src/components/buttons/buttonOutline.tsx rename to packages/dashboard/src/components/buttons/buttonOutline.tsx diff --git a/packages/platform/src/components/buttons/buttonOutlineContent.tsx b/packages/dashboard/src/components/buttons/buttonOutlineContent.tsx similarity index 100% rename from packages/platform/src/components/buttons/buttonOutlineContent.tsx rename to packages/dashboard/src/components/buttons/buttonOutlineContent.tsx diff --git a/packages/platform/src/components/buttons/buttonPlain.tsx b/packages/dashboard/src/components/buttons/buttonPlain.tsx similarity index 100% rename from packages/platform/src/components/buttons/buttonPlain.tsx rename to packages/dashboard/src/components/buttons/buttonPlain.tsx diff --git a/packages/platform/src/components/buttons/buttonPlainContent.tsx b/packages/dashboard/src/components/buttons/buttonPlainContent.tsx similarity index 100% rename from packages/platform/src/components/buttons/buttonPlainContent.tsx rename to packages/dashboard/src/components/buttons/buttonPlainContent.tsx diff --git a/packages/platform/src/components/formats/formatBase.tsx b/packages/dashboard/src/components/formats/formatBase.tsx similarity index 100% rename from packages/platform/src/components/formats/formatBase.tsx rename to packages/dashboard/src/components/formats/formatBase.tsx diff --git a/packages/platform/src/components/formats/formatBoolean.tsx b/packages/dashboard/src/components/formats/formatBoolean.tsx similarity index 100% rename from packages/platform/src/components/formats/formatBoolean.tsx rename to packages/dashboard/src/components/formats/formatBoolean.tsx diff --git a/packages/platform/src/components/formats/formatDate.tsx b/packages/dashboard/src/components/formats/formatDate.tsx similarity index 100% rename from packages/platform/src/components/formats/formatDate.tsx rename to packages/dashboard/src/components/formats/formatDate.tsx diff --git a/packages/platform/src/components/formats/formatDateTime.tsx b/packages/dashboard/src/components/formats/formatDateTime.tsx similarity index 100% rename from packages/platform/src/components/formats/formatDateTime.tsx rename to packages/dashboard/src/components/formats/formatDateTime.tsx diff --git a/packages/platform/src/components/formats/formatError.tsx b/packages/dashboard/src/components/formats/formatError.tsx similarity index 100% rename from packages/platform/src/components/formats/formatError.tsx rename to packages/dashboard/src/components/formats/formatError.tsx diff --git a/packages/platform/src/components/formats/formatFileSize.tsx b/packages/dashboard/src/components/formats/formatFileSize.tsx similarity index 100% rename from packages/platform/src/components/formats/formatFileSize.tsx rename to packages/dashboard/src/components/formats/formatFileSize.tsx diff --git a/packages/platform/src/components/formats/formatLink.tsx b/packages/dashboard/src/components/formats/formatLink.tsx similarity index 100% rename from packages/platform/src/components/formats/formatLink.tsx rename to packages/dashboard/src/components/formats/formatLink.tsx diff --git a/packages/platform/src/components/formats/formatNull.tsx b/packages/dashboard/src/components/formats/formatNull.tsx similarity index 100% rename from packages/platform/src/components/formats/formatNull.tsx rename to packages/dashboard/src/components/formats/formatNull.tsx diff --git a/packages/platform/src/components/formats/formatPrice.tsx b/packages/dashboard/src/components/formats/formatPrice.tsx similarity index 100% rename from packages/platform/src/components/formats/formatPrice.tsx rename to packages/dashboard/src/components/formats/formatPrice.tsx diff --git a/packages/platform/src/components/formats/formatSelect.tsx b/packages/dashboard/src/components/formats/formatSelect.tsx similarity index 100% rename from packages/platform/src/components/formats/formatSelect.tsx rename to packages/dashboard/src/components/formats/formatSelect.tsx diff --git a/packages/platform/src/components/formats/formatText.tsx b/packages/dashboard/src/components/formats/formatText.tsx similarity index 100% rename from packages/platform/src/components/formats/formatText.tsx rename to packages/dashboard/src/components/formats/formatText.tsx diff --git a/packages/platform/src/components/forms/formControl.tsx b/packages/dashboard/src/components/forms/formControl.tsx similarity index 100% rename from packages/platform/src/components/forms/formControl.tsx rename to packages/dashboard/src/components/forms/formControl.tsx diff --git a/packages/platform/src/components/forms/formError.tsx b/packages/dashboard/src/components/forms/formError.tsx similarity index 100% rename from packages/platform/src/components/forms/formError.tsx rename to packages/dashboard/src/components/forms/formError.tsx diff --git a/packages/platform/src/components/forms/formField.tsx b/packages/dashboard/src/components/forms/formField.tsx similarity index 100% rename from packages/platform/src/components/forms/formField.tsx rename to packages/dashboard/src/components/forms/formField.tsx diff --git a/packages/platform/src/components/forms/formFieldContext.tsx b/packages/dashboard/src/components/forms/formFieldContext.tsx similarity index 100% rename from packages/platform/src/components/forms/formFieldContext.tsx rename to packages/dashboard/src/components/forms/formFieldContext.tsx diff --git a/packages/platform/src/components/forms/formItem.tsx b/packages/dashboard/src/components/forms/formItem.tsx similarity index 100% rename from packages/platform/src/components/forms/formItem.tsx rename to packages/dashboard/src/components/forms/formItem.tsx diff --git a/packages/platform/src/components/forms/formItemContext.tsx b/packages/dashboard/src/components/forms/formItemContext.tsx similarity index 100% rename from packages/platform/src/components/forms/formItemContext.tsx rename to packages/dashboard/src/components/forms/formItemContext.tsx diff --git a/packages/platform/src/components/forms/formLabel.tsx b/packages/dashboard/src/components/forms/formLabel.tsx similarity index 100% rename from packages/platform/src/components/forms/formLabel.tsx rename to packages/dashboard/src/components/forms/formLabel.tsx diff --git a/packages/platform/src/components/forms/formRoot.tsx b/packages/dashboard/src/components/forms/formRoot.tsx similarity index 100% rename from packages/platform/src/components/forms/formRoot.tsx rename to packages/dashboard/src/components/forms/formRoot.tsx diff --git a/packages/platform/src/components/forms/formSubmit.tsx b/packages/dashboard/src/components/forms/formSubmit.tsx similarity index 100% rename from packages/platform/src/components/forms/formSubmit.tsx rename to packages/dashboard/src/components/forms/formSubmit.tsx diff --git a/packages/platform/src/components/forms/useFormField.tsx b/packages/dashboard/src/components/forms/useFormField.tsx similarity index 100% rename from packages/platform/src/components/forms/useFormField.tsx rename to packages/dashboard/src/components/forms/useFormField.tsx diff --git a/packages/platform/src/components/inputs/inputCombobox.tsx b/packages/dashboard/src/components/inputs/inputCombobox.tsx similarity index 100% rename from packages/platform/src/components/inputs/inputCombobox.tsx rename to packages/dashboard/src/components/inputs/inputCombobox.tsx diff --git a/packages/platform/src/components/inputs/inputComboboxMultiple.tsx b/packages/dashboard/src/components/inputs/inputComboboxMultiple.tsx similarity index 100% rename from packages/platform/src/components/inputs/inputComboboxMultiple.tsx rename to packages/dashboard/src/components/inputs/inputComboboxMultiple.tsx diff --git a/packages/platform/src/components/inputs/inputDataCombobox.tsx b/packages/dashboard/src/components/inputs/inputDataCombobox.tsx similarity index 100% rename from packages/platform/src/components/inputs/inputDataCombobox.tsx rename to packages/dashboard/src/components/inputs/inputDataCombobox.tsx diff --git a/packages/platform/src/components/inputs/inputDate.tsx b/packages/dashboard/src/components/inputs/inputDate.tsx similarity index 100% rename from packages/platform/src/components/inputs/inputDate.tsx rename to packages/dashboard/src/components/inputs/inputDate.tsx diff --git a/packages/platform/src/components/inputs/inputDebounced.tsx b/packages/dashboard/src/components/inputs/inputDebounced.tsx similarity index 100% rename from packages/platform/src/components/inputs/inputDebounced.tsx rename to packages/dashboard/src/components/inputs/inputDebounced.tsx diff --git a/packages/platform/src/components/inputs/inputDisabled.tsx b/packages/dashboard/src/components/inputs/inputDisabled.tsx similarity index 100% rename from packages/platform/src/components/inputs/inputDisabled.tsx rename to packages/dashboard/src/components/inputs/inputDisabled.tsx diff --git a/packages/platform/src/components/inputs/inputFile.tsx b/packages/dashboard/src/components/inputs/inputFile.tsx similarity index 100% rename from packages/platform/src/components/inputs/inputFile.tsx rename to packages/dashboard/src/components/inputs/inputFile.tsx diff --git a/packages/platform/src/components/inputs/inputNumber.tsx b/packages/dashboard/src/components/inputs/inputNumber.tsx similarity index 100% rename from packages/platform/src/components/inputs/inputNumber.tsx rename to packages/dashboard/src/components/inputs/inputNumber.tsx diff --git a/packages/platform/src/components/inputs/inputPassword.tsx b/packages/dashboard/src/components/inputs/inputPassword.tsx similarity index 100% rename from packages/platform/src/components/inputs/inputPassword.tsx rename to packages/dashboard/src/components/inputs/inputPassword.tsx diff --git a/packages/platform/src/components/inputs/inputRating.tsx b/packages/dashboard/src/components/inputs/inputRating.tsx similarity index 100% rename from packages/platform/src/components/inputs/inputRating.tsx rename to packages/dashboard/src/components/inputs/inputRating.tsx diff --git a/packages/platform/src/components/inputs/inputSelect.tsx b/packages/dashboard/src/components/inputs/inputSelect.tsx similarity index 100% rename from packages/platform/src/components/inputs/inputSelect.tsx rename to packages/dashboard/src/components/inputs/inputSelect.tsx diff --git a/packages/platform/src/components/inputs/inputSwitch.tsx b/packages/dashboard/src/components/inputs/inputSwitch.tsx similarity index 100% rename from packages/platform/src/components/inputs/inputSwitch.tsx rename to packages/dashboard/src/components/inputs/inputSwitch.tsx diff --git a/packages/platform/src/components/inputs/inputText.tsx b/packages/dashboard/src/components/inputs/inputText.tsx similarity index 100% rename from packages/platform/src/components/inputs/inputText.tsx rename to packages/dashboard/src/components/inputs/inputText.tsx diff --git a/packages/platform/src/components/inputs/inputTextArea.tsx b/packages/dashboard/src/components/inputs/inputTextArea.tsx similarity index 100% rename from packages/platform/src/components/inputs/inputTextArea.tsx rename to packages/dashboard/src/components/inputs/inputTextArea.tsx diff --git a/packages/platform/src/components/inputs/inputToggle.tsx b/packages/dashboard/src/components/inputs/inputToggle.tsx similarity index 100% rename from packages/platform/src/components/inputs/inputToggle.tsx rename to packages/dashboard/src/components/inputs/inputToggle.tsx diff --git a/packages/platform/src/components/layouts/banner.tsx b/packages/dashboard/src/components/layouts/banner.tsx similarity index 100% rename from packages/platform/src/components/layouts/banner.tsx rename to packages/dashboard/src/components/layouts/banner.tsx diff --git a/packages/platform/src/components/layouts/box.tsx b/packages/dashboard/src/components/layouts/box.tsx similarity index 100% rename from packages/platform/src/components/layouts/box.tsx rename to packages/dashboard/src/components/layouts/box.tsx diff --git a/packages/platform/src/components/layouts/card/card.tsx b/packages/dashboard/src/components/layouts/card/card.tsx similarity index 100% rename from packages/platform/src/components/layouts/card/card.tsx rename to packages/dashboard/src/components/layouts/card/card.tsx diff --git a/packages/platform/src/components/layouts/card/cardContent.tsx b/packages/dashboard/src/components/layouts/card/cardContent.tsx similarity index 100% rename from packages/platform/src/components/layouts/card/cardContent.tsx rename to packages/dashboard/src/components/layouts/card/cardContent.tsx diff --git a/packages/platform/src/components/layouts/card/cardHeader.tsx b/packages/dashboard/src/components/layouts/card/cardHeader.tsx similarity index 100% rename from packages/platform/src/components/layouts/card/cardHeader.tsx rename to packages/dashboard/src/components/layouts/card/cardHeader.tsx diff --git a/packages/platform/src/components/layouts/card/cardRoot.tsx b/packages/dashboard/src/components/layouts/card/cardRoot.tsx similarity index 100% rename from packages/platform/src/components/layouts/card/cardRoot.tsx rename to packages/dashboard/src/components/layouts/card/cardRoot.tsx diff --git a/packages/platform/src/components/layouts/chip.tsx b/packages/dashboard/src/components/layouts/chip.tsx similarity index 100% rename from packages/platform/src/components/layouts/chip.tsx rename to packages/dashboard/src/components/layouts/chip.tsx diff --git a/packages/platform/src/components/layouts/circularLoader.tsx b/packages/dashboard/src/components/layouts/circularLoader.tsx similarity index 100% rename from packages/platform/src/components/layouts/circularLoader.tsx rename to packages/dashboard/src/components/layouts/circularLoader.tsx diff --git a/packages/platform/src/components/layouts/command.tsx b/packages/dashboard/src/components/layouts/command.tsx similarity index 100% rename from packages/platform/src/components/layouts/command.tsx rename to packages/dashboard/src/components/layouts/command.tsx diff --git a/packages/platform/src/components/layouts/dataBlock/dataBlock.tsx b/packages/dashboard/src/components/layouts/dataBlock/dataBlock.tsx similarity index 100% rename from packages/platform/src/components/layouts/dataBlock/dataBlock.tsx rename to packages/dashboard/src/components/layouts/dataBlock/dataBlock.tsx diff --git a/packages/platform/src/components/layouts/dataBlock/dataBlockContent.tsx b/packages/dashboard/src/components/layouts/dataBlock/dataBlockContent.tsx similarity index 100% rename from packages/platform/src/components/layouts/dataBlock/dataBlockContent.tsx rename to packages/dashboard/src/components/layouts/dataBlock/dataBlockContent.tsx diff --git a/packages/platform/src/components/layouts/dataBlock/dataBlockHeader.tsx b/packages/dashboard/src/components/layouts/dataBlock/dataBlockHeader.tsx similarity index 100% rename from packages/platform/src/components/layouts/dataBlock/dataBlockHeader.tsx rename to packages/dashboard/src/components/layouts/dataBlock/dataBlockHeader.tsx diff --git a/packages/platform/src/components/layouts/dataBlock/dataBlockItem.tsx b/packages/dashboard/src/components/layouts/dataBlock/dataBlockItem.tsx similarity index 100% rename from packages/platform/src/components/layouts/dataBlock/dataBlockItem.tsx rename to packages/dashboard/src/components/layouts/dataBlock/dataBlockItem.tsx diff --git a/packages/platform/src/components/layouts/dataBlock/dataBlockRoot.tsx b/packages/dashboard/src/components/layouts/dataBlock/dataBlockRoot.tsx similarity index 100% rename from packages/platform/src/components/layouts/dataBlock/dataBlockRoot.tsx rename to packages/dashboard/src/components/layouts/dataBlock/dataBlockRoot.tsx diff --git a/packages/platform/src/components/layouts/dataTable.tsx b/packages/dashboard/src/components/layouts/dataTable.tsx similarity index 100% rename from packages/platform/src/components/layouts/dataTable.tsx rename to packages/dashboard/src/components/layouts/dataTable.tsx diff --git a/packages/platform/src/components/layouts/dataWrapper.tsx b/packages/dashboard/src/components/layouts/dataWrapper.tsx similarity index 100% rename from packages/platform/src/components/layouts/dataWrapper.tsx rename to packages/dashboard/src/components/layouts/dataWrapper.tsx diff --git a/packages/platform/src/components/layouts/dropdownMenu/dropdown.tsx b/packages/dashboard/src/components/layouts/dropdownMenu/dropdown.tsx similarity index 100% rename from packages/platform/src/components/layouts/dropdownMenu/dropdown.tsx rename to packages/dashboard/src/components/layouts/dropdownMenu/dropdown.tsx diff --git a/packages/platform/src/components/layouts/dropdownMenu/dropdownContent.tsx b/packages/dashboard/src/components/layouts/dropdownMenu/dropdownContent.tsx similarity index 100% rename from packages/platform/src/components/layouts/dropdownMenu/dropdownContent.tsx rename to packages/dashboard/src/components/layouts/dropdownMenu/dropdownContent.tsx diff --git a/packages/platform/src/components/layouts/dropdownMenu/dropdownItem.tsx b/packages/dashboard/src/components/layouts/dropdownMenu/dropdownItem.tsx similarity index 100% rename from packages/platform/src/components/layouts/dropdownMenu/dropdownItem.tsx rename to packages/dashboard/src/components/layouts/dropdownMenu/dropdownItem.tsx diff --git a/packages/platform/src/components/layouts/dropdownMenu/dropdownLabel.tsx b/packages/dashboard/src/components/layouts/dropdownMenu/dropdownLabel.tsx similarity index 100% rename from packages/platform/src/components/layouts/dropdownMenu/dropdownLabel.tsx rename to packages/dashboard/src/components/layouts/dropdownMenu/dropdownLabel.tsx diff --git a/packages/platform/src/components/layouts/dropdownMenu/dropdownRoot.tsx b/packages/dashboard/src/components/layouts/dropdownMenu/dropdownRoot.tsx similarity index 100% rename from packages/platform/src/components/layouts/dropdownMenu/dropdownRoot.tsx rename to packages/dashboard/src/components/layouts/dropdownMenu/dropdownRoot.tsx diff --git a/packages/platform/src/components/layouts/dropdownMenu/dropdownSeparator.tsx b/packages/dashboard/src/components/layouts/dropdownMenu/dropdownSeparator.tsx similarity index 100% rename from packages/platform/src/components/layouts/dropdownMenu/dropdownSeparator.tsx rename to packages/dashboard/src/components/layouts/dropdownMenu/dropdownSeparator.tsx diff --git a/packages/platform/src/components/layouts/dropdownMenu/dropdownTrigger.tsx b/packages/dashboard/src/components/layouts/dropdownMenu/dropdownTrigger.tsx similarity index 100% rename from packages/platform/src/components/layouts/dropdownMenu/dropdownTrigger.tsx rename to packages/dashboard/src/components/layouts/dropdownMenu/dropdownTrigger.tsx diff --git a/packages/platform/src/components/layouts/logo.tsx b/packages/dashboard/src/components/layouts/logo.tsx similarity index 100% rename from packages/platform/src/components/layouts/logo.tsx rename to packages/dashboard/src/components/layouts/logo.tsx diff --git a/packages/platform/src/components/layouts/page/page.tsx b/packages/dashboard/src/components/layouts/page/page.tsx similarity index 100% rename from packages/platform/src/components/layouts/page/page.tsx rename to packages/dashboard/src/components/layouts/page/page.tsx diff --git a/packages/platform/src/components/layouts/page/pageContent.tsx b/packages/dashboard/src/components/layouts/page/pageContent.tsx similarity index 100% rename from packages/platform/src/components/layouts/page/pageContent.tsx rename to packages/dashboard/src/components/layouts/page/pageContent.tsx diff --git a/packages/platform/src/components/layouts/page/pageHeader.tsx b/packages/dashboard/src/components/layouts/page/pageHeader.tsx similarity index 100% rename from packages/platform/src/components/layouts/page/pageHeader.tsx rename to packages/dashboard/src/components/layouts/page/pageHeader.tsx diff --git a/packages/platform/src/components/layouts/page/pageRoot.tsx b/packages/dashboard/src/components/layouts/page/pageRoot.tsx similarity index 100% rename from packages/platform/src/components/layouts/page/pageRoot.tsx rename to packages/dashboard/src/components/layouts/page/pageRoot.tsx diff --git a/packages/platform/src/components/layouts/page/pageSeparator.tsx b/packages/dashboard/src/components/layouts/page/pageSeparator.tsx similarity index 100% rename from packages/platform/src/components/layouts/page/pageSeparator.tsx rename to packages/dashboard/src/components/layouts/page/pageSeparator.tsx diff --git a/packages/platform/src/components/layouts/pageLayout.tsx b/packages/dashboard/src/components/layouts/pageLayout.tsx similarity index 100% rename from packages/platform/src/components/layouts/pageLayout.tsx rename to packages/dashboard/src/components/layouts/pageLayout.tsx diff --git a/packages/platform/src/components/layouts/section/section.tsx b/packages/dashboard/src/components/layouts/section/section.tsx similarity index 100% rename from packages/platform/src/components/layouts/section/section.tsx rename to packages/dashboard/src/components/layouts/section/section.tsx diff --git a/packages/platform/src/components/layouts/section/sectionItem.tsx b/packages/dashboard/src/components/layouts/section/sectionItem.tsx similarity index 100% rename from packages/platform/src/components/layouts/section/sectionItem.tsx rename to packages/dashboard/src/components/layouts/section/sectionItem.tsx diff --git a/packages/platform/src/components/layouts/section/sectionRoot.tsx b/packages/dashboard/src/components/layouts/section/sectionRoot.tsx similarity index 100% rename from packages/platform/src/components/layouts/section/sectionRoot.tsx rename to packages/dashboard/src/components/layouts/section/sectionRoot.tsx diff --git a/packages/platform/src/components/layouts/subPageLayout.tsx b/packages/dashboard/src/components/layouts/subPageLayout.tsx similarity index 100% rename from packages/platform/src/components/layouts/subPageLayout.tsx rename to packages/dashboard/src/components/layouts/subPageLayout.tsx diff --git a/packages/platform/src/components/layouts/table/table.tsx b/packages/dashboard/src/components/layouts/table/table.tsx similarity index 100% rename from packages/platform/src/components/layouts/table/table.tsx rename to packages/dashboard/src/components/layouts/table/table.tsx diff --git a/packages/platform/src/components/layouts/table/tableBody/tableBodyCell.tsx b/packages/dashboard/src/components/layouts/table/tableBody/tableBodyCell.tsx similarity index 100% rename from packages/platform/src/components/layouts/table/tableBody/tableBodyCell.tsx rename to packages/dashboard/src/components/layouts/table/tableBody/tableBodyCell.tsx diff --git a/packages/platform/src/components/layouts/table/tableBody/tableBodyRoot.tsx b/packages/dashboard/src/components/layouts/table/tableBody/tableBodyRoot.tsx similarity index 100% rename from packages/platform/src/components/layouts/table/tableBody/tableBodyRoot.tsx rename to packages/dashboard/src/components/layouts/table/tableBody/tableBodyRoot.tsx diff --git a/packages/platform/src/components/layouts/table/tableBody/tableBodyRow.tsx b/packages/dashboard/src/components/layouts/table/tableBody/tableBodyRow.tsx similarity index 100% rename from packages/platform/src/components/layouts/table/tableBody/tableBodyRow.tsx rename to packages/dashboard/src/components/layouts/table/tableBody/tableBodyRow.tsx diff --git a/packages/platform/src/components/layouts/table/tableHeader/tableHeaderCell.tsx b/packages/dashboard/src/components/layouts/table/tableHeader/tableHeaderCell.tsx similarity index 100% rename from packages/platform/src/components/layouts/table/tableHeader/tableHeaderCell.tsx rename to packages/dashboard/src/components/layouts/table/tableHeader/tableHeaderCell.tsx diff --git a/packages/platform/src/components/layouts/table/tableHeader/tableHeaderRoot.tsx b/packages/dashboard/src/components/layouts/table/tableHeader/tableHeaderRoot.tsx similarity index 100% rename from packages/platform/src/components/layouts/table/tableHeader/tableHeaderRoot.tsx rename to packages/dashboard/src/components/layouts/table/tableHeader/tableHeaderRoot.tsx diff --git a/packages/platform/src/components/layouts/table/tableHeader/tableHeaderRow.tsx b/packages/dashboard/src/components/layouts/table/tableHeader/tableHeaderRow.tsx similarity index 100% rename from packages/platform/src/components/layouts/table/tableHeader/tableHeaderRow.tsx rename to packages/dashboard/src/components/layouts/table/tableHeader/tableHeaderRow.tsx diff --git a/packages/platform/src/components/layouts/table/tableRoot.tsx b/packages/dashboard/src/components/layouts/table/tableRoot.tsx similarity index 100% rename from packages/platform/src/components/layouts/table/tableRoot.tsx rename to packages/dashboard/src/components/layouts/table/tableRoot.tsx diff --git a/packages/platform/src/components/layouts/title.tsx b/packages/dashboard/src/components/layouts/title.tsx similarity index 100% rename from packages/platform/src/components/layouts/title.tsx rename to packages/dashboard/src/components/layouts/title.tsx diff --git a/packages/platform/src/components/layouts/virtualizer.tsx b/packages/dashboard/src/components/layouts/virtualizer.tsx similarity index 100% rename from packages/platform/src/components/layouts/virtualizer.tsx rename to packages/dashboard/src/components/layouts/virtualizer.tsx diff --git a/packages/platform/src/components/overlays/dialog/dialog.tsx b/packages/dashboard/src/components/overlays/dialog/dialog.tsx similarity index 100% rename from packages/platform/src/components/overlays/dialog/dialog.tsx rename to packages/dashboard/src/components/overlays/dialog/dialog.tsx diff --git a/packages/platform/src/components/overlays/dialog/dialogContent.tsx b/packages/dashboard/src/components/overlays/dialog/dialogContent.tsx similarity index 100% rename from packages/platform/src/components/overlays/dialog/dialogContent.tsx rename to packages/dashboard/src/components/overlays/dialog/dialogContent.tsx diff --git a/packages/platform/src/components/overlays/dialog/dialogDescription.tsx b/packages/dashboard/src/components/overlays/dialog/dialogDescription.tsx similarity index 100% rename from packages/platform/src/components/overlays/dialog/dialogDescription.tsx rename to packages/dashboard/src/components/overlays/dialog/dialogDescription.tsx diff --git a/packages/platform/src/components/overlays/dialog/dialogFooter.tsx b/packages/dashboard/src/components/overlays/dialog/dialogFooter.tsx similarity index 100% rename from packages/platform/src/components/overlays/dialog/dialogFooter.tsx rename to packages/dashboard/src/components/overlays/dialog/dialogFooter.tsx diff --git a/packages/platform/src/components/overlays/dialog/dialogHeader.tsx b/packages/dashboard/src/components/overlays/dialog/dialogHeader.tsx similarity index 100% rename from packages/platform/src/components/overlays/dialog/dialogHeader.tsx rename to packages/dashboard/src/components/overlays/dialog/dialogHeader.tsx diff --git a/packages/platform/src/components/overlays/dialog/dialogOverlay.tsx b/packages/dashboard/src/components/overlays/dialog/dialogOverlay.tsx similarity index 100% rename from packages/platform/src/components/overlays/dialog/dialogOverlay.tsx rename to packages/dashboard/src/components/overlays/dialog/dialogOverlay.tsx diff --git a/packages/platform/src/components/overlays/dialog/dialogPortal.tsx b/packages/dashboard/src/components/overlays/dialog/dialogPortal.tsx similarity index 100% rename from packages/platform/src/components/overlays/dialog/dialogPortal.tsx rename to packages/dashboard/src/components/overlays/dialog/dialogPortal.tsx diff --git a/packages/platform/src/components/overlays/dialog/dialogRoot.tsx b/packages/dashboard/src/components/overlays/dialog/dialogRoot.tsx similarity index 100% rename from packages/platform/src/components/overlays/dialog/dialogRoot.tsx rename to packages/dashboard/src/components/overlays/dialog/dialogRoot.tsx diff --git a/packages/platform/src/components/overlays/dialog/dialogTitle.tsx b/packages/dashboard/src/components/overlays/dialog/dialogTitle.tsx similarity index 100% rename from packages/platform/src/components/overlays/dialog/dialogTitle.tsx rename to packages/dashboard/src/components/overlays/dialog/dialogTitle.tsx diff --git a/packages/platform/src/components/overlays/dialog/dialogTrigger.tsx b/packages/dashboard/src/components/overlays/dialog/dialogTrigger.tsx similarity index 100% rename from packages/platform/src/components/overlays/dialog/dialogTrigger.tsx rename to packages/dashboard/src/components/overlays/dialog/dialogTrigger.tsx diff --git a/packages/platform/src/components/overlays/drawer/drawer.tsx b/packages/dashboard/src/components/overlays/drawer/drawer.tsx similarity index 100% rename from packages/platform/src/components/overlays/drawer/drawer.tsx rename to packages/dashboard/src/components/overlays/drawer/drawer.tsx diff --git a/packages/platform/src/components/overlays/drawer/drawerBody.tsx b/packages/dashboard/src/components/overlays/drawer/drawerBody.tsx similarity index 100% rename from packages/platform/src/components/overlays/drawer/drawerBody.tsx rename to packages/dashboard/src/components/overlays/drawer/drawerBody.tsx diff --git a/packages/platform/src/components/overlays/drawer/drawerContent.tsx b/packages/dashboard/src/components/overlays/drawer/drawerContent.tsx similarity index 100% rename from packages/platform/src/components/overlays/drawer/drawerContent.tsx rename to packages/dashboard/src/components/overlays/drawer/drawerContent.tsx diff --git a/packages/platform/src/components/overlays/drawer/drawerHeader.tsx b/packages/dashboard/src/components/overlays/drawer/drawerHeader.tsx similarity index 100% rename from packages/platform/src/components/overlays/drawer/drawerHeader.tsx rename to packages/dashboard/src/components/overlays/drawer/drawerHeader.tsx diff --git a/packages/platform/src/components/overlays/drawer/drawerRoot.tsx b/packages/dashboard/src/components/overlays/drawer/drawerRoot.tsx similarity index 100% rename from packages/platform/src/components/overlays/drawer/drawerRoot.tsx rename to packages/dashboard/src/components/overlays/drawer/drawerRoot.tsx diff --git a/packages/platform/src/components/overlays/drawer/drawerTrigger.tsx b/packages/dashboard/src/components/overlays/drawer/drawerTrigger.tsx similarity index 100% rename from packages/platform/src/components/overlays/drawer/drawerTrigger.tsx rename to packages/dashboard/src/components/overlays/drawer/drawerTrigger.tsx diff --git a/packages/platform/src/components/overlays/popover/popover.tsx b/packages/dashboard/src/components/overlays/popover/popover.tsx similarity index 100% rename from packages/platform/src/components/overlays/popover/popover.tsx rename to packages/dashboard/src/components/overlays/popover/popover.tsx diff --git a/packages/platform/src/components/overlays/popover/popoverClose.tsx b/packages/dashboard/src/components/overlays/popover/popoverClose.tsx similarity index 100% rename from packages/platform/src/components/overlays/popover/popoverClose.tsx rename to packages/dashboard/src/components/overlays/popover/popoverClose.tsx diff --git a/packages/platform/src/components/overlays/popover/popoverContent.tsx b/packages/dashboard/src/components/overlays/popover/popoverContent.tsx similarity index 100% rename from packages/platform/src/components/overlays/popover/popoverContent.tsx rename to packages/dashboard/src/components/overlays/popover/popoverContent.tsx diff --git a/packages/platform/src/components/overlays/popover/popoverRoot.tsx b/packages/dashboard/src/components/overlays/popover/popoverRoot.tsx similarity index 100% rename from packages/platform/src/components/overlays/popover/popoverRoot.tsx rename to packages/dashboard/src/components/overlays/popover/popoverRoot.tsx diff --git a/packages/platform/src/components/overlays/popover/popoverTrigger.tsx b/packages/dashboard/src/components/overlays/popover/popoverTrigger.tsx similarity index 100% rename from packages/platform/src/components/overlays/popover/popoverTrigger.tsx rename to packages/dashboard/src/components/overlays/popover/popoverTrigger.tsx diff --git a/packages/platform/src/components/overlays/toast/toast.tsx b/packages/dashboard/src/components/overlays/toast/toast.tsx similarity index 100% rename from packages/platform/src/components/overlays/toast/toast.tsx rename to packages/dashboard/src/components/overlays/toast/toast.tsx diff --git a/packages/platform/src/components/overlays/toast/toastAction.tsx b/packages/dashboard/src/components/overlays/toast/toastAction.tsx similarity index 100% rename from packages/platform/src/components/overlays/toast/toastAction.tsx rename to packages/dashboard/src/components/overlays/toast/toastAction.tsx diff --git a/packages/platform/src/components/overlays/toast/toastClose.tsx b/packages/dashboard/src/components/overlays/toast/toastClose.tsx similarity index 100% rename from packages/platform/src/components/overlays/toast/toastClose.tsx rename to packages/dashboard/src/components/overlays/toast/toastClose.tsx diff --git a/packages/platform/src/components/overlays/toast/toastContent.tsx b/packages/dashboard/src/components/overlays/toast/toastContent.tsx similarity index 100% rename from packages/platform/src/components/overlays/toast/toastContent.tsx rename to packages/dashboard/src/components/overlays/toast/toastContent.tsx diff --git a/packages/platform/src/components/overlays/toast/toastDescription.tsx b/packages/dashboard/src/components/overlays/toast/toastDescription.tsx similarity index 100% rename from packages/platform/src/components/overlays/toast/toastDescription.tsx rename to packages/dashboard/src/components/overlays/toast/toastDescription.tsx diff --git a/packages/platform/src/components/overlays/toast/toastProvider.tsx b/packages/dashboard/src/components/overlays/toast/toastProvider.tsx similarity index 100% rename from packages/platform/src/components/overlays/toast/toastProvider.tsx rename to packages/dashboard/src/components/overlays/toast/toastProvider.tsx diff --git a/packages/platform/src/components/overlays/toast/toastTitle.tsx b/packages/dashboard/src/components/overlays/toast/toastTitle.tsx similarity index 100% rename from packages/platform/src/components/overlays/toast/toastTitle.tsx rename to packages/dashboard/src/components/overlays/toast/toastTitle.tsx diff --git a/packages/platform/src/components/overlays/toast/toastViewport.tsx b/packages/dashboard/src/components/overlays/toast/toastViewport.tsx similarity index 100% rename from packages/platform/src/components/overlays/toast/toastViewport.tsx rename to packages/dashboard/src/components/overlays/toast/toastViewport.tsx diff --git a/packages/platform/src/components/overlays/tooltip/tooltip.tsx b/packages/dashboard/src/components/overlays/tooltip/tooltip.tsx similarity index 100% rename from packages/platform/src/components/overlays/tooltip/tooltip.tsx rename to packages/dashboard/src/components/overlays/tooltip/tooltip.tsx diff --git a/packages/platform/src/components/overlays/tooltip/tooltipContent.tsx b/packages/dashboard/src/components/overlays/tooltip/tooltipContent.tsx similarity index 100% rename from packages/platform/src/components/overlays/tooltip/tooltipContent.tsx rename to packages/dashboard/src/components/overlays/tooltip/tooltipContent.tsx diff --git a/packages/platform/src/components/overlays/tooltip/tooltipPortal.tsx b/packages/dashboard/src/components/overlays/tooltip/tooltipPortal.tsx similarity index 100% rename from packages/platform/src/components/overlays/tooltip/tooltipPortal.tsx rename to packages/dashboard/src/components/overlays/tooltip/tooltipPortal.tsx diff --git a/packages/platform/src/components/overlays/tooltip/tooltipProvider.tsx b/packages/dashboard/src/components/overlays/tooltip/tooltipProvider.tsx similarity index 100% rename from packages/platform/src/components/overlays/tooltip/tooltipProvider.tsx rename to packages/dashboard/src/components/overlays/tooltip/tooltipProvider.tsx diff --git a/packages/platform/src/components/overlays/tooltip/tooltipRoot.tsx b/packages/dashboard/src/components/overlays/tooltip/tooltipRoot.tsx similarity index 100% rename from packages/platform/src/components/overlays/tooltip/tooltipRoot.tsx rename to packages/dashboard/src/components/overlays/tooltip/tooltipRoot.tsx diff --git a/packages/platform/src/components/overlays/tooltip/tooltipTrigger.tsx b/packages/dashboard/src/components/overlays/tooltip/tooltipTrigger.tsx similarity index 100% rename from packages/platform/src/components/overlays/tooltip/tooltipTrigger.tsx rename to packages/dashboard/src/components/overlays/tooltip/tooltipTrigger.tsx diff --git a/packages/platform/src/contexts/data/dataProvider.tsx b/packages/dashboard/src/contexts/data/dataProvider.tsx similarity index 100% rename from packages/platform/src/contexts/data/dataProvider.tsx rename to packages/dashboard/src/contexts/data/dataProvider.tsx diff --git a/packages/platform/src/contexts/data/queryClient.ts b/packages/dashboard/src/contexts/data/queryClient.ts similarity index 100% rename from packages/platform/src/contexts/data/queryClient.ts rename to packages/dashboard/src/contexts/data/queryClient.ts diff --git a/packages/platform/src/contexts/rootProvider.tsx b/packages/dashboard/src/contexts/rootProvider.tsx similarity index 100% rename from packages/platform/src/contexts/rootProvider.tsx rename to packages/dashboard/src/contexts/rootProvider.tsx diff --git a/packages/platform/src/contexts/router/routerProvider.tsx b/packages/dashboard/src/contexts/router/routerProvider.tsx similarity index 100% rename from packages/platform/src/contexts/router/routerProvider.tsx rename to packages/dashboard/src/contexts/router/routerProvider.tsx diff --git a/packages/platform/src/contexts/toasts/toastProvider.tsx b/packages/dashboard/src/contexts/toasts/toastProvider.tsx similarity index 100% rename from packages/platform/src/contexts/toasts/toastProvider.tsx rename to packages/dashboard/src/contexts/toasts/toastProvider.tsx diff --git a/packages/platform/src/contexts/toasts/useToast.ts b/packages/dashboard/src/contexts/toasts/useToast.ts similarity index 100% rename from packages/platform/src/contexts/toasts/useToast.ts rename to packages/dashboard/src/contexts/toasts/useToast.ts diff --git a/packages/platform/src/features/authLayout.tsx b/packages/dashboard/src/features/authLayout.tsx similarity index 100% rename from packages/platform/src/features/authLayout.tsx rename to packages/dashboard/src/features/authLayout.tsx diff --git a/packages/platform/src/features/breadcrumbs.tsx b/packages/dashboard/src/features/breadcrumbs.tsx similarity index 100% rename from packages/platform/src/features/breadcrumbs.tsx rename to packages/dashboard/src/features/breadcrumbs.tsx diff --git a/packages/platform/src/features/error/errorPage.tsx b/packages/dashboard/src/features/error/errorPage.tsx similarity index 100% rename from packages/platform/src/features/error/errorPage.tsx rename to packages/dashboard/src/features/error/errorPage.tsx diff --git a/packages/platform/src/features/home/documentationBanner.tsx b/packages/dashboard/src/features/home/documentationBanner.tsx similarity index 100% rename from packages/platform/src/features/home/documentationBanner.tsx rename to packages/dashboard/src/features/home/documentationBanner.tsx diff --git a/packages/platform/src/features/home/homePage.tsx b/packages/dashboard/src/features/home/homePage.tsx similarity index 100% rename from packages/platform/src/features/home/homePage.tsx rename to packages/dashboard/src/features/home/homePage.tsx diff --git a/packages/platform/src/features/home/organizationsBanner.tsx b/packages/dashboard/src/features/home/organizationsBanner.tsx similarity index 100% rename from packages/platform/src/features/home/organizationsBanner.tsx rename to packages/dashboard/src/features/home/organizationsBanner.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/organizationLayout.tsx b/packages/dashboard/src/features/organizations/$idOrganization/organizationLayout.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/organizationLayout.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/organizationLayout.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/organizationSettings/deleteOneOrganization.tsx b/packages/dashboard/src/features/organizations/$idOrganization/organizationSettings/deleteOneOrganization.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/organizationSettings/deleteOneOrganization.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/organizationSettings/deleteOneOrganization.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/organizationSettings/organizationSettingsLayout.tsx b/packages/dashboard/src/features/organizations/$idOrganization/organizationSettings/organizationSettingsLayout.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/organizationSettings/organizationSettingsLayout.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/organizationSettings/organizationSettingsLayout.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/organizationSettings/organizationSettingsPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/organizationSettings/organizationSettingsPage.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/organizationSettings/organizationSettingsPage.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/organizationSettings/organizationSettingsPage.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/organizationSettings/organizationUsers/$idOrganizationUser/deleteOneOrganizationUser.tsx b/packages/dashboard/src/features/organizations/$idOrganization/organizationSettings/organizationUsers/$idOrganizationUser/deleteOneOrganizationUser.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/organizationSettings/organizationUsers/$idOrganizationUser/deleteOneOrganizationUser.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/organizationSettings/organizationUsers/$idOrganizationUser/deleteOneOrganizationUser.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/organizationSettings/organizationUsers/$idOrganizationUser/updateOneOrganizationUser.tsx b/packages/dashboard/src/features/organizations/$idOrganization/organizationSettings/organizationUsers/$idOrganizationUser/updateOneOrganizationUser.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/organizationSettings/organizationUsers/$idOrganizationUser/updateOneOrganizationUser.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/organizationSettings/organizationUsers/$idOrganizationUser/updateOneOrganizationUser.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/organizationSettings/organizationUsers/createOneOrganizationUser.tsx b/packages/dashboard/src/features/organizations/$idOrganization/organizationSettings/organizationUsers/createOneOrganizationUser.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/organizationSettings/organizationUsers/createOneOrganizationUser.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/organizationSettings/organizationUsers/createOneOrganizationUser.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/organizationSettings/organizationUsers/organizationUsersPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/organizationSettings/organizationUsers/organizationUsersPage.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/organizationSettings/organizationUsers/organizationUsersPage.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/organizationSettings/organizationUsers/organizationUsersPage.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/organizationSettings/organizationUsers/organizationUsersTable.tsx b/packages/dashboard/src/features/organizations/$idOrganization/organizationSettings/organizationUsers/organizationUsersTable.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/organizationSettings/organizationUsers/organizationUsersTable.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/organizationSettings/organizationUsers/organizationUsersTable.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/organizationSettings/updateOneOrganization.tsx b/packages/dashboard/src/features/organizations/$idOrganization/organizationSettings/updateOneOrganization.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/organizationSettings/updateOneOrganization.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/organizationSettings/updateOneOrganization.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/attachmentData.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/attachmentData.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/attachmentData.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/attachmentData.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/attachmentFile.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/attachmentFile.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/attachmentFile.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/attachmentFile.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/attachmentPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/attachmentPage.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/attachmentPage.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/attachmentPage.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/deleteOneAttachment.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/deleteOneAttachment.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/deleteOneAttachment.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/deleteOneAttachment.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/updateOneAttachment.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/updateOneAttachment.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/updateOneAttachment.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/updateOneAttachment.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/attachments/attachmentSelect.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/attachmentSelect.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/attachments/attachmentSelect.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/attachmentSelect.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/attachments/attachmentsPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/attachmentsPage.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/attachments/attachmentsPage.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/attachmentsPage.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/attachments/attachmentsTable.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/attachmentsTable.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/attachments/attachmentsTable.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/attachmentsTable.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/attachments/createOneAttachment.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/createOneAttachment.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/attachments/createOneAttachment.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/createOneAttachment.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/deleteOneRecordRow.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/deleteOneRecordRow.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/deleteOneRecordRow.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/deleteOneRecordRow.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/recordRowPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/recordRowPage.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/recordRowPage.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/recordRowPage.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/updateOneRecordRow.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/updateOneRecordRow.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/updateOneRecordRow.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/updateOneRecordRow.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/createOneRecordRow.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/createOneRecordRow.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/createOneRecordRow.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/createOneRecordRow.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/deleteOneRecord.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/deleteOneRecord.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/deleteOneRecord.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/deleteOneRecord.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/duplicateOneRecord.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/duplicateOneRecord.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/duplicateOneRecord.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/duplicateOneRecord.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/recordPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/recordPage.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/recordPage.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/recordPage.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/recordRowsTable.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/recordRowsTable.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/recordRowsTable.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/recordRowsTable.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/updateManyRecordRows.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/updateManyRecordRows.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/updateManyRecordRows.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/updateManyRecordRows.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/updateOneRecord.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/updateOneRecord.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/updateOneRecord.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/updateOneRecord.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/records/createOneRecord.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/createOneRecord.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/records/createOneRecord.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/createOneRecord.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/records/recordsPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/recordsPage.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/records/recordsPage.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/recordsPage.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/reports/balanceReport/balanceReportPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceReport/balanceReportPage.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/reports/balanceReport/balanceReportPage.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceReport/balanceReportPage.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/reports/balanceReport/balanceReportTable.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceReport/balanceReportTable.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/reports/balanceReport/balanceReportTable.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceReport/balanceReportTable.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetAsset/balanceSheetAssetsReportItem.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetAsset/balanceSheetAssetsReportItem.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetAsset/balanceSheetAssetsReportItem.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetAsset/balanceSheetAssetsReportItem.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetAsset/balanceSheetAssetsReportRow.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetAsset/balanceSheetAssetsReportRow.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetAsset/balanceSheetAssetsReportRow.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetAsset/balanceSheetAssetsReportRow.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetAsset/balanceSheetAssetsReportTable.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetAsset/balanceSheetAssetsReportTable.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetAsset/balanceSheetAssetsReportTable.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetAsset/balanceSheetAssetsReportTable.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetLiability/balanceSheetLiabilitiesReportItem.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetLiability/balanceSheetLiabilitiesReportItem.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetLiability/balanceSheetLiabilitiesReportItem.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetLiability/balanceSheetLiabilitiesReportItem.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetLiability/balanceSheetLiabilitiesReportTable.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetLiability/balanceSheetLiabilitiesReportTable.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetLiability/balanceSheetLiabilitiesReportTable.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetLiability/balanceSheetLiabilitiesReportTable.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetLiability/balanceSheetLiabilityiesReportRow.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetLiability/balanceSheetLiabilityiesReportRow.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetLiability/balanceSheetLiabilityiesReportRow.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetLiability/balanceSheetLiabilityiesReportRow.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetReportPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetReportPage.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetReportPage.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetReportPage.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/downloadBalanceSheetReport.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/downloadBalanceSheetReport.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/downloadBalanceSheetReport.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/downloadBalanceSheetReport.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/downloadIncomeStatementReport.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/downloadIncomeStatementReport.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/downloadIncomeStatementReport.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/downloadIncomeStatementReport.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/incomeStatementReportItem.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/incomeStatementReportItem.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/incomeStatementReportItem.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/incomeStatementReportItem.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/incomeStatementReportPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/incomeStatementReportPage.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/incomeStatementReportPage.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/incomeStatementReportPage.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/incomeStatementReportRow.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/incomeStatementReportRow.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/incomeStatementReportRow.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/incomeStatementReportRow.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/incomeStatementsReportTable.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/incomeStatementsReportTable.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/incomeStatementsReportTable.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/incomeStatementsReportTable.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/reports/journalReport/journalReportPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/journalReport/journalReportPage.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/reports/journalReport/journalReportPage.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/journalReport/journalReportPage.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/reports/journalReport/journalReportTable.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/journalReport/journalReportTable.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/reports/journalReport/journalReportTable.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/journalReport/journalReportTable.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/reports/ledgerReport/ledgerReportPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/ledgerReport/ledgerReportPage.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/reports/ledgerReport/ledgerReportPage.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/ledgerReport/ledgerReportPage.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/reports/ledgerReport/ledgerReportTable.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/ledgerReport/ledgerReportTable.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/reports/ledgerReport/ledgerReportTable.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/ledgerReport/ledgerReportTable.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/reports/reportsLayout.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/reportsLayout.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/reports/reportsLayout.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/reportsLayout.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearLayout.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearLayout.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearLayout.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearLayout.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/accountPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/accountPage.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/accountPage.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/accountPage.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/deleteOneAccount.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/deleteOneAccount.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/deleteOneAccount.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/deleteOneAccount.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/updateOneAccount.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/updateOneAccount.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/updateOneAccount.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/updateOneAccount.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountItem.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountItem.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountItem.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountItem.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountSelect.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountSelect.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountSelect.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountSelect.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountsPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountsPage.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountsPage.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountsPage.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountsTable.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountsTable.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountsTable.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountsTable.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/createOneAccount.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/createOneAccount.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/createOneAccount.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/createOneAccount.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/generateAccounts.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/generateAccounts.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/generateAccounts.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/generateAccounts.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/groupAccounts.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/groupAccounts.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/groupAccounts.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/groupAccounts.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/sortAccounts.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/sortAccounts.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/sortAccounts.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/sortAccounts.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/balanceSheetPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/balanceSheetPage.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/balanceSheetPage.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/balanceSheetPage.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/deleteOneBalanceSheet.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/deleteOneBalanceSheet.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/deleteOneBalanceSheet.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/deleteOneBalanceSheet.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/updateOneBalanceSheet.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/updateOneBalanceSheet.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/updateOneBalanceSheet.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/updateOneBalanceSheet.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetItem.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetItem.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetItem.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetItem.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetRow.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetRow.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetRow.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetRow.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetSelect.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetSelect.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetSelect.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetSelect.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetTable.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetTable.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetTable.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetTable.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetsPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetsPage.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetsPage.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetsPage.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/connectAccountsToBalanceSheets.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/connectAccountsToBalanceSheets.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/connectAccountsToBalanceSheets.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/connectAccountsToBalanceSheets.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/createOneBalanceSheet.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/createOneBalanceSheet.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/createOneBalanceSheet.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/createOneBalanceSheet.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/generateBalanceSheets.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/generateBalanceSheets.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/generateBalanceSheets.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/generateBalanceSheets.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/getBalanceSheetChildren.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/getBalanceSheetChildren.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/getBalanceSheetChildren.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/getBalanceSheetChildren.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/getBalanceSheetLevel.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/getBalanceSheetLevel.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/getBalanceSheetLevel.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/getBalanceSheetLevel.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/deleteOneYear.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/deleteOneYear.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/deleteOneYear.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/deleteOneYear.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/deleteOneIncomeStatement.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/deleteOneIncomeStatement.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/deleteOneIncomeStatement.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/deleteOneIncomeStatement.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/incomeStatementPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/incomeStatementPage.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/incomeStatementPage.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/incomeStatementPage.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/updateOneIncomeStatement.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/updateOneIncomeStatement.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/updateOneIncomeStatement.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/updateOneIncomeStatement.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/computationIncomeStatementPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/computationIncomeStatementPage.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/computationIncomeStatementPage.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/computationIncomeStatementPage.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/deleteOneComputationIncomeStatement.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/deleteOneComputationIncomeStatement.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/deleteOneComputationIncomeStatement.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/deleteOneComputationIncomeStatement.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/updateOneComputationIncomeStatement.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/updateOneComputationIncomeStatement.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/updateOneComputationIncomeStatement.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/updateOneComputationIncomeStatement.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/computationIncomeStatementTable.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/computationIncomeStatementTable.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/computationIncomeStatementTable.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/computationIncomeStatementTable.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/createOneComputationIncomeStatement.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/createOneComputationIncomeStatement.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/createOneComputationIncomeStatement.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/createOneComputationIncomeStatement.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationPage.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationPage.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationPage.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/deleteOneComputation.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/deleteOneComputation.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/deleteOneComputation.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/deleteOneComputation.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/updateOneComputation.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/updateOneComputation.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/updateOneComputation.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/updateOneComputation.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/computationsTable.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/computationsTable.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/computationsTable.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/computationsTable.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/createOneComputation.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/createOneComputation.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/createOneComputation.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/createOneComputation.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/generateComputations.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/generateComputations.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/generateComputations.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/generateComputations.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/connectAccountsToIncomeStatements.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/connectAccountsToIncomeStatements.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/connectAccountsToIncomeStatements.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/connectAccountsToIncomeStatements.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/createOneIncomeStatement.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/createOneIncomeStatement.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/createOneIncomeStatement.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/createOneIncomeStatement.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/generateIncomeStatement.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/generateIncomeStatement.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/generateIncomeStatement.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/generateIncomeStatement.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/getIncomeStatementChildren.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/getIncomeStatementChildren.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/getIncomeStatementChildren.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/getIncomeStatementChildren.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/getIncomeStatementLevel.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/getIncomeStatementLevel.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/getIncomeStatementLevel.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/getIncomeStatementLevel.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementItem.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementItem.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementItem.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementItem.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementRow.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementRow.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementRow.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementRow.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementsPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementsPage.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementsPage.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementsPage.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementsTable.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementsTable.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementsTable.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementsTable.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/deleteOneJournal.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/deleteOneJournal.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/deleteOneJournal.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/deleteOneJournal.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/journalPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/journalPage.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/journalPage.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/journalPage.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/updateOneJournal.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/updateOneJournal.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/updateOneJournal.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/updateOneJournal.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/createOneJournal.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/createOneJournal.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/createOneJournal.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/createOneJournal.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/generateJournals.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/generateJournals.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/generateJournals.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/generateJournals.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/journalSelect.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/journalSelect.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/journalSelect.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/journalSelect.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/journalsPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/journalsPage.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/journalsPage.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/journalsPage.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/deleteOneRecordLabel.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/deleteOneRecordLabel.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/deleteOneRecordLabel.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/deleteOneRecordLabel.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/recordLabelPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/recordLabelPage.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/recordLabelPage.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/recordLabelPage.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/updateOneRecordLabel.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/updateOneRecordLabel.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/updateOneRecordLabel.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/updateOneRecordLabel.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/createOneRecordLabel.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/createOneRecordLabel.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/createOneRecordLabel.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/createOneRecordLabel.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/recordLabelSelect.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/recordLabelSelect.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/recordLabelSelect.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/recordLabelSelect.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/recordLabelsPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/recordLabelsPage.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/recordLabelsPage.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/recordLabelsPage.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/updateOneYear.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/updateOneYear.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/updateOneYear.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/updateOneYear.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/yearSettingsLayout.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/yearSettingsLayout.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/yearSettingsLayout.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/yearSettingsLayout.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/yearSettingsPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/yearSettingsPage.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/$idYear/yearSettings/yearSettingsPage.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/yearSettingsPage.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/createOneYear.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/createOneYear.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/createOneYear.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/createOneYear.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/yearSelect.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/yearSelect.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/yearSelect.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/yearSelect.tsx diff --git a/packages/platform/src/features/organizations/$idOrganization/years/yearsPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/yearsPage.tsx similarity index 100% rename from packages/platform/src/features/organizations/$idOrganization/years/yearsPage.tsx rename to packages/dashboard/src/features/organizations/$idOrganization/years/yearsPage.tsx diff --git a/packages/platform/src/features/organizations/addNewOrganization.tsx b/packages/dashboard/src/features/organizations/addNewOrganization.tsx similarity index 100% rename from packages/platform/src/features/organizations/addNewOrganization.tsx rename to packages/dashboard/src/features/organizations/addNewOrganization.tsx diff --git a/packages/platform/src/features/organizations/organizationsPage.tsx b/packages/dashboard/src/features/organizations/organizationsPage.tsx similarity index 100% rename from packages/platform/src/features/organizations/organizationsPage.tsx rename to packages/dashboard/src/features/organizations/organizationsPage.tsx diff --git a/packages/platform/src/features/rootLayout.tsx b/packages/dashboard/src/features/rootLayout.tsx similarity index 100% rename from packages/platform/src/features/rootLayout.tsx rename to packages/dashboard/src/features/rootLayout.tsx diff --git a/packages/platform/src/features/settings/settingsPage.tsx b/packages/dashboard/src/features/settings/settingsPage.tsx similarity index 100% rename from packages/platform/src/features/settings/settingsPage.tsx rename to packages/dashboard/src/features/settings/settingsPage.tsx diff --git a/packages/platform/src/features/signIn/resetPassword.form.tsx b/packages/dashboard/src/features/signIn/resetPassword.form.tsx similarity index 100% rename from packages/platform/src/features/signIn/resetPassword.form.tsx rename to packages/dashboard/src/features/signIn/resetPassword.form.tsx diff --git a/packages/platform/src/features/signIn/signInPage.tsx b/packages/dashboard/src/features/signIn/signInPage.tsx similarity index 100% rename from packages/platform/src/features/signIn/signInPage.tsx rename to packages/dashboard/src/features/signIn/signInPage.tsx diff --git a/packages/platform/src/features/signUp/signUpPage.tsx b/packages/dashboard/src/features/signUp/signUpPage.tsx similarity index 100% rename from packages/platform/src/features/signUp/signUpPage.tsx rename to packages/dashboard/src/features/signUp/signUpPage.tsx diff --git a/packages/platform/src/features/support/contactSupportForm.tsx b/packages/dashboard/src/features/support/contactSupportForm.tsx similarity index 100% rename from packages/platform/src/features/support/contactSupportForm.tsx rename to packages/dashboard/src/features/support/contactSupportForm.tsx diff --git a/packages/platform/src/features/support/supportPage.tsx b/packages/dashboard/src/features/support/supportPage.tsx similarity index 100% rename from packages/platform/src/features/support/supportPage.tsx rename to packages/dashboard/src/features/support/supportPage.tsx diff --git a/packages/platform/src/index.html b/packages/dashboard/src/index.html similarity index 100% rename from packages/platform/src/index.html rename to packages/dashboard/src/index.html diff --git a/packages/platform/src/root.tsx b/packages/dashboard/src/root.tsx similarity index 100% rename from packages/platform/src/root.tsx rename to packages/dashboard/src/root.tsx diff --git a/packages/platform/src/routes/catchRoute.tsx b/packages/dashboard/src/routes/catchRoute.tsx similarity index 100% rename from packages/platform/src/routes/catchRoute.tsx rename to packages/dashboard/src/routes/catchRoute.tsx diff --git a/packages/platform/src/routes/platformRouter.tsx b/packages/dashboard/src/routes/platformRouter.tsx similarity index 100% rename from packages/platform/src/routes/platformRouter.tsx rename to packages/dashboard/src/routes/platformRouter.tsx diff --git a/packages/platform/src/routes/platformTree.ts b/packages/dashboard/src/routes/platformTree.ts similarity index 100% rename from packages/platform/src/routes/platformTree.ts rename to packages/dashboard/src/routes/platformTree.ts diff --git a/packages/platform/src/routes/root/auth/homeRoute.tsx b/packages/dashboard/src/routes/root/auth/homeRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/homeRoute.tsx rename to packages/dashboard/src/routes/root/auth/homeRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/organizationLayoutRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/organizationLayoutRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/organizationLayoutRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/organizationLayoutRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/organizationPathRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/organizationPathRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/organizationPathRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/organizationPathRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/organizationRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/organizationRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/organizationRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/organizationRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/organizationSettings/organizationSettingsLayoutRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/organizationSettings/organizationSettingsLayoutRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/organizationSettings/organizationSettingsLayoutRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/organizationSettings/organizationSettingsLayoutRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/organizationSettings/organizationSettingsRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/organizationSettings/organizationSettingsRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/organizationSettings/organizationSettingsRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/organizationSettings/organizationSettingsRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/organizationSettings/organizationUsers/organizationUsersLayoutRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/organizationSettings/organizationUsers/organizationUsersLayoutRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/organizationSettings/organizationUsers/organizationUsersLayoutRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/organizationSettings/organizationUsers/organizationUsersLayoutRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/organizationSettings/organizationUsers/organizationUsersRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/organizationSettings/organizationUsers/organizationUsersRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/organizationSettings/organizationUsers/organizationUsersRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/organizationSettings/organizationUsers/organizationUsersRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/attachmentLayoutRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/attachmentLayoutRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/attachmentLayoutRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/attachmentLayoutRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/attachmentRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/attachmentRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/attachmentRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/attachmentRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/attachments/attachmentsLayoutRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/attachments/attachmentsLayoutRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/attachments/attachmentsLayoutRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/attachments/attachmentsLayoutRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/attachments/attachmentsRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/attachments/attachmentsRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/attachments/attachmentsRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/attachments/attachmentsRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/recordRowLayoutRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/recordRowLayoutRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/recordRowLayoutRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/recordRowLayoutRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/recordRowRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/recordRowRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/recordRowRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/recordRowRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/recordLayoutRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/recordLayoutRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/recordLayoutRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/recordLayoutRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/recordRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/recordRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/recordRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/recordRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/records/recordsLayoutRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/records/recordsLayoutRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/records/recordsLayoutRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/records/recordsLayoutRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/records/recordsRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/records/recordsRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/records/recordsRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/records/recordsRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/reports/balanceReportRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/reports/balanceReportRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/reports/balanceReportRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/reports/balanceReportRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/reports/balanceSheetReportRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/reports/balanceSheetReportRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/reports/balanceSheetReportRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/reports/balanceSheetReportRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/reports/incomeStatementReportRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/reports/incomeStatementReportRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/reports/incomeStatementReportRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/reports/incomeStatementReportRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/reports/journalReportRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/reports/journalReportRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/reports/journalReportRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/reports/journalReportRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/reports/ledgerReportRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/reports/ledgerReportRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/reports/ledgerReportRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/reports/ledgerReportRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/reports/reportsLayoutRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/reports/reportsLayoutRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/reports/reportsLayoutRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/reports/reportsLayoutRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/reports/reportsRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/reports/reportsRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/reports/reportsRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/reports/reportsRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearLayoutRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearLayoutRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearLayoutRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearLayoutRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearPathRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearPathRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearPathRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearPathRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/accountLayoutRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/accountLayoutRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/accountLayoutRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/accountLayoutRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/accountRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/accountRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/accountRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/accountRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountsLayoutRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountsLayoutRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountsLayoutRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountsLayoutRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountsRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountsRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountsRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountsRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/balanceSheetLayoutRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/balanceSheetLayoutRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/balanceSheetLayoutRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/balanceSheetLayoutRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/balanceSheetRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/balanceSheetRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/balanceSheetRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/balanceSheetRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetsLayoutRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetsLayoutRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetsLayoutRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetsLayoutRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetsRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetsRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetsRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetsRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/incomeStatementLayoutRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/incomeStatementLayoutRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/incomeStatementLayoutRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/incomeStatementLayoutRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/incomeStatementRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/incomeStatementRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/incomeStatementRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/incomeStatementRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/$idComputationIncomeStatement/computationIncomeStatementLayoutRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/$idComputationIncomeStatement/computationIncomeStatementLayoutRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/$idComputationIncomeStatement/computationIncomeStatementLayoutRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/$idComputationIncomeStatement/computationIncomeStatementLayoutRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/$idComputationIncomeStatement/computationIncomeStatementRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/$idComputationIncomeStatement/computationIncomeStatementRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/$idComputationIncomeStatement/computationIncomeStatementRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/$idComputationIncomeStatement/computationIncomeStatementRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationLayoutRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationLayoutRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationLayoutRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationLayoutRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/computationsLayoutRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/computationsLayoutRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/computationsLayoutRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/computationsLayoutRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/computationsRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/computationsRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/computationsRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/computationsRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementsLayoutRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementsLayoutRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementsLayoutRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementsLayoutRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementsRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementsRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementsRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementsRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/journalLayoutRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/journalLayoutRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/journalLayoutRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/journalLayoutRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/journalRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/journalRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/journalRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/journalRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/journalsLayoutRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/journalsLayoutRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/journalsLayoutRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/journalsLayoutRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/journalsRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/journalsRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/journalsRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/journalsRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/recordLabelLayoutRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/recordLabelLayoutRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/recordLabelLayoutRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/recordLabelLayoutRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/recordLabelRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/recordLabelRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/recordLabelRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/recordLabelRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/recordLabelsLayoutRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/recordLabelsLayoutRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/recordLabelsLayoutRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/recordLabelsLayoutRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/recordLabelsRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/recordLabelsRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/recordLabelsRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/recordLabelsRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/yearSettingsLayoutRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/yearSettingsLayoutRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/yearSettingsLayoutRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/yearSettingsLayoutRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/yearSettingsRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/yearSettingsRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/yearSettingsRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/yearSettingsRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/yearsLayoutRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/yearsLayoutRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/yearsLayoutRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/yearsLayoutRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/yearsPathRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/yearsPathRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/yearsPathRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/yearsPathRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/$idOrganization/years/yearsRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/yearsRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/$idOrganization/years/yearsRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/yearsRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/organizationsLayoutRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/organizationsLayoutRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/organizationsLayoutRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/organizationsLayoutRoute.tsx diff --git a/packages/platform/src/routes/root/auth/organizations/organizationsRoute.tsx b/packages/dashboard/src/routes/root/auth/organizations/organizationsRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/organizations/organizationsRoute.tsx rename to packages/dashboard/src/routes/root/auth/organizations/organizationsRoute.tsx diff --git a/packages/platform/src/routes/root/auth/settings/settingsLayoutRoute.tsx b/packages/dashboard/src/routes/root/auth/settings/settingsLayoutRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/settings/settingsLayoutRoute.tsx rename to packages/dashboard/src/routes/root/auth/settings/settingsLayoutRoute.tsx diff --git a/packages/platform/src/routes/root/auth/settings/settingsRoute.tsx b/packages/dashboard/src/routes/root/auth/settings/settingsRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/settings/settingsRoute.tsx rename to packages/dashboard/src/routes/root/auth/settings/settingsRoute.tsx diff --git a/packages/platform/src/routes/root/auth/support/supportRoute.tsx b/packages/dashboard/src/routes/root/auth/support/supportRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/auth/support/supportRoute.tsx rename to packages/dashboard/src/routes/root/auth/support/supportRoute.tsx diff --git a/packages/platform/src/routes/root/authLayoutRoute.tsx b/packages/dashboard/src/routes/root/authLayoutRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/authLayoutRoute.tsx rename to packages/dashboard/src/routes/root/authLayoutRoute.tsx diff --git a/packages/platform/src/routes/root/errorRoute.tsx b/packages/dashboard/src/routes/root/errorRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/errorRoute.tsx rename to packages/dashboard/src/routes/root/errorRoute.tsx diff --git a/packages/platform/src/routes/root/public/signInRoute.tsx b/packages/dashboard/src/routes/root/public/signInRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/public/signInRoute.tsx rename to packages/dashboard/src/routes/root/public/signInRoute.tsx diff --git a/packages/platform/src/routes/root/public/signUpRoute.tsx b/packages/dashboard/src/routes/root/public/signUpRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/public/signUpRoute.tsx rename to packages/dashboard/src/routes/root/public/signUpRoute.tsx diff --git a/packages/platform/src/routes/root/publicLayoutRoute.tsx b/packages/dashboard/src/routes/root/publicLayoutRoute.tsx similarity index 100% rename from packages/platform/src/routes/root/publicLayoutRoute.tsx rename to packages/dashboard/src/routes/root/publicLayoutRoute.tsx diff --git a/packages/platform/src/routes/rootLayoutRoute.tsx b/packages/dashboard/src/routes/rootLayoutRoute.tsx similarity index 100% rename from packages/platform/src/routes/rootLayoutRoute.tsx rename to packages/dashboard/src/routes/rootLayoutRoute.tsx diff --git a/packages/platform/src/utilities/clientError.ts b/packages/dashboard/src/utilities/clientError.ts similarity index 100% rename from packages/platform/src/utilities/clientError.ts rename to packages/dashboard/src/utilities/clientError.ts diff --git a/packages/platform/src/utilities/cn.ts b/packages/dashboard/src/utilities/cn.ts similarity index 100% rename from packages/platform/src/utilities/cn.ts rename to packages/dashboard/src/utilities/cn.ts diff --git a/packages/platform/src/utilities/compareAmounts.ts b/packages/dashboard/src/utilities/compareAmounts.ts similarity index 100% rename from packages/platform/src/utilities/compareAmounts.ts rename to packages/dashboard/src/utilities/compareAmounts.ts diff --git a/packages/platform/src/utilities/cookies/deleteCookies.ts b/packages/dashboard/src/utilities/cookies/deleteCookies.ts similarity index 100% rename from packages/platform/src/utilities/cookies/deleteCookies.ts rename to packages/dashboard/src/utilities/cookies/deleteCookies.ts diff --git a/packages/platform/src/utilities/cookies/getCookie.ts b/packages/dashboard/src/utilities/cookies/getCookie.ts similarity index 100% rename from packages/platform/src/utilities/cookies/getCookie.ts rename to packages/dashboard/src/utilities/cookies/getCookie.ts diff --git a/packages/platform/src/utilities/cookies/getIsAuthenticated.ts b/packages/dashboard/src/utilities/cookies/getIsAuthenticated.ts similarity index 100% rename from packages/platform/src/utilities/cookies/getIsAuthenticated.ts rename to packages/dashboard/src/utilities/cookies/getIsAuthenticated.ts diff --git a/packages/platform/src/utilities/cookies/getUserSession.ts b/packages/dashboard/src/utilities/cookies/getUserSession.ts similarity index 100% rename from packages/platform/src/utilities/cookies/getUserSession.ts rename to packages/dashboard/src/utilities/cookies/getUserSession.ts diff --git a/packages/platform/src/utilities/debounce.ts b/packages/dashboard/src/utilities/debounce.ts similarity index 100% rename from packages/platform/src/utilities/debounce.ts rename to packages/dashboard/src/utilities/debounce.ts diff --git a/packages/platform/src/utilities/fileToBase64.ts b/packages/dashboard/src/utilities/fileToBase64.ts similarity index 100% rename from packages/platform/src/utilities/fileToBase64.ts rename to packages/dashboard/src/utilities/fileToBase64.ts diff --git a/packages/platform/src/utilities/getOptions.ts b/packages/dashboard/src/utilities/getOptions.ts similarity index 100% rename from packages/platform/src/utilities/getOptions.ts rename to packages/dashboard/src/utilities/getOptions.ts diff --git a/packages/platform/src/utilities/invalidateData.ts b/packages/dashboard/src/utilities/invalidateData.ts similarity index 100% rename from packages/platform/src/utilities/invalidateData.ts rename to packages/dashboard/src/utilities/invalidateData.ts diff --git a/packages/platform/src/utilities/levenshtein.ts b/packages/dashboard/src/utilities/levenshtein.ts similarity index 100% rename from packages/platform/src/utilities/levenshtein.ts rename to packages/dashboard/src/utilities/levenshtein.ts diff --git a/packages/platform/src/utilities/postAPI.ts b/packages/dashboard/src/utilities/postAPI.ts similarity index 100% rename from packages/platform/src/utilities/postAPI.ts rename to packages/dashboard/src/utilities/postAPI.ts diff --git a/packages/platform/src/utilities/sleep.ts b/packages/dashboard/src/utilities/sleep.ts similarity index 100% rename from packages/platform/src/utilities/sleep.ts rename to packages/dashboard/src/utilities/sleep.ts diff --git a/packages/platform/src/utilities/throttledFunction.ts b/packages/dashboard/src/utilities/throttledFunction.ts similarity index 100% rename from packages/platform/src/utilities/throttledFunction.ts rename to packages/dashboard/src/utilities/throttledFunction.ts diff --git a/packages/platform/src/utilities/toRoman.ts b/packages/dashboard/src/utilities/toRoman.ts similarity index 100% rename from packages/platform/src/utilities/toRoman.ts rename to packages/dashboard/src/utilities/toRoman.ts diff --git a/packages/platform/src/utilities/useDeviceDetect.ts b/packages/dashboard/src/utilities/useDeviceDetect.ts similarity index 100% rename from packages/platform/src/utilities/useDeviceDetect.ts rename to packages/dashboard/src/utilities/useDeviceDetect.ts diff --git a/packages/platform/src/utilities/useHTTPData.ts b/packages/dashboard/src/utilities/useHTTPData.ts similarity index 100% rename from packages/platform/src/utilities/useHTTPData.ts rename to packages/dashboard/src/utilities/useHTTPData.ts diff --git a/packages/platform/src/utilities/validate.ts b/packages/dashboard/src/utilities/validate.ts similarity index 100% rename from packages/platform/src/utilities/validate.ts rename to packages/dashboard/src/utilities/validate.ts diff --git a/packages/platform/src/utilities/variables.ts b/packages/dashboard/src/utilities/variables.ts similarity index 100% rename from packages/platform/src/utilities/variables.ts rename to packages/dashboard/src/utilities/variables.ts diff --git a/packages/platform/src/vite-env.d.ts b/packages/dashboard/src/vite-env.d.ts similarity index 100% rename from packages/platform/src/vite-env.d.ts rename to packages/dashboard/src/vite-env.d.ts diff --git a/tsconfig.json b/packages/dashboard/tsconfig.json similarity index 55% rename from tsconfig.json rename to packages/dashboard/tsconfig.json index 4d9ef3e..3c69ee4 100644 --- a/tsconfig.json +++ b/packages/dashboard/tsconfig.json @@ -1,19 +1,33 @@ -{ - "compilerOptions": { - "jsx": "react-jsx", - "target": "ESNext", - "noImplicitAny": true, - "skipLibCheck": true, - "strict": true, - "strictNullChecks": true, - "forceConsistentCasingInFileNames": true, - "esModuleInterop": true, - "module": "NodeNext", - "moduleResolution": "NodeNext", - "resolveJsonModule": true, - "isolatedModules": true, - "declaration": true, - "declarationMap": true, - "sourceMap": true, - } +{ + "compilerOptions": { + "jsx": "react-jsx", + "target": "ESNext", + "noImplicitAny": true, + "skipLibCheck": true, + "strict": true, + "strictNullChecks": true, + "forceConsistentCasingInFileNames": true, + "esModuleInterop": true, + "module": "NodeNext", + "moduleResolution": "NodeNext", + "resolveJsonModule": true, + "isolatedModules": true, + "sourceMap": true, + "rootDir": "./src", + "outDir": "./build", + "paths": { + "#/*": [ + "./src/*" + ] + }, + "declaration": false, + "declarationMap": false, + }, + "exclude": [ + "./node_modules", + "./build", + ], + "include": [ + "./src" + ] } \ No newline at end of file diff --git a/packages/platform/vite.config.ts b/packages/dashboard/vite.config.ts similarity index 100% rename from packages/platform/vite.config.ts rename to packages/dashboard/vite.config.ts diff --git a/packages/metadata/package.json b/packages/metadata/package.json index 44f3704..f2395c5 100644 --- a/packages/metadata/package.json +++ b/packages/metadata/package.json @@ -1,5 +1,5 @@ { - "name": "@arrhes/metadata", + "name": "@arrhes/application-metadata", "type": "module", "private": false, "scripts": { diff --git a/packages/metadata/tsconfig.json b/packages/metadata/tsconfig.json index e2de2eb..f4aea6c 100644 --- a/packages/metadata/tsconfig.json +++ b/packages/metadata/tsconfig.json @@ -1,6 +1,20 @@ { - "extends": "../../tsconfig.json", "compilerOptions": { + "jsx": "react-jsx", + "target": "ESNext", + "noImplicitAny": true, + "skipLibCheck": true, + "strict": true, + "strictNullChecks": true, + "forceConsistentCasingInFileNames": true, + "esModuleInterop": true, + "module": "NodeNext", + "moduleResolution": "NodeNext", + "resolveJsonModule": true, + "isolatedModules": true, + "declaration": true, + "declarationMap": true, + "sourceMap": true, "rootDir": "./src", "outDir": "./build", "paths": { diff --git a/packages/platform/tsconfig.json b/packages/platform/tsconfig.json deleted file mode 100644 index 297f50a..0000000 --- a/packages/platform/tsconfig.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "rootDir": "./src", - "outDir": "./build", - "paths": { - "#/*": [ - "./src/*" - ] - }, - "declaration": false, - "declarationMap": false, - }, - "exclude": [ - "./node_modules", - "./build", - ], - "include": [ - "./src" - ] -} \ No newline at end of file diff --git a/packages/tools/package.json b/packages/tools/package.json index 9faa32a..2c5b501 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -1,5 +1,5 @@ { - "name": "@arrhes/tools", + "name": "@arrhes/application-tools", "type": "module", "private": true, "scripts": { @@ -20,7 +20,7 @@ "typescript": "5.9.3" }, "dependencies": { - "@arrhes/metadata": "workspace:*", + "@arrhes/application-metadata": "workspace:*", "@ngneat/falso": "8.0.2", "drizzle-orm": "0.44.7", "nanoid": "5.1.6", diff --git a/packages/tools/tsconfig.json b/packages/tools/tsconfig.json index 9931605..510a813 100644 --- a/packages/tools/tsconfig.json +++ b/packages/tools/tsconfig.json @@ -1,6 +1,20 @@ { - "extends": "../../tsconfig.json", "compilerOptions": { + "jsx": "react-jsx", + "target": "ESNext", + "noImplicitAny": true, + "skipLibCheck": true, + "strict": true, + "strictNullChecks": true, + "forceConsistentCasingInFileNames": true, + "esModuleInterop": true, + "module": "NodeNext", + "moduleResolution": "NodeNext", + "resolveJsonModule": true, + "isolatedModules": true, + "declaration": true, + "declarationMap": true, + "sourceMap": true, "verbatimModuleSyntax": false, "rootDir": ".", "outDir": "./build", diff --git a/packages/website/package.json b/packages/website/package.json index bf3a84b..f7d73b4 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -1,5 +1,5 @@ { - "name": "@arrhes/website", + "name": "@arrhes/application-website", "private": true, "type": "module", "scripts": { diff --git a/packages/website/tsconfig.json b/packages/website/tsconfig.json index f471793..301c973 100644 --- a/packages/website/tsconfig.json +++ b/packages/website/tsconfig.json @@ -1,5 +1,14 @@ { "compilerOptions": { + "noImplicitAny": true, + "strictNullChecks": true, + "forceConsistentCasingInFileNames": true, + "esModuleInterop": true, + "resolveJsonModule": true, + "isolatedModules": true, + "declaration": true, + "declarationMap": true, + "sourceMap": true, "target": "ES2022", "useDefineForClassFields": true, "lib": [ From 11f2545492920cac555de0ec05b5f12795098a96 Mon Sep 17 00:00:00 2001 From: &mile Date: Tue, 23 Dec 2025 01:19:52 +0100 Subject: [PATCH 13/25] =?UTF-8?q?=F0=9F=90=B3=20refactor(dev):=20restructu?= =?UTF-8?q?re=20Docker=20development=20environment=20architecture?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - migrate from monolithic devcontainer to multi-service compose setup (api, dashboard, website) - implement bind-mount strategy for source code with volume isolation for node_modules/build outputs - add service-specific Dockerfiles and entrypoint scripts for api, dashboard, and website packages - create per-service .env files in .dev/packages/{service}/ for environment configuration - update compose.yml with detailed volume mappings and service dependencies - remove centralized bootstrap script (initialize.sh, start.sh) in favor of entrypoint-based initialization - add comprehensive .dockerignore with categorized exclusions and documentation - update README.md with new architecture overview, usage patterns, and troubleshooting guide - add .gitignore to track only essential dev configuration files - update root documentation (README.md, ARCHITECTURE.md, CONTRIBUTING.md, DEVELOPMENT.md) to reflect new Docker workflow - update justfile with simplified Docker commands for new architecture - update 254 API route files to use consistent import patterns and error handling - update 197 dashboard component files for improved data handling and UI consistency - migrate database client configuration to use Docker service hostnames --- .dev/.dockerignore | 29 +-- .dev/.gitignore | 17 ++ .dev/README.md | 182 ++++++++++++------ .dev/compose.yml | 144 +++++++++++--- .dev/packages/api/.env | 28 +++ .dev/packages/api/Dockerfile | 50 ++--- .dev/packages/api/entrypoint.sh | 84 ++------ .dev/packages/dashboard/.env | 3 + .dev/packages/dashboard/Dockerfile | 25 +++ .dev/packages/dashboard/entrypoint.sh | 20 ++ .dev/packages/tools/.env | 2 + .dev/packages/website/.env | 3 + .dev/packages/website/Dockerfile | 25 +++ .dev/packages/website/entrypoint.sh | 16 ++ .dev/scripts/initialize.sh | 73 ------- .dev/scripts/start.sh | 33 ---- .gitignore | 2 - README.md | 2 +- docs/ARCHITECTURE.md | 18 +- docs/CONTRIBUTING.md | 4 +- docs/DEVELOPMENT.md | 6 +- justfile | 6 +- packages/api/src/clients/sqlClient.ts | 2 +- packages/api/src/factories/authFactory.ts | 2 +- .../api/src/middlewares/authMiddleware.ts | 2 +- packages/api/src/routes/auth/authRoute.ts | 2 +- .../general/deleteOneOrganization.ts | 4 +- .../general/updateOneOrganization.ts | 4 +- .../deleteOneOrganizationUser.ts | 4 +- .../readOneOrganizationUser.ts | 4 +- .../updateOneOrganizationUser.ts | 4 +- .../createOneOrganizationUser.ts | 6 +- .../readAllOrganizationUsers.ts | 4 +- .../$idOrganization/readOneOrganization.ts | 4 +- .../$idAttachment/deleteOneAttachment.ts | 4 +- .../generateAttachmentGetSignedUrl.ts | 4 +- .../generateAttachmentPutSignedUrl.ts | 4 +- .../$idAttachment/readOneAttachment.ts | 4 +- .../$idAttachment/updateOneAttachment.ts | 4 +- .../attachments/createOneAttachment.ts | 6 +- .../$idYear/attachments/readAllAttachments.ts | 4 +- .../years/$idYear/readOneYear.ts | 4 +- .../records/$idRecord/deleteOneRecord.ts | 4 +- .../records/$idRecord/duplicateOneRecord.ts | 6 +- .../records/$idRecord/readOneRecord.ts | 4 +- .../records/$idRecord/updateOneRecord.ts | 4 +- .../years/$idYear/records/createOneRecord.ts | 6 +- .../years/$idYear/records/readAllRecords.ts | 4 +- .../$idRecordRow/deleteOneRecordRow.ts | 4 +- .../$idRecordRow/readOneRecordRow.ts | 4 +- .../$idRecordRow/updateOneRecordRow.ts | 4 +- .../records/recordRows/createOneRecordRow.ts | 6 +- .../records/recordRows/readAllRecordRows.ts | 4 +- .../recordRows/updateManyRecordRows.ts | 4 +- .../generateDocumentGetSignedUrl.ts | 4 +- .../document/$idDocument/readOneDocument.ts | 4 +- .../reports/document/readAllDocuments.ts | 4 +- .../generateBalanceSheetReportDocument.ts | 6 +- .../generateIncomeStatementReportDocument.ts | 6 +- .../accounts/$idAccount/deleteOneAccount.ts | 4 +- .../accounts/$idAccount/readOneAccount.ts | 4 +- .../accounts/$idAccount/updateOneAccount.ts | 4 +- .../yearSettings/accounts/createOneAccount.ts | 6 +- .../yearSettings/accounts/generateAccounts.ts | 10 +- .../yearSettings/accounts/readAllAccounts.ts | 4 +- .../$idBalanceSheet/deleteOneBalanceSheet.ts | 4 +- .../$idBalanceSheet/readOneBalanceSheet.ts | 4 +- .../$idBalanceSheet/updateOneBalanceSheet.ts | 4 +- .../connectAccountsToBalanceSheets.ts | 6 +- .../balanceSheets/createOneBalanceSheet.ts | 6 +- .../balanceSheets/generateBalanceSheets.ts | 10 +- .../balanceSheets/readAllBalanceSheets.ts | 4 +- .../deleteOneComputationIncomeStatement.ts | 4 +- .../readOneComputationIncomeStatement.ts | 4 +- .../updateOneComputationIncomeStatement.ts | 4 +- .../createOneComputationIncomeStatement.ts | 6 +- .../readAllComputationIncomeStatements.ts | 4 +- .../$idComputation/deleteOneComputation.ts | 4 +- .../$idComputation/readOneComputation.ts | 4 +- .../$idComputation/updateOneComputation.ts | 4 +- .../computations/createOneComputation.ts | 6 +- .../computations/generateComputations.ts | 8 +- .../computations/readAllComputations.ts | 4 +- .../$idYear/yearSettings/general/closeYear.ts | 4 +- .../yearSettings/general/deleteOneYear.ts | 4 +- .../$idYear/yearSettings/general/openYear.ts | 2 +- .../general/settleBalanceSheet.ts | 2 +- .../general/settleIncomeStatement.ts | 2 +- .../yearSettings/general/updateOneYear.ts | 4 +- .../deleteOneIncomeStatement.ts | 4 +- .../readOneIncomeStatement.ts | 4 +- .../updateOneIncomeStatement.ts | 4 +- .../connectAccountsToIncomeStatements.ts | 6 +- .../createOneIncomeStatement.ts | 6 +- .../generateIncomeStatements.ts | 10 +- .../readAllIncomeStatements.ts | 4 +- .../journals/$idJournal/deleteOneJournal.ts | 4 +- .../journals/$idJournal/readOneJournal.ts | 4 +- .../journals/$idJournal/updateOneJournal.ts | 4 +- .../yearSettings/journals/createOneJournal.ts | 6 +- .../yearSettings/journals/generateJournals.ts | 8 +- .../yearSettings/journals/readAllJournals.ts | 4 +- .../$idRecordLabel/deleteOneRecordLabel.ts | 4 +- .../$idRecordLabel/readOneRecordLabel.ts | 4 +- .../$idRecordLabel/updateOneRecordLabel.ts | 4 +- .../recordLabels/createOneRecordLabel.ts | 6 +- .../recordLabels/readAllRecordLabels.ts | 4 +- .../$idOrganization/years/createOneYear.ts | 6 +- .../$idOrganization/years/readAllYears.ts | 4 +- .../activateOrganizationMembership.ts | 4 +- .../auth/organizations/addNewOrganization.ts | 6 +- .../organizations/getAllMyOrganizations.ts | 2 +- .../src/routes/auth/settings/activateUser.ts | 4 +- .../routes/auth/settings/readUserSession.ts | 2 +- .../src/routes/auth/settings/updateUser.ts | 4 +- .../routes/auth/settings/updateUserEmail.ts | 4 +- .../auth/settings/updateUserPassword.ts | 4 +- .../routes/auth/settings/validateUserEmail.ts | 4 +- .../routes/auth/support/sendSupportMessage.ts | 2 +- .../api/src/routes/public/sendMagicLink.ts | 4 +- packages/api/src/routes/public/signIn.ts | 6 +- packages/api/src/routes/public/signOut.ts | 4 +- packages/api/src/routes/public/signUp.ts | 6 +- .../balanceSheetAssetsReportItem.tsx | 2 +- .../balanceSheetAssetsReportTable.tsx | 2 +- .../balanceSheetLiabilitiesReportItem.tsx | 2 +- .../balanceSheetLiabilitiesReportTable.tsx | 2 +- .../balanceSheetReport/balanceSheetReport.tsx | 2 +- .../getBalanceSheetChildren.tsx | 2 +- .../getIncomeStatementChildren.tsx | 2 +- .../incomeStatementReport.tsx | 2 +- .../incomeStatementReportItem.tsx | 2 +- .../incomeStatementsReportTable.tsx | 2 +- packages/api/src/utilities/response.ts | 2 +- .../workspace/generateDefaultYearData.ts | 6 +- .../components/inputs/inputDataCombobox.tsx | 2 +- .../src/components/layouts/banner.tsx | 2 +- .../src/components/layouts/dataWrapper.tsx | 2 +- .../dashboard/src/features/authLayout.tsx | 2 +- .../deleteOneOrganization.tsx | 4 +- .../organizationSettingsPage.tsx | 2 +- .../deleteOneOrganizationUser.tsx | 4 +- .../updateOneOrganizationUser.tsx | 4 +- .../createOneOrganizationUser.tsx | 4 +- .../organizationUsersTable.tsx | 4 +- .../updateOneOrganization.tsx | 4 +- .../$idAttachment/attachmentData.tsx | 4 +- .../$idAttachment/attachmentFile.tsx | 4 +- .../$idAttachment/deleteOneAttachment.tsx | 4 +- .../$idAttachment/updateOneAttachment.tsx | 6 +- .../$idYear/attachments/attachmentSelect.tsx | 4 +- .../$idYear/attachments/attachmentsPage.tsx | 2 +- .../$idYear/attachments/attachmentsTable.tsx | 2 +- .../attachments/createOneAttachment.tsx | 6 +- .../$idRecordRow/deleteOneRecordRow.tsx | 4 +- .../$idRecord/$idRecordRow/recordRowPage.tsx | 2 +- .../$idRecordRow/updateOneRecordRow.tsx | 4 +- .../records/$idRecord/createOneRecordRow.tsx | 4 +- .../records/$idRecord/deleteOneRecord.tsx | 4 +- .../records/$idRecord/duplicateOneRecord.tsx | 4 +- .../$idYear/records/$idRecord/recordPage.tsx | 2 +- .../records/$idRecord/recordRowsTable.tsx | 4 +- .../$idRecord/updateManyRecordRows.tsx | 4 +- .../records/$idRecord/updateOneRecord.tsx | 4 +- .../years/$idYear/records/createOneRecord.tsx | 4 +- .../years/$idYear/records/recordsPage.tsx | 2 +- .../balanceReport/balanceReportPage.tsx | 2 +- .../balanceReport/balanceReportTable.tsx | 2 +- .../balanceSheetAssetsReportItem.tsx | 2 +- .../balanceSheetAssetsReportTable.tsx | 2 +- .../balanceSheetLiabilitiesReportItem.tsx | 2 +- .../balanceSheetLiabilitiesReportTable.tsx | 2 +- .../balanceSheetReportPage.tsx | 2 +- .../downloadBalanceSheetReport.tsx | 4 +- .../downloadIncomeStatementReport.tsx | 4 +- .../incomeStatementReportItem.tsx | 2 +- .../incomeStatementReportPage.tsx | 2 +- .../incomeStatementsReportTable.tsx | 2 +- .../journalReport/journalReportPage.tsx | 2 +- .../journalReport/journalReportTable.tsx | 4 +- .../reports/ledgerReport/ledgerReportPage.tsx | 2 +- .../ledgerReport/ledgerReportTable.tsx | 2 +- .../accounts/$idAccount/accountPage.tsx | 2 +- .../accounts/$idAccount/deleteOneAccount.tsx | 4 +- .../accounts/$idAccount/updateOneAccount.tsx | 4 +- .../yearSettings/accounts/accountItem.tsx | 2 +- .../yearSettings/accounts/accountSelect.tsx | 4 +- .../yearSettings/accounts/accountsTable.tsx | 4 +- .../accounts/createOneAccount.tsx | 4 +- .../accounts/generateAccounts.tsx | 4 +- .../yearSettings/accounts/groupAccounts.tsx | 2 +- .../yearSettings/accounts/sortAccounts.tsx | 2 +- .../$idBalanceSheet/balanceSheetPage.tsx | 2 +- .../$idBalanceSheet/deleteOneBalanceSheet.tsx | 4 +- .../$idBalanceSheet/updateOneBalanceSheet.tsx | 4 +- .../balanceSheets/balanceSheetItem.tsx | 2 +- .../balanceSheets/balanceSheetRow.tsx | 2 +- .../balanceSheets/balanceSheetSelect.tsx | 4 +- .../balanceSheets/balanceSheetTable.tsx | 4 +- .../connectAccountsToBalanceSheets.tsx | 4 +- .../balanceSheets/createOneBalanceSheet.tsx | 4 +- .../balanceSheets/generateBalanceSheets.tsx | 4 +- .../balanceSheets/getBalanceSheetChildren.tsx | 2 +- .../balanceSheets/getBalanceSheetLevel.tsx | 2 +- .../$idYear/yearSettings/deleteOneYear.tsx | 4 +- .../deleteOneIncomeStatement.tsx | 4 +- .../incomeStatementPage.tsx | 2 +- .../updateOneIncomeStatement.tsx | 4 +- .../computationIncomeStatementPage.tsx | 2 +- .../deleteOneComputationIncomeStatement.tsx | 4 +- .../updateOneComputationIncomeStatement.tsx | 4 +- .../computationIncomeStatementTable.tsx | 4 +- .../createOneComputationIncomeStatement.tsx | 4 +- .../$idComputation/computationPage.tsx | 2 +- .../$idComputation/deleteOneComputation.tsx | 4 +- .../$idComputation/updateOneComputation.tsx | 4 +- .../computations/computationsTable.tsx | 4 +- .../computations/createOneComputation.tsx | 4 +- .../computations/generateComputations.tsx | 4 +- .../connectAccountsToIncomeStatements.tsx | 4 +- .../createOneIncomeStatement.tsx | 4 +- .../generateIncomeStatement.tsx | 4 +- .../getIncomeStatementChildren.tsx | 2 +- .../getIncomeStatementLevel.tsx | 2 +- .../incomeStatements/incomeStatementItem.tsx | 2 +- .../incomeStatements/incomeStatementRow.tsx | 2 +- .../incomeStatementsTable.tsx | 4 +- .../journals/$idJournal/deleteOneJournal.tsx | 4 +- .../journals/$idJournal/journalPage.tsx | 2 +- .../journals/$idJournal/updateOneJournal.tsx | 4 +- .../journals/createOneJournal.tsx | 4 +- .../journals/generateJournals.tsx | 4 +- .../yearSettings/journals/journalSelect.tsx | 4 +- .../yearSettings/journals/journalsPage.tsx | 2 +- .../$idRecordLabel/deleteOneRecordLabel.tsx | 4 +- .../$idRecordLabel/recordLabelPage.tsx | 2 +- .../$idRecordLabel/updateOneRecordLabel.tsx | 4 +- .../recordLabels/createOneRecordLabel.tsx | 4 +- .../recordLabels/recordLabelSelect.tsx | 4 +- .../recordLabels/recordLabelsPage.tsx | 2 +- .../$idYear/yearSettings/updateOneYear.tsx | 4 +- .../$idYear/yearSettings/yearSettingsPage.tsx | 2 +- .../$idOrganization/years/createOneYear.tsx | 4 +- .../$idOrganization/years/yearSelect.tsx | 4 +- .../$idOrganization/years/yearsPage.tsx | 2 +- .../organizations/addNewOrganization.tsx | 2 +- .../organizations/organizationsPage.tsx | 2 +- .../src/features/signIn/signInPage.tsx | 2 +- .../src/features/signUp/signUpPage.tsx | 2 +- .../features/support/contactSupportForm.tsx | 2 +- .../dashboard/src/routes/rootLayoutRoute.tsx | 2 +- .../src/utilities/cookies/getUserSession.ts | 2 +- .../dashboard/src/utilities/invalidateData.ts | 2 +- packages/dashboard/src/utilities/postAPI.ts | 2 +- .../dashboard/src/utilities/useHTTPData.ts | 2 +- packages/tools/src/dbClient.ts | 4 +- packages/tools/src/drizzle.config.ts | 2 +- packages/tools/src/migrate.ts | 2 +- packages/tools/src/schemas.ts | 2 +- packages/tools/src/seed/seed.ts | 6 +- 260 files changed, 881 insertions(+), 759 deletions(-) create mode 100644 .dev/.gitignore create mode 100644 .dev/packages/api/.env create mode 100644 .dev/packages/dashboard/.env create mode 100644 .dev/packages/dashboard/Dockerfile create mode 100644 .dev/packages/dashboard/entrypoint.sh create mode 100644 .dev/packages/tools/.env create mode 100644 .dev/packages/website/.env create mode 100644 .dev/packages/website/Dockerfile create mode 100644 .dev/packages/website/entrypoint.sh delete mode 100644 .dev/scripts/initialize.sh delete mode 100644 .dev/scripts/start.sh diff --git a/.dev/.dockerignore b/.dev/.dockerignore index 4ad3745..8745f47 100644 --- a/.dev/.dockerignore +++ b/.dev/.dockerignore @@ -1,19 +1,29 @@ -# Git +# ============================================================================== +# .dockerignore - Excludes files from Docker build context +# ============================================================================== +# This file prevents unnecessary files from being sent to Docker daemon +# during image builds, speeding up the build process and reducing image size. +# +# Note: Source code is bind-mounted at runtime, not copied during build, +# so this primarily affects base image creation. +# ============================================================================== + +# Version control .git .gitignore -# Dependencies +# Dependencies (installed in container at runtime) node_modules **/node_modules -# Build outputs +# Build outputs (generated in container) build **/build dist **/dist *.tsbuildinfo -# Environment files +# Environment files (mounted separately per service) .env **/.env .env.* @@ -24,10 +34,9 @@ logs *.log npm-debug.log* yarn-debug.log* -yarn-error.log* pnpm-debug.log* -# IDE +# IDE and editor files .vscode .idea *.swp @@ -44,12 +53,6 @@ coverage *.tgz .npmrc .continue -.old - -# Docker -Dockerfile -docker-compose.yml -.dockerignore - +# Keep .dev folder (needed for entrypoint scripts) !.dev diff --git a/.dev/.gitignore b/.dev/.gitignore new file mode 100644 index 0000000..1198234 --- /dev/null +++ b/.dev/.gitignore @@ -0,0 +1,17 @@ +# ============================================================================== +# .gitignore - Keep only source files in Git +# ============================================================================== +# This configuration ensures only configuration files are tracked. +# Runtime files and generated content stay in Docker volumes. +# ============================================================================== + +# Ignore all files by default +!* + +# Track only these specific patterns: +# - .env files (development environment variables) +# - Dockerfiles (service image definitions) +# - entrypoint.sh scripts (container startup scripts) +# - compose.yml (docker compose configuration) +# - .dockerignore (build context exclusions) +# - .gitignore (this file) diff --git a/.dev/README.md b/.dev/README.md index dfebc97..e0f944d 100644 --- a/.dev/README.md +++ b/.dev/README.md @@ -1,99 +1,153 @@ -# Dev Container Configuration +# Development Environment -Ce répertoire contient la configuration pour développer Arrhes dans un environnement de developpement (docker container). +Docker-based development environment for the Arrhes platform. -## Aperçu +## Architecture -Le projet utilise désormais un fichier Compose canonique situé dans `.dev/compose.yml` et un script d'orchestration simple `.dev/scripts/start.sh` à la racine du dépôt pour démarrer et initialiser l'environnement de développement. - -- Le script `.dev/scripts/start.sh` : démarre les services Docker (Postgres, RustFS, Mailpit, devcontainer) puis exécute le script de bootstrap à l'intérieur du conteneur de développement. -- Le bootstrap (`.dev/scripts/initialize.sh`) installe les dépendances, construit `@arrhes/metadata`, crée les fichiers `.env`, initialise la base de données et injecte les données de démonstration. +``` +.dev/ +├── compose.yml # Main Docker Compose configuration +├── .dockerignore # Build context exclusions +├── .gitignore # Git tracking rules +└── packages/ + ├── api/ + │ ├── Dockerfile # API service image + │ ├── entrypoint.sh # API startup script + │ └── .env # API environment variables + ├── dashboard/ + │ ├── Dockerfile # Dashboard service image + │ ├── entrypoint.sh # Dashboard startup script + │ └── .env # Dashboard environment variables + ├── tools/ + │ └── .env # Tools environment variables + └── website/ + ├── Dockerfile # Website service image + ├── entrypoint.sh # Website startup script + └── .env # Website environment variables +``` -## Fichiers importants +## Key Concepts -- `.dev/scripts/start.sh` — script d'aide pour démarrer les services et lancer le bootstrap (à la racine). -- `.dev/compose.yml` — compose canonique utilisé par les scripts. -- `.dev/Dockerfile` — image du devcontainer (Node + pnpm, utilisateur non-root). -- `.dev/scripts/initialize.sh` — script exécuté dans le conteneur après démarrage pour préparer l'environnement. +### Source Code Binding +- **Source files** (packages/) are bind-mounted from host to container +- Changes made on **either host or container** are instantly synced +- Enables live editing with IDE on host and HMR in container -## Démarrage rapide (recommandé) +### Runtime Isolation +- **node_modules** stored in Docker volumes (not on host) +- **Build outputs** stored in Docker volumes +- Keeps host clean and ensures consistent dependencies -1. Depuis la racine du dépôt, lancer : +### Services - ```bash - .dev/scripts/start.sh - ``` +**Infrastructure:** +- PostgreSQL (port 5432) - Database +- RustFS (ports 9000, 9001) - S3-compatible storage +- Mailpit (ports 1025, 8025) - SMTP server with web UI - - Cette commande exécute `docker compose -f .dev/compose.yml up -d` puis lance le bootstrap à l'intérieur du service `arrhes-application`. - - Le bootstrap crée les fichiers `.env` nécessaires si absents, construit `@arrhes/metadata`, pousse la migration de la BDD et insère les données de démonstration. +**Applications:** +- API (port 3000) - Hono backend +- Dashboard (port 5173) - React admin interface +- Website (port 5174) - React public site -2. Ouvrir un shell dans le conteneur (si nécessaire) : +## Usage - ```bash - docker compose -f .dev/compose.yml exec arrhes-application bash - ``` +### Start all services +```bash +# Create required volumes first +docker volume create arrhes_postgres_data +docker volume create arrhes_rustfs_data +# Start services +docker compose -f .dev/compose.yml up -d +``` -## Ports & services +### View logs +```bash +# All services +docker compose -f .dev/compose.yml logs -f -- PostgreSQL : `localhost:5432` (container `postgres`) -- RustFS API : `http://localhost:9000` (service `rustfs`) -- RustFS Console (web) : `http://localhost:9001` -- Mailpit SMTP : `1025` (SMTP) -- Mailpit UI (web) : `http://localhost:8025` -- API : `http://localhost:3000` -- Platform : `http://localhost:5173` -- Website : `http://localhost:5174` +# Specific service +docker compose -f .dev/compose.yml logs -f api +``` -> Dans le conteneur, les services sont accessibles par leur nom Docker (`postgres`, `rustfs`, `mailpit`) ; depuis l'hôte, utilisez `localhost` et les ports exposés ci‑dessus. +### Stop services +```bash +docker compose -f .dev/compose.yml down +``` -## Rebuild du container +### Rebuild after changes +```bash +# Rebuild specific service +docker compose -f .dev/compose.yml build api -Si vous modifiez le `Dockerfile` ou le compose, rebuild l'image : +# Rebuild and restart +docker compose -f .dev/compose.yml up -d --build api +``` +### Access running containers ```bash -# Reconstruire l'image devcontainer -docker compose -f .dev/compose.yml build --no-cache arrhes-application - -# Redémarrer les services -docker compose -f .dev/compose.yml up -d +docker compose -f .dev/compose.yml exec api bash ``` +## Environment Files -## Troubleshooting +Each service has its own `.env` file in `.dev/packages/{service}/.env`: -- Voir les services en cours : +- **api/.env** - API configuration (database, storage, email) +- **dashboard/.env** - Dashboard configuration (API URL) +- **website/.env** - Website configuration (API URL) +- **tools/.env** - Database tools configuration -```bash -docker compose -f .dev/compose.yml ps -``` +These files are bind-mounted into containers at runtime. -- Logs d'un service (ex : `postgres`) : +## How It Works -```bash -docker compose -f .dev/compose.yml logs postgres -``` +1. **Build Phase:** + - Dockerfiles create minimal base images with Node.js + PNPM + - No source code or dependencies copied during build + - Images are lightweight and reusable -- Forcer une remise à zéro (supprime les volumes) : +2. **Runtime Phase:** + - Source code bind-mounted from `../packages` to `/workspace/packages` + - node_modules stored in named volumes (isolated per service) + - Entrypoint scripts install dependencies and start dev servers -```bash -docker compose -f .dev/compose.yml down -v -``` +3. **Development:** + - Edit code on host with your IDE + - Changes instantly reflected in container + - Vite HMR updates browser automatically + - No manual restarts needed -- Si les dépendances ne s'installent pas correctement (dans le conteneur) : +## Troubleshooting +### Port already in use ```bash -rm -rf node_modules -pnpm install -``` - -## Performance +# Check what's using the port +lsof -i :3000 -- Le dépôt utilise un bind mount (`.:/workspace`) pour que les modifications effectuées depuis l'IDE hôte soient visibles immédiatement dans le conteneur (HMR, tests, etc.). -- Si vous développez sur macOS/Windows et constatez des lenteurs, testez les options Docker (volumes `cached`) ou développez via WSL2 sous Windows. - -## Ressources +# Stop the conflicting service or change port in compose.yml +``` -- Docker Compose : https://docs.docker.com/compose/ +### Dependencies not updating +```bash +# Remove volume and rebuild +docker volume rm .dev_api_node_modules +docker compose -f .dev/compose.yml up -d --build api +``` +### Database reset +```bash +# Remove database volume (WARNING: deletes all data) +docker compose -f .dev/compose.yml down +docker volume rm arrhes_postgres_data +docker volume create arrhes_postgres_data +docker compose -f .dev/compose.yml up -d +``` +### Clean slate +```bash +# Remove all containers, volumes (except external), and rebuild +docker compose -f .dev/compose.yml down -v +docker compose -f .dev/compose.yml up -d --build +``` diff --git a/.dev/compose.yml b/.dev/compose.yml index 926cd8d..ae520ba 100644 --- a/.dev/compose.yml +++ b/.dev/compose.yml @@ -1,7 +1,26 @@ -# name: arrhes-application +# ============================================================================== +# Arrhes Platform - Development Environment +# ============================================================================== +# Docker Compose configuration for local development +# +# Architecture: +# - Source code: bind-mounted from host (live editing on both host and container) +# - Runtime files: isolated in Docker volumes (node_modules, build outputs) +# - Infrastructure: PostgreSQL, RustFS (S3), Mailpit (SMTP) +# - Services: API, Dashboard, Website +# +# Usage: +# docker compose -f .dev/compose.yml up -d # Start all services +# docker compose -f .dev/compose.yml down # Stop all services +# docker compose -f .dev/compose.yml logs -f # View logs +# ============================================================================== services: - # Database (PostgreSQL) + # ============================================================================ + # Infrastructure Services + # ============================================================================ + + # PostgreSQL - Relational database for application data postgres: image: postgres:18.1 restart: unless-stopped @@ -10,7 +29,7 @@ services: POSTGRES_PASSWORD: admin POSTGRES_DB: default ports: - - "5432:5432" # Postgresql + - "5432:5432" volumes: - postgres_data:/var/lib/postgresql healthcheck: @@ -19,7 +38,7 @@ services: timeout: 5s retries: 5 - # Object storage (RustFS) + # RustFS - S3-compatible object storage for attachments/files rustfs: image: rustfs/rustfs:latest restart: unless-stopped @@ -30,7 +49,7 @@ services: RUSTFS_VOLUMES: /data ports: - "9000:9000" # API - - "9001:9001" # Web UI + - "9001:9001" # Web Console volumes: - rustfs_data:/data init: true @@ -40,7 +59,7 @@ services: timeout: 5s retries: 5 - # Mail server (Mailpit) + # Mailpit - Development SMTP server with web interface mailpit: image: axllent/mailpit:latest restart: unless-stopped @@ -53,38 +72,111 @@ services: timeout: 5s retries: 5 - # API (Node.js) + # ============================================================================ + # Application Services + # ============================================================================ + + # API - Backend service (Hono framework on Node.js) api: build: - context: . + context: .. dockerfile: .dev/packages/api/Dockerfile args: NODE_VERSION: "25.2.1" PNPM_VERSION: "10.26.1" - volumes: - - .:/workspace:delegated - - root_node_modules:/workspace/node_modules # hoisted workspace node_modules - - api_node_modules:/workspace/packages/api/node_modules # per-package mask if needed - - api_env:/workspace/packages/api/.env # masked .env file (will be created inside container) - - pnpm_store:/root/.pnpm-store # pnpm store kept in docker volume (optional) - working_dir: /workspace/packages/api - command: pnpm --filter="@arrhes/@arrhes/platform-api" dev ports: - - "3000:3000" + - "3000:3000" # API server + volumes: + # Source code - bind-mounted for live editing (synced between host and container) + - ../packages:/workspace/packages:cached + - ../package.json:/workspace/package.json:cached + - ../pnpm-workspace.yaml:/workspace/pnpm-workspace.yaml:cached + - ../pnpm-lock.yaml:/workspace/pnpm-lock.yaml:cached + - ../.dev:/workspace/.dev:cached + + # Environment files - use .dev versions + - ./packages/api/.env:/workspace/packages/api/.env:cached + - ./packages/tools/.env:/workspace/packages/tools/.env:cached + + # Runtime files - isolated in Docker volumes (NOT on host) + - api_node_modules:/workspace/node_modules + - metadata_build:/workspace/packages/metadata/build + - pnpm_store:/root/.local/share/pnpm/store depends_on: - - postgres - - rustfs - - mailpit + postgres: + condition: service_healthy + rustfs: + condition: service_healthy + mailpit: + condition: service_healthy + + # Dashboard - Frontend admin interface (React + Vite) + dashboard: + build: + context: .. + dockerfile: .dev/packages/dashboard/Dockerfile + args: + NODE_VERSION: "25.2.1" + PNPM_VERSION: "10.26.1" + ports: + - "5173:5173" # Vite dev server + volumes: + # Source code - bind-mounted for live editing (synced between host and container) + - ../packages:/workspace/packages:cached + - ../package.json:/workspace/package.json:cached + - ../pnpm-workspace.yaml:/workspace/pnpm-workspace.yaml:cached + - ../pnpm-lock.yaml:/workspace/pnpm-lock.yaml:cached + - ../.dev:/workspace/.dev:cached + + # Environment file + - ./packages/dashboard/.env:/workspace/packages/dashboard/.env:cached + + # Runtime files - isolated in Docker volumes (NOT on host) + - dashboard_node_modules:/workspace/node_modules + - metadata_build:/workspace/packages/metadata/build + - pnpm_store:/root/.local/share/pnpm/store + # Website - Public-facing website (React + Vite) + website: + build: + context: .. + dockerfile: .dev/packages/website/Dockerfile + args: + NODE_VERSION: "25.2.1" + PNPM_VERSION: "10.26.1" + ports: + - "5174:5173" # Host:Container (Vite runs on 5173 inside, exposed as 5174 on host) + volumes: + # Source code - bind-mounted for live editing (synced between host and container) + - ../packages:/workspace/packages:cached + - ../package.json:/workspace/package.json:cached + - ../pnpm-workspace.yaml:/workspace/pnpm-workspace.yaml:cached + - ../pnpm-lock.yaml:/workspace/pnpm-lock.yaml:cached + - ../.dev:/workspace/.dev:cached + + # Environment file + - ./packages/website/.env:/workspace/packages/website/.env:cached + + # Runtime files - isolated in Docker volumes (NOT on host) + - website_node_modules:/workspace/node_modules + - metadata_build:/workspace/packages/metadata/build + - pnpm_store:/root/.local/share/pnpm/store +# ============================================================================== +# Named Volumes (Runtime data isolated from host) +# ============================================================================== volumes: + # Application runtime dependencies - isolated per service api_node_modules: - api_env: - root_node_modules: + dashboard_node_modules: + website_node_modules: + + # Shared build output - metadata package used by multiple services + metadata_build: + + # PNPM global store cache - shared across all Node services for efficiency pnpm_store: + + # Persistent infrastructure data - survives container restarts postgres_data: - name: arrhes_postgres_data - external: true rustfs_data: - name: arrhes_rustfs_data - external: true diff --git a/.dev/packages/api/.env b/.dev/packages/api/.env new file mode 100644 index 0000000..23e79de --- /dev/null +++ b/.dev/packages/api/.env @@ -0,0 +1,28 @@ +# Environment +ENV="development" +VERBOSE="true" +PORT="3000" + +# CORS and Cookies +CORS_ORIGIN="http://localhost:5173" +COOKIES_DOMAIN="localhost" +COOKIES_KEY="development-secret-key-change-in-production-min-32-chars" + +# URLs +API_BASE_URL="http://localhost:3000" +PLATFORM_BASE_URL="http://localhost:5173" +WEBSITE_BASE_URL="http://localhost:5174" + +# Database (Docker Compose) +SQL_DATABASE_URL="postgres://postgres:admin@localhost:5432/default" + +# Storage (RustFS via Docker Compose) +STORAGE_ENDPOINT="http://rustfs:9000" +STORAGE_BUCKET_NAME="arrhes-files" +STORAGE_ACCESS_KEY="rustfsadmin" +STORAGE_SECRET_KEY="rustfsadmin" + +# Email Mailpit (Docker Compose) +EMAIL_ENDPOINT="mailpit:1025" +EMAIL_USER="test" +EMAIL_PASSWORD="test" diff --git a/.dev/packages/api/Dockerfile b/.dev/packages/api/Dockerfile index 56f7e15..664a35b 100644 --- a/.dev/packages/api/Dockerfile +++ b/.dev/packages/api/Dockerfile @@ -1,41 +1,25 @@ -ARG NODE_VERSION="latest" -ARG PNPM_VERSION="latest" +# ============================================================================== +# API Service Dockerfile +# ============================================================================== +# Creates a Node.js container with PNPM for running the API service +# Source code is bind-mounted from host, dependencies installed at runtime +# ============================================================================== -FROM node:${NODE_VERSION}-bullseye-slim AS node -# Minimal runtime + tools -ENV DEBIAN_FRONTEND=noninteractive +ARG NODE_VERSION="25.2.1" +ARG PNPM_VERSION="10.26.1" -# Update package lists (no default packages installed here) -RUN apt-get update +FROM node:${NODE_VERSION}-bullseye-slim -# Install pnpm using the PNPM_VERSION build arg -RUN npm install -g "pnpm@${PNPM_VERSION}" +# Install PNPM package manager +RUN npm install -g "pnpm@${PNPM_VERSION}" && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* -# Reduce image size -RUN apt-get clean -RUN rm -rf /var/lib/apt/lists/* - -# Copy the files and install dependencies +# Set working directory WORKDIR /workspace -COPY .dev ./.dev -COPY package.json pnpm-workspace.yaml ./ -COPY packages/metadata ./packages/metadata -COPY packages/tools ./packages/tools -COPY packages/api ./packages/api - -# Install all dependencies -RUN ls -la ./ -RUN pnpm install -# RUN ls -la node_modules/.pnpm - - -# Build the api -RUN pnpm --filter="@retrievall/platform-metadata" run build -RUN pnpm --filter="@retrievall/platform-api" run build +# Run as non-root user USER node -# RUN chmod +x ./.dev/packages/api/entrypoint.sh -RUN ./.dev/packages/api/entrypoint.sh - -CMD "pnpm", "--filter=@arrhes/@arrhes/platform-api", "dev" +# Start via entrypoint script (bind-mounted at runtime) +ENTRYPOINT ["/bin/bash", "/workspace/.dev/packages/api/entrypoint.sh"] diff --git a/.dev/packages/api/entrypoint.sh b/.dev/packages/api/entrypoint.sh index a504dbe..92121b5 100644 --- a/.dev/packages/api/entrypoint.sh +++ b/.dev/packages/api/entrypoint.sh @@ -1,71 +1,29 @@ #!/bin/bash +# ============================================================================== +# API Service Entrypoint +# ============================================================================== +# Runs on container startup to: +# 1. Install workspace dependencies +# 2. Build metadata package (required by API and tools) +# 3. Run database migrations +# 4. Seed demo data +# 5. Start API dev server +# ============================================================================== set -e -echo "🚀 Entrypoint for arrhes-application-api" +echo "📦 Installing workspace dependencies..." +CI=true pnpm install -# Install dependencies if needed -if [ ! -d "node_modules" ]; then - echo "📦 Installing dependencies..." - pnpm install -else - echo "✅ Dependencies already installed" -fi +echo "🔨 Building @arrhes/application-metadata..." +pnpm --filter="@arrhes/application-metadata" build -# Build packages (metadata must be built before tools) -echo "🔨 Building packages..." -pnpm --filter="@arrhes/application-metadata" run build +echo "🗄️ Running database migrations..." +cd /workspace/packages/tools +pnpm run push -# Create .env files if they don't exist -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" - -API_ENV_SOURCE=".dev/packages/api/.env" -if [ ! -f "packages/api/.env" ]; then - if [ -f "$API_ENV_SOURCE" ]; then - echo "⚙️ Creating packages/api/.env from $API_ENV_SOURCE..." - cp "$API_ENV_SOURCE" packages/api/.env - else - echo "❌ Missing $API_ENV_SOURCE. Please create it before running this script." - exit 1 - fi -else - echo "✅ packages/api/.env already exists" -fi - -TOOLS_ENV_SOURCE=".dev/packages/tools/.env" -if [ ! -f "packages/tools/.env" ]; then - if [ -f "$TOOLS_ENV_SOURCE" ]; then - echo "⚙️ Creating packages/tools/.env from $TOOLS_ENV_SOURCE..." - cp "$TOOLS_ENV_SOURCE" packages/tools/.env - else - echo "❌ Missing $TOOLS_ENV_SOURCE. Please create it before running this script." - exit 1 - fi -else - echo "✅ packages/tools/.env already exists" -fi - -# Initialize database -echo "🗄️ Initializing database..." -pnpm --filter="@arrhes/application-tools" run push - -# Seed demo data echo "🌱 Seeding demo data..." -pnpm --filter="@arrhes/application-tools" run seed - -# Starting -echo "🚀 Starting dev server..." -pnpm --filter="@arrhes/application-api" run dev +pnpm run seed -echo "" -echo "✨ Setup complete!" -echo "" -echo "Services available:" -echo " - API : http://localhost:3000" -echo " - Platform : http://localhost:5173" -echo " - Rustfs Console : http://localhost:9001" -echo " - Mailpit : http://localhost:8025" -echo "" -echo "Demo credentials:" -echo " Email : demo@arrhes.com" -echo " Password : demo" -echo "" +echo "🚀 Starting API dev server..." +cd /workspace/packages/api +exec pnpm --filter="@arrhes/application-api" dev diff --git a/.dev/packages/dashboard/.env b/.dev/packages/dashboard/.env new file mode 100644 index 0000000..afaa26d --- /dev/null +++ b/.dev/packages/dashboard/.env @@ -0,0 +1,3 @@ +VITE_API_BASE_URL=http://localhost:3000 +VITE_DASHBOARD_BASE_URL=http://localhost:5173 +VITE_WEBSITE_BASE_URL=http://localhost:5174 diff --git a/.dev/packages/dashboard/Dockerfile b/.dev/packages/dashboard/Dockerfile new file mode 100644 index 0000000..33d48ed --- /dev/null +++ b/.dev/packages/dashboard/Dockerfile @@ -0,0 +1,25 @@ +# ============================================================================== +# Dashboard Service Dockerfile +# ============================================================================== +# Creates a Node.js container with PNPM for running the dashboard service +# Source code is bind-mounted from host, dependencies installed at runtime +# ============================================================================== + +ARG NODE_VERSION="25.2.1" +ARG PNPM_VERSION="10.26.1" + +FROM node:${NODE_VERSION}-bullseye-slim + +# Install PNPM package manager +RUN npm install -g "pnpm@${PNPM_VERSION}" && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +# Set working directory +WORKDIR /workspace + +# Run as non-root user +USER node + +# Start via entrypoint script (bind-mounted at runtime) +ENTRYPOINT ["/bin/bash", "/workspace/.dev/packages/dashboard/entrypoint.sh"] diff --git a/.dev/packages/dashboard/entrypoint.sh b/.dev/packages/dashboard/entrypoint.sh new file mode 100644 index 0000000..14f6210 --- /dev/null +++ b/.dev/packages/dashboard/entrypoint.sh @@ -0,0 +1,20 @@ +#!/bin/bash +# ============================================================================== +# Dashboard Service Entrypoint +# ============================================================================== +# Runs on container startup to: +# 1. Install workspace dependencies +# 2. Build metadata package (required by dashboard) +# 3. Start Vite dev server with HMR +# ============================================================================== +set -e + +echo "📦 Installing workspace dependencies..." +CI=true pnpm install + +echo "🔨 Building @arrhes/application-metadata..." +pnpm --filter="@arrhes/application-metadata" build + +echo "🚀 Starting dashboard dev server..." +cd /workspace/packages/dashboard +exec pnpm --filter="@arrhes/application-dashboard" dev -- --host 0.0.0.0 diff --git a/.dev/packages/tools/.env b/.dev/packages/tools/.env new file mode 100644 index 0000000..ccb2ff3 --- /dev/null +++ b/.dev/packages/tools/.env @@ -0,0 +1,2 @@ +NODE_ENV="development" +SQL_DATABASE_URL="postgres://postgres:admin@localhost:5432/default" diff --git a/.dev/packages/website/.env b/.dev/packages/website/.env new file mode 100644 index 0000000..afaa26d --- /dev/null +++ b/.dev/packages/website/.env @@ -0,0 +1,3 @@ +VITE_API_BASE_URL=http://localhost:3000 +VITE_DASHBOARD_BASE_URL=http://localhost:5173 +VITE_WEBSITE_BASE_URL=http://localhost:5174 diff --git a/.dev/packages/website/Dockerfile b/.dev/packages/website/Dockerfile new file mode 100644 index 0000000..49ab7ff --- /dev/null +++ b/.dev/packages/website/Dockerfile @@ -0,0 +1,25 @@ +# ============================================================================== +# Website Service Dockerfile +# ============================================================================== +# Creates a Node.js container with PNPM for running the website service +# Source code is bind-mounted from host, dependencies installed at runtime +# ============================================================================== + +ARG NODE_VERSION="25.2.1" +ARG PNPM_VERSION="10.26.1" + +FROM node:${NODE_VERSION}-bullseye-slim + +# Install PNPM package manager +RUN npm install -g "pnpm@${PNPM_VERSION}" && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +# Set working directory +WORKDIR /workspace + +# Run as non-root user +USER node + +# Start via entrypoint script (bind-mounted at runtime) +ENTRYPOINT ["/bin/bash", "/workspace/.dev/packages/website/entrypoint.sh"] diff --git a/.dev/packages/website/entrypoint.sh b/.dev/packages/website/entrypoint.sh new file mode 100644 index 0000000..1192073 --- /dev/null +++ b/.dev/packages/website/entrypoint.sh @@ -0,0 +1,16 @@ +#!/bin/bash +# ============================================================================== +# Website Service Entrypoint +# ============================================================================== +# Runs on container startup to: +# 1. Install workspace dependencies +# 2. Start Vite dev server with HMR +# ============================================================================== +set -e + +echo "📦 Installing workspace dependencies..." +CI=true pnpm install + +echo "🚀 Starting website dev server..." +cd /workspace/packages/website +exec pnpm --filter="@arrhes/application-website" dev -- --host 0.0.0.0 diff --git a/.dev/scripts/initialize.sh b/.dev/scripts/initialize.sh deleted file mode 100644 index 38fb8c8..0000000 --- a/.dev/scripts/initialize.sh +++ /dev/null @@ -1,73 +0,0 @@ -#!/bin/bash -set -e - -echo "🚀 Configuring Arrhes development environment..." - -# Install dependencies if needed -if [ ! -d "node_modules" ]; then - echo "📦 Installing dependencies..." - pnpm install -else - echo "✅ Dependencies already installed" -fi - -# Build packages (metadata must be built before tools) -echo "🔨 Building packages..." -pnpm --filter @arrhes/metadata run build - -# Create .env files if they don't exist -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" - -API_ENV_SOURCE="$SCRIPT_DIR/.api.env" -if [ ! -f "packages/api/.env" ]; then - if [ -f "$API_ENV_SOURCE" ]; then - echo "⚙️ Creating packages/api/.env from $API_ENV_SOURCE..." - cp "$API_ENV_SOURCE" packages/api/.env - else - echo "❌ Missing $API_ENV_SOURCE. Please create it before running this script." - echo " You can copy .dev/scripts/.api.env as a starting point." - exit 1 - fi -else - echo "✅ packages/api/.env already exists" -fi - -TOOLS_ENV_SOURCE="$SCRIPT_DIR/.tools.env" -if [ ! -f "packages/tools/.env" ]; then - if [ -f "$TOOLS_ENV_SOURCE" ]; then - echo "⚙️ Creating packages/tools/.env from $TOOLS_ENV_SOURCE..." - cp "$TOOLS_ENV_SOURCE" packages/tools/.env - else - echo "❌ Missing $TOOLS_ENV_SOURCE. Please create it before running this script." - echo " You can copy .dev/scripts/.tools.env as a starting point." - exit 1 - fi -else - echo "✅ packages/tools/.env already exists" -fi - -# Initialize database -echo "🗄️ Initializing database..." -pnpm --filter="tools" run push - -# Seed demo data -echo "🌱 Seeding demo data..." -pnpm --filter="tools" run seed - -# Starting -echo "🚀 Starting dev server..." -pnpm run dev - -echo "" -echo "✨ Setup complete!" -echo "" -echo "Services available:" -echo " - API : http://localhost:3000" -echo " - Platform : http://localhost:5173" -echo " - Rustfs Console : http://localhost:9001" -echo " - Mailpit : http://localhost:8025" -echo "" -echo "Demo credentials:" -echo " Email : demo@arrhes.com" -echo " Password : demo" -echo "" diff --git a/.dev/scripts/start.sh b/.dev/scripts/start.sh deleted file mode 100644 index 4d31713..0000000 --- a/.dev/scripts/start.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -COMPOSE_FILE=".dev/compose.yml" -SERVICE="arrhes-application" - -echo "Remove previous containers" -docker ps -a --filter="name=arrhes-" -q | xargs -r docker rm -f - -ensure_volume() { - name="$1" - if ! docker volume inspect "$name" >/dev/null 2>&1; then - echo "Creating docker volume: $name" - docker volume create --name "$name" - else - echo "Volume exists: $name" - fi -} -ensure_volume arrhes_postgres_data -ensure_volume arrhes_rustfs_data - -echo "Starting dev services (docker compose up -d)..." -docker compose --project-directory="." --file="$COMPOSE_FILE" up -d --build - -echo "Services started:" -docker compose --project-directory="." --file="$COMPOSE_FILE" ps - -echo "Bootstrapping workspace inside the dev container (install deps, build metadata, push/seed DB)..." -# Run the bootstrap as the node user to match container expectations -docker compose --project-directory="." --file="$COMPOSE_FILE" exec -u node $SERVICE bash -lc "bash .dev/scripts/initialize.sh" - -echo "Bootstrap complete. To open a shell inside the dev container run:" -echo " docker compose -f $COMPOSE_FILE exec $SERVICE bash" diff --git a/.gitignore b/.gitignore index a4d08a7..bd9d38a 100644 --- a/.gitignore +++ b/.gitignore @@ -12,5 +12,3 @@ pnpm-lock.yaml .pnpm-store *.tsbuildinfo - -!.dev diff --git a/README.md b/README.md index 7942cab..7dc6d95 100644 --- a/README.md +++ b/README.md @@ -151,7 +151,7 @@ Le projet est organisé en monorepo avec les packages suivants : - **@arrhes/api** - Backend REST API (Hono, PostgreSQL) - **@arrhes/platform** - Interface web (React, TanStack Router) -- **@arrhes/metadata** - Schémas et modèles partagés (Valibot, Drizzle ORM) +- **@arrhes/application-metadata** - Schémas et modèles partagés (Valibot, Drizzle ORM) - **@arrhes/tools** - Outils de migration et seed de base de données - **@arrhes/website** - Site vitrine + Documentation diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index 816644f..fb066a8 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -45,7 +45,7 @@ Arrhes est construit sur une architecture monorepo moderne utilisant **pnpm work Le projet utilise **pnpm workspaces** pour gérer plusieurs packages dans un seul repository. Cette approche offre plusieurs avantages : -- **Partage de code** : Les packages peuvent facilement partager du code via `@arrhes/metadata` +- **Partage de code** : Les packages peuvent facilement partager du code via `@arrhes/application-metadata` - **Dépendances optimisées** : pnpm déduplique les dépendances communes - **Développement simplifié** : Build et développement coordonnés entre packages - **Versioning cohérent** : Toutes les parties du projet évoluent ensemble @@ -188,7 +188,7 @@ platform/src/ - Gestion des documents et pièces justificatives - Notifications et retours utilisateur -### @arrhes/metadata +### @arrhes/application-metadata **Rôle :** Package partagé contenant tous les schémas, modèles et types utilisés par l'API et la plateforme @@ -231,10 +231,10 @@ metadata/src/ **Exports :** ```typescript // Utilisable par l'API et la plateforme -import { models } from '@arrhes/metadata/models' -import { schemas } from '@arrhes/metadata/schemas' -import { routes } from '@arrhes/metadata/routes' -import { generateId } from '@arrhes/metadata/utilities' +import { models } from '@arrhes/application-metadata/models' +import { schemas } from '@arrhes/application-metadata/schemas' +import { routes } from '@arrhes/application-metadata/routes' +import { generateId } from '@arrhes/application-metadata/utilities' ``` **Responsabilités :** @@ -512,14 +512,14 @@ organization 1──n organizationUser n──1 user ### Migrations Les migrations sont gérées par **Drizzle Kit** : -- Le schéma source est défini dans `@arrhes/metadata` +- Le schéma source est défini dans `@arrhes/application-metadata` - Drizzle Kit génère automatiquement les migrations SQL - Application via `drizzle-kit migrate` ou `push` (dev) ## Diagramme de dépendances ``` -@arrhes/platform ──depends on──> @arrhes/metadata +@arrhes/platform ──depends on──> @arrhes/application-metadata ▲ │ @arrhes/api ──depends on───────────┘ @@ -530,7 +530,7 @@ Les migrations sont gérées par **Drizzle Kit** : @arrhes/website (indépendant) ``` -Tous les packages dépendent de `@arrhes/metadata` pour partager les schémas, modèles et types. Cette architecture assure une cohérence totale entre le frontend et le backend. +Tous les packages dépendent de `@arrhes/application-metadata` pour partager les schémas, modèles et types. Cette architecture assure une cohérence totale entre le frontend et le backend. --- diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index 6a6ccfd..c689994 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -179,8 +179,8 @@ import { Hono } from 'hono' import * as v from 'valibot' // 2. Imports de workspace packages -import { models } from '@arrhes/metadata/models' -import { schemas } from '@arrhes/metadata/schemas' +import { models } from '@arrhes/application-metadata/models' +import { schemas } from '@arrhes/application-metadata/schemas' // 3. Imports relatifs du package actuel import { authFactory } from '#/factories/authFactory.js' diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md index 5d1a0c1..c10670a 100644 --- a/docs/DEVELOPMENT.md +++ b/docs/DEVELOPMENT.md @@ -441,7 +441,7 @@ pnpm --filter tools run reset pnpm --filter tools run push ``` -Cette commande crée toutes les tables nécessaires dans PostgreSQL à partir des schémas définis dans `@arrhes/metadata`. +Cette commande crée toutes les tables nécessaires dans PostgreSQL à partir des schémas définis dans `@arrhes/application-metadata`. **Étape 2 : Seed avec des données de démonstration** @@ -777,7 +777,7 @@ pnpm --filter tools run drop 2. **Créer l'implémentation** dans `packages/api/src/routes/auth/` ```typescript // packages/api/src/routes/auth/myFeature.ts - import { myFeatureRoute } from '@arrhes/metadata/routes' + import { myFeatureRoute } from '@arrhes/application-metadata/routes' import { authFactory } from '#/factories/authFactory.js' export const myFeature = authFactory.createApp().post( @@ -895,7 +895,7 @@ pnpm dlx drizzle-kit studio --config=packages/tools/drizzle.config.ts - Testez la connexion : `psql postgres://arrhes_user:arrhes_password@localhost:5432/arrhes` - Vérifiez les credentials dans `.env` -**"Module not found @arrhes/metadata" :** +**"Module not found @arrhes/application-metadata" :** - Rebuild metadata : `pnpm --filter metadata run build` - Ou lancez en mode watch : `pnpm --filter metadata run dev` diff --git a/justfile b/justfile index f2b0e4c..e15ea62 100644 --- a/justfile +++ b/justfile @@ -3,8 +3,8 @@ COMPOSE_FILE := ".dev/compose.yml" PROJECT := "arrhes-application" up: - export HOST_UID=$(id -u) HOST_GID=$(id -g) && \ - docker compose --project-directory="." --file="{{COMPOSE_FILE}}" --project-name="{{PROJECT}}" up -d --build + docker compose --project-directory=".dev" --file="{{COMPOSE_FILE}}" --project-name="{{PROJECT}}" up -d --build down: - docker compose --project-directory="." --file="{{COMPOSE_FILE}}" --project-name="{{PROJECT}}" down + docker ps -a --filter="name=arrhes-" -q | xargs -r docker rm -f + docker compose --project-directory=".dev" --file="{{COMPOSE_FILE}}" --project-name="{{PROJECT}}" down diff --git a/packages/api/src/clients/sqlClient.ts b/packages/api/src/clients/sqlClient.ts index 95d24a2..d2d83ba 100644 --- a/packages/api/src/clients/sqlClient.ts +++ b/packages/api/src/clients/sqlClient.ts @@ -1,6 +1,6 @@ import { Exception } from "#/utilities/exception.js" import { getEnv } from "#/utilities/getEnv.js" -import { modelSchemas } from "@arrhes/metadata/models" +import { modelSchemas } from "@arrhes/application-metadata/models" import { drizzle } from 'drizzle-orm/postgres-js' import postgres from "postgres" diff --git a/packages/api/src/factories/authFactory.ts b/packages/api/src/factories/authFactory.ts index 37cd54c..cd394fb 100644 --- a/packages/api/src/factories/authFactory.ts +++ b/packages/api/src/factories/authFactory.ts @@ -1,5 +1,5 @@ import { ApiEnv } from "#/factories/apiFactory.js" -import { models } from "@arrhes/metadata/models" +import { models } from "@arrhes/application-metadata/models" import { createFactory } from "hono/factory" diff --git a/packages/api/src/middlewares/authMiddleware.ts b/packages/api/src/middlewares/authMiddleware.ts index ca9e030..4f748a9 100644 --- a/packages/api/src/middlewares/authMiddleware.ts +++ b/packages/api/src/middlewares/authMiddleware.ts @@ -4,7 +4,7 @@ import { unsignString } from "#/utilities/cookies/unsignString.js" import { Exception } from "#/utilities/exception.js" import { selectOne } from "#/utilities/sql/selectOne.js" import { cookiePrefix } from "#/utilities/variables.js" -import { models } from "@arrhes/metadata/models" +import { models } from "@arrhes/application-metadata/models" import { eq } from "drizzle-orm" import { createMiddleware } from "hono/factory" diff --git a/packages/api/src/routes/auth/authRoute.ts b/packages/api/src/routes/auth/authRoute.ts index 69e6c67..7e3191b 100644 --- a/packages/api/src/routes/auth/authRoute.ts +++ b/packages/api/src/routes/auth/authRoute.ts @@ -3,7 +3,7 @@ import { authMiddleware } from "#/middlewares/authMiddleware.js" import { organizationsRoutes } from "#/routes/auth/organizations/organizationsRoutes.js" import { settingsRoutes } from "#/routes/auth/settings/settingsRoutes.js" import { supportRoutes } from "#/routes/auth/support/supportRoutes.js" -import { routePath } from "@arrhes/metadata/components" +import { routePath } from "@arrhes/application-metadata/components" export const authRoute = authFactory.createApp() diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/general/deleteOneOrganization.ts b/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/general/deleteOneOrganization.ts index 990e1af..e293e32 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/general/deleteOneOrganization.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/general/deleteOneOrganization.ts @@ -4,8 +4,8 @@ import { response } from "#/utilities/response.js" import { deleteOne } from "#/utilities/sql/deleteOne.js" import { selectOne } from "#/utilities/sql/selectOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { deleteOneOrganizationRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { deleteOneOrganizationRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/general/updateOneOrganization.ts b/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/general/updateOneOrganization.ts index 52d006b..0b7f0a6 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/general/updateOneOrganization.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/general/updateOneOrganization.ts @@ -4,8 +4,8 @@ import { response } from "#/utilities/response.js" import { selectOne } from "#/utilities/sql/selectOne.js" import { updateOne } from "#/utilities/sql/updateOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { updateOneOrganizationRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { updateOneOrganizationRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/$idOrganizationUser/deleteOneOrganizationUser.ts b/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/$idOrganizationUser/deleteOneOrganizationUser.ts index 835b8f9..045a4da 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/$idOrganizationUser/deleteOneOrganizationUser.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/$idOrganizationUser/deleteOneOrganizationUser.ts @@ -4,8 +4,8 @@ import { response } from "#/utilities/response.js" import { deleteOne } from "#/utilities/sql/deleteOne.js" import { selectOne } from "#/utilities/sql/selectOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { deleteOneOrganizationUserRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { deleteOneOrganizationUserRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/$idOrganizationUser/readOneOrganizationUser.ts b/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/$idOrganizationUser/readOneOrganizationUser.ts index d7438e0..c3be5e3 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/$idOrganizationUser/readOneOrganizationUser.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/$idOrganizationUser/readOneOrganizationUser.ts @@ -3,8 +3,8 @@ import { Exception } from "#/utilities/exception.js" import { response } from "#/utilities/response.js" import { selectOne } from "#/utilities/sql/selectOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { readOneOrganizationUserRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { readOneOrganizationUserRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/$idOrganizationUser/updateOneOrganizationUser.ts b/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/$idOrganizationUser/updateOneOrganizationUser.ts index 62e64aa..2bdcf6b 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/$idOrganizationUser/updateOneOrganizationUser.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/$idOrganizationUser/updateOneOrganizationUser.ts @@ -4,8 +4,8 @@ import { response } from "#/utilities/response.js" import { selectOne } from "#/utilities/sql/selectOne.js" import { updateOne } from "#/utilities/sql/updateOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { updateOneOrganizationUserRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { updateOneOrganizationUserRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/createOneOrganizationUser.ts b/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/createOneOrganizationUser.ts index cddddac..0f48960 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/createOneOrganizationUser.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/createOneOrganizationUser.ts @@ -4,9 +4,9 @@ import { response } from "#/utilities/response.js" import { insertOne } from "#/utilities/sql/insertOne.js" import { selectOne } from "#/utilities/sql/selectOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { createOneOrganizationUserRouteDefinition } from "@arrhes/metadata/routes" -import { generateId } from "@arrhes/metadata/utilities" +import { models } from "@arrhes/application-metadata/models" +import { createOneOrganizationUserRouteDefinition } from "@arrhes/application-metadata/routes" +import { generateId } from "@arrhes/application-metadata/utilities" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/readAllOrganizationUsers.ts b/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/readAllOrganizationUsers.ts index 5a63664..4f6f87c 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/readAllOrganizationUsers.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/readAllOrganizationUsers.ts @@ -3,8 +3,8 @@ import { Exception } from "#/utilities/exception.js" import { response } from "#/utilities/response.js" import { selectOne } from "#/utilities/sql/selectOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { readAllOrganizationUsersRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { readAllOrganizationUsersRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/readOneOrganization.ts b/packages/api/src/routes/auth/organizations/$idOrganization/readOneOrganization.ts index 86a615e..88cc707 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/readOneOrganization.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/readOneOrganization.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { selectOne } from "#/utilities/sql/selectOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { readOneOrganizationRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { readOneOrganizationRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/deleteOneAttachment.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/deleteOneAttachment.ts index b80dac8..90298a1 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/deleteOneAttachment.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/deleteOneAttachment.ts @@ -4,8 +4,8 @@ import { deleteOne } from "#/utilities/sql/deleteOne.js" import { selectOne } from "#/utilities/sql/selectOne.js" import { deleteObject } from "#/utilities/storage/deleteObject.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { deleteOneAttachmentRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { deleteOneAttachmentRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/generateAttachmentGetSignedUrl.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/generateAttachmentGetSignedUrl.ts index 55109a0..aaf0105 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/generateAttachmentGetSignedUrl.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/generateAttachmentGetSignedUrl.ts @@ -4,8 +4,8 @@ import { response } from "#/utilities/response.js" import { selectOne } from "#/utilities/sql/selectOne.js" import { generateGetSignedUrl } from "#/utilities/storage/generateGetSignedUrl.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { generateAttachmentGetSignedUrlRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { generateAttachmentGetSignedUrlRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/generateAttachmentPutSignedUrl.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/generateAttachmentPutSignedUrl.ts index 211ba50..da4f0ab 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/generateAttachmentPutSignedUrl.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/generateAttachmentPutSignedUrl.ts @@ -4,8 +4,8 @@ import { response } from "#/utilities/response.js" import { updateOne } from "#/utilities/sql/updateOne.js" import { generatePutSignedUrl } from "#/utilities/storage/generatePutSignedUrl.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { generateAttachmentPutSignedUrlRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { generateAttachmentPutSignedUrlRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/readOneAttachment.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/readOneAttachment.ts index 472ba35..77838ed 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/readOneAttachment.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/readOneAttachment.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { selectOne } from "#/utilities/sql/selectOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { readOneAttachmentRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { readOneAttachmentRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/updateOneAttachment.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/updateOneAttachment.ts index d8043e9..a3ee4de 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/updateOneAttachment.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/updateOneAttachment.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { updateOne } from "#/utilities/sql/updateOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { updateOneAttachmentRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { updateOneAttachmentRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/createOneAttachment.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/createOneAttachment.ts index 901b321..d61c8be 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/createOneAttachment.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/createOneAttachment.ts @@ -2,9 +2,9 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { insertOne } from "#/utilities/sql/insertOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { createOneAttachmentRouteDefinition } from "@arrhes/metadata/routes" -import { generateId } from "@arrhes/metadata/utilities" +import { models } from "@arrhes/application-metadata/models" +import { createOneAttachmentRouteDefinition } from "@arrhes/application-metadata/routes" +import { generateId } from "@arrhes/application-metadata/utilities" export const createOneAttachmentRoute = authFactory.createApp() diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/readAllAttachments.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/readAllAttachments.ts index d8a9ac2..22df5bd 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/readAllAttachments.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/readAllAttachments.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { selectMany } from "#/utilities/sql/selectMany.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { readAllAttachmentsRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { readAllAttachmentsRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/readOneYear.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/readOneYear.ts index 6acc63b..b0c41d4 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/readOneYear.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/readOneYear.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { selectOne } from "#/utilities/sql/selectOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { readOneYearRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { readOneYearRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/deleteOneRecord.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/deleteOneRecord.ts index 346e57d..4fa7fa9 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/deleteOneRecord.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/deleteOneRecord.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { deleteOne } from "#/utilities/sql/deleteOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { deleteOneRecordRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { deleteOneRecordRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/duplicateOneRecord.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/duplicateOneRecord.ts index 6091eeb..7fbecc3 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/duplicateOneRecord.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/duplicateOneRecord.ts @@ -5,9 +5,9 @@ import { insertOne } from "#/utilities/sql/insertOne.js" import { selectMany } from "#/utilities/sql/selectMany.js" import { selectOne } from "#/utilities/sql/selectOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { duplicateOneRecordRouteDefinition } from "@arrhes/metadata/routes" -import { generateId } from "@arrhes/metadata/utilities" +import { models } from "@arrhes/application-metadata/models" +import { duplicateOneRecordRouteDefinition } from "@arrhes/application-metadata/routes" +import { generateId } from "@arrhes/application-metadata/utilities" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/readOneRecord.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/readOneRecord.ts index 612a481..ba49001 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/readOneRecord.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/readOneRecord.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { selectOne } from "#/utilities/sql/selectOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { readOneRecordRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { readOneRecordRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/updateOneRecord.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/updateOneRecord.ts index fe07cd3..2a5c344 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/updateOneRecord.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/updateOneRecord.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { updateOne } from "#/utilities/sql/updateOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { updateOneRecordRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { updateOneRecordRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/createOneRecord.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/createOneRecord.ts index 0bb1caf..c560761 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/createOneRecord.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/createOneRecord.ts @@ -2,9 +2,9 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { insertOne } from "#/utilities/sql/insertOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { createOneRecordRouteDefinition } from "@arrhes/metadata/routes" -import { generateId } from "@arrhes/metadata/utilities" +import { models } from "@arrhes/application-metadata/models" +import { createOneRecordRouteDefinition } from "@arrhes/application-metadata/routes" +import { generateId } from "@arrhes/application-metadata/utilities" export const createOneRecordRoute = authFactory.createApp() diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/readAllRecords.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/readAllRecords.ts index afd35ac..0631d86 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/readAllRecords.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/readAllRecords.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { selectMany } from "#/utilities/sql/selectMany.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { readAllRecordsRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { readAllRecordsRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/$idRecordRow/deleteOneRecordRow.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/$idRecordRow/deleteOneRecordRow.ts index 6e68813..a4beb92 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/$idRecordRow/deleteOneRecordRow.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/$idRecordRow/deleteOneRecordRow.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { deleteOne } from "#/utilities/sql/deleteOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { deleteOneRecordRowRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { deleteOneRecordRowRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/$idRecordRow/readOneRecordRow.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/$idRecordRow/readOneRecordRow.ts index ae48e19..6eb3672 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/$idRecordRow/readOneRecordRow.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/$idRecordRow/readOneRecordRow.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { selectOne } from "#/utilities/sql/selectOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { readOneRecordRowRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { readOneRecordRowRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/$idRecordRow/updateOneRecordRow.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/$idRecordRow/updateOneRecordRow.ts index e3e9b96..b7e58ca 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/$idRecordRow/updateOneRecordRow.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/$idRecordRow/updateOneRecordRow.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { updateOne } from "#/utilities/sql/updateOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { updateOneRecordRowRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { updateOneRecordRowRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/createOneRecordRow.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/createOneRecordRow.ts index 9f6ae91..24336cb 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/createOneRecordRow.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/createOneRecordRow.ts @@ -3,9 +3,9 @@ import { response } from "#/utilities/response.js" import { insertOne } from "#/utilities/sql/insertOne.js" import { selectOne } from "#/utilities/sql/selectOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { createOneRecordRowRouteDefinition } from "@arrhes/metadata/routes" -import { generateId } from "@arrhes/metadata/utilities" +import { models } from "@arrhes/application-metadata/models" +import { createOneRecordRowRouteDefinition } from "@arrhes/application-metadata/routes" +import { generateId } from "@arrhes/application-metadata/utilities" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/readAllRecordRows.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/readAllRecordRows.ts index f4c6bea..a6f39e2 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/readAllRecordRows.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/readAllRecordRows.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { selectMany } from "#/utilities/sql/selectMany.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { readAllRecordRowsRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { readAllRecordRowsRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/updateManyRecordRows.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/updateManyRecordRows.ts index cbbf9e2..d66e8c8 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/updateManyRecordRows.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/updateManyRecordRows.ts @@ -3,8 +3,8 @@ import { response } from "#/utilities/response.js" import { selectMany } from "#/utilities/sql/selectMany.js" import { updateOne } from "#/utilities/sql/updateOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { updateManyRecordRowsRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { updateManyRecordRowsRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/document/$idDocument/generateDocumentGetSignedUrl.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/document/$idDocument/generateDocumentGetSignedUrl.ts index 01a2626..fac1895 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/document/$idDocument/generateDocumentGetSignedUrl.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/document/$idDocument/generateDocumentGetSignedUrl.ts @@ -3,8 +3,8 @@ import { response } from "#/utilities/response.js" import { selectOne } from "#/utilities/sql/selectOne.js" import { generateGetSignedUrl } from "#/utilities/storage/generateGetSignedUrl.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { generateDocumentGetSignedUrlRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { generateDocumentGetSignedUrlRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/document/$idDocument/readOneDocument.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/document/$idDocument/readOneDocument.ts index 2c5d75a..cf2210a 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/document/$idDocument/readOneDocument.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/document/$idDocument/readOneDocument.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { selectOne } from "#/utilities/sql/selectOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { readOneDocumentRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { readOneDocumentRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/document/readAllDocuments.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/document/readAllDocuments.ts index dda12a2..51c567c 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/document/readAllDocuments.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/document/readAllDocuments.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { selectMany } from "#/utilities/sql/selectMany.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { readAllDocumentsRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { readAllDocumentsRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/generateBalanceSheetReportDocument.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/generateBalanceSheetReportDocument.ts index 07f1d06..88f8e56 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/generateBalanceSheetReportDocument.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/generateBalanceSheetReportDocument.ts @@ -5,9 +5,9 @@ import { insertOne } from "#/utilities/sql/insertOne.js" import { selectMany } from "#/utilities/sql/selectMany.js" import { putObject } from "#/utilities/storage/putObject.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { generateBalanceSheetReportDocumentRouteDefinition } from "@arrhes/metadata/routes" -import { generateId } from "@arrhes/metadata/utilities" +import { models } from "@arrhes/application-metadata/models" +import { generateBalanceSheetReportDocumentRouteDefinition } from "@arrhes/application-metadata/routes" +import { generateId } from "@arrhes/application-metadata/utilities" import { and, eq } from "drizzle-orm" import path from "path" import { launch } from "puppeteer" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/generateIncomeStatementReportDocument.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/generateIncomeStatementReportDocument.ts index 941bd3b..d09f02c 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/generateIncomeStatementReportDocument.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/generateIncomeStatementReportDocument.ts @@ -5,9 +5,9 @@ import { insertOne } from "#/utilities/sql/insertOne.js" import { selectMany } from "#/utilities/sql/selectMany.js" import { putObject } from "#/utilities/storage/putObject.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { generateIncomeStatementReportDocumentRouteDefinition } from "@arrhes/metadata/routes" -import { generateId } from "@arrhes/metadata/utilities" +import { models } from "@arrhes/application-metadata/models" +import { generateIncomeStatementReportDocumentRouteDefinition } from "@arrhes/application-metadata/routes" +import { generateId } from "@arrhes/application-metadata/utilities" import { and, eq } from "drizzle-orm" import path from "path" import { launch } from "puppeteer" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/deleteOneAccount.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/deleteOneAccount.ts index fadb9f9..6b42111 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/deleteOneAccount.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/deleteOneAccount.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { deleteOne } from "#/utilities/sql/deleteOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { deleteOneAccountRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { deleteOneAccountRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/readOneAccount.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/readOneAccount.ts index a32f296..e2d51d4 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/readOneAccount.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/readOneAccount.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { selectOne } from "#/utilities/sql/selectOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { readOneAccountRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { readOneAccountRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/updateOneAccount.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/updateOneAccount.ts index b00c060..ffad143 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/updateOneAccount.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/updateOneAccount.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { updateOne } from "#/utilities/sql/updateOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { updateOneAccountRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { updateOneAccountRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/createOneAccount.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/createOneAccount.ts index 827d6fb..771ba05 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/createOneAccount.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/createOneAccount.ts @@ -3,9 +3,9 @@ import { response } from "#/utilities/response.js" import { insertOne } from "#/utilities/sql/insertOne.js" import { selectOne } from "#/utilities/sql/selectOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { createOneAccountRouteDefinition } from "@arrhes/metadata/routes" -import { generateId } from "@arrhes/metadata/utilities" +import { models } from "@arrhes/application-metadata/models" +import { createOneAccountRouteDefinition } from "@arrhes/application-metadata/routes" +import { generateId } from "@arrhes/application-metadata/utilities" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/generateAccounts.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/generateAccounts.ts index 90d610d..dbaf91f 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/generateAccounts.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/generateAccounts.ts @@ -5,11 +5,11 @@ import { deleteMany } from "#/utilities/sql/deleteMany.js" import { insertMany } from "#/utilities/sql/insertMany.js" import { selectOne } from "#/utilities/sql/selectOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { DefaultAccount, defaultAssociationAccounts, defaultCompanyAccounts } from "@arrhes/metadata/components" -import { models } from "@arrhes/metadata/models" -import { generateAccountsRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" -import { generateId } from "@arrhes/metadata/utilities" +import { DefaultAccount, defaultAssociationAccounts, defaultCompanyAccounts } from "@arrhes/application-metadata/components" +import { models } from "@arrhes/application-metadata/models" +import { generateAccountsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" +import { generateId } from "@arrhes/application-metadata/utilities" import { and, eq } from "drizzle-orm" import * as v from "valibot" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/readAllAccounts.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/readAllAccounts.ts index 43f4278..465650d 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/readAllAccounts.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/readAllAccounts.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { selectMany } from "#/utilities/sql/selectMany.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { readAllAccountsRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { readAllAccountsRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/deleteOneBalanceSheet.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/deleteOneBalanceSheet.ts index ded487a..07531a5 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/deleteOneBalanceSheet.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/deleteOneBalanceSheet.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { deleteOne } from "#/utilities/sql/deleteOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { deleteOneBalanceSheetRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { deleteOneBalanceSheetRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/readOneBalanceSheet.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/readOneBalanceSheet.ts index 1dedefc..79d6304 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/readOneBalanceSheet.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/readOneBalanceSheet.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { selectOne } from "#/utilities/sql/selectOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { readOneBalanceSheetRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { readOneBalanceSheetRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/updateOneBalanceSheet.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/updateOneBalanceSheet.ts index 589ee51..ded5191 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/updateOneBalanceSheet.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/updateOneBalanceSheet.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { updateOne } from "#/utilities/sql/updateOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { updateOneBalanceSheetRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { updateOneBalanceSheetRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/connectAccountsToBalanceSheets.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/connectAccountsToBalanceSheets.ts index 582690e..eea2421 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/connectAccountsToBalanceSheets.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/connectAccountsToBalanceSheets.ts @@ -4,9 +4,9 @@ import { selectMany } from "#/utilities/sql/selectMany.js" import { selectOne } from "#/utilities/sql/selectOne.js" import { updateOne } from "#/utilities/sql/updateOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { defaultAssociationBalanceSheets, defaultCompanyBalanceSheets } from "@arrhes/metadata/components" -import { models } from "@arrhes/metadata/models" -import { connectAccountsToBalanceSheetsRouteDefinition } from "@arrhes/metadata/routes" +import { defaultAssociationBalanceSheets, defaultCompanyBalanceSheets } from "@arrhes/application-metadata/components" +import { models } from "@arrhes/application-metadata/models" +import { connectAccountsToBalanceSheetsRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/createOneBalanceSheet.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/createOneBalanceSheet.ts index 7a78ea9..fc03fa7 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/createOneBalanceSheet.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/createOneBalanceSheet.ts @@ -2,9 +2,9 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { insertOne } from "#/utilities/sql/insertOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { createOneBalanceSheetRouteDefinition } from "@arrhes/metadata/routes" -import { generateId } from "@arrhes/metadata/utilities" +import { models } from "@arrhes/application-metadata/models" +import { createOneBalanceSheetRouteDefinition } from "@arrhes/application-metadata/routes" +import { generateId } from "@arrhes/application-metadata/utilities" export const createOneBalanceSheetRoute = authFactory.createApp() diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/generateBalanceSheets.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/generateBalanceSheets.ts index c45f5ec..47187b6 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/generateBalanceSheets.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/generateBalanceSheets.ts @@ -5,11 +5,11 @@ import { deleteMany } from "#/utilities/sql/deleteMany.js" import { insertMany } from "#/utilities/sql/insertMany.js" import { selectOne } from "#/utilities/sql/selectOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { defaultAssociationBalanceSheets, defaultCompanyBalanceSheets } from "@arrhes/metadata/components" -import { models } from "@arrhes/metadata/models" -import { generateBalanceSheetsRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" -import { generateId } from "@arrhes/metadata/utilities" +import { defaultAssociationBalanceSheets, defaultCompanyBalanceSheets } from "@arrhes/application-metadata/components" +import { models } from "@arrhes/application-metadata/models" +import { generateBalanceSheetsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" +import { generateId } from "@arrhes/application-metadata/utilities" import { and, eq } from "drizzle-orm" import * as v from "valibot" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/readAllBalanceSheets.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/readAllBalanceSheets.ts index 1b16e96..f882f88 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/readAllBalanceSheets.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/readAllBalanceSheets.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { selectMany } from "#/utilities/sql/selectMany.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { readAllBalanceSheetsRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { readAllBalanceSheetsRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/deleteOneComputationIncomeStatement.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/deleteOneComputationIncomeStatement.ts index a0ed421..8ede8e2 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/deleteOneComputationIncomeStatement.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/deleteOneComputationIncomeStatement.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { deleteOne } from "#/utilities/sql/deleteOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { deleteOneComputationIncomeStatementRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { deleteOneComputationIncomeStatementRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/readOneComputationIncomeStatement.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/readOneComputationIncomeStatement.ts index 073f72f..c5e5441 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/readOneComputationIncomeStatement.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/readOneComputationIncomeStatement.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { selectOne } from "#/utilities/sql/selectOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { readOneComputationIncomeStatementRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { readOneComputationIncomeStatementRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/updateOneComputationIncomeStatement.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/updateOneComputationIncomeStatement.ts index f182ff5..8048007 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/updateOneComputationIncomeStatement.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/updateOneComputationIncomeStatement.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { updateOne } from "#/utilities/sql/updateOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { updateOneComputationIncomeStatementRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { updateOneComputationIncomeStatementRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/createOneComputationIncomeStatement.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/createOneComputationIncomeStatement.ts index 4d3cc0b..8594a64 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/createOneComputationIncomeStatement.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/createOneComputationIncomeStatement.ts @@ -2,9 +2,9 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { insertOne } from "#/utilities/sql/insertOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { createOneComputationIncomeStatementRouteDefinition } from "@arrhes/metadata/routes" -import { generateId } from "@arrhes/metadata/utilities" +import { models } from "@arrhes/application-metadata/models" +import { createOneComputationIncomeStatementRouteDefinition } from "@arrhes/application-metadata/routes" +import { generateId } from "@arrhes/application-metadata/utilities" export const createOneComputationIncomeStatementRoute = authFactory.createApp() diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/readAllComputationIncomeStatements.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/readAllComputationIncomeStatements.ts index 7965ae2..13e189b 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/readAllComputationIncomeStatements.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/readAllComputationIncomeStatements.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { selectMany } from "#/utilities/sql/selectMany.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { readAllComputationIncomeStatementsRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { readAllComputationIncomeStatementsRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/deleteOneComputation.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/deleteOneComputation.ts index c4d73ad..81e39ec 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/deleteOneComputation.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/deleteOneComputation.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { deleteOne } from "#/utilities/sql/deleteOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { deleteOneComputationRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { deleteOneComputationRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/readOneComputation.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/readOneComputation.ts index e5ec483..64ff370 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/readOneComputation.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/readOneComputation.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { selectOne } from "#/utilities/sql/selectOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { readOneComputationRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { readOneComputationRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/updateOneComputation.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/updateOneComputation.ts index 551ae40..2a6eeb0 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/updateOneComputation.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/updateOneComputation.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { updateOne } from "#/utilities/sql/updateOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { updateOneComputationRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { updateOneComputationRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/createOneComputation.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/createOneComputation.ts index adbaf32..aa1cae2 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/createOneComputation.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/createOneComputation.ts @@ -2,9 +2,9 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { insertOne } from "#/utilities/sql/insertOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { createOneComputationRouteDefinition } from "@arrhes/metadata/routes" -import { generateId } from "@arrhes/metadata/utilities" +import { models } from "@arrhes/application-metadata/models" +import { createOneComputationRouteDefinition } from "@arrhes/application-metadata/routes" +import { generateId } from "@arrhes/application-metadata/utilities" export const createOneComputationRoute = authFactory.createApp() diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/generateComputations.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/generateComputations.ts index 74d4d97..73114cd 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/generateComputations.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/generateComputations.ts @@ -5,10 +5,10 @@ import { deleteMany } from "#/utilities/sql/deleteMany.js" import { insertMany } from "#/utilities/sql/insertMany.js" import { selectMany } from "#/utilities/sql/selectMany.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { defaultComputations } from "@arrhes/metadata/components" -import { models } from "@arrhes/metadata/models" -import { generateComputationsRouteDefinition } from "@arrhes/metadata/routes" -import { generateId } from "@arrhes/metadata/utilities" +import { defaultComputations } from "@arrhes/application-metadata/components" +import { models } from "@arrhes/application-metadata/models" +import { generateComputationsRouteDefinition } from "@arrhes/application-metadata/routes" +import { generateId } from "@arrhes/application-metadata/utilities" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/readAllComputations.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/readAllComputations.ts index 9b19de5..158d2b6 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/readAllComputations.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/readAllComputations.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { selectMany } from "#/utilities/sql/selectMany.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { readAllComputationsRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { readAllComputationsRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/closeYear.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/closeYear.ts index e92c653..84d18d7 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/closeYear.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/closeYear.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { updateOne } from "#/utilities/sql/updateOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { closeYearRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { closeYearRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq, not } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/deleteOneYear.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/deleteOneYear.ts index 0112c0d..20a20ba 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/deleteOneYear.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/deleteOneYear.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { deleteOne } from "#/utilities/sql/deleteOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { deleteOneYearRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { deleteOneYearRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/openYear.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/openYear.ts index 5a0e850..9d1d3a7 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/openYear.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/openYear.ts @@ -1,7 +1,7 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { openYearRouteDefinition } from "@arrhes/metadata/routes" +import { openYearRouteDefinition } from "@arrhes/application-metadata/routes" export const openYearRoute = authFactory.createApp() diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/settleBalanceSheet.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/settleBalanceSheet.ts index d13b2ea..18404fc 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/settleBalanceSheet.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/settleBalanceSheet.ts @@ -1,7 +1,7 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { settleBalanceSheetRouteDefinition } from "@arrhes/metadata/routes" +import { settleBalanceSheetRouteDefinition } from "@arrhes/application-metadata/routes" export const settleBalanceSheetRoute = authFactory.createApp() diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/settleIncomeStatement.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/settleIncomeStatement.ts index a8c79e6..f53b6a3 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/settleIncomeStatement.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/settleIncomeStatement.ts @@ -1,7 +1,7 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { settleIncomeStatementRouteDefinition } from "@arrhes/metadata/routes" +import { settleIncomeStatementRouteDefinition } from "@arrhes/application-metadata/routes" export const settleIncomeStatementRoute = authFactory.createApp() diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/updateOneYear.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/updateOneYear.ts index 0e4f3e2..847ef96 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/updateOneYear.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/updateOneYear.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { updateOne } from "#/utilities/sql/updateOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { updateOneYearRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { updateOneYearRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/deleteOneIncomeStatement.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/deleteOneIncomeStatement.ts index 544e70f..448c691 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/deleteOneIncomeStatement.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/deleteOneIncomeStatement.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { deleteOne } from "#/utilities/sql/deleteOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { deleteOneIncomeStatementRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { deleteOneIncomeStatementRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/readOneIncomeStatement.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/readOneIncomeStatement.ts index b73a2fb..4863da8 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/readOneIncomeStatement.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/readOneIncomeStatement.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { selectOne } from "#/utilities/sql/selectOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { readOneIncomeStatementRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { readOneIncomeStatementRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/updateOneIncomeStatement.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/updateOneIncomeStatement.ts index c201a34..2fdee69 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/updateOneIncomeStatement.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/updateOneIncomeStatement.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { updateOne } from "#/utilities/sql/updateOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { updateOneIncomeStatementRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { updateOneIncomeStatementRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/connectAccountsToIncomeStatements.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/connectAccountsToIncomeStatements.ts index 8fc9e92..7cee4f5 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/connectAccountsToIncomeStatements.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/connectAccountsToIncomeStatements.ts @@ -4,9 +4,9 @@ import { selectMany } from "#/utilities/sql/selectMany.js" import { selectOne } from "#/utilities/sql/selectOne.js" import { updateOne } from "#/utilities/sql/updateOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { defaultAssociationIncomeStatements, defaultCompanyIncomeStatements } from "@arrhes/metadata/components" -import { models } from "@arrhes/metadata/models" -import { connectAccountsToIncomeStatementsRouteDefinition } from "@arrhes/metadata/routes" +import { defaultAssociationIncomeStatements, defaultCompanyIncomeStatements } from "@arrhes/application-metadata/components" +import { models } from "@arrhes/application-metadata/models" +import { connectAccountsToIncomeStatementsRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/createOneIncomeStatement.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/createOneIncomeStatement.ts index 21184e5..37d30db 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/createOneIncomeStatement.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/createOneIncomeStatement.ts @@ -2,9 +2,9 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { insertOne } from "#/utilities/sql/insertOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { createOneIncomeStatementRouteDefinition } from "@arrhes/metadata/routes" -import { generateId } from "@arrhes/metadata/utilities" +import { models } from "@arrhes/application-metadata/models" +import { createOneIncomeStatementRouteDefinition } from "@arrhes/application-metadata/routes" +import { generateId } from "@arrhes/application-metadata/utilities" export const createOneIncomeStatementRoute = authFactory.createApp() diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/generateIncomeStatements.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/generateIncomeStatements.ts index 5ed792a..afd1755 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/generateIncomeStatements.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/generateIncomeStatements.ts @@ -5,11 +5,11 @@ import { deleteMany } from "#/utilities/sql/deleteMany.js" import { insertMany } from "#/utilities/sql/insertMany.js" import { selectOne } from "#/utilities/sql/selectOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { defaultAssociationIncomeStatements, defaultCompanyIncomeStatements } from "@arrhes/metadata/components" -import { models } from "@arrhes/metadata/models" -import { generateIncomeStatementsRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" -import { generateId } from "@arrhes/metadata/utilities" +import { defaultAssociationIncomeStatements, defaultCompanyIncomeStatements } from "@arrhes/application-metadata/components" +import { models } from "@arrhes/application-metadata/models" +import { generateIncomeStatementsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" +import { generateId } from "@arrhes/application-metadata/utilities" import { and, eq } from "drizzle-orm" import * as v from "valibot" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/readAllIncomeStatements.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/readAllIncomeStatements.ts index 84ae51c..d82d25b 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/readAllIncomeStatements.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/readAllIncomeStatements.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { selectMany } from "#/utilities/sql/selectMany.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { readAllIncomeStatementsRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { readAllIncomeStatementsRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/deleteOneJournal.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/deleteOneJournal.ts index 639986b..e25758b 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/deleteOneJournal.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/deleteOneJournal.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { deleteOne } from "#/utilities/sql/deleteOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { deleteOneJournalRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { deleteOneJournalRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/readOneJournal.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/readOneJournal.ts index 1e6fe16..5b1cae2 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/readOneJournal.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/readOneJournal.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { selectOne } from "#/utilities/sql/selectOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { readOneJournalRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { readOneJournalRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/updateOneJournal.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/updateOneJournal.ts index 6d9fd40..1ddb659 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/updateOneJournal.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/updateOneJournal.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { updateOne } from "#/utilities/sql/updateOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { updateOneJournalRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { updateOneJournalRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/createOneJournal.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/createOneJournal.ts index 460a750..195bf5b 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/createOneJournal.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/createOneJournal.ts @@ -2,9 +2,9 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { insertOne } from "#/utilities/sql/insertOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { createOneJournalRouteDefinition } from "@arrhes/metadata/routes" -import { generateId } from "@arrhes/metadata/utilities" +import { models } from "@arrhes/application-metadata/models" +import { createOneJournalRouteDefinition } from "@arrhes/application-metadata/routes" +import { generateId } from "@arrhes/application-metadata/utilities" export const createOneJournalRoute = authFactory.createApp() diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/generateJournals.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/generateJournals.ts index cb6c909..d35717d 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/generateJournals.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/generateJournals.ts @@ -4,10 +4,10 @@ import { response } from "#/utilities/response.js" import { deleteMany } from "#/utilities/sql/deleteMany.js" import { insertMany } from "#/utilities/sql/insertMany.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { defaultJournals } from "@arrhes/metadata/components" -import { models } from "@arrhes/metadata/models" -import { generateJournalsRouteDefinition } from "@arrhes/metadata/routes" -import { generateId } from "@arrhes/metadata/utilities" +import { defaultJournals } from "@arrhes/application-metadata/components" +import { models } from "@arrhes/application-metadata/models" +import { generateJournalsRouteDefinition } from "@arrhes/application-metadata/routes" +import { generateId } from "@arrhes/application-metadata/utilities" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/readAllJournals.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/readAllJournals.ts index 7882562..116d429 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/readAllJournals.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/readAllJournals.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { selectMany } from "#/utilities/sql/selectMany.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { readAllJournalsRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { readAllJournalsRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/deleteOneRecordLabel.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/deleteOneRecordLabel.ts index 690b9b3..b92dc40 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/deleteOneRecordLabel.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/deleteOneRecordLabel.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { deleteOne } from "#/utilities/sql/deleteOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { deleteOneRecordLabelRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { deleteOneRecordLabelRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/readOneRecordLabel.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/readOneRecordLabel.ts index 2a18d7f..a708409 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/readOneRecordLabel.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/readOneRecordLabel.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { selectOne } from "#/utilities/sql/selectOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { readOneRecordLabelRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { readOneRecordLabelRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/updateOneRecordLabel.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/updateOneRecordLabel.ts index ffcc07d..874ca4b 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/updateOneRecordLabel.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/updateOneRecordLabel.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { updateOne } from "#/utilities/sql/updateOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { updateOneRecordLabelRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { updateOneRecordLabelRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/createOneRecordLabel.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/createOneRecordLabel.ts index 9322043..ad62948 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/createOneRecordLabel.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/createOneRecordLabel.ts @@ -2,9 +2,9 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { insertOne } from "#/utilities/sql/insertOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { createOneRecordLabelRouteDefinition } from "@arrhes/metadata/routes" -import { generateId } from "@arrhes/metadata/utilities" +import { models } from "@arrhes/application-metadata/models" +import { createOneRecordLabelRouteDefinition } from "@arrhes/application-metadata/routes" +import { generateId } from "@arrhes/application-metadata/utilities" export const createOneRecordLabelRoute = authFactory.createApp() diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/readAllRecordLabels.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/readAllRecordLabels.ts index b4f76fa..d42df7a 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/readAllRecordLabels.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/readAllRecordLabels.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { selectMany } from "#/utilities/sql/selectMany.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { readAllRecordLabelsRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { readAllRecordLabelsRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/createOneYear.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/createOneYear.ts index a2673e3..7bf035f 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/createOneYear.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/createOneYear.ts @@ -2,9 +2,9 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { insertOne } from "#/utilities/sql/insertOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { createOneYearRouteDefinition } from "@arrhes/metadata/routes" -import { generateId } from "@arrhes/metadata/utilities" +import { models } from "@arrhes/application-metadata/models" +import { createOneYearRouteDefinition } from "@arrhes/application-metadata/routes" +import { generateId } from "@arrhes/application-metadata/utilities" export const createOneYearRoute = authFactory.createApp() diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/readAllYears.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/readAllYears.ts index 1edd512..034bfa7 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/readAllYears.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/readAllYears.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { selectMany } from "#/utilities/sql/selectMany.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { readAllYearsRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { readAllYearsRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/activateOrganizationMembership.ts b/packages/api/src/routes/auth/organizations/activateOrganizationMembership.ts index 24c17b3..139a5aa 100644 --- a/packages/api/src/routes/auth/organizations/activateOrganizationMembership.ts +++ b/packages/api/src/routes/auth/organizations/activateOrganizationMembership.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { updateOne } from "#/utilities/sql/updateOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { activateOrganizationMembershipRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { activateOrganizationMembershipRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/addNewOrganization.ts b/packages/api/src/routes/auth/organizations/addNewOrganization.ts index 3325dcd..c1525c8 100644 --- a/packages/api/src/routes/auth/organizations/addNewOrganization.ts +++ b/packages/api/src/routes/auth/organizations/addNewOrganization.ts @@ -2,9 +2,9 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { insertOne } from "#/utilities/sql/insertOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { addNewOrganizationRouteDefinition } from "@arrhes/metadata/routes" -import { generateId } from "@arrhes/metadata/utilities" +import { models } from "@arrhes/application-metadata/models" +import { addNewOrganizationRouteDefinition } from "@arrhes/application-metadata/routes" +import { generateId } from "@arrhes/application-metadata/utilities" export const addNewOrganizationRoute = authFactory.createApp() diff --git a/packages/api/src/routes/auth/organizations/getAllMyOrganizations.ts b/packages/api/src/routes/auth/organizations/getAllMyOrganizations.ts index 743674a..262962f 100644 --- a/packages/api/src/routes/auth/organizations/getAllMyOrganizations.ts +++ b/packages/api/src/routes/auth/organizations/getAllMyOrganizations.ts @@ -1,7 +1,7 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { getAllMyOrganizationsRouteDefinition } from "@arrhes/metadata/routes" +import { getAllMyOrganizationsRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/settings/activateUser.ts b/packages/api/src/routes/auth/settings/activateUser.ts index 30d790c..6b58f28 100644 --- a/packages/api/src/routes/auth/settings/activateUser.ts +++ b/packages/api/src/routes/auth/settings/activateUser.ts @@ -3,8 +3,8 @@ import { Exception } from "#/utilities/exception.js" import { response } from "#/utilities/response.js" import { updateOne } from "#/utilities/sql/updateOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { activateUserRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { activateUserRouteDefinition } from "@arrhes/application-metadata/routes" import { eq } from "drizzle-orm" export const activateUserRoute = authFactory.createApp() diff --git a/packages/api/src/routes/auth/settings/readUserSession.ts b/packages/api/src/routes/auth/settings/readUserSession.ts index c9fa04a..2680529 100644 --- a/packages/api/src/routes/auth/settings/readUserSession.ts +++ b/packages/api/src/routes/auth/settings/readUserSession.ts @@ -1,7 +1,7 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { readUserSessionRouteDefinition } from "@arrhes/metadata/routes" +import { readUserSessionRouteDefinition } from "@arrhes/application-metadata/routes" export const readUserSessionRoute = authFactory.createApp() diff --git a/packages/api/src/routes/auth/settings/updateUser.ts b/packages/api/src/routes/auth/settings/updateUser.ts index 74bb6c9..e537eb6 100644 --- a/packages/api/src/routes/auth/settings/updateUser.ts +++ b/packages/api/src/routes/auth/settings/updateUser.ts @@ -2,8 +2,8 @@ import { authFactory } from "#/factories/authFactory.js" import { response } from "#/utilities/response.js" import { updateOne } from "#/utilities/sql/updateOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { updateUserRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { updateUserRouteDefinition } from "@arrhes/application-metadata/routes" import { eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/settings/updateUserEmail.ts b/packages/api/src/routes/auth/settings/updateUserEmail.ts index 055dac6..574da4c 100644 --- a/packages/api/src/routes/auth/settings/updateUserEmail.ts +++ b/packages/api/src/routes/auth/settings/updateUserEmail.ts @@ -4,8 +4,8 @@ import { generateVerificationToken } from "#/utilities/generateVerificationToken import { response } from "#/utilities/response.js" import { updateOne } from "#/utilities/sql/updateOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { updateUserEmailRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { updateUserEmailRouteDefinition } from "@arrhes/application-metadata/routes" import { pbkdf2Sync } from "crypto" import { eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/settings/updateUserPassword.ts b/packages/api/src/routes/auth/settings/updateUserPassword.ts index 87f91ef..95686e0 100644 --- a/packages/api/src/routes/auth/settings/updateUserPassword.ts +++ b/packages/api/src/routes/auth/settings/updateUserPassword.ts @@ -3,8 +3,8 @@ import { Exception } from "#/utilities/exception.js" import { response } from "#/utilities/response.js" import { updateOne } from "#/utilities/sql/updateOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { updateUserPasswordRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { updateUserPasswordRouteDefinition } from "@arrhes/application-metadata/routes" import { pbkdf2Sync } from "crypto" import { eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/settings/validateUserEmail.ts b/packages/api/src/routes/auth/settings/validateUserEmail.ts index bcf46f3..c3f7eef 100644 --- a/packages/api/src/routes/auth/settings/validateUserEmail.ts +++ b/packages/api/src/routes/auth/settings/validateUserEmail.ts @@ -3,8 +3,8 @@ import { Exception } from "#/utilities/exception.js" import { response } from "#/utilities/response.js" import { updateOne } from "#/utilities/sql/updateOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { validateUserEmailRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { validateUserEmailRouteDefinition } from "@arrhes/application-metadata/routes" import { eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/support/sendSupportMessage.ts b/packages/api/src/routes/auth/support/sendSupportMessage.ts index b5c86be..0cde9ab 100644 --- a/packages/api/src/routes/auth/support/sendSupportMessage.ts +++ b/packages/api/src/routes/auth/support/sendSupportMessage.ts @@ -3,7 +3,7 @@ import { sendEmail } from "#/utilities/email/sendEmail.js" import { supportTemplate } from "#/utilities/email/templates/support.js" import { response } from "#/utilities/response.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { sendSupportMessageRouteDefinition } from "@arrhes/metadata/routes" +import { sendSupportMessageRouteDefinition } from "@arrhes/application-metadata/routes" export const sendSupportMessageRoute = authFactory.createApp() diff --git a/packages/api/src/routes/public/sendMagicLink.ts b/packages/api/src/routes/public/sendMagicLink.ts index 8550509..e09fec3 100644 --- a/packages/api/src/routes/public/sendMagicLink.ts +++ b/packages/api/src/routes/public/sendMagicLink.ts @@ -2,8 +2,8 @@ import { publicFactory } from "#/factories/publicFactory.js" import { response } from "#/utilities/response.js" import { selectOne } from "#/utilities/sql/selectOne.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { sendMagicLinkRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { sendMagicLinkRouteDefinition } from "@arrhes/application-metadata/routes" import { eq } from "drizzle-orm" diff --git a/packages/api/src/routes/public/signIn.ts b/packages/api/src/routes/public/signIn.ts index 08c1b61..c563737 100644 --- a/packages/api/src/routes/public/signIn.ts +++ b/packages/api/src/routes/public/signIn.ts @@ -8,9 +8,9 @@ import { insertOne } from "#/utilities/sql/insertOne.js" import { selectOne } from "#/utilities/sql/selectOne.js" import { cookiePrefix, userSessionCookieMaxAge } from "#/utilities/variables.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { signInRouteDefinition } from "@arrhes/metadata/routes" -import { generateId } from "@arrhes/metadata/utilities" +import { models } from "@arrhes/application-metadata/models" +import { signInRouteDefinition } from "@arrhes/application-metadata/routes" +import { generateId } from "@arrhes/application-metadata/utilities" import { pbkdf2Sync } from "crypto" import { eq } from "drizzle-orm" diff --git a/packages/api/src/routes/public/signOut.ts b/packages/api/src/routes/public/signOut.ts index 2af43c1..e7b404c 100644 --- a/packages/api/src/routes/public/signOut.ts +++ b/packages/api/src/routes/public/signOut.ts @@ -7,8 +7,8 @@ import { response } from "#/utilities/response.js" import { updateOne } from "#/utilities/sql/updateOne.js" import { cookiePrefix, userSessionCookieMaxAge } from "#/utilities/variables.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { signOutRouteDefinition } from "@arrhes/metadata/routes" +import { models } from "@arrhes/application-metadata/models" +import { signOutRouteDefinition } from "@arrhes/application-metadata/routes" import { eq } from "drizzle-orm" diff --git a/packages/api/src/routes/public/signUp.ts b/packages/api/src/routes/public/signUp.ts index 6399668..df7745b 100644 --- a/packages/api/src/routes/public/signUp.ts +++ b/packages/api/src/routes/public/signUp.ts @@ -8,9 +8,9 @@ import { response } from "#/utilities/response.js" import { insertOne } from "#/utilities/sql/insertOne.js" import { cookiePrefix, userSessionCookieMaxAge } from "#/utilities/variables.js" import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/metadata/models" -import { signUpRouteDefinition } from "@arrhes/metadata/routes" -import { generateId } from "@arrhes/metadata/utilities" +import { models } from "@arrhes/application-metadata/models" +import { signUpRouteDefinition } from "@arrhes/application-metadata/routes" +import { generateId } from "@arrhes/application-metadata/utilities" import { pbkdf2Sync } from "crypto" diff --git a/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetAssets/balanceSheetAssetsReportItem.tsx b/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetAssets/balanceSheetAssetsReportItem.tsx index d3b95ec..6422999 100644 --- a/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetAssets/balanceSheetAssetsReportItem.tsx +++ b/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetAssets/balanceSheetAssetsReportItem.tsx @@ -1,7 +1,7 @@ import { BalanceSheetAssetsReportRow } from "#/utilities/email/templates/balanceSheetReport/balanceSheetAssets/balanceSheetAssetsReportRow.js" import { getBalanceSheetChildren } from "#/utilities/email/templates/balanceSheetReport/getBalanceSheetChildren.js" import { numberToRomanString } from "#/utilities/numberToRomanString.js" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { Style } from "hono/css" import { Fragment } from "hono/jsx/jsx-runtime" import * as v from "valibot" diff --git a/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetAssets/balanceSheetAssetsReportTable.tsx b/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetAssets/balanceSheetAssetsReportTable.tsx index 9cbb925..4de09e6 100644 --- a/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetAssets/balanceSheetAssetsReportTable.tsx +++ b/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetAssets/balanceSheetAssetsReportTable.tsx @@ -2,7 +2,7 @@ import { BalanceSheetAssetsReportItem } from "#/utilities/email/templates/balanc import { BalanceSheetAssetsReportRow } from "#/utilities/email/templates/balanceSheetReport/balanceSheetAssets/balanceSheetAssetsReportRow.js" import { getBalanceSheetChildren } from "#/utilities/email/templates/balanceSheetReport/getBalanceSheetChildren.js" import { Table } from "#/utilities/email/templates/components/table/table.js" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { Style, css } from "hono/css" import { Fragment } from "hono/jsx/jsx-runtime" import * as v from "valibot" diff --git a/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetLiabilities/balanceSheetLiabilitiesReportItem.tsx b/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetLiabilities/balanceSheetLiabilitiesReportItem.tsx index c35bee3..8aadb4d 100644 --- a/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetLiabilities/balanceSheetLiabilitiesReportItem.tsx +++ b/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetLiabilities/balanceSheetLiabilitiesReportItem.tsx @@ -1,7 +1,7 @@ import { BalanceSheetLiabilitiesReportRow } from "#/utilities/email/templates/balanceSheetReport/balanceSheetLiabilities/balanceSheetLiabilitiesReportRow.js" import { getBalanceSheetChildren } from "#/utilities/email/templates/balanceSheetReport/getBalanceSheetChildren.js" import { numberToRomanString } from "#/utilities/numberToRomanString.js" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { Style } from "hono/css" import { Fragment } from "hono/jsx/jsx-runtime" import * as v from "valibot" diff --git a/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetLiabilities/balanceSheetLiabilitiesReportTable.tsx b/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetLiabilities/balanceSheetLiabilitiesReportTable.tsx index 5ec4a73..a1b268f 100644 --- a/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetLiabilities/balanceSheetLiabilitiesReportTable.tsx +++ b/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetLiabilities/balanceSheetLiabilitiesReportTable.tsx @@ -2,7 +2,7 @@ import { BalanceSheetLiabilitiesReportItem } from "#/utilities/email/templates/b import { BalanceSheetLiabilitiesReportRow } from "#/utilities/email/templates/balanceSheetReport/balanceSheetLiabilities/balanceSheetLiabilitiesReportRow.js" import { getBalanceSheetChildren } from "#/utilities/email/templates/balanceSheetReport/getBalanceSheetChildren.js" import { Table } from "#/utilities/email/templates/components/table/table.js" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { Style, css } from "hono/css" import { Fragment } from "hono/jsx/jsx-runtime" import * as v from "valibot" diff --git a/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetReport.tsx b/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetReport.tsx index 80f7fb4..7ac2dae 100644 --- a/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetReport.tsx +++ b/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetReport.tsx @@ -1,6 +1,6 @@ import { BalanceSheetAssetsReportTable } from "#/utilities/email/templates/balanceSheetReport/balanceSheetAssets/balanceSheetAssetsReportTable.js" import { BalanceSheetLiabilitiesReportTable } from "#/utilities/email/templates/balanceSheetReport/balanceSheetLiabilities/balanceSheetLiabilitiesReportTable.js" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { Style, css } from "hono/css" import * as v from "valibot" diff --git a/packages/api/src/utilities/email/templates/balanceSheetReport/getBalanceSheetChildren.tsx b/packages/api/src/utilities/email/templates/balanceSheetReport/getBalanceSheetChildren.tsx index 1b08bd5..8a523cf 100644 --- a/packages/api/src/utilities/email/templates/balanceSheetReport/getBalanceSheetChildren.tsx +++ b/packages/api/src/utilities/email/templates/balanceSheetReport/getBalanceSheetChildren.tsx @@ -1,4 +1,4 @@ -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import * as v from "valibot" diff --git a/packages/api/src/utilities/email/templates/incomeStatementReport/getIncomeStatementChildren.tsx b/packages/api/src/utilities/email/templates/incomeStatementReport/getIncomeStatementChildren.tsx index 5fc1be8..aa9e1a3 100644 --- a/packages/api/src/utilities/email/templates/incomeStatementReport/getIncomeStatementChildren.tsx +++ b/packages/api/src/utilities/email/templates/incomeStatementReport/getIncomeStatementChildren.tsx @@ -1,4 +1,4 @@ -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import * as v from "valibot" diff --git a/packages/api/src/utilities/email/templates/incomeStatementReport/incomeStatementReport.tsx b/packages/api/src/utilities/email/templates/incomeStatementReport/incomeStatementReport.tsx index f6a7085..fc4d517 100644 --- a/packages/api/src/utilities/email/templates/incomeStatementReport/incomeStatementReport.tsx +++ b/packages/api/src/utilities/email/templates/incomeStatementReport/incomeStatementReport.tsx @@ -1,5 +1,5 @@ import { IncomeStatementsReportTable } from "#/utilities/email/templates/incomeStatementReport/incomeStatementsReportTable.js" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { Style, css } from "hono/css" import * as v from "valibot" diff --git a/packages/api/src/utilities/email/templates/incomeStatementReport/incomeStatementReportItem.tsx b/packages/api/src/utilities/email/templates/incomeStatementReport/incomeStatementReportItem.tsx index 5555815..cd982a6 100644 --- a/packages/api/src/utilities/email/templates/incomeStatementReport/incomeStatementReportItem.tsx +++ b/packages/api/src/utilities/email/templates/incomeStatementReport/incomeStatementReportItem.tsx @@ -1,7 +1,7 @@ import { getIncomeStatementChildren } from "#/utilities/email/templates/incomeStatementReport/getIncomeStatementChildren.js" import { IncomeStatementReportRow } from "#/utilities/email/templates/incomeStatementReport/incomeStatementReportRow.js" import { numberToRomanString } from "#/utilities/numberToRomanString.js" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { Fragment } from "hono/jsx/jsx-runtime" import * as v from "valibot" diff --git a/packages/api/src/utilities/email/templates/incomeStatementReport/incomeStatementsReportTable.tsx b/packages/api/src/utilities/email/templates/incomeStatementReport/incomeStatementsReportTable.tsx index b3c0694..1b61987 100644 --- a/packages/api/src/utilities/email/templates/incomeStatementReport/incomeStatementsReportTable.tsx +++ b/packages/api/src/utilities/email/templates/incomeStatementReport/incomeStatementsReportTable.tsx @@ -3,7 +3,7 @@ import { Table } from "#/utilities/email/templates/components/table/table.js" import { getIncomeStatementChildren } from "#/utilities/email/templates/incomeStatementReport/getIncomeStatementChildren.js" import { IncomeStatementReportItem } from "#/utilities/email/templates/incomeStatementReport/incomeStatementReportItem.js" import { numberToRomanString } from "#/utilities/numberToRomanString.js" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { css } from "hono/css" import * as v from "valibot" diff --git a/packages/api/src/utilities/response.ts b/packages/api/src/utilities/response.ts index 0e2c4b5..ff4bcbd 100644 --- a/packages/api/src/utilities/response.ts +++ b/packages/api/src/utilities/response.ts @@ -2,7 +2,7 @@ import { ApiEnv } from "#/factories/apiFactory.js" import { AuthEnv } from "#/factories/authFactory.js" import { PublicEnv } from "#/factories/publicFactory.js" import { validate } from "#/utilities/validate.js" -import { routeDefinition } from "@arrhes/metadata/utilities" +import { routeDefinition } from "@arrhes/application-metadata/utilities" import { Context } from "hono" import { ContentfulStatusCode } from "hono/utils/http-status" import * as v from "valibot" diff --git a/packages/api/src/utilities/workspace/generateDefaultYearData.ts b/packages/api/src/utilities/workspace/generateDefaultYearData.ts index 6a153b0..35ff274 100644 --- a/packages/api/src/utilities/workspace/generateDefaultYearData.ts +++ b/packages/api/src/utilities/workspace/generateDefaultYearData.ts @@ -1,6 +1,6 @@ -// import { defaultAssociationAccounts, defaultAssociationBalanceSheets, defaultAssociationIncomeStatements, DefaultBalanceSheet, defaultCompanyAccounts, defaultCompanyBalanceSheets, defaultCompanyIncomeStatements, DefaultComputation, defaultComputations } from "@arrhes/metadata/components" -// import { returnedSchemas } from "@arrhes/metadata/schemas" -// import { generateId } from "@arrhes/metadata/utilities" +// import { defaultAssociationAccounts, defaultAssociationBalanceSheets, defaultAssociationIncomeStatements, DefaultBalanceSheet, defaultCompanyAccounts, defaultCompanyBalanceSheets, defaultCompanyIncomeStatements, DefaultComputation, defaultComputations } from "@arrhes/application-metadata/components" +// import { returnedSchemas } from "@arrhes/application-metadata/schemas" +// import { generateId } from "@arrhes/application-metadata/utilities" // import * as v from "valibot" diff --git a/packages/dashboard/src/components/inputs/inputDataCombobox.tsx b/packages/dashboard/src/components/inputs/inputDataCombobox.tsx index 13586fa..0b4ddb9 100644 --- a/packages/dashboard/src/components/inputs/inputDataCombobox.tsx +++ b/packages/dashboard/src/components/inputs/inputDataCombobox.tsx @@ -1,6 +1,6 @@ import { InputCombobox } from "#/components/inputs/inputCombobox.js" import { useHTTPData } from "#/utilities/useHTTPData.js" -import { routeDefinition } from "@arrhes/metadata/utilities" +import { routeDefinition } from "@arrhes/application-metadata/utilities" import * as v from "valibot" diff --git a/packages/dashboard/src/components/layouts/banner.tsx b/packages/dashboard/src/components/layouts/banner.tsx index 93ead2c..797f93a 100644 --- a/packages/dashboard/src/components/layouts/banner.tsx +++ b/packages/dashboard/src/components/layouts/banner.tsx @@ -1,5 +1,5 @@ import { cn } from "#/utilities/cn.js" -import { colorVariant } from "@arrhes/metadata/components" +import { colorVariant } from "@arrhes/application-metadata/components" import { IconAlertHexagon, IconAlertTriangle, IconCircleCheck, IconInfoSquare } from "@tabler/icons-react" import { ComponentProps, ReactElement } from "react" diff --git a/packages/dashboard/src/components/layouts/dataWrapper.tsx b/packages/dashboard/src/components/layouts/dataWrapper.tsx index f40041d..0815c88 100644 --- a/packages/dashboard/src/components/layouts/dataWrapper.tsx +++ b/packages/dashboard/src/components/layouts/dataWrapper.tsx @@ -2,7 +2,7 @@ import { FormatError } from "#/components/formats/formatError.js" import { CircularLoader } from "#/components/layouts/circularLoader.js" import { cn } from "#/utilities/cn.js" import { useHTTPData } from "#/utilities/useHTTPData.js" -import { routeDefinition } from "@arrhes/metadata/utilities" +import { routeDefinition } from "@arrhes/application-metadata/utilities" import { ComponentProps, ReactElement, Suspense } from "react" import * as v from "valibot" diff --git a/packages/dashboard/src/features/authLayout.tsx b/packages/dashboard/src/features/authLayout.tsx index 5593bc0..4a6e2bf 100644 --- a/packages/dashboard/src/features/authLayout.tsx +++ b/packages/dashboard/src/features/authLayout.tsx @@ -6,7 +6,7 @@ import { toast } from "#/contexts/toasts/useToast.js" import { Breadcrumbs } from "#/features/breadcrumbs.js" import { platformRouter } from "#/routes/platformRouter.js" import { postAPI } from "#/utilities/postAPI.js" -import { signOutRouteDefinition } from "@arrhes/metadata/routes" +import { signOutRouteDefinition } from "@arrhes/application-metadata/routes" import { IconAbacus, IconBuilding, IconLifebuoy, IconLogout, IconSettings, IconUser } from "@tabler/icons-react" import { Link, Outlet } from "@tanstack/react-router" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/organizationSettings/deleteOneOrganization.tsx b/packages/dashboard/src/features/organizations/$idOrganization/organizationSettings/deleteOneOrganization.tsx index 2f312c0..5963c8c 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/organizationSettings/deleteOneOrganization.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/organizationSettings/deleteOneOrganization.tsx @@ -5,8 +5,8 @@ import { toast } from "#/contexts/toasts/useToast.js" import { platformRouter } from "#/routes/platformRouter.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { deleteOneOrganizationRouteDefinition, getAllMyOrganizationsRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { deleteOneOrganizationRouteDefinition, getAllMyOrganizationsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconTrash } from "@tabler/icons-react" import { ComponentPropsWithRef, ReactElement, useState } from "react" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/organizationSettings/organizationSettingsPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/organizationSettings/organizationSettingsPage.tsx index e5278e4..be02fe2 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/organizationSettings/organizationSettingsPage.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/organizationSettings/organizationSettingsPage.tsx @@ -4,7 +4,7 @@ import { DataWrapper } from "#/components/layouts/dataWrapper.js" import { DeleteOneOrganization } from "#/features/organizations/$idOrganization/organizationSettings/deleteOneOrganization.js" import { UpdateOneOrganization } from "#/features/organizations/$idOrganization/organizationSettings/updateOneOrganization.js" import { organizationSettingsRoute } from "#/routes/root/auth/organizations/$idOrganization/organizationSettings/organizationSettingsRoute.js" -import { readOneOrganizationRouteDefinition } from "@arrhes/metadata/routes" +import { readOneOrganizationRouteDefinition } from "@arrhes/application-metadata/routes" import { IconPencil, IconTrash } from "@tabler/icons-react" import { useParams } from "@tanstack/react-router" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/organizationSettings/organizationUsers/$idOrganizationUser/deleteOneOrganizationUser.tsx b/packages/dashboard/src/features/organizations/$idOrganization/organizationSettings/organizationUsers/$idOrganizationUser/deleteOneOrganizationUser.tsx index 4cc1227..446f405 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/organizationSettings/organizationUsers/$idOrganizationUser/deleteOneOrganizationUser.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/organizationSettings/organizationUsers/$idOrganizationUser/deleteOneOrganizationUser.tsx @@ -4,8 +4,8 @@ import { Dialog } from "#/components/overlays/dialog/dialog.js" import { toast } from "#/contexts/toasts/useToast.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { deleteOneOrganizationUserRouteDefinition, readOneOrganizationRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { deleteOneOrganizationUserRouteDefinition, readOneOrganizationRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconTrash } from "@tabler/icons-react" import { ComponentPropsWithRef, ReactElement, useState } from "react" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/organizationSettings/organizationUsers/$idOrganizationUser/updateOneOrganizationUser.tsx b/packages/dashboard/src/features/organizations/$idOrganization/organizationSettings/organizationUsers/$idOrganizationUser/updateOneOrganizationUser.tsx index 6df3554..15859e6 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/organizationSettings/organizationUsers/$idOrganizationUser/updateOneOrganizationUser.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/organizationSettings/organizationUsers/$idOrganizationUser/updateOneOrganizationUser.tsx @@ -9,8 +9,8 @@ import { Drawer } from "#/components/overlays/drawer/drawer.js" import { toast } from "#/contexts/toasts/useToast.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { readAllOrganizationUsersRouteDefinition, updateOneOrganizationUserRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { readAllOrganizationUsersRouteDefinition, updateOneOrganizationUserRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconPencil } from "@tabler/icons-react" import { JSX, useState } from "react" import { Fragment } from "react/jsx-runtime" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/organizationSettings/organizationUsers/createOneOrganizationUser.tsx b/packages/dashboard/src/features/organizations/$idOrganization/organizationSettings/organizationUsers/createOneOrganizationUser.tsx index 44a5bee..07458e4 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/organizationSettings/organizationUsers/createOneOrganizationUser.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/organizationSettings/organizationUsers/createOneOrganizationUser.tsx @@ -10,8 +10,8 @@ import { Drawer } from "#/components/overlays/drawer/drawer.js" import { toast } from "#/contexts/toasts/useToast.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { createOneOrganizationUserRouteDefinition, readAllOrganizationUsersRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { createOneOrganizationUserRouteDefinition, readAllOrganizationUsersRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconPlus } from "@tabler/icons-react" import { JSX, useState } from "react" import { Fragment } from "react/jsx-runtime" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/organizationSettings/organizationUsers/organizationUsersTable.tsx b/packages/dashboard/src/features/organizations/$idOrganization/organizationSettings/organizationUsers/organizationUsersTable.tsx index e3b0c5d..885ba39 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/organizationSettings/organizationUsers/organizationUsersTable.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/organizationSettings/organizationUsers/organizationUsersTable.tsx @@ -4,8 +4,8 @@ import { Box } from "#/components/layouts/box.js" import { DataWrapper } from "#/components/layouts/dataWrapper.js" import { DeleteOneOrganizationUser } from "#/features/organizations/$idOrganization/organizationSettings/organizationUsers/$idOrganizationUser/deleteOneOrganizationUser.js" import { UpdateOneOrganizationUser } from "#/features/organizations/$idOrganization/organizationSettings/organizationUsers/$idOrganizationUser/updateOneOrganizationUser.js" -import { readAllOrganizationUsersRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { readAllOrganizationUsersRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconPencil, IconTrash } from "@tabler/icons-react" import { Fragment } from "react/jsx-runtime" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/organizationSettings/updateOneOrganization.tsx b/packages/dashboard/src/features/organizations/$idOrganization/organizationSettings/updateOneOrganization.tsx index 0e3a343..ca9119e 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/organizationSettings/updateOneOrganization.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/organizationSettings/updateOneOrganization.tsx @@ -9,8 +9,8 @@ import { Drawer } from "#/components/overlays/drawer/drawer.js" import { toast } from "#/contexts/toasts/useToast.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { readOneOrganizationRouteDefinition, updateOneOrganizationRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { readOneOrganizationRouteDefinition, updateOneOrganizationRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconPencil } from "@tabler/icons-react" import { JSX, useState } from "react" import { Fragment } from "react/jsx-runtime" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/attachmentData.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/attachmentData.tsx index be4b6a0..581c13e 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/attachmentData.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/attachmentData.tsx @@ -1,8 +1,8 @@ import { FormatError } from "#/components/formats/formatError.js" import { CircularLoader } from "#/components/layouts/circularLoader.js" import { useHTTPData } from "#/utilities/useHTTPData.js" -import { readOneAttachmentRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { readOneAttachmentRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { ReactElement } from "react" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/attachmentFile.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/attachmentFile.tsx index 5249ad6..8649a12 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/attachmentFile.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/attachmentFile.tsx @@ -1,8 +1,8 @@ import { FormatError } from "#/components/formats/formatError.js" import { CircularLoader } from "#/components/layouts/circularLoader.js" import { useHTTPData } from "#/utilities/useHTTPData.js" -import { generateAttachmentGetSignedUrlRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { generateAttachmentGetSignedUrlRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/deleteOneAttachment.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/deleteOneAttachment.tsx index c3d2bb7..9861b0d 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/deleteOneAttachment.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/deleteOneAttachment.tsx @@ -5,8 +5,8 @@ import { toast } from "#/contexts/toasts/useToast.js" import { platformRouter } from "#/routes/platformRouter.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { deleteOneAttachmentRouteDefinition, readAllAttachmentsRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { deleteOneAttachmentRouteDefinition, readAllAttachmentsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconTrash } from "@tabler/icons-react" import { ComponentPropsWithRef, ReactElement, useState } from "react" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/updateOneAttachment.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/updateOneAttachment.tsx index c779aec..0fd5d4c 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/updateOneAttachment.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/updateOneAttachment.tsx @@ -11,9 +11,9 @@ import { Drawer } from "#/components/overlays/drawer/drawer.js" import { toast } from "#/contexts/toasts/useToast.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { fileSchema } from "@arrhes/metadata/components" -import { generateAttachmentPutSignedUrlRouteDefinition, readAllAttachmentsRouteDefinition, readOneAttachmentRouteDefinition, updateOneAttachmentRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { fileSchema } from "@arrhes/application-metadata/components" +import { generateAttachmentPutSignedUrlRouteDefinition, readAllAttachmentsRouteDefinition, readOneAttachmentRouteDefinition, updateOneAttachmentRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconPlus } from "@tabler/icons-react" import { JSX, useState } from "react" import { Fragment } from "react/jsx-runtime" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/attachmentSelect.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/attachmentSelect.tsx index c218fc5..94c136e 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/attachmentSelect.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/attachmentSelect.tsx @@ -1,7 +1,7 @@ import { InputCombobox } from "#/components/inputs/inputCombobox.js" import { useHTTPData } from "#/utilities/useHTTPData.js" -import { readAllAttachmentsRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { readAllAttachmentsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/attachmentsPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/attachmentsPage.tsx index c56b8b2..eead82c 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/attachmentsPage.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/attachmentsPage.tsx @@ -2,7 +2,7 @@ import { DataWrapper } from "#/components/layouts/dataWrapper.js"; import { Page } from "#/components/layouts/page/page.js"; import { AttachmentsTable } from "#/features/organizations/$idOrganization/years/$idYear/attachments/attachmentsTable.js"; import { attachmentsLayoutRoute } from "#/routes/root/auth/organizations/$idOrganization/years/$idYear/attachments/attachmentsLayoutRoute.js"; -import { readAllAttachmentsRouteDefinition } from "@arrhes/metadata/routes"; +import { readAllAttachmentsRouteDefinition } from "@arrhes/application-metadata/routes"; import { useParams } from "@tanstack/react-router"; diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/attachmentsTable.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/attachmentsTable.tsx index 0d71c8a..0781fd0 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/attachmentsTable.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/attachmentsTable.tsx @@ -7,7 +7,7 @@ import { FormatText } from "#/components/formats/formatText.js" import { DataTable } from "#/components/layouts/dataTable.js" import { CreateOneAttachment } from "#/features/organizations/$idOrganization/years/$idYear/attachments/createOneAttachment.js" import { platformRouter } from "#/routes/platformRouter.js" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconPlus } from "@tabler/icons-react" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/createOneAttachment.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/createOneAttachment.tsx index 6d2d122..b90bd7c 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/createOneAttachment.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/attachments/createOneAttachment.tsx @@ -11,9 +11,9 @@ import { Drawer } from "#/components/overlays/drawer/drawer.js" import { toast } from "#/contexts/toasts/useToast.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { fileSchema } from "@arrhes/metadata/components" -import { createOneAttachmentRouteDefinition, generateAttachmentPutSignedUrlRouteDefinition, readAllAttachmentsRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { fileSchema } from "@arrhes/application-metadata/components" +import { createOneAttachmentRouteDefinition, generateAttachmentPutSignedUrlRouteDefinition, readAllAttachmentsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconPlus } from "@tabler/icons-react" import { JSX, useState } from "react" import { Fragment } from "react/jsx-runtime" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/deleteOneRecordRow.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/deleteOneRecordRow.tsx index a3e2dc8..5d3b391 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/deleteOneRecordRow.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/deleteOneRecordRow.tsx @@ -5,8 +5,8 @@ import { toast } from "#/contexts/toasts/useToast.js" import { platformRouter } from "#/routes/platformRouter.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { deleteOneRecordRowRouteDefinition, readAllRecordRowsRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { deleteOneRecordRowRouteDefinition, readAllRecordRowsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconTrash } from "@tabler/icons-react" import { ComponentPropsWithRef, ReactElement, useState } from "react" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/recordRowPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/recordRowPage.tsx index 2d694c8..2a45144 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/recordRowPage.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/recordRowPage.tsx @@ -14,7 +14,7 @@ import { TitleComponent } from "#/components/layouts/title.js" import { DeleteOneRecordRow } from "#/features/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/deleteOneRecordRow.js" import { UpdateOneRecordRow } from "#/features/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/updateOneRecordRow.js" import { recordRowRoute } from "#/routes/root/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/recordRowRoute.js" -import { readOneAccountRouteDefinition, readOneRecordRowRouteDefinition } from "@arrhes/metadata/routes" +import { readOneAccountRouteDefinition, readOneRecordRowRouteDefinition } from "@arrhes/application-metadata/routes" import { IconChevronLeft, IconPencil, IconTrash } from "@tabler/icons-react" import { Link, useParams } from "@tanstack/react-router" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/updateOneRecordRow.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/updateOneRecordRow.tsx index cbea199..61b8542 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/updateOneRecordRow.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/updateOneRecordRow.tsx @@ -12,8 +12,8 @@ import { Drawer } from "#/components/overlays/drawer/drawer.js" import { toast } from "#/contexts/toasts/useToast.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { readAllAccountsRouteDefinition, readAllRecordRowsRouteDefinition, readOneRecordRowRouteDefinition, updateOneRecordRowRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { readAllAccountsRouteDefinition, readAllRecordRowsRouteDefinition, readOneRecordRowRouteDefinition, updateOneRecordRowRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconPencil } from "@tabler/icons-react" import { JSX, useState } from "react" import { Fragment } from "react/jsx-runtime" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/createOneRecordRow.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/createOneRecordRow.tsx index 9374e4f..887b700 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/createOneRecordRow.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/createOneRecordRow.tsx @@ -12,8 +12,8 @@ import { Drawer } from "#/components/overlays/drawer/drawer.js" import { toast } from "#/contexts/toasts/useToast.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { createOneRecordRowRouteDefinition, readAllAccountsRouteDefinition, readAllRecordRowsRouteDefinition, readOneRecordRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { createOneRecordRowRouteDefinition, readAllAccountsRouteDefinition, readAllRecordRowsRouteDefinition, readOneRecordRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconPlus } from "@tabler/icons-react" import { JSX, useState } from "react" import { Fragment } from "react/jsx-runtime" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/deleteOneRecord.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/deleteOneRecord.tsx index 47162d8..b759163 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/deleteOneRecord.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/deleteOneRecord.tsx @@ -5,8 +5,8 @@ import { toast } from "#/contexts/toasts/useToast.js" import { platformRouter } from "#/routes/platformRouter.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { deleteOneRecordRouteDefinition, readAllRecordsRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { deleteOneRecordRouteDefinition, readAllRecordsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconTrash } from "@tabler/icons-react" import { ComponentPropsWithRef, ReactElement, useState } from "react" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/duplicateOneRecord.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/duplicateOneRecord.tsx index 20756c1..f8e4176 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/duplicateOneRecord.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/duplicateOneRecord.tsx @@ -5,8 +5,8 @@ import { toast } from "#/contexts/toasts/useToast.js" import { platformRouter } from "#/routes/platformRouter.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { duplicateOneRecordRouteDefinition, readAllRecordsRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { duplicateOneRecordRouteDefinition, readAllRecordsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconCopyCheck } from "@tabler/icons-react" import { ComponentPropsWithRef, ReactElement, useState } from "react" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/recordPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/recordPage.tsx index 71d1759..8230667 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/recordPage.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/recordPage.tsx @@ -17,7 +17,7 @@ import { RecordRowsTable } from "#/features/organizations/$idOrganization/years/ import { UpdateOneRecord } from "#/features/organizations/$idOrganization/years/$idYear/records/$idRecord/updateOneRecord.js" import { recordRoute } from "#/routes/root/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/recordRoute.js" import { compareAmounts } from "#/utilities/compareAmounts.js" -import { readAllRecordRowsRouteDefinition, readOneAttachmentRouteDefinition, readOneJournalRouteDefinition, readOneRecordLabelRouteDefinition, readOneRecordRouteDefinition } from "@arrhes/metadata/routes" +import { readAllRecordRowsRouteDefinition, readOneAttachmentRouteDefinition, readOneJournalRouteDefinition, readOneRecordLabelRouteDefinition, readOneRecordRouteDefinition } from "@arrhes/application-metadata/routes" import { IconChevronLeft, IconCopyCheck, IconPencil, IconTrash } from "@tabler/icons-react" import { Link, useParams } from "@tanstack/react-router" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/recordRowsTable.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/recordRowsTable.tsx index 526a9a3..872ef15 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/recordRowsTable.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/recordRowsTable.tsx @@ -10,8 +10,8 @@ import { DataWrapper } from "#/components/layouts/dataWrapper.js" import { UpdateOneRecordRow } from "#/features/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/updateOneRecordRow.js" import { CreateOneRecordRow } from "#/features/organizations/$idOrganization/years/$idYear/records/$idRecord/createOneRecordRow.js" import { UpdateManyRecordRows } from "#/features/organizations/$idOrganization/years/$idYear/records/$idRecord/updateManyRecordRows.js" -import { readOneAccountRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { readOneAccountRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconEdit, IconEye, IconPencil, IconPlus } from "@tabler/icons-react" import { Link } from "@tanstack/react-router" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/updateManyRecordRows.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/updateManyRecordRows.tsx index 6ac0f84..a98103b 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/updateManyRecordRows.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/updateManyRecordRows.tsx @@ -10,8 +10,8 @@ import { Drawer } from "#/components/overlays/drawer/drawer.js" import { toast } from "#/contexts/toasts/useToast.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { readAllRecordRowsRouteDefinition, updateManyRecordRowsRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { readAllRecordRowsRouteDefinition, updateManyRecordRowsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconPencil } from "@tabler/icons-react" import { JSX, useState } from "react" import { Fragment } from "react/jsx-runtime" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/updateOneRecord.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/updateOneRecord.tsx index 52d8791..d103000 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/updateOneRecord.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/$idRecord/updateOneRecord.tsx @@ -11,8 +11,8 @@ import { Drawer } from "#/components/overlays/drawer/drawer.js" import { toast } from "#/contexts/toasts/useToast.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { readAllAttachmentsRouteDefinition, readAllJournalsRouteDefinition, readAllRecordLabelsRouteDefinition, readAllRecordsRouteDefinition, readOneRecordRouteDefinition, updateOneRecordRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { readAllAttachmentsRouteDefinition, readAllJournalsRouteDefinition, readAllRecordLabelsRouteDefinition, readAllRecordsRouteDefinition, readOneRecordRouteDefinition, updateOneRecordRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconPencil } from "@tabler/icons-react" import { JSX, useState } from "react" import { Fragment } from "react/jsx-runtime" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/createOneRecord.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/createOneRecord.tsx index bf45e45..60dcb76 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/createOneRecord.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/createOneRecord.tsx @@ -12,8 +12,8 @@ import { toast } from "#/contexts/toasts/useToast.js" import { platformRouter } from "#/routes/platformRouter.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { createOneRecordRouteDefinition, readAllAttachmentsRouteDefinition, readAllJournalsRouteDefinition, readAllRecordLabelsRouteDefinition, readAllRecordsRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { createOneRecordRouteDefinition, readAllAttachmentsRouteDefinition, readAllJournalsRouteDefinition, readAllRecordLabelsRouteDefinition, readAllRecordsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconPlus } from "@tabler/icons-react" import { JSX, useState } from "react" import { Fragment } from "react/jsx-runtime" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/recordsPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/recordsPage.tsx index f65250b..15d57ca 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/recordsPage.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/records/recordsPage.tsx @@ -9,7 +9,7 @@ import { Page } from "#/components/layouts/page/page.js" import { CreateOneRecord } from "#/features/organizations/$idOrganization/years/$idYear/records/createOneRecord.js" import { platformRouter } from "#/routes/platformRouter.js" import { recordsRoute } from "#/routes/root/auth/organizations/$idOrganization/years/$idYear/records/recordsRoute.js" -import { readAllRecordsRouteDefinition, readOneAttachmentRouteDefinition, readOneJournalRouteDefinition, readOneRecordLabelRouteDefinition } from "@arrhes/metadata/routes" +import { readAllRecordsRouteDefinition, readOneAttachmentRouteDefinition, readOneJournalRouteDefinition, readOneRecordLabelRouteDefinition } from "@arrhes/application-metadata/routes" import { IconPlus } from "@tabler/icons-react" import { useParams } from "@tanstack/react-router" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceReport/balanceReportPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceReport/balanceReportPage.tsx index 1df6ebd..f38daeb 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceReport/balanceReportPage.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceReport/balanceReportPage.tsx @@ -3,7 +3,7 @@ import { DataWrapper } from "#/components/layouts/dataWrapper.js" import { Section } from "#/components/layouts/section/section.js" import { BalanceReportTable } from "#/features/organizations/$idOrganization/years/$idYear/reports/balanceReport/balanceReportTable.js" import { balanceReportRoute } from "#/routes/root/auth/organizations/$idOrganization/years/$idYear/reports/balanceReportRoute.js" -import { readAllAccountsRouteDefinition, readAllRecordRowsRouteDefinition } from "@arrhes/metadata/routes" +import { readAllAccountsRouteDefinition, readAllRecordRowsRouteDefinition } from "@arrhes/application-metadata/routes" import { useParams } from "@tanstack/react-router" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceReport/balanceReportTable.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceReport/balanceReportTable.tsx index d8ce4f8..db9cb94 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceReport/balanceReportTable.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceReport/balanceReportTable.tsx @@ -2,7 +2,7 @@ import { FormatNull } from "#/components/formats/formatNull.js" import { FormatPrice } from "#/components/formats/formatPrice.js" import { FormatText } from "#/components/formats/formatText.js" import { Table } from "#/components/layouts/table/table.js" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetAsset/balanceSheetAssetsReportItem.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetAsset/balanceSheetAssetsReportItem.tsx index 4d1d7d0..7c96017 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetAsset/balanceSheetAssetsReportItem.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetAsset/balanceSheetAssetsReportItem.tsx @@ -1,7 +1,7 @@ import { BalanceSheetAssetsReportRow } from "#/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetAsset/balanceSheetAssetsReportRow.js" import { getBalanceSheetChildren } from "#/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/getBalanceSheetChildren.js" import { toRoman } from "#/utilities/toRoman.js" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { ComponentProps, Fragment } from "react" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetAsset/balanceSheetAssetsReportTable.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetAsset/balanceSheetAssetsReportTable.tsx index 8b3935e..31d2fcb 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetAsset/balanceSheetAssetsReportTable.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetAsset/balanceSheetAssetsReportTable.tsx @@ -3,7 +3,7 @@ import { Table } from "#/components/layouts/table/table.js" import { BalanceSheetAssetsReportItem } from "#/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetAsset/balanceSheetAssetsReportItem.js" import { BalanceSheetAssetsReportRow } from "#/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetAsset/balanceSheetAssetsReportRow.js" import { getBalanceSheetChildren } from "#/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/getBalanceSheetChildren.js" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { Fragment } from "react/jsx-runtime" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetLiability/balanceSheetLiabilitiesReportItem.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetLiability/balanceSheetLiabilitiesReportItem.tsx index b1f8a2b..8bc2d03 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetLiability/balanceSheetLiabilitiesReportItem.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetLiability/balanceSheetLiabilitiesReportItem.tsx @@ -1,7 +1,7 @@ import { BalanceSheetLiabilitiesReportRow } from "#/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetLiability/balanceSheetLiabilityiesReportRow.js" import { getBalanceSheetChildren } from "#/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/getBalanceSheetChildren.js" import { toRoman } from "#/utilities/toRoman.js" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { ComponentProps, Fragment } from "react" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetLiability/balanceSheetLiabilitiesReportTable.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetLiability/balanceSheetLiabilitiesReportTable.tsx index 26a6ae7..c2ea724 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetLiability/balanceSheetLiabilitiesReportTable.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetLiability/balanceSheetLiabilitiesReportTable.tsx @@ -3,7 +3,7 @@ import { Table } from "#/components/layouts/table/table.js" import { BalanceSheetLiabilitiesReportItem } from "#/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetLiability/balanceSheetLiabilitiesReportItem.js" import { BalanceSheetLiabilitiesReportRow } from "#/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetLiability/balanceSheetLiabilityiesReportRow.js" import { getBalanceSheetChildren } from "#/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/getBalanceSheetChildren.js" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { Fragment } from "react/jsx-runtime" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetReportPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetReportPage.tsx index 8a00aa3..c9b28d9 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetReportPage.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetReportPage.tsx @@ -7,7 +7,7 @@ import { BalanceSheetAssetsReportTable } from "#/features/organizations/$idOrgan import { BalanceSheetLiabilitiesReportTable } from "#/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetLiability/balanceSheetLiabilitiesReportTable.js" import { DownloadBalanceSheetReport } from "#/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/downloadBalanceSheetReport.js" import { balanceSheetReportRoute } from "#/routes/root/auth/organizations/$idOrganization/years/$idYear/reports/balanceSheetReportRoute.js" -import { readAllAccountsRouteDefinition, readAllBalanceSheetsRouteDefinition, readAllRecordRowsRouteDefinition } from "@arrhes/metadata/routes" +import { readAllAccountsRouteDefinition, readAllBalanceSheetsRouteDefinition, readAllRecordRowsRouteDefinition } from "@arrhes/application-metadata/routes" import { IconDownload } from "@tabler/icons-react" import { useParams } from "@tanstack/react-router" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/downloadBalanceSheetReport.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/downloadBalanceSheetReport.tsx index 471c75c..9b41629 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/downloadBalanceSheetReport.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/downloadBalanceSheetReport.tsx @@ -1,7 +1,7 @@ import { toast } from "#/contexts/toasts/useToast.js" import { postAPI } from "#/utilities/postAPI.js" -import { generateBalanceSheetReportDocumentRouteDefinition, generateDocumentGetSignedUrlRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { generateBalanceSheetReportDocumentRouteDefinition, generateDocumentGetSignedUrlRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { ButtonHTMLAttributes, cloneElement, ReactElement } from "react" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/downloadIncomeStatementReport.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/downloadIncomeStatementReport.tsx index ec7bdae..0cff93e 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/downloadIncomeStatementReport.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/downloadIncomeStatementReport.tsx @@ -1,7 +1,7 @@ import { toast } from "#/contexts/toasts/useToast.js" import { postAPI } from "#/utilities/postAPI.js" -import { generateIncomeStatementReportDocumentRouteDefinition, generateDocumentGetSignedUrlRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { generateIncomeStatementReportDocumentRouteDefinition, generateDocumentGetSignedUrlRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { ButtonHTMLAttributes, cloneElement, ReactElement } from "react" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/incomeStatementReportItem.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/incomeStatementReportItem.tsx index 389e6a8..94607c6 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/incomeStatementReportItem.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/incomeStatementReportItem.tsx @@ -1,7 +1,7 @@ import { IncomeStatementReportRow } from "#/features/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/incomeStatementReportRow.js" import { getIncomeStatementChildren } from "#/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/getIncomeStatementChildren.js" import { toRoman } from "#/utilities/toRoman.js" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { ComponentProps, Fragment } from "react" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/incomeStatementReportPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/incomeStatementReportPage.tsx index 225e5d7..7ca429d 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/incomeStatementReportPage.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/incomeStatementReportPage.tsx @@ -5,7 +5,7 @@ import { Section } from "#/components/layouts/section/section.js" import { DownloadIncomeStatementReport } from "#/features/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/downloadIncomeStatementReport.js" import { IncomeStatementsReportTable } from "#/features/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/incomeStatementsReportTable.js" import { incomeStatementReportRoute } from "#/routes/root/auth/organizations/$idOrganization/years/$idYear/reports/incomeStatementReportRoute.js" -import { readAllAccountsRouteDefinition, readAllComputationIncomeStatementsRouteDefinition, readAllComputationsRouteDefinition, readAllIncomeStatementsRouteDefinition, readAllRecordRowsRouteDefinition } from "@arrhes/metadata/routes" +import { readAllAccountsRouteDefinition, readAllComputationIncomeStatementsRouteDefinition, readAllComputationsRouteDefinition, readAllIncomeStatementsRouteDefinition, readAllRecordRowsRouteDefinition } from "@arrhes/application-metadata/routes" import { IconDownload } from "@tabler/icons-react" import { useParams } from "@tanstack/react-router" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/incomeStatementsReportTable.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/incomeStatementsReportTable.tsx index e4e2491..b5449d5 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/incomeStatementsReportTable.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/incomeStatementsReportTable.tsx @@ -6,7 +6,7 @@ import { IncomeStatementReportItem } from "#/features/organizations/$idOrganizat import { getIncomeStatementChildren } from "#/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/getIncomeStatementChildren.js" import { cn } from "#/utilities/cn.js" import { toRoman } from "#/utilities/toRoman.js" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/journalReport/journalReportPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/journalReport/journalReportPage.tsx index dc2d7ec..2e742d5 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/journalReport/journalReportPage.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/journalReport/journalReportPage.tsx @@ -3,7 +3,7 @@ import { DataWrapper } from "#/components/layouts/dataWrapper.js" import { Section } from "#/components/layouts/section/section.js" import { JournalReportTable } from "#/features/organizations/$idOrganization/years/$idYear/reports/journalReport/journalReportTable.js" import { journalReportRoute } from "#/routes/root/auth/organizations/$idOrganization/years/$idYear/reports/journalReportRoute.js" -import { readAllRecordRowsRouteDefinition, readAllRecordsRouteDefinition } from "@arrhes/metadata/routes" +import { readAllRecordRowsRouteDefinition, readAllRecordsRouteDefinition } from "@arrhes/application-metadata/routes" import { useParams } from "@tanstack/react-router" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/journalReport/journalReportTable.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/journalReport/journalReportTable.tsx index 72fcef8..a964e3f 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/journalReport/journalReportTable.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/journalReport/journalReportTable.tsx @@ -6,8 +6,8 @@ import { DataWrapper } from "#/components/layouts/dataWrapper.js" import { Table } from "#/components/layouts/table/table.js" import { cn } from "#/utilities/cn.js" import { compareAmounts } from "#/utilities/compareAmounts.js" -import { readOneAccountRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { readOneAccountRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { Fragment } from "react/jsx-runtime" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/ledgerReport/ledgerReportPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/ledgerReport/ledgerReportPage.tsx index 8e1a117..75bae22 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/ledgerReport/ledgerReportPage.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/ledgerReport/ledgerReportPage.tsx @@ -3,7 +3,7 @@ import { DataWrapper } from "#/components/layouts/dataWrapper.js" import { Section } from "#/components/layouts/section/section.js" import { LedgerReportTable } from "#/features/organizations/$idOrganization/years/$idYear/reports/ledgerReport/ledgerReportTable.js" import { ledgerReportRoute } from "#/routes/root/auth/organizations/$idOrganization/years/$idYear/reports/ledgerReportRoute.js" -import { readAllAccountsRouteDefinition, readAllRecordRowsRouteDefinition } from "@arrhes/metadata/routes" +import { readAllAccountsRouteDefinition, readAllRecordRowsRouteDefinition } from "@arrhes/application-metadata/routes" import { useParams } from "@tanstack/react-router" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/ledgerReport/ledgerReportTable.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/ledgerReport/ledgerReportTable.tsx index 228d19f..84da8b5 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/ledgerReport/ledgerReportTable.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/reports/ledgerReport/ledgerReportTable.tsx @@ -2,7 +2,7 @@ import { FormatNull } from "#/components/formats/formatNull.js" import { FormatPrice } from "#/components/formats/formatPrice.js" import { FormatText } from "#/components/formats/formatText.js" import { Table } from "#/components/layouts/table/table.js" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { Fragment } from "react/jsx-runtime" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/accountPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/accountPage.tsx index 264e791..08307d5 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/accountPage.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/accountPage.tsx @@ -11,7 +11,7 @@ import { TitleComponent } from "#/components/layouts/title.js" import { DeleteOneAccount } from "#/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/deleteOneAccount.js" import { UpdateOneAccount } from "#/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/updateOneAccount.js" import { accountRoute } from "#/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/accountRoute.js" -import { readOneAccountRouteDefinition } from "@arrhes/metadata/routes" +import { readOneAccountRouteDefinition } from "@arrhes/application-metadata/routes" import { IconChevronLeft, IconPencil, IconTrash } from "@tabler/icons-react" import { Link, useParams } from "@tanstack/react-router" import { Fragment } from "react/jsx-runtime" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/deleteOneAccount.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/deleteOneAccount.tsx index 60709e6..d776a01 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/deleteOneAccount.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/deleteOneAccount.tsx @@ -5,8 +5,8 @@ import { toast } from "#/contexts/toasts/useToast.js" import { platformRouter } from "#/routes/platformRouter.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { deleteOneAccountRouteDefinition, readAllAccountsRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { deleteOneAccountRouteDefinition, readAllAccountsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconTrash } from "@tabler/icons-react" import { ComponentPropsWithRef, ReactElement, useState } from "react" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/updateOneAccount.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/updateOneAccount.tsx index 2dc664f..616ecda 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/updateOneAccount.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/updateOneAccount.tsx @@ -12,8 +12,8 @@ import { AccountSelect } from "#/features/organizations/$idOrganization/years/$i import { BalanceSheetsSelect } from "#/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetSelect.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { readAllAccountsRouteDefinition, readOneAccountRouteDefinition, updateOneAccountRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { readAllAccountsRouteDefinition, readOneAccountRouteDefinition, updateOneAccountRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconPlus } from "@tabler/icons-react" import { JSX, useState } from "react" import { Fragment } from "react/jsx-runtime" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountItem.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountItem.tsx index 9449e93..2ea9093 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountItem.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountItem.tsx @@ -1,5 +1,5 @@ import { cn } from "#/utilities/cn.js" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { Link } from "@tanstack/react-router" import { ComponentProps, Fragment } from "react" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountSelect.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountSelect.tsx index b547813..809be19 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountSelect.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountSelect.tsx @@ -1,7 +1,7 @@ import { InputCombobox } from "#/components/inputs/inputCombobox.js" import { useHTTPData } from "#/utilities/useHTTPData.js" -import { readAllAccountsRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { readAllAccountsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountsTable.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountsTable.tsx index 74822d7..d0871d0 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountsTable.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountsTable.tsx @@ -4,8 +4,8 @@ import { InputText } from "#/components/inputs/inputText.js" import { DataWrapper } from "#/components/layouts/dataWrapper.js" import { AccountItem } from "#/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountItem.js" import { sortAccounts } from "#/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/sortAccounts.js" -import { readAllAccountsRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { readAllAccountsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { useState } from "react" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/createOneAccount.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/createOneAccount.tsx index ce493dc..ff6407e 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/createOneAccount.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/createOneAccount.tsx @@ -12,8 +12,8 @@ import { AccountSelect } from "#/features/organizations/$idOrganization/years/$i import { BalanceSheetsSelect } from "#/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetSelect.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { createOneAccountRouteDefinition, readAllAccountsRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { createOneAccountRouteDefinition, readAllAccountsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconPlus } from "@tabler/icons-react" import { JSX, useState } from "react" import { Fragment } from "react/jsx-runtime" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/generateAccounts.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/generateAccounts.tsx index a8e8a37..e0ba7e0 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/generateAccounts.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/generateAccounts.tsx @@ -9,8 +9,8 @@ import { Drawer } from "#/components/overlays/drawer/drawer.js" import { toast } from "#/contexts/toasts/useToast.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { generateAccountsRouteDefinition, readAllAccountsRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { generateAccountsRouteDefinition, readAllAccountsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconPlus } from "@tabler/icons-react" import { JSX, useState } from "react" import { Fragment } from "react/jsx-runtime" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/groupAccounts.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/groupAccounts.tsx index e0ca981..30bd17f 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/groupAccounts.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/groupAccounts.tsx @@ -1,4 +1,4 @@ -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/sortAccounts.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/sortAccounts.tsx index 54cfc89..b8262ab 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/sortAccounts.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/sortAccounts.tsx @@ -1,4 +1,4 @@ -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/balanceSheetPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/balanceSheetPage.tsx index 116eb32..bfa908c 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/balanceSheetPage.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/balanceSheetPage.tsx @@ -10,7 +10,7 @@ import { TitleComponent } from "#/components/layouts/title.js" import { DeleteOneBalanceSheet } from "#/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/deleteOneBalanceSheet.js" import { UpdateOneBalanceSheet } from "#/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/updateOneBalanceSheet.js" import { balanceSheetRoute } from "#/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/balanceSheetRoute.js" -import { readOneBalanceSheetRouteDefinition } from "@arrhes/metadata/routes" +import { readOneBalanceSheetRouteDefinition } from "@arrhes/application-metadata/routes" import { IconChevronLeft, IconPencil, IconTrash } from "@tabler/icons-react" import { Link, useParams } from "@tanstack/react-router" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/deleteOneBalanceSheet.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/deleteOneBalanceSheet.tsx index b84ccf1..df76ff8 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/deleteOneBalanceSheet.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/deleteOneBalanceSheet.tsx @@ -5,8 +5,8 @@ import { toast } from "#/contexts/toasts/useToast.js" import { platformRouter } from "#/routes/platformRouter.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { deleteOneBalanceSheetRouteDefinition, readAllBalanceSheetsRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { deleteOneBalanceSheetRouteDefinition, readAllBalanceSheetsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconTrash } from "@tabler/icons-react" import { ComponentPropsWithRef, ReactElement, useState } from "react" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/updateOneBalanceSheet.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/updateOneBalanceSheet.tsx index 36a0984..be62cdb 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/updateOneBalanceSheet.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/updateOneBalanceSheet.tsx @@ -11,8 +11,8 @@ import { toast } from "#/contexts/toasts/useToast.js" import { BalanceSheetsSelect } from "#/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetSelect.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { readAllBalanceSheetsRouteDefinition, readOneBalanceSheetRouteDefinition, updateOneBalanceSheetRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { readAllBalanceSheetsRouteDefinition, readOneBalanceSheetRouteDefinition, updateOneBalanceSheetRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconPlus } from "@tabler/icons-react" import { JSX, useState } from "react" import { Fragment } from "react/jsx-runtime" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetItem.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetItem.tsx index 57c2212..3a176ac 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetItem.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetItem.tsx @@ -1,6 +1,6 @@ import { BalanceSheetRow } from "#/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetRow.js" import { getBalanceSheetChildren } from "#/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/getBalanceSheetChildren.js" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { ComponentProps, Fragment } from "react" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetRow.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetRow.tsx index 00420a5..49dafa1 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetRow.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetRow.tsx @@ -1,5 +1,5 @@ import { cn } from "#/utilities/cn.js" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { Link } from "@tanstack/react-router" import { ComponentProps } from "react" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetSelect.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetSelect.tsx index e3d00f2..d737f1e 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetSelect.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetSelect.tsx @@ -1,7 +1,7 @@ import { InputCombobox } from "#/components/inputs/inputCombobox.js" import { useHTTPData } from "#/utilities/useHTTPData.js" -import { readAllBalanceSheetsRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { readAllBalanceSheetsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetTable.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetTable.tsx index 69155a7..186d73f 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetTable.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetTable.tsx @@ -4,8 +4,8 @@ import { InputText } from "#/components/inputs/inputText.js" import { DataWrapper } from "#/components/layouts/dataWrapper.js" import { BalanceSheetItem } from "#/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetItem.js" import { getBalanceSheetChildren } from "#/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/getBalanceSheetChildren.js" -import { readAllBalanceSheetsRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { readAllBalanceSheetsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { useState } from "react" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/connectAccountsToBalanceSheets.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/connectAccountsToBalanceSheets.tsx index b687287..1fb5f5a 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/connectAccountsToBalanceSheets.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/connectAccountsToBalanceSheets.tsx @@ -4,8 +4,8 @@ import { Dialog } from "#/components/overlays/dialog/dialog.js" import { toast } from "#/contexts/toasts/useToast.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { connectAccountsToBalanceSheetsRouteDefinition, readAllBalanceSheetsRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { connectAccountsToBalanceSheetsRouteDefinition, readAllBalanceSheetsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconRefresh } from "@tabler/icons-react" import { JSX, useState } from "react" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/createOneBalanceSheet.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/createOneBalanceSheet.tsx index a39b2cd..beab8ed 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/createOneBalanceSheet.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/createOneBalanceSheet.tsx @@ -11,8 +11,8 @@ import { toast } from "#/contexts/toasts/useToast.js" import { BalanceSheetsSelect } from "#/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetSelect.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { createOneBalanceSheetRouteDefinition, readAllBalanceSheetsRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { createOneBalanceSheetRouteDefinition, readAllBalanceSheetsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconPlus } from "@tabler/icons-react" import { JSX, useState } from "react" import { Fragment } from "react/jsx-runtime" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/generateBalanceSheets.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/generateBalanceSheets.tsx index 2e25029..63089a7 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/generateBalanceSheets.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/generateBalanceSheets.tsx @@ -4,8 +4,8 @@ import { Dialog } from "#/components/overlays/dialog/dialog.js" import { toast } from "#/contexts/toasts/useToast.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { generateBalanceSheetsRouteDefinition, readAllBalanceSheetsRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { generateBalanceSheetsRouteDefinition, readAllBalanceSheetsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconRefresh } from "@tabler/icons-react" import { JSX, useState } from "react" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/getBalanceSheetChildren.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/getBalanceSheetChildren.tsx index 1b08bd5..8a523cf 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/getBalanceSheetChildren.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/getBalanceSheetChildren.tsx @@ -1,4 +1,4 @@ -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/getBalanceSheetLevel.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/getBalanceSheetLevel.tsx index ae8d75b..dc73244 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/getBalanceSheetLevel.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/getBalanceSheetLevel.tsx @@ -1,4 +1,4 @@ -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/deleteOneYear.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/deleteOneYear.tsx index f8321a5..3fcbf86 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/deleteOneYear.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/deleteOneYear.tsx @@ -5,8 +5,8 @@ import { toast } from "#/contexts/toasts/useToast.js" import { platformRouter } from "#/routes/platformRouter.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { deleteOneYearRouteDefinition, readAllYearsRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { deleteOneYearRouteDefinition, readAllYearsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconTrash } from "@tabler/icons-react" import { ComponentPropsWithRef, ReactElement, useState } from "react" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/deleteOneIncomeStatement.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/deleteOneIncomeStatement.tsx index dae4c72..134079d 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/deleteOneIncomeStatement.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/deleteOneIncomeStatement.tsx @@ -5,8 +5,8 @@ import { toast } from "#/contexts/toasts/useToast.js" import { platformRouter } from "#/routes/platformRouter.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { deleteOneIncomeStatementRouteDefinition, readAllIncomeStatementsRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { deleteOneIncomeStatementRouteDefinition, readAllIncomeStatementsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconTrash } from "@tabler/icons-react" import { ComponentPropsWithRef, ReactElement, useState } from "react" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/incomeStatementPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/incomeStatementPage.tsx index 11711bc..e34a091 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/incomeStatementPage.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/incomeStatementPage.tsx @@ -10,7 +10,7 @@ import { TitleComponent } from "#/components/layouts/title.js" import { DeleteOneIncomeStatement } from "#/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/deleteOneIncomeStatement.js" import { UpdateOneIncomeStatement } from "#/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/updateOneIncomeStatement.js" import { incomeStatementRoute } from "#/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/incomeStatementRoute.js" -import { readOneIncomeStatementRouteDefinition } from "@arrhes/metadata/routes" +import { readOneIncomeStatementRouteDefinition } from "@arrhes/application-metadata/routes" import { IconChevronLeft, IconPencil, IconTrash } from "@tabler/icons-react" import { Link, useParams } from "@tanstack/react-router" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/updateOneIncomeStatement.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/updateOneIncomeStatement.tsx index 2e8b024..7537ad4 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/updateOneIncomeStatement.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/updateOneIncomeStatement.tsx @@ -10,8 +10,8 @@ import { Drawer } from "#/components/overlays/drawer/drawer.js" import { toast } from "#/contexts/toasts/useToast.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { readAllIncomeStatementsRouteDefinition, readOneIncomeStatementRouteDefinition, updateOneIncomeStatementRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { readAllIncomeStatementsRouteDefinition, readOneIncomeStatementRouteDefinition, updateOneIncomeStatementRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconPlus } from "@tabler/icons-react" import { JSX, useState } from "react" import { Fragment } from "react/jsx-runtime" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/computationIncomeStatementPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/computationIncomeStatementPage.tsx index bc4ef2c..01e6c70 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/computationIncomeStatementPage.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/computationIncomeStatementPage.tsx @@ -11,7 +11,7 @@ import { TitleComponent } from "#/components/layouts/title.js" import { DeleteOneComputationIncomeStatement } from "#/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/deleteOneComputationIncomeStatement.js" import { UpdateOneComputationIncomeStatement } from "#/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/updateOneComputationIncomeStatement.js" import { computationIncomeStatementLayoutRoute } from "#/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/$idComputationIncomeStatement/computationIncomeStatementLayoutRoute.js" -import { readOneComputationIncomeStatementRouteDefinition, readOneComputationRouteDefinition } from "@arrhes/metadata/routes" +import { readOneComputationIncomeStatementRouteDefinition, readOneComputationRouteDefinition } from "@arrhes/application-metadata/routes" import { IconChevronLeft, IconPencil, IconTrash } from "@tabler/icons-react" import { Link, useParams } from "@tanstack/react-router" import { Fragment } from "react/jsx-runtime" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/deleteOneComputationIncomeStatement.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/deleteOneComputationIncomeStatement.tsx index c6b918b..7ffc405 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/deleteOneComputationIncomeStatement.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/deleteOneComputationIncomeStatement.tsx @@ -5,8 +5,8 @@ import { toast } from "#/contexts/toasts/useToast.js" import { platformRouter } from "#/routes/platformRouter.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { deleteOneComputationIncomeStatementRouteDefinition, readAllComputationIncomeStatementsRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { deleteOneComputationIncomeStatementRouteDefinition, readAllComputationIncomeStatementsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconTrash } from "@tabler/icons-react" import { ComponentPropsWithRef, ReactElement, useState } from "react" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/updateOneComputationIncomeStatement.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/updateOneComputationIncomeStatement.tsx index 632f9f1..8749ac7 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/updateOneComputationIncomeStatement.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/updateOneComputationIncomeStatement.tsx @@ -10,8 +10,8 @@ import { Drawer } from "#/components/overlays/drawer/drawer.js" import { toast } from "#/contexts/toasts/useToast.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { readAllComputationIncomeStatementsRouteDefinition, readAllIncomeStatementsRouteDefinition, readOneComputationIncomeStatementRouteDefinition, updateOneComputationIncomeStatementRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { readAllComputationIncomeStatementsRouteDefinition, readAllIncomeStatementsRouteDefinition, readOneComputationIncomeStatementRouteDefinition, updateOneComputationIncomeStatementRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconPlus } from "@tabler/icons-react" import { JSX, useState } from "react" import { Fragment } from "react/jsx-runtime" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/computationIncomeStatementTable.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/computationIncomeStatementTable.tsx index 46a9b5c..16c5fc4 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/computationIncomeStatementTable.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/computationIncomeStatementTable.tsx @@ -6,8 +6,8 @@ import { DataTable } from "#/components/layouts/dataTable.js" import { DataWrapper } from "#/components/layouts/dataWrapper.js" import { CreateOneComputationIncomeStatement } from "#/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/createOneComputationIncomeStatement.js" import { platformRouter } from "#/routes/platformRouter.js" -import { readAllComputationIncomeStatementsRouteDefinition, readOneIncomeStatementRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { readAllComputationIncomeStatementsRouteDefinition, readOneIncomeStatementRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconPlus } from "@tabler/icons-react" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/createOneComputationIncomeStatement.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/createOneComputationIncomeStatement.tsx index 7159263..32c463b 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/createOneComputationIncomeStatement.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/createOneComputationIncomeStatement.tsx @@ -10,8 +10,8 @@ import { Drawer } from "#/components/overlays/drawer/drawer.js" import { toast } from "#/contexts/toasts/useToast.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { createOneComputationIncomeStatementRouteDefinition, readAllComputationIncomeStatementsRouteDefinition, readAllIncomeStatementsRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { createOneComputationIncomeStatementRouteDefinition, readAllComputationIncomeStatementsRouteDefinition, readAllIncomeStatementsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconPlus } from "@tabler/icons-react" import { JSX, useState } from "react" import { Fragment } from "react/jsx-runtime" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationPage.tsx index 515009d..0388aee 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationPage.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationPage.tsx @@ -11,7 +11,7 @@ import { ComputationIncomeStatementsTable } from "#/features/organizations/$idOr import { DeleteOneComputation } from "#/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/deleteOneComputation.js" import { UpdateOneComputation } from "#/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/updateOneComputation.js" import { computationLayoutRoute } from "#/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationLayoutRoute.js" -import { readOneComputationRouteDefinition } from "@arrhes/metadata/routes" +import { readOneComputationRouteDefinition } from "@arrhes/application-metadata/routes" import { IconChevronLeft, IconPencil, IconTrash } from "@tabler/icons-react" import { Link, useParams } from "@tanstack/react-router" import { Fragment } from "react/jsx-runtime" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/deleteOneComputation.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/deleteOneComputation.tsx index 20b92c4..ff6135a 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/deleteOneComputation.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/deleteOneComputation.tsx @@ -5,8 +5,8 @@ import { toast } from "#/contexts/toasts/useToast.js" import { platformRouter } from "#/routes/platformRouter.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { deleteOneComputationRouteDefinition, readAllComputationsRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { deleteOneComputationRouteDefinition, readAllComputationsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconTrash } from "@tabler/icons-react" import { ComponentPropsWithRef, ReactElement, useState } from "react" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/updateOneComputation.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/updateOneComputation.tsx index f696cc5..1d0ac27 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/updateOneComputation.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/updateOneComputation.tsx @@ -9,8 +9,8 @@ import { Drawer } from "#/components/overlays/drawer/drawer.js" import { toast } from "#/contexts/toasts/useToast.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { readAllComputationsRouteDefinition, readOneComputationRouteDefinition, updateOneComputationRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { readAllComputationsRouteDefinition, readOneComputationRouteDefinition, updateOneComputationRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconPlus } from "@tabler/icons-react" import { JSX, useState } from "react" import { Fragment } from "react/jsx-runtime" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/computationsTable.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/computationsTable.tsx index e97bc9a..6cb2a5a 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/computationsTable.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/computationsTable.tsx @@ -1,8 +1,8 @@ import { FormatNull } from "#/components/formats/formatNull.js" import { DataWrapper } from "#/components/layouts/dataWrapper.js" import { cn } from "#/utilities/cn.js" -import { readAllComputationsRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { readAllComputationsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { Link } from "@tanstack/react-router" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/createOneComputation.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/createOneComputation.tsx index a01d34a..b7328e8 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/createOneComputation.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/createOneComputation.tsx @@ -9,8 +9,8 @@ import { Drawer } from "#/components/overlays/drawer/drawer.js" import { toast } from "#/contexts/toasts/useToast.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { createOneComputationRouteDefinition, readAllComputationsRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { createOneComputationRouteDefinition, readAllComputationsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconPlus } from "@tabler/icons-react" import { JSX, useState } from "react" import { Fragment } from "react/jsx-runtime" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/generateComputations.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/generateComputations.tsx index ad99ac2..6a4cff7 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/generateComputations.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/generateComputations.tsx @@ -4,8 +4,8 @@ import { Dialog } from "#/components/overlays/dialog/dialog.js" import { toast } from "#/contexts/toasts/useToast.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { generateComputationsRouteDefinition, readAllComputationsRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { generateComputationsRouteDefinition, readAllComputationsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconRefresh } from "@tabler/icons-react" import { JSX, useState } from "react" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/connectAccountsToIncomeStatements.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/connectAccountsToIncomeStatements.tsx index faa9e7f..e177148 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/connectAccountsToIncomeStatements.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/connectAccountsToIncomeStatements.tsx @@ -4,8 +4,8 @@ import { Dialog } from "#/components/overlays/dialog/dialog.js" import { toast } from "#/contexts/toasts/useToast.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { connectAccountsToIncomeStatementsRouteDefinition, readAllIncomeStatementsRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { connectAccountsToIncomeStatementsRouteDefinition, readAllIncomeStatementsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconRefresh } from "@tabler/icons-react" import { JSX, useState } from "react" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/createOneIncomeStatement.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/createOneIncomeStatement.tsx index d922fa5..4e23ad3 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/createOneIncomeStatement.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/createOneIncomeStatement.tsx @@ -10,8 +10,8 @@ import { Drawer } from "#/components/overlays/drawer/drawer.js" import { toast } from "#/contexts/toasts/useToast.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { createOneIncomeStatementRouteDefinition, readAllIncomeStatementsRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { createOneIncomeStatementRouteDefinition, readAllIncomeStatementsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconPlus } from "@tabler/icons-react" import { JSX, useState } from "react" import { Fragment } from "react/jsx-runtime" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/generateIncomeStatement.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/generateIncomeStatement.tsx index ead9ece..353d8d8 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/generateIncomeStatement.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/generateIncomeStatement.tsx @@ -4,8 +4,8 @@ import { Dialog } from "#/components/overlays/dialog/dialog.js" import { toast } from "#/contexts/toasts/useToast.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { generateIncomeStatementsRouteDefinition, readAllIncomeStatementsRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { generateIncomeStatementsRouteDefinition, readAllIncomeStatementsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconRefresh } from "@tabler/icons-react" import { JSX, useState } from "react" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/getIncomeStatementChildren.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/getIncomeStatementChildren.tsx index 5fc1be8..aa9e1a3 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/getIncomeStatementChildren.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/getIncomeStatementChildren.tsx @@ -1,4 +1,4 @@ -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/getIncomeStatementLevel.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/getIncomeStatementLevel.tsx index 473e779..a45c66e 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/getIncomeStatementLevel.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/getIncomeStatementLevel.tsx @@ -1,4 +1,4 @@ -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementItem.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementItem.tsx index c0faa75..0611562 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementItem.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementItem.tsx @@ -1,6 +1,6 @@ import { getIncomeStatementChildren } from "#/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/getIncomeStatementChildren.js" import { IncomeStatementRow } from "#/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementRow.js" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { ComponentProps, Fragment } from "react" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementRow.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementRow.tsx index 7c60a7e..ed62ccc 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementRow.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementRow.tsx @@ -1,5 +1,5 @@ import { cn } from "#/utilities/cn.js" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { Link } from "@tanstack/react-router" import { ComponentProps } from "react" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementsTable.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementsTable.tsx index 3a075aa..e2ab95a 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementsTable.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementsTable.tsx @@ -4,8 +4,8 @@ import { InputText } from "#/components/inputs/inputText.js" import { DataWrapper } from "#/components/layouts/dataWrapper.js" import { getIncomeStatementChildren } from "#/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/getIncomeStatementChildren.js" import { IncomeStatementItem } from "#/features/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementItem.js" -import { readAllIncomeStatementsRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { readAllIncomeStatementsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { useState } from "react" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/deleteOneJournal.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/deleteOneJournal.tsx index 2987f72..a5efb8c 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/deleteOneJournal.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/deleteOneJournal.tsx @@ -5,8 +5,8 @@ import { toast } from "#/contexts/toasts/useToast.js" import { platformRouter } from "#/routes/platformRouter.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { deleteOneJournalRouteDefinition, readAllJournalsRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { deleteOneJournalRouteDefinition, readAllJournalsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconTrash } from "@tabler/icons-react" import { ComponentPropsWithRef, ReactElement, useState } from "react" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/journalPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/journalPage.tsx index d0918e5..be722df 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/journalPage.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/journalPage.tsx @@ -9,7 +9,7 @@ import { TitleComponent } from "#/components/layouts/title.js" import { DeleteOneJournal } from "#/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/deleteOneJournal.js" import { UpdateOneJournal } from "#/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/updateOneJournal.js" import { journalRoute } from "#/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/journalRoute.js" -import { readOneJournalRouteDefinition } from "@arrhes/metadata/routes" +import { readOneJournalRouteDefinition } from "@arrhes/application-metadata/routes" import { IconChevronLeft, IconPencil, IconTrash } from "@tabler/icons-react" import { Link, useParams } from "@tanstack/react-router" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/updateOneJournal.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/updateOneJournal.tsx index 3f43958..2d97421 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/updateOneJournal.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/updateOneJournal.tsx @@ -9,8 +9,8 @@ import { Drawer } from "#/components/overlays/drawer/drawer.js" import { toast } from "#/contexts/toasts/useToast.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { readAllJournalsRouteDefinition, readOneJournalRouteDefinition, updateOneJournalRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { readAllJournalsRouteDefinition, readOneJournalRouteDefinition, updateOneJournalRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconPlus } from "@tabler/icons-react" import { JSX, useState } from "react" import { Fragment } from "react/jsx-runtime" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/createOneJournal.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/createOneJournal.tsx index cbdd16a..a1241e2 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/createOneJournal.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/createOneJournal.tsx @@ -9,8 +9,8 @@ import { Drawer } from "#/components/overlays/drawer/drawer.js" import { toast } from "#/contexts/toasts/useToast.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { createOneJournalRouteDefinition, readAllJournalsRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { createOneJournalRouteDefinition, readAllJournalsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconPlus } from "@tabler/icons-react" import { JSX, useState } from "react" import { Fragment } from "react/jsx-runtime" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/generateJournals.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/generateJournals.tsx index d2555cd..cf7c436 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/generateJournals.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/generateJournals.tsx @@ -4,8 +4,8 @@ import { Dialog } from "#/components/overlays/dialog/dialog.js" import { toast } from "#/contexts/toasts/useToast.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { generateJournalsRouteDefinition, readAllJournalsRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { generateJournalsRouteDefinition, readAllJournalsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconRefresh } from "@tabler/icons-react" import { JSX, useState } from "react" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/journalSelect.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/journalSelect.tsx index d0bb031..a7096ea 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/journalSelect.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/journalSelect.tsx @@ -1,7 +1,7 @@ import { InputCombobox } from "#/components/inputs/inputCombobox.js" import { useHTTPData } from "#/utilities/useHTTPData.js" -import { readAllJournalsRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { readAllJournalsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/journalsPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/journalsPage.tsx index e62b118..7052b54 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/journalsPage.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/journalsPage.tsx @@ -7,7 +7,7 @@ import { Section } from "#/components/layouts/section/section.js"; import { CreateOneJournal } from "#/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/createOneJournal.js"; import { GenerateJournals } from "#/features/organizations/$idOrganization/years/$idYear/yearSettings/journals/generateJournals.js"; import { journalsRoute } from "#/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/journalsRoute.js"; -import { readAllJournalsRouteDefinition } from "@arrhes/metadata/routes"; +import { readAllJournalsRouteDefinition } from "@arrhes/application-metadata/routes"; import { IconPlus } from "@tabler/icons-react"; import { Link, useParams } from "@tanstack/react-router"; diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/deleteOneRecordLabel.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/deleteOneRecordLabel.tsx index 550f015..7187304 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/deleteOneRecordLabel.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/deleteOneRecordLabel.tsx @@ -5,8 +5,8 @@ import { toast } from "#/contexts/toasts/useToast.js" import { platformRouter } from "#/routes/platformRouter.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { deleteOneRecordLabelRouteDefinition, readAllRecordLabelsRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { deleteOneRecordLabelRouteDefinition, readAllRecordLabelsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconTrash } from "@tabler/icons-react" import { ComponentPropsWithRef, ReactElement, useState } from "react" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/recordLabelPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/recordLabelPage.tsx index bde319d..c6ba3cc 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/recordLabelPage.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/recordLabelPage.tsx @@ -9,7 +9,7 @@ import { TitleComponent } from "#/components/layouts/title.js" import { DeleteOneRecordLabel } from "#/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/deleteOneRecordLabel.js" import { UpdateOneRecordLabel } from "#/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/updateOneRecordLabel.js" import { recordLabelRoute } from "#/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/recordLabelRoute.js" -import { readOneRecordLabelRouteDefinition } from "@arrhes/metadata/routes" +import { readOneRecordLabelRouteDefinition } from "@arrhes/application-metadata/routes" import { IconChevronLeft, IconPencil, IconTrash } from "@tabler/icons-react" import { Link, useParams } from "@tanstack/react-router" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/updateOneRecordLabel.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/updateOneRecordLabel.tsx index e93efd1..ddb5f11 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/updateOneRecordLabel.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/updateOneRecordLabel.tsx @@ -9,8 +9,8 @@ import { Drawer } from "#/components/overlays/drawer/drawer.js" import { toast } from "#/contexts/toasts/useToast.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { readAllRecordLabelsRouteDefinition, readOneRecordLabelRouteDefinition, updateOneRecordLabelRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { readAllRecordLabelsRouteDefinition, readOneRecordLabelRouteDefinition, updateOneRecordLabelRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconPlus } from "@tabler/icons-react" import { JSX, useState } from "react" import { Fragment } from "react/jsx-runtime" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/createOneRecordLabel.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/createOneRecordLabel.tsx index 18ae30e..5b57d35 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/createOneRecordLabel.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/createOneRecordLabel.tsx @@ -9,8 +9,8 @@ import { Drawer } from "#/components/overlays/drawer/drawer.js" import { toast } from "#/contexts/toasts/useToast.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { createOneRecordLabelRouteDefinition, readAllRecordLabelsRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { createOneRecordLabelRouteDefinition, readAllRecordLabelsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconPlus } from "@tabler/icons-react" import { JSX, useState } from "react" import { Fragment } from "react/jsx-runtime" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/recordLabelSelect.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/recordLabelSelect.tsx index f2eda53..6eaf395 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/recordLabelSelect.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/recordLabelSelect.tsx @@ -1,7 +1,7 @@ import { InputCombobox } from "#/components/inputs/inputCombobox.js" import { useHTTPData } from "#/utilities/useHTTPData.js" -import { readAllRecordLabelsRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { readAllRecordLabelsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/recordLabelsPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/recordLabelsPage.tsx index e6a1974..028f56d 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/recordLabelsPage.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/recordLabelsPage.tsx @@ -5,7 +5,7 @@ import { DataWrapper } from "#/components/layouts/dataWrapper.js"; import { Section } from "#/components/layouts/section/section.js"; import { CreateOneRecordLabel } from "#/features/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/createOneRecordLabel.js"; import { recordLabelsRoute } from "#/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/recordLabelsRoute.js"; -import { readAllRecordLabelsRouteDefinition } from "@arrhes/metadata/routes"; +import { readAllRecordLabelsRouteDefinition } from "@arrhes/application-metadata/routes"; import { IconPlus } from "@tabler/icons-react"; import { Link, useParams } from "@tanstack/react-router"; diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/updateOneYear.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/updateOneYear.tsx index 58f19ed..eca2d8a 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/updateOneYear.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/updateOneYear.tsx @@ -11,8 +11,8 @@ import { toast } from "#/contexts/toasts/useToast.js" import { YearSelect } from "#/features/organizations/$idOrganization/years/yearSelect.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { readOneYearRouteDefinition, updateOneYearRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { readOneYearRouteDefinition, updateOneYearRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconPencil } from "@tabler/icons-react" import { JSX, useState } from "react" import { Fragment } from "react/jsx-runtime" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/yearSettingsPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/yearSettingsPage.tsx index 48e790b..0d1a338 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/yearSettingsPage.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/yearSettingsPage.tsx @@ -4,7 +4,7 @@ import { DataWrapper } from "#/components/layouts/dataWrapper.js" import { DeleteOneYear } from "#/features/organizations/$idOrganization/years/$idYear/yearSettings/deleteOneYear.js" import { UpdateOneYear } from "#/features/organizations/$idOrganization/years/$idYear/yearSettings/updateOneYear.js" import { yearSettingsRoute } from "#/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/yearSettingsRoute.js" -import { readOneYearRouteDefinition } from "@arrhes/metadata/routes" +import { readOneYearRouteDefinition } from "@arrhes/application-metadata/routes" import { IconPencil, IconTrash } from "@tabler/icons-react" import { useParams } from "@tanstack/react-router" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/createOneYear.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/createOneYear.tsx index c371cbc..3691d5a 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/createOneYear.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/createOneYear.tsx @@ -11,8 +11,8 @@ import { toast } from "#/contexts/toasts/useToast.js" import { YearSelect } from "#/features/organizations/$idOrganization/years/yearSelect.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { createOneYearRouteDefinition, readAllYearsRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { createOneYearRouteDefinition, readAllYearsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { IconPlus } from "@tabler/icons-react" import { JSX, useState } from "react" import { Fragment } from "react/jsx-runtime" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/yearSelect.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/yearSelect.tsx index 3a17fa4..080fce0 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/yearSelect.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/yearSelect.tsx @@ -1,7 +1,7 @@ import { InputSelect } from "#/components/inputs/inputSelect.js" import { useHTTPData } from "#/utilities/useHTTPData.js" -import { readAllYearsRouteDefinition } from "@arrhes/metadata/routes" -import { returnedSchemas } from "@arrhes/metadata/schemas" +import { readAllYearsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" import * as v from "valibot" diff --git a/packages/dashboard/src/features/organizations/$idOrganization/years/yearsPage.tsx b/packages/dashboard/src/features/organizations/$idOrganization/years/yearsPage.tsx index 0d77cac..cd6dd46 100644 --- a/packages/dashboard/src/features/organizations/$idOrganization/years/yearsPage.tsx +++ b/packages/dashboard/src/features/organizations/$idOrganization/years/yearsPage.tsx @@ -5,7 +5,7 @@ import { DataWrapper } from "#/components/layouts/dataWrapper.js" import { Page } from "#/components/layouts/page/page.js" import { CreateOneYear } from "#/features/organizations/$idOrganization/years/createOneYear.js" import { yearsRoute } from "#/routes/root/auth/organizations/$idOrganization/years/yearsRoute.js" -import { readAllYearsRouteDefinition } from "@arrhes/metadata/routes" +import { readAllYearsRouteDefinition } from "@arrhes/application-metadata/routes" import { IconCalendarPlus } from "@tabler/icons-react" import { Link, useParams } from "@tanstack/react-router" diff --git a/packages/dashboard/src/features/organizations/addNewOrganization.tsx b/packages/dashboard/src/features/organizations/addNewOrganization.tsx index 82e9460..65fedfa 100644 --- a/packages/dashboard/src/features/organizations/addNewOrganization.tsx +++ b/packages/dashboard/src/features/organizations/addNewOrganization.tsx @@ -10,7 +10,7 @@ import { Drawer } from "#/components/overlays/drawer/drawer.js" import { toast } from "#/contexts/toasts/useToast.js" import { invalidateData } from "#/utilities/invalidateData.js" import { postAPI } from "#/utilities/postAPI.js" -import { addNewOrganizationRouteDefinition, getAllMyOrganizationsRouteDefinition } from "@arrhes/metadata/routes" +import { addNewOrganizationRouteDefinition, getAllMyOrganizationsRouteDefinition } from "@arrhes/application-metadata/routes" import { IconPlus } from "@tabler/icons-react" import { JSX, useState } from "react" import { Fragment } from "react/jsx-runtime" diff --git a/packages/dashboard/src/features/organizations/organizationsPage.tsx b/packages/dashboard/src/features/organizations/organizationsPage.tsx index 71b285a..6ce5dbc 100644 --- a/packages/dashboard/src/features/organizations/organizationsPage.tsx +++ b/packages/dashboard/src/features/organizations/organizationsPage.tsx @@ -4,7 +4,7 @@ import { Box } from "#/components/layouts/box.js" import { DataWrapper } from "#/components/layouts/dataWrapper.js" import { Page } from "#/components/layouts/page/page.js" import { AddNewOrganization } from "#/features/organizations/addNewOrganization.js" -import { getAllMyOrganizationsRouteDefinition } from "@arrhes/metadata/routes" +import { getAllMyOrganizationsRouteDefinition } from "@arrhes/application-metadata/routes" import { IconBuildingPlus } from "@tabler/icons-react" import { Link } from "@tanstack/react-router" diff --git a/packages/dashboard/src/features/signIn/signInPage.tsx b/packages/dashboard/src/features/signIn/signInPage.tsx index 22fef0c..657dcda 100644 --- a/packages/dashboard/src/features/signIn/signInPage.tsx +++ b/packages/dashboard/src/features/signIn/signInPage.tsx @@ -10,7 +10,7 @@ import { InputText } from "#/components/inputs/inputText.js" import { toast } from "#/contexts/toasts/useToast.js" import { platformRouter } from "#/routes/platformRouter.js" import { postAPI } from "#/utilities/postAPI.js" -import { signInRouteDefinition } from "@arrhes/metadata/routes" +import { signInRouteDefinition } from "@arrhes/application-metadata/routes" import { IconLogin2 } from "@tabler/icons-react" import { Link } from "@tanstack/react-router" import { Fragment } from "react/jsx-runtime" diff --git a/packages/dashboard/src/features/signUp/signUpPage.tsx b/packages/dashboard/src/features/signUp/signUpPage.tsx index 0157e20..269ef10 100644 --- a/packages/dashboard/src/features/signUp/signUpPage.tsx +++ b/packages/dashboard/src/features/signUp/signUpPage.tsx @@ -10,7 +10,7 @@ import { InputText } from "#/components/inputs/inputText.js" import { toast } from "#/contexts/toasts/useToast.js" import { platformRouter } from "#/routes/platformRouter.js" import { postAPI } from "#/utilities/postAPI.js" -import { signUpRouteDefinition } from "@arrhes/metadata/routes" +import { signUpRouteDefinition } from "@arrhes/application-metadata/routes" import { IconUserPlus } from "@tabler/icons-react" import { Link } from "@tanstack/react-router" import { Fragment } from "react/jsx-runtime" diff --git a/packages/dashboard/src/features/support/contactSupportForm.tsx b/packages/dashboard/src/features/support/contactSupportForm.tsx index cff0b77..1bc6e63 100644 --- a/packages/dashboard/src/features/support/contactSupportForm.tsx +++ b/packages/dashboard/src/features/support/contactSupportForm.tsx @@ -9,7 +9,7 @@ import { InputToggle } from "#/components/inputs/inputToggle.js" import { toast } from "#/contexts/toasts/useToast.js" import { platformRouter } from "#/routes/platformRouter.js" import { postAPI } from "#/utilities/postAPI.js" -import { sendSupportMessageRouteDefinition } from "@arrhes/metadata/routes" +import { sendSupportMessageRouteDefinition } from "@arrhes/application-metadata/routes" import { IconSend } from "@tabler/icons-react" import { Fragment } from "react/jsx-runtime" diff --git a/packages/dashboard/src/routes/rootLayoutRoute.tsx b/packages/dashboard/src/routes/rootLayoutRoute.tsx index f9b26e7..b0b116d 100644 --- a/packages/dashboard/src/routes/rootLayoutRoute.tsx +++ b/packages/dashboard/src/routes/rootLayoutRoute.tsx @@ -1,6 +1,6 @@ import { CircularLoader } from "#/components/layouts/circularLoader.js" import { RootLayout } from "#/features/rootLayout.js" -import { readUserSessionRouteDefinition } from "@arrhes/metadata/routes" +import { readUserSessionRouteDefinition } from "@arrhes/application-metadata/routes" import { createRootRouteWithContext, useRouterState } from "@tanstack/react-router" import { Fragment } from "react/jsx-runtime" import * as v from "valibot" diff --git a/packages/dashboard/src/utilities/cookies/getUserSession.ts b/packages/dashboard/src/utilities/cookies/getUserSession.ts index 6bb1430..3128336 100644 --- a/packages/dashboard/src/utilities/cookies/getUserSession.ts +++ b/packages/dashboard/src/utilities/cookies/getUserSession.ts @@ -1,6 +1,6 @@ import { getIsAuthenticated } from "#/utilities/cookies/getIsAuthenticated.js" import { postAPI } from "#/utilities/postAPI.js" -import { readUserSessionRouteDefinition } from "@arrhes/metadata/routes" +import { readUserSessionRouteDefinition } from "@arrhes/application-metadata/routes" export async function getUserSession() { diff --git a/packages/dashboard/src/utilities/invalidateData.ts b/packages/dashboard/src/utilities/invalidateData.ts index cee6d52..83b9896 100644 --- a/packages/dashboard/src/utilities/invalidateData.ts +++ b/packages/dashboard/src/utilities/invalidateData.ts @@ -1,5 +1,5 @@ import { dataClient } from "#/contexts/data/queryClient.js" -import { routeDefinition } from "@arrhes/metadata/utilities" +import { routeDefinition } from "@arrhes/application-metadata/utilities" import * as v from "valibot" diff --git a/packages/dashboard/src/utilities/postAPI.ts b/packages/dashboard/src/utilities/postAPI.ts index 6f2f8c7..527dff2 100644 --- a/packages/dashboard/src/utilities/postAPI.ts +++ b/packages/dashboard/src/utilities/postAPI.ts @@ -1,5 +1,5 @@ import { toast } from "#/contexts/toasts/useToast.js" -import { routeDefinition } from "@arrhes/metadata/utilities" +import { routeDefinition } from "@arrhes/application-metadata/utilities" import * as v from "valibot" import { ClientError } from "./clientError.js" import { validate } from "./validate.js" diff --git a/packages/dashboard/src/utilities/useHTTPData.ts b/packages/dashboard/src/utilities/useHTTPData.ts index 620bbdd..3fafa8f 100644 --- a/packages/dashboard/src/utilities/useHTTPData.ts +++ b/packages/dashboard/src/utilities/useHTTPData.ts @@ -1,4 +1,4 @@ -import { routeDefinition } from "@arrhes/metadata/utilities" +import { routeDefinition } from "@arrhes/application-metadata/utilities" import { useQuery } from "@tanstack/react-query" import * as v from "valibot" import { ClientError } from "./clientError.js" diff --git a/packages/tools/src/dbClient.ts b/packages/tools/src/dbClient.ts index 516a74f..d986a9f 100644 --- a/packages/tools/src/dbClient.ts +++ b/packages/tools/src/dbClient.ts @@ -1,7 +1,7 @@ -import { modelSchemas } from "@arrhes/metadata/models" +import { modelSchemas } from "@arrhes/application-metadata/models" import { drizzle } from "drizzle-orm/postgres-js" import postgres from "postgres" -import { env } from "./env.js" +import { env } from "./env" const connection = postgres(env()?.SQL_DATABASE_URL ?? "", { max: 1 }) diff --git a/packages/tools/src/drizzle.config.ts b/packages/tools/src/drizzle.config.ts index ae95a24..a12e4c4 100644 --- a/packages/tools/src/drizzle.config.ts +++ b/packages/tools/src/drizzle.config.ts @@ -1,5 +1,5 @@ import type { Config } from "drizzle-kit" -import { env } from "./env.js" +import { env } from "./env" export default { diff --git a/packages/tools/src/migrate.ts b/packages/tools/src/migrate.ts index 24512c3..523aceb 100644 --- a/packages/tools/src/migrate.ts +++ b/packages/tools/src/migrate.ts @@ -1,7 +1,7 @@ import { drizzle } from "drizzle-orm/postgres-js" import { migrate } from "drizzle-orm/postgres-js/migrator" import postgres from "postgres" -import { env } from "./env.js" +import { env } from "./env" const sql = postgres(env()?.SQL_DATABASE_URL ?? "", { max: 1 }) diff --git a/packages/tools/src/schemas.ts b/packages/tools/src/schemas.ts index c40a95a..048c4a8 100644 --- a/packages/tools/src/schemas.ts +++ b/packages/tools/src/schemas.ts @@ -1,4 +1,4 @@ -import { modelSchemas } from "@arrhes/metadata/models" +import { modelSchemas } from "@arrhes/application-metadata/models" module.exports = modelSchemas \ No newline at end of file diff --git a/packages/tools/src/seed/seed.ts b/packages/tools/src/seed/seed.ts index 3faa6b4..4022a09 100644 --- a/packages/tools/src/seed/seed.ts +++ b/packages/tools/src/seed/seed.ts @@ -1,6 +1,6 @@ -import { defaultJournals } from '@arrhes/metadata/components' -import { models } from '@arrhes/metadata/models' -import { generateId } from '@arrhes/metadata/utilities' +import { defaultJournals } from '@arrhes/application-metadata/components' +import { models } from '@arrhes/application-metadata/models' +import { generateId } from '@arrhes/application-metadata/utilities' import { randFirstName } from '@ngneat/falso' import { pbkdf2Sync, randomBytes } from "crypto" import { dbClient } from '../dbClient.js' From cef9a43e0f069359a6e9df2c10a2a7c474d4eedb Mon Sep 17 00:00:00 2001 From: &mile Date: Tue, 23 Dec 2025 18:55:19 +0100 Subject: [PATCH 14/25] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20refactor(dev):=20ren?= =?UTF-8?q?ame=20.dev=20to=20.development=20and=20improve=20Docker=20setup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - rename .dev directory to .development for clarity - update all references in compose.yml, README.md, justfile, and documentation - fix Docker permissions by running chown in entrypoints before switching to node user - add PostgreSQL client and expect to API Dockerfile for migration handling - update database migration to use --force flag and expect for interactive prompts - improve RustFS healthcheck to properly detect 403 Forbidden response - update database URLs from localhost to postgres service name in .env files - consolidate justfile commands under 'dev' namespace (dev-up, dev-down) - fix website port from 5174 to 5173 in vite.config.ts - add database table existence check before running migrations - enhance entrypoint scripts to handle workspace permissions for bind mounts --- .dev/packages/api/entrypoint.sh | 29 ---------- .dev/packages/tools/.env | 2 - {.dev => .development}/.dockerignore | 0 {.dev => .development}/.gitignore | 0 {.dev => .development}/README.md | 28 +++++----- {.dev => .development}/compose.yml | 14 ++--- {.dev => .development}/packages/api/.env | 2 +- .../packages/api/Dockerfile | 10 ++-- .development/packages/api/entrypoint.sh | 55 +++++++++++++++++++ .../packages/dashboard/.env | 0 .../packages/dashboard/Dockerfile | 6 +- .../packages/dashboard/entrypoint.sh | 10 +++- .development/packages/tools/.env | 2 + {.dev => .development}/packages/website/.env | 0 .../packages/website/Dockerfile | 6 +- .../packages/website/entrypoint.sh | 8 ++- README.md | 2 +- docs/DEVELOPMENT.md | 2 +- justfile | 13 +++-- packages/tools/package.json | 2 +- packages/website/vite.config.ts | 2 +- 21 files changed, 113 insertions(+), 80 deletions(-) delete mode 100644 .dev/packages/api/entrypoint.sh delete mode 100644 .dev/packages/tools/.env rename {.dev => .development}/.dockerignore (100%) rename {.dev => .development}/.gitignore (100%) rename {.dev => .development}/README.md (83%) rename {.dev => .development}/compose.yml (92%) rename {.dev => .development}/packages/api/.env (90%) rename {.dev => .development}/packages/api/Dockerfile (70%) create mode 100644 .development/packages/api/entrypoint.sh rename {.dev => .development}/packages/dashboard/.env (100%) rename {.dev => .development}/packages/dashboard/Dockerfile (82%) rename {.dev => .development}/packages/dashboard/entrypoint.sh (67%) create mode 100644 .development/packages/tools/.env rename {.dev => .development}/packages/website/.env (100%) rename {.dev => .development}/packages/website/Dockerfile (82%) rename {.dev => .development}/packages/website/entrypoint.sh (68%) diff --git a/.dev/packages/api/entrypoint.sh b/.dev/packages/api/entrypoint.sh deleted file mode 100644 index 92121b5..0000000 --- a/.dev/packages/api/entrypoint.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/bash -# ============================================================================== -# API Service Entrypoint -# ============================================================================== -# Runs on container startup to: -# 1. Install workspace dependencies -# 2. Build metadata package (required by API and tools) -# 3. Run database migrations -# 4. Seed demo data -# 5. Start API dev server -# ============================================================================== -set -e - -echo "📦 Installing workspace dependencies..." -CI=true pnpm install - -echo "🔨 Building @arrhes/application-metadata..." -pnpm --filter="@arrhes/application-metadata" build - -echo "🗄️ Running database migrations..." -cd /workspace/packages/tools -pnpm run push - -echo "🌱 Seeding demo data..." -pnpm run seed - -echo "🚀 Starting API dev server..." -cd /workspace/packages/api -exec pnpm --filter="@arrhes/application-api" dev diff --git a/.dev/packages/tools/.env b/.dev/packages/tools/.env deleted file mode 100644 index ccb2ff3..0000000 --- a/.dev/packages/tools/.env +++ /dev/null @@ -1,2 +0,0 @@ -NODE_ENV="development" -SQL_DATABASE_URL="postgres://postgres:admin@localhost:5432/default" diff --git a/.dev/.dockerignore b/.development/.dockerignore similarity index 100% rename from .dev/.dockerignore rename to .development/.dockerignore diff --git a/.dev/.gitignore b/.development/.gitignore similarity index 100% rename from .dev/.gitignore rename to .development/.gitignore diff --git a/.dev/README.md b/.development/README.md similarity index 83% rename from .dev/README.md rename to .development/README.md index e0f944d..c66707b 100644 --- a/.dev/README.md +++ b/.development/README.md @@ -5,7 +5,7 @@ Docker-based development environment for the Arrhes platform. ## Architecture ``` -.dev/ +.development/ ├── compose.yml # Main Docker Compose configuration ├── .dockerignore # Build context exclusions ├── .gitignore # Git tracking rules @@ -59,40 +59,40 @@ docker volume create arrhes_postgres_data docker volume create arrhes_rustfs_data # Start services -docker compose -f .dev/compose.yml up -d +docker compose -f .development/compose.yml up -d ``` ### View logs ```bash # All services -docker compose -f .dev/compose.yml logs -f +docker compose -f .development/compose.yml logs -f # Specific service -docker compose -f .dev/compose.yml logs -f api +docker compose -f .development/compose.yml logs -f api ``` ### Stop services ```bash -docker compose -f .dev/compose.yml down +docker compose -f .development/compose.yml down ``` ### Rebuild after changes ```bash # Rebuild specific service -docker compose -f .dev/compose.yml build api +docker compose -f .development/compose.yml build api # Rebuild and restart -docker compose -f .dev/compose.yml up -d --build api +docker compose -f .development/compose.yml up -d --build api ``` ### Access running containers ```bash -docker compose -f .dev/compose.yml exec api bash +docker compose -f .development/compose.yml exec api bash ``` ## Environment Files -Each service has its own `.env` file in `.dev/packages/{service}/.env`: +Each service has its own `.env` file in `.development/packages/{service}/.env`: - **api/.env** - API configuration (database, storage, email) - **dashboard/.env** - Dashboard configuration (API URL) @@ -133,21 +133,21 @@ lsof -i :3000 ```bash # Remove volume and rebuild docker volume rm .dev_api_node_modules -docker compose -f .dev/compose.yml up -d --build api +docker compose -f .development/compose.yml up -d --build api ``` ### Database reset ```bash # Remove database volume (WARNING: deletes all data) -docker compose -f .dev/compose.yml down +docker compose -f .development/compose.yml down docker volume rm arrhes_postgres_data docker volume create arrhes_postgres_data -docker compose -f .dev/compose.yml up -d +docker compose -f .development/compose.yml up -d ``` ### Clean slate ```bash # Remove all containers, volumes (except external), and rebuild -docker compose -f .dev/compose.yml down -v -docker compose -f .dev/compose.yml up -d --build +docker compose -f .development/compose.yml down -v +docker compose -f .development/compose.yml up -d --build ``` diff --git a/.dev/compose.yml b/.development/compose.yml similarity index 92% rename from .dev/compose.yml rename to .development/compose.yml index ae520ba..fa5aabc 100644 --- a/.dev/compose.yml +++ b/.development/compose.yml @@ -10,9 +10,9 @@ # - Services: API, Dashboard, Website # # Usage: -# docker compose -f .dev/compose.yml up -d # Start all services -# docker compose -f .dev/compose.yml down # Stop all services -# docker compose -f .dev/compose.yml logs -f # View logs +# docker compose -f .development/compose.yml up -d # Start all services +# docker compose -f .development/compose.yml down # Stop all services +# docker compose -f .development/compose.yml logs -f # View logs # ============================================================================== services: @@ -54,7 +54,7 @@ services: - rustfs_data:/data init: true healthcheck: - test: ["CMD-SHELL", "wget --quiet --tries=1 --spider http://localhost:9000 || exit 1"] + test: ["CMD-SHELL", "wget --quiet --tries=1 --spider http://localhost:9000 2>&1 | grep -q '403 Forbidden' && exit 0 || exit 1"] interval: 10s timeout: 5s retries: 5 @@ -80,7 +80,7 @@ services: api: build: context: .. - dockerfile: .dev/packages/api/Dockerfile + dockerfile: .development/packages/api/Dockerfile args: NODE_VERSION: "25.2.1" PNPM_VERSION: "10.26.1" @@ -114,7 +114,7 @@ services: dashboard: build: context: .. - dockerfile: .dev/packages/dashboard/Dockerfile + dockerfile: .development/packages/dashboard/Dockerfile args: NODE_VERSION: "25.2.1" PNPM_VERSION: "10.26.1" @@ -140,7 +140,7 @@ services: website: build: context: .. - dockerfile: .dev/packages/website/Dockerfile + dockerfile: .development/packages/website/Dockerfile args: NODE_VERSION: "25.2.1" PNPM_VERSION: "10.26.1" diff --git a/.dev/packages/api/.env b/.development/packages/api/.env similarity index 90% rename from .dev/packages/api/.env rename to .development/packages/api/.env index 23e79de..c1c1db5 100644 --- a/.dev/packages/api/.env +++ b/.development/packages/api/.env @@ -14,7 +14,7 @@ PLATFORM_BASE_URL="http://localhost:5173" WEBSITE_BASE_URL="http://localhost:5174" # Database (Docker Compose) -SQL_DATABASE_URL="postgres://postgres:admin@localhost:5432/default" +SQL_DATABASE_URL="postgres://postgres:admin@postgres:5432/default" # Storage (RustFS via Docker Compose) STORAGE_ENDPOINT="http://rustfs:9000" diff --git a/.dev/packages/api/Dockerfile b/.development/packages/api/Dockerfile similarity index 70% rename from .dev/packages/api/Dockerfile rename to .development/packages/api/Dockerfile index 664a35b..3b0804d 100644 --- a/.dev/packages/api/Dockerfile +++ b/.development/packages/api/Dockerfile @@ -10,16 +10,16 @@ ARG PNPM_VERSION="10.26.1" FROM node:${NODE_VERSION}-bullseye-slim -# Install PNPM package manager +# Install PNPM package manager, PostgreSQL client, and expect RUN npm install -g "pnpm@${PNPM_VERSION}" && \ + apt-get update && \ + apt-get install -y postgresql-client expect && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* # Set working directory WORKDIR /workspace -# Run as non-root user -USER node - # Start via entrypoint script (bind-mounted at runtime) -ENTRYPOINT ["/bin/bash", "/workspace/.dev/packages/api/entrypoint.sh"] +# NOTE: We don't switch to node user here - entrypoint will handle permissions +ENTRYPOINT ["/bin/bash", "/workspace/.development/packages/api/entrypoint.sh"] diff --git a/.development/packages/api/entrypoint.sh b/.development/packages/api/entrypoint.sh new file mode 100644 index 0000000..53af912 --- /dev/null +++ b/.development/packages/api/entrypoint.sh @@ -0,0 +1,55 @@ +#!/bin/bash +# ============================================================================== +# API Service Entrypoint +# ============================================================================== +# Runs on container startup to: +# 1. Install workspace dependencies +# 2. Build metadata package (required by API and tools) +# 3. Run database migrations +# 4. Seed demo data +# 5. Start API dev server +# ============================================================================== +set -e + +# Fix permissions for bind-mounted workspace +# The workspace is bind-mounted from the host, so we need to ensure the node user can write to it +echo "🔧 Fixing workspace permissions..." +chown -R node:node /workspace + +# Switch to node user for the rest of the script +echo "📦 Installing workspace dependencies..." +su node -c "CI=true pnpm install" + +echo "🔨 Building @arrhes/application-metadata..." +su node -c "pnpm --filter='@arrhes/application-metadata' build" + +echo "🗄️ Checking database..." +# Check if tables already exist +if PGPASSWORD=admin /usr/bin/psql -h postgres -U postgres -d default -c '\dt' 2>/dev/null | grep -q table_user; then + echo "Database tables already exist, skipping migration" +else + echo "Running database migrations..." + # Use expect to handle interactive prompts - select first option (no truncate) + su node -c "cd /workspace/packages/tools && expect -c ' + set timeout 60 + spawn pnpm run push + expect { + \"No, add the constraint without truncating the table\" { + send \"\r\" + exp_continue + } + \"No, abort\" { + send \"\r\" + exp_continue + } + eof + } + ' || true" +fi + +echo "🌱 Seeding demo data..." +su node -c "cd /workspace/packages/tools && pnpm run seed || echo 'Seeding skipped (data may already exist)'" + +echo "🚀 Starting API dev server..." +cd /workspace/packages/api +exec su node -c "pnpm --filter='@arrhes/application-api' dev" diff --git a/.dev/packages/dashboard/.env b/.development/packages/dashboard/.env similarity index 100% rename from .dev/packages/dashboard/.env rename to .development/packages/dashboard/.env diff --git a/.dev/packages/dashboard/Dockerfile b/.development/packages/dashboard/Dockerfile similarity index 82% rename from .dev/packages/dashboard/Dockerfile rename to .development/packages/dashboard/Dockerfile index 33d48ed..a36a7be 100644 --- a/.dev/packages/dashboard/Dockerfile +++ b/.development/packages/dashboard/Dockerfile @@ -18,8 +18,6 @@ RUN npm install -g "pnpm@${PNPM_VERSION}" && \ # Set working directory WORKDIR /workspace -# Run as non-root user -USER node - # Start via entrypoint script (bind-mounted at runtime) -ENTRYPOINT ["/bin/bash", "/workspace/.dev/packages/dashboard/entrypoint.sh"] +# NOTE: We don't switch to node user here - entrypoint will handle permissions +ENTRYPOINT ["/bin/bash", "/workspace/.development/packages/dashboard/entrypoint.sh"] diff --git a/.dev/packages/dashboard/entrypoint.sh b/.development/packages/dashboard/entrypoint.sh similarity index 67% rename from .dev/packages/dashboard/entrypoint.sh rename to .development/packages/dashboard/entrypoint.sh index 14f6210..f73adae 100644 --- a/.dev/packages/dashboard/entrypoint.sh +++ b/.development/packages/dashboard/entrypoint.sh @@ -9,12 +9,16 @@ # ============================================================================== set -e +# Fix permissions for bind-mounted workspace +echo "🔧 Fixing workspace permissions..." +chown -R node:node /workspace + echo "📦 Installing workspace dependencies..." -CI=true pnpm install +su node -c "CI=true pnpm install" echo "🔨 Building @arrhes/application-metadata..." -pnpm --filter="@arrhes/application-metadata" build +su node -c "pnpm --filter='@arrhes/application-metadata' build" echo "🚀 Starting dashboard dev server..." cd /workspace/packages/dashboard -exec pnpm --filter="@arrhes/application-dashboard" dev -- --host 0.0.0.0 +exec su node -c "pnpm --filter='@arrhes/application-dashboard' dev -- --host 0.0.0.0" diff --git a/.development/packages/tools/.env b/.development/packages/tools/.env new file mode 100644 index 0000000..c2697d4 --- /dev/null +++ b/.development/packages/tools/.env @@ -0,0 +1,2 @@ +NODE_ENV="development" +SQL_DATABASE_URL="postgres://postgres:admin@postgres:5432/default" diff --git a/.dev/packages/website/.env b/.development/packages/website/.env similarity index 100% rename from .dev/packages/website/.env rename to .development/packages/website/.env diff --git a/.dev/packages/website/Dockerfile b/.development/packages/website/Dockerfile similarity index 82% rename from .dev/packages/website/Dockerfile rename to .development/packages/website/Dockerfile index 49ab7ff..45cfbf9 100644 --- a/.dev/packages/website/Dockerfile +++ b/.development/packages/website/Dockerfile @@ -18,8 +18,6 @@ RUN npm install -g "pnpm@${PNPM_VERSION}" && \ # Set working directory WORKDIR /workspace -# Run as non-root user -USER node - # Start via entrypoint script (bind-mounted at runtime) -ENTRYPOINT ["/bin/bash", "/workspace/.dev/packages/website/entrypoint.sh"] +# NOTE: We don't switch to node user here - entrypoint will handle permissions +ENTRYPOINT ["/bin/bash", "/workspace/.development/packages/website/entrypoint.sh"] diff --git a/.dev/packages/website/entrypoint.sh b/.development/packages/website/entrypoint.sh similarity index 68% rename from .dev/packages/website/entrypoint.sh rename to .development/packages/website/entrypoint.sh index 1192073..fc9268c 100644 --- a/.dev/packages/website/entrypoint.sh +++ b/.development/packages/website/entrypoint.sh @@ -8,9 +8,13 @@ # ============================================================================== set -e +# Fix permissions for bind-mounted workspace +echo "🔧 Fixing workspace permissions..." +chown -R node:node /workspace + echo "📦 Installing workspace dependencies..." -CI=true pnpm install +su node -c "CI=true pnpm install" echo "🚀 Starting website dev server..." cd /workspace/packages/website -exec pnpm --filter="@arrhes/application-website" dev -- --host 0.0.0.0 +exec su node -c "pnpm --filter='@arrhes/application-website' dev -- --host 0.0.0.0" diff --git a/README.md b/README.md index 7dc6d95..5b43fbd 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ cd arrhes-application ./dev/scripts/initialize.sh # Open an interactive shell inside the devcontainer (one-line) -docker compose -f .dev/compose.yml exec devcontainer bash +docker compose -f .development/compose.yml exec devcontainer bash # From that shell you can start the dev servers (they must bind to 0.0.0.0 to be reachable from the host): # API diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md index c10670a..31ad434 100644 --- a/docs/DEVELOPMENT.md +++ b/docs/DEVELOPMENT.md @@ -170,7 +170,7 @@ cursor . **Étape 3 : Reopen in Container** -Lorsque VS Code/Cursor détecte le fichier `.dev/devcontainer.json`, une notification apparaît : +Lorsque VS Code/Cursor détecte le fichier `.development/devcontainer.json`, une notification apparaît : > "Folder contains a Dev Container configuration file. Reopen folder to develop in a container?" diff --git a/justfile b/justfile index e15ea62..b32317b 100644 --- a/justfile +++ b/justfile @@ -1,10 +1,13 @@ set shell := ["bash", "-cu"] -COMPOSE_FILE := ".dev/compose.yml" +COMPOSE_FILE := ".development/compose.yml" PROJECT := "arrhes-application" -up: - docker compose --project-directory=".dev" --file="{{COMPOSE_FILE}}" --project-name="{{PROJECT}}" up -d --build +dev cmd: + @just dev-{{cmd}} -down: +dev-up: + docker compose --project-directory=".development" --file="{{COMPOSE_FILE}}" --project-name="{{PROJECT}}" up -d --build + +dev-down: docker ps -a --filter="name=arrhes-" -q | xargs -r docker rm -f - docker compose --project-directory=".dev" --file="{{COMPOSE_FILE}}" --project-name="{{PROJECT}}" down + docker compose --project-directory=".development" --file="{{COMPOSE_FILE}}" --project-name="{{PROJECT}}" down diff --git a/packages/tools/package.json b/packages/tools/package.json index 2c5b501..1c0dc86 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -4,7 +4,7 @@ "private": true, "scripts": { "generate": "pnpm drizzle-kit generate --config=./src/drizzle.config.ts", - "push": "pnpm drizzle-kit push --config=./src/drizzle.config.ts", + "push": "pnpm drizzle-kit push --config=./src/drizzle.config.ts --force", "pull": "pnpm drizzle-kit introspect --config=./src/drizzle.config.ts", "migrate": "pnpm drizzle-kit migrate --config=./src/drizzle.config.ts", "seed": "tsx --env-file=.env ./src/seed/seed.ts", diff --git a/packages/website/vite.config.ts b/packages/website/vite.config.ts index f2bfe88..086bd7c 100644 --- a/packages/website/vite.config.ts +++ b/packages/website/vite.config.ts @@ -7,7 +7,7 @@ export default defineConfig({ assetsInclude: ["**/*.md", "**/*.woff2"], server: { host: true, - port: 5174, + port: 5173, watch: { usePolling: true }, From 2b2df0e81ff29dd2797fb3d3cd4f5e000c954140 Mon Sep 17 00:00:00 2001 From: &mile Date: Tue, 23 Dec 2025 18:59:30 +0100 Subject: [PATCH 15/25] =?UTF-8?q?=F0=9F=94=A7=20chore(dev):=20update=20.de?= =?UTF-8?q?v=20references=20to=20.development=20in=20Docker=20config?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - update .dockerignore comment to reference .development folder - update compose.yml volume mounts from .dev to .development across all services (api, dashboard, website) - update compose.yml comment to reference .development versions --- .development/.dockerignore | 4 ++-- .development/compose.yml | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.development/.dockerignore b/.development/.dockerignore index 8745f47..f4964cf 100644 --- a/.development/.dockerignore +++ b/.development/.dockerignore @@ -54,5 +54,5 @@ coverage .npmrc .continue -# Keep .dev folder (needed for entrypoint scripts) -!.dev +# Keep .development folder (needed for entrypoint scripts) +!.development diff --git a/.development/compose.yml b/.development/compose.yml index fa5aabc..1220093 100644 --- a/.development/compose.yml +++ b/.development/compose.yml @@ -92,9 +92,9 @@ services: - ../package.json:/workspace/package.json:cached - ../pnpm-workspace.yaml:/workspace/pnpm-workspace.yaml:cached - ../pnpm-lock.yaml:/workspace/pnpm-lock.yaml:cached - - ../.dev:/workspace/.dev:cached + - ../.development:/workspace/.development:cached - # Environment files - use .dev versions + # Environment files - use .development versions - ./packages/api/.env:/workspace/packages/api/.env:cached - ./packages/tools/.env:/workspace/packages/tools/.env:cached @@ -126,7 +126,7 @@ services: - ../package.json:/workspace/package.json:cached - ../pnpm-workspace.yaml:/workspace/pnpm-workspace.yaml:cached - ../pnpm-lock.yaml:/workspace/pnpm-lock.yaml:cached - - ../.dev:/workspace/.dev:cached + - ../.development:/workspace/.development:cached # Environment file - ./packages/dashboard/.env:/workspace/packages/dashboard/.env:cached @@ -152,7 +152,7 @@ services: - ../package.json:/workspace/package.json:cached - ../pnpm-workspace.yaml:/workspace/pnpm-workspace.yaml:cached - ../pnpm-lock.yaml:/workspace/pnpm-lock.yaml:cached - - ../.dev:/workspace/.dev:cached + - ../.development:/workspace/.development:cached # Environment file - ./packages/website/.env:/workspace/packages/website/.env:cached From bb390bcd7f2119a767ed6fe0141c12d347977eaf Mon Sep 17 00:00:00 2001 From: &mile Date: Fri, 6 Feb 2026 22:00:04 +0100 Subject: [PATCH 16/25] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20refactor:=20restruct?= =?UTF-8?q?ure=20development=20environment=20and=20codebase=20organization?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - restructure Docker development setup with modular build scripts - split entrypoint.sh into separate install, build, migrate, seed, start scripts - change dashboard/website Dockerfiles to install deps at build-time (faster startup) - simplify compose.yml volumes to mount only source files needed for HMR - move production Docker configs from packages/*/.docker/ to .production/packages/*/ - change API imports from #/ alias to relative ./ paths - reorganize dashboard features: - move home features to website/ folder - move organizations page to dashboard/ folder - add documentation pages (guide, comptabilite sections) - remove standalone website package (features integrated into dashboard) - update docs to reference Panda CSS instead of Tailwind CSS - add BUSINESS_MODEL.md documenting pricing tiers and strategy - add justfile commands: dev-reset, dev-logs with startup banner - add styled-system to .gitignore (Panda CSS generated files) - apply code formatting standardization across API and dashboard --- .development/.dockerignore | 8 +- .development/compose.yml | 53 +- .development/packages/api/build.sh | 10 + .development/packages/api/entrypoint.sh | 54 +- .development/packages/api/install.sh | 10 + .development/packages/api/migrate.sh | 35 + .development/packages/api/seed.sh | 12 + .development/packages/api/start.sh | 11 + .development/packages/dashboard/.env | 1 + .development/packages/dashboard/Dockerfile | 43 +- .development/packages/dashboard/entrypoint.sh | 24 - .development/packages/website/Dockerfile | 37 +- .development/packages/website/entrypoint.sh | 20 - .gitignore | 2 + .production/.gitignore | 17 + .production/compose.yml | 0 .../packages/api}/.dockerignore | 0 .production/packages/api/.env | 28 + .../packages/api}/Dockerfile | 0 .../packages/dashboard}/.dockerignore | 0 .production/packages/dashboard/.env | 5 + .../packages/dashboard}/Dockerfile | 0 .../packages/dashboard}/nginx/default.conf | 0 docs/ARCHITECTURE.md | 4 +- docs/BUSINESS_MODEL.md | 101 +++ docs/CONTRIBUTING.md | 2 +- docs/DEVELOPMENT.md | 2 +- justfile | 29 + packages/api/src/api.ts | 14 +- packages/api/src/clients/emailClient.ts | 60 +- packages/api/src/clients/sqlClient.ts | 40 +- packages/api/src/clients/storageClient.ts | 48 +- packages/api/src/factories/apiFactory.ts | 4 +- packages/api/src/factories/authFactory.ts | 2 +- packages/api/src/factories/publicFactory.ts | 2 +- .../api/src/middlewares/authMiddleware.ts | 186 ++--- .../api/src/middlewares/publicMiddleware.ts | 10 +- .../middlewares/userVerificationMiddleware.ts | 32 +- packages/api/src/routes/auth/authRoute.ts | 40 +- .../$idOrganization/$idOrganizationRoutes.ts | 22 +- .../general/deleteOneOrganization.ts | 12 +- .../general/generalRoutes.ts | 4 +- .../general/updateOneOrganization.ts | 12 +- .../organizationSettingsRoutes.ts | 4 +- .../$idOrganizationUserRoutes.ts | 6 +- .../deleteOneOrganizationUser.ts | 12 +- .../readOneOrganizationUser.ts | 10 +- .../updateOneOrganizationUser.ts | 12 +- .../createOneOrganizationUser.ts | 12 +- .../organizationUsersRoutes.ts | 6 +- .../readAllOrganizationUsers.ts | 10 +- .../$idOrganization/readOneOrganization.ts | 8 +- .../years/$idYear/$idYearRoutes.ts | 10 +- .../$idAttachment/$idAttachmentRoutes.ts | 28 +- .../$idAttachment/deleteOneAttachment.ts | 12 +- .../generateAttachmentGetSignedUrl.ts | 12 +- .../generateAttachmentPutSignedUrl.ts | 12 +- .../$idAttachment/readOneAttachment.ts | 8 +- .../$idAttachment/updateOneAttachment.ts | 8 +- .../$idYear/attachments/attachmentsRoutes.ts | 20 +- .../attachments/createOneAttachment.ts | 8 +- .../$idYear/attachments/readAllAttachments.ts | 8 +- .../years/$idYear/readOneYear.ts | 8 +- .../records/$idRecord/$idRecordRoutes.ts | 8 +- .../records/$idRecord/deleteOneRecord.ts | 8 +- .../records/$idRecord/duplicateOneRecord.ts | 14 +- .../records/$idRecord/readOneRecord.ts | 8 +- .../records/$idRecord/updateOneRecord.ts | 8 +- .../years/$idYear/records/createOneRecord.ts | 8 +- .../years/$idYear/records/readAllRecords.ts | 8 +- .../$idRecordRow/$idRecordRowRoutes.ts | 6 +- .../$idRecordRow/deleteOneRecordRow.ts | 8 +- .../$idRecordRow/readOneRecordRow.ts | 8 +- .../$idRecordRow/updateOneRecordRow.ts | 8 +- .../records/recordRows/createOneRecordRow.ts | 10 +- .../records/recordRows/readAllRecordRows.ts | 8 +- .../records/recordRows/recordRowsRoutes.ts | 8 +- .../recordRows/updateManyRecordRows.ts | 10 +- .../years/$idYear/records/recordsRoutes.ts | 8 +- .../document/$idDocument/$idDocumentRoutes.ts | 14 +- .../generateDocumentGetSignedUrl.ts | 10 +- .../document/$idDocument/readOneDocument.ts | 8 +- .../reports/document/documentsRoutes.ts | 16 +- .../reports/document/readAllDocuments.ts | 8 +- .../generateBalanceSheetReportDocument.ts | 14 +- .../generateIncomeStatementReportDocument.ts | 14 +- .../years/$idYear/reports/reportsRoutes.ts | 6 +- .../accounts/$idAccount/$idAccountRoutes.ts | 18 +- .../accounts/$idAccount/deleteOneAccount.ts | 70 +- .../accounts/$idAccount/readOneAccount.ts | 72 +- .../accounts/$idAccount/updateOneAccount.ts | 114 ++-- .../yearSettings/accounts/accountsRoutes.ts | 24 +- .../yearSettings/accounts/createOneAccount.ts | 150 ++--- .../yearSettings/accounts/generateAccounts.ts | 282 ++++---- .../yearSettings/accounts/readAllAccounts.ts | 68 +- .../$idBalanceSheet/$idBalanceSheetRoutes.ts | 6 +- .../$idBalanceSheet/deleteOneBalanceSheet.ts | 8 +- .../$idBalanceSheet/readOneBalanceSheet.ts | 8 +- .../$idBalanceSheet/updateOneBalanceSheet.ts | 8 +- .../balanceSheets/balanceSheetsRoutes.ts | 10 +- .../connectAccountsToBalanceSheets.ts | 284 ++++---- .../balanceSheets/createOneBalanceSheet.ts | 8 +- .../balanceSheets/generateBalanceSheets.ts | 206 +++--- .../balanceSheets/readAllBalanceSheets.ts | 8 +- .../$idComputation/$idComputationRoutes.ts | 26 +- .../$idComputationIncomeStatementRoutes.ts | 20 +- .../deleteOneComputationIncomeStatement.ts | 8 +- .../readOneComputationIncomeStatement.ts | 8 +- .../updateOneComputationIncomeStatement.ts | 8 +- .../computationIncomeStatementsRoutes.ts | 24 +- .../createOneComputationIncomeStatement.ts | 8 +- .../readAllComputationIncomeStatements.ts | 8 +- .../$idComputation/deleteOneComputation.ts | 8 +- .../$idComputation/readOneComputation.ts | 8 +- .../$idComputation/updateOneComputation.ts | 8 +- .../computations/computationsRoutes.ts | 26 +- .../computations/createOneComputation.ts | 8 +- .../computations/generateComputations.ts | 224 +++---- .../computations/readAllComputations.ts | 8 +- .../$idYear/yearSettings/general/closeYear.ts | 8 +- .../yearSettings/general/deleteOneYear.ts | 8 +- .../yearSettings/general/generalRoutes.ts | 12 +- .../$idYear/yearSettings/general/openYear.ts | 6 +- .../general/settleBalanceSheet.ts | 6 +- .../general/settleIncomeStatement.ts | 6 +- .../yearSettings/general/updateOneYear.ts | 8 +- .../$idIncomeStatementRoutes.ts | 6 +- .../deleteOneIncomeStatement.ts | 8 +- .../readOneIncomeStatement.ts | 8 +- .../updateOneIncomeStatement.ts | 8 +- .../connectAccountsToIncomeStatements.ts | 206 +++--- .../createOneIncomeStatement.ts | 8 +- .../generateIncomeStatements.ts | 198 +++--- .../incomeStatementsRoutes.ts | 10 +- .../readAllIncomeStatements.ts | 8 +- .../journals/$idJournal/$idJournalRoute.ts | 6 +- .../journals/$idJournal/deleteOneJournal.ts | 8 +- .../journals/$idJournal/readOneJournal.ts | 8 +- .../journals/$idJournal/updateOneJournal.ts | 8 +- .../yearSettings/journals/createOneJournal.ts | 8 +- .../yearSettings/journals/generateJournals.ts | 140 ++-- .../yearSettings/journals/journalsRoutes.ts | 8 +- .../yearSettings/journals/readAllJournals.ts | 8 +- .../$idRecordLabel/$idRecordLabelRoutes.ts | 18 +- .../$idRecordLabel/deleteOneRecordLabel.ts | 70 +- .../$idRecordLabel/readOneRecordLabel.ts | 72 +- .../$idRecordLabel/updateOneRecordLabel.ts | 84 +-- .../recordLabels/createOneRecordLabel.ts | 80 +-- .../recordLabels/readAllRecordLabels.ts | 68 +- .../recordLabels/recordLabelsRoutes.ts | 20 +- .../$idYear/yearSettings/yearSettingsRoute.ts | 14 +- .../$idOrganization/years/createOneYear.ts | 8 +- .../$idOrganization/years/readAllYears.ts | 8 +- .../$idOrganization/years/yearsRoutes.ts | 20 +- .../activateOrganizationMembership.ts | 8 +- .../auth/organizations/addNewOrganization.ts | 8 +- .../organizations/getAllMyOrganizations.ts | 6 +- .../auth/organizations/organizationsRoutes.ts | 8 +- .../src/routes/auth/settings/activateUser.ts | 10 +- .../routes/auth/settings/readUserSession.ts | 6 +- .../routes/auth/settings/settingsRoutes.ts | 12 +- .../src/routes/auth/settings/updateUser.ts | 8 +- .../routes/auth/settings/updateUserEmail.ts | 12 +- .../auth/settings/updateUserPassword.ts | 10 +- .../routes/auth/settings/validateUserEmail.ts | 10 +- .../routes/auth/support/sendSupportMessage.ts | 10 +- .../src/routes/auth/support/supportRoutes.ts | 2 +- packages/api/src/routes/public/publicRoute.ts | 24 +- .../api/src/routes/public/sendMagicLink.ts | 62 +- packages/api/src/routes/public/signIn.ts | 198 +++--- packages/api/src/routes/public/signOut.ts | 180 ++--- packages/api/src/routes/public/signUp.ts | 248 +++---- packages/api/src/routes/routes.ts | 16 +- packages/api/src/server.ts | 6 +- packages/api/src/utilities/apiLog.ts | 4 +- .../api/src/utilities/cookies/parseCookies.ts | 2 +- .../api/src/utilities/cookies/signString.ts | 2 +- .../api/src/utilities/cookies/unsignString.ts | 4 +- packages/api/src/utilities/email/sendEmail.ts | 72 +- .../balanceSheetAssetsReportItem.tsx | 6 +- .../balanceSheetAssetsReportRow.tsx | 4 +- .../balanceSheetAssetsReportTable.tsx | 8 +- .../balanceSheetLiabilitiesReportItem.tsx | 6 +- .../balanceSheetLiabilitiesReportRow.tsx | 4 +- .../balanceSheetLiabilitiesReportTable.tsx | 8 +- .../balanceSheetReport/balanceSheetReport.tsx | 4 +- .../incomeStatementReport.tsx | 2 +- .../incomeStatementReportItem.tsx | 6 +- .../incomeStatementReportRow.tsx | 4 +- .../incomeStatementsReportTable.tsx | 10 +- packages/api/src/utilities/getClients.ts | 8 +- packages/api/src/utilities/getEnv.ts | 90 +-- packages/api/src/utilities/response.ts | 8 +- packages/api/src/utilities/safeParseJSON.ts | 4 +- packages/api/src/utilities/sql/deleteMany.ts | 4 +- packages/api/src/utilities/sql/deleteOne.ts | 4 +- packages/api/src/utilities/sql/insertMany.ts | 4 +- packages/api/src/utilities/sql/insertOne.ts | 4 +- packages/api/src/utilities/sql/selectMany.ts | 4 +- packages/api/src/utilities/sql/selectOne.ts | 4 +- packages/api/src/utilities/sql/updateOne.ts | 4 +- .../api/src/utilities/storage/deleteObject.ts | 6 +- .../storage/generateDeleteSignedUrl.ts | 6 +- .../utilities/storage/generateGetSignedUrl.ts | 8 +- .../utilities/storage/generatePutSignedUrl.ts | 6 +- .../api/src/utilities/storage/getObject.ts | 6 +- .../api/src/utilities/storage/putObject.ts | 6 +- packages/api/src/utilities/validate.ts | 58 +- packages/api/src/validators/bodyValidator.ts | 48 +- packages/dashboard/package.json | 15 +- packages/dashboard/panda.config.ts | 26 + packages/dashboard/postcss.config.cjs | 5 + packages/dashboard/public/favicon.svg | 23 + packages/dashboard/src/assets/css/root.css | 155 +++-- packages/dashboard/src/assets/css/theme.css | 50 +- .../src/components/buttons/button.tsx | 55 -- .../src/components/buttons/buttonGhost.tsx | 28 - .../components/buttons/buttonGhostContent.tsx | 108 --- .../src/components/buttons/buttonOutline.tsx | 28 - .../buttons/buttonOutlineContent.tsx | 132 ---- .../src/components/buttons/buttonPlain.tsx | 28 - .../components/buttons/buttonPlainContent.tsx | 87 --- .../src/components/document/docDefinition.tsx | 28 + .../src/components/document/docExample.tsx | 33 + .../src/components/document/docIndexLink.tsx | 20 + .../src/components/document/docLink.tsx | 20 + .../src/components/document/docList.tsx | 22 + .../src/components/document/docNextPage.tsx | 48 ++ .../src/components/document/docParagraph.tsx | 16 + .../src/components/document/docSection.tsx | 23 + .../src/components/document/docTable.tsx | 55 ++ .../src/components/formats/formatBase.tsx | 49 +- .../src/components/formats/formatBoolean.tsx | 50 +- .../src/components/formats/formatDate.tsx | 76 +-- .../src/components/formats/formatDateTime.tsx | 112 ++-- .../src/components/formats/formatError.tsx | 46 +- .../src/components/formats/formatFileSize.tsx | 73 +- .../src/components/formats/formatLink.tsx | 80 ++- .../src/components/formats/formatNull.tsx | 49 +- .../src/components/formats/formatPrice.tsx | 110 +-- .../src/components/formats/formatSelect.tsx | 60 +- .../src/components/formats/formatText.tsx | 49 +- .../src/components/forms/formControl.tsx | 54 +- .../src/components/forms/formError.tsx | 55 +- .../src/components/forms/formItem.tsx | 46 +- .../src/components/forms/formLabel.tsx | 159 +++-- .../src/components/forms/formRoot.tsx | 196 +++--- .../src/components/forms/formSubmit.tsx | 102 +-- .../src/components/forms/useFormField.tsx | 60 +- .../src/components/inputs/inputCombobox.tsx | 368 +++++----- .../inputs/inputComboboxMultiple.tsx | 355 +++++----- .../components/inputs/inputDataCombobox.tsx | 78 +-- .../src/components/inputs/inputDate.tsx | 192 +++--- .../src/components/inputs/inputDisabled.tsx | 61 +- .../src/components/inputs/inputFile.tsx | 125 ++-- .../src/components/inputs/inputNumber.tsx | 139 ++-- .../src/components/inputs/inputPassword.tsx | 139 ++-- .../src/components/inputs/inputRating.tsx | 110 +-- .../src/components/inputs/inputSelect.tsx | 364 +++++----- .../src/components/inputs/inputSwitch.tsx | 106 +-- .../src/components/inputs/inputText.tsx | 106 +-- .../src/components/inputs/inputTextArea.tsx | 112 ++-- .../src/components/inputs/inputToggle.tsx | 136 ++-- .../src/components/layouts/banner.tsx | 45 +- .../dashboard/src/components/layouts/box.tsx | 53 +- .../components/layouts/card/cardContent.tsx | 45 +- .../components/layouts/card/cardHeader.tsx | 48 +- .../src/components/layouts/card/cardRoot.tsx | 53 +- .../dashboard/src/components/layouts/chip.tsx | 146 ++-- .../src/components/layouts/circularLoader.tsx | 36 +- .../src/components/layouts/command.tsx | 386 +++++++---- .../layouts/dataBlock/dataBlockContent.tsx | 48 +- .../layouts/dataBlock/dataBlockHeader.tsx | 46 +- .../layouts/dataBlock/dataBlockItem.tsx | 102 +-- .../layouts/dataBlock/dataBlockRoot.tsx | 45 +- .../src/components/layouts/dataTable.tsx | 368 ++++++---- .../src/components/layouts/dataWrapper.tsx | 16 +- .../layouts/dropdownMenu/dropdownContent.tsx | 21 +- .../layouts/dropdownMenu/dropdownItem.tsx | 9 +- .../layouts/dropdownMenu/dropdownLabel.tsx | 9 +- .../dropdownMenu/dropdownSeparator.tsx | 11 +- .../layouts/dropdownMenu/dropdownTrigger.tsx | 13 +- .../dashboard/src/components/layouts/logo.tsx | 45 +- .../components/layouts/page/pageContent.tsx | 51 +- .../components/layouts/page/pageHeader.tsx | 100 +-- .../src/components/layouts/page/pageRoot.tsx | 59 +- .../components/layouts/page/pageSeparator.tsx | 41 +- .../src/components/layouts/pageLayout.tsx | 196 ++++-- .../layouts/section/sectionItem.tsx | 47 +- .../layouts/section/sectionRoot.tsx | 47 +- .../src/components/layouts/subPageLayout.tsx | 195 ++++-- .../layouts/table/tableBody/tableBodyCell.tsx | 54 +- .../layouts/table/tableBody/tableBodyRoot.tsx | 36 +- .../layouts/table/tableBody/tableBodyRow.tsx | 41 +- .../table/tableHeader/tableHeaderCell.tsx | 48 +- .../table/tableHeader/tableHeaderRoot.tsx | 40 +- .../table/tableHeader/tableHeaderRow.tsx | 36 +- .../components/layouts/table/tableRoot.tsx | 10 +- .../src/components/layouts/title.tsx | 38 +- .../src/components/layouts/virtualizer.tsx | 121 ++-- .../overlays/dialog/dialogContent.tsx | 81 ++- .../overlays/dialog/dialogDescription.tsx | 41 +- .../overlays/dialog/dialogFooter.tsx | 43 +- .../overlays/dialog/dialogHeader.tsx | 69 +- .../overlays/dialog/dialogOverlay.tsx | 59 +- .../overlays/dialog/dialogTitle.tsx | 44 +- .../components/overlays/drawer/drawerBody.tsx | 33 +- .../overlays/drawer/drawerContent.tsx | 116 ++-- .../overlays/drawer/drawerHeader.tsx | 71 +- .../overlays/drawer/drawerTrigger.tsx | 42 +- .../overlays/popover/popoverContent.tsx | 71 +- .../components/overlays/toast/toastAction.tsx | 50 +- .../components/overlays/toast/toastClose.tsx | 60 +- .../overlays/toast/toastContent.tsx | 189 ++++-- .../overlays/toast/toastDescription.tsx | 37 +- .../components/overlays/toast/toastTitle.tsx | 46 +- .../overlays/toast/toastViewport.tsx | 53 +- .../overlays/tooltip/tooltipContent.tsx | 53 +- .../src/contexts/data/dataProvider.tsx | 28 +- .../src/contexts/router/routerProvider.tsx | 22 +- .../src/contexts/toasts/toastProvider.tsx | 95 +-- .../dashboard/src/contexts/toasts/useToast.ts | 382 +++++------ .../dashboard/src/features/breadcrumbs.tsx | 139 ++-- .../dashboardLayout.tsx} | 273 ++++---- .../$idOrganization/organizationLayout.tsx | 64 +- .../deleteOneOrganization.tsx | 22 +- .../organizationSettingsLayout.tsx | 6 +- .../organizationSettingsPage.tsx | 117 ++-- .../deleteOneOrganizationUser.tsx | 20 +- .../updateOneOrganizationUser.tsx | 212 +++--- .../createOneOrganizationUser.tsx | 264 ++++---- .../organizationUsersPage.tsx | 66 +- .../organizationUsersTable.tsx | 149 +++-- .../updateOneOrganization.tsx | 290 ++++---- .../$idAttachment/attachmentData.tsx | 8 +- .../$idAttachment/attachmentFile.tsx | 11 +- .../$idAttachment/attachmentPage.tsx | 48 +- .../$idAttachment/deleteOneAttachment.tsx | 22 +- .../$idAttachment/updateOneAttachment.tsx | 436 ++++++------ .../$idYear/attachments/attachmentSelect.tsx | 78 +-- .../$idYear/attachments/attachmentsPage.tsx | 8 +- .../$idYear/attachments/attachmentsTable.tsx | 195 +++--- .../attachments/createOneAttachment.tsx | 420 ++++++------ .../$idRecordRow/deleteOneRecordRow.tsx | 22 +- .../$idRecord/$idRecordRow/recordRowPage.tsx | 46 +- .../$idRecordRow/updateOneRecordRow.tsx | 621 ++++++++--------- .../records/$idRecord/createOneRecordRow.tsx | 633 +++++++++--------- .../records/$idRecord/deleteOneRecord.tsx | 22 +- .../records/$idRecord/duplicateOneRecord.tsx | 22 +- .../$idYear/records/$idRecord/recordPage.tsx | 58 +- .../records/$idRecord/recordRowsTable.tsx | 322 ++++----- .../$idRecord/updateManyRecordRows.tsx | 463 ++++++------- .../records/$idRecord/updateOneRecord.tsx | 444 ++++++------ .../years/$idYear/records/createOneRecord.tsx | 450 ++++++------- .../years/$idYear/records/recordsPage.tsx | 25 +- .../balanceReport/balanceReportPage.tsx | 10 +- .../balanceReport/balanceReportTable.tsx | 65 +- .../balanceSheetAssetsReportItem.tsx | 222 +++--- .../balanceSheetAssetsReportRow.tsx | 124 ++-- .../balanceSheetAssetsReportTable.tsx | 253 +++---- .../balanceSheetLiabilitiesReportItem.tsx | 202 +++--- .../balanceSheetLiabilitiesReportTable.tsx | 225 +++---- .../balanceSheetLiabilityiesReportRow.tsx | 86 +-- .../balanceSheetReportPage.tsx | 36 +- .../downloadBalanceSheetReport.tsx | 112 ++-- .../downloadIncomeStatementReport.tsx | 112 ++-- .../incomeStatementReportItem.tsx | 172 ++--- .../incomeStatementReportPage.tsx | 22 +- .../incomeStatementReportRow.tsx | 86 +-- .../incomeStatementsReportTable.tsx | 320 ++++----- .../journalReport/journalReportPage.tsx | 10 +- .../journalReport/journalReportTable.tsx | 80 +-- .../reports/ledgerReport/ledgerReportPage.tsx | 10 +- .../ledgerReport/ledgerReportTable.tsx | 65 +- .../years/$idYear/reports/reportsLayout.tsx | 6 +- .../years/$idYear/yearLayout.tsx | 104 +-- .../accounts/$idAccount/accountPage.tsx | 42 +- .../accounts/$idAccount/deleteOneAccount.tsx | 22 +- .../accounts/$idAccount/updateOneAccount.tsx | 592 ++++++++-------- .../yearSettings/accounts/accountItem.tsx | 194 +++--- .../yearSettings/accounts/accountSelect.tsx | 78 +-- .../yearSettings/accounts/accountsPage.tsx | 50 ++ .../yearSettings/accounts/accountsTable.tsx | 23 +- .../accounts/createOneAccount.tsx | 582 ++++++++-------- .../accounts/generateAccounts.tsx | 276 ++++---- .../yearSettings/accounts/groupAccounts.tsx | 0 .../yearSettings/accounts/sortAccounts.tsx | 0 .../$idBalanceSheet/balanceSheetPage.tsx | 40 +- .../$idBalanceSheet/deleteOneBalanceSheet.tsx | 22 +- .../$idBalanceSheet/updateOneBalanceSheet.tsx | 362 +++++----- .../balanceSheets/balanceSheetItem.tsx | 96 +-- .../balanceSheets/balanceSheetRow.tsx | 156 +++-- .../balanceSheets/balanceSheetSelect.tsx | 84 +-- .../balanceSheets/balanceSheetTable.tsx | 23 +- .../balanceSheets/balanceSheetsPage.tsx | 39 +- .../connectAccountsToBalanceSheets.tsx | 184 ++--- .../balanceSheets/createOneBalanceSheet.tsx | 350 +++++----- .../balanceSheets/generateBalanceSheets.tsx | 188 +++--- .../balanceSheets/getBalanceSheetChildren.tsx | 0 .../balanceSheets/getBalanceSheetLevel.tsx | 0 .../$idYear/yearSettings/deleteOneYear.tsx | 22 +- .../deleteOneIncomeStatement.tsx | 22 +- .../incomeStatementPage.tsx | 40 +- .../updateOneIncomeStatement.tsx | 330 ++++----- .../computationIncomeStatementPage.tsx | 42 +- .../deleteOneComputationIncomeStatement.tsx | 22 +- .../updateOneComputationIncomeStatement.tsx | 298 ++++----- .../computationIncomeStatementTable.tsx | 19 +- .../createOneComputationIncomeStatement.tsx | 282 ++++---- .../$idComputation/computationPage.tsx | 42 +- .../$idComputation/deleteOneComputation.tsx | 22 +- .../$idComputation/updateOneComputation.tsx | 270 ++++---- .../computations/computationsTable.tsx | 20 +- .../computations/createOneComputation.tsx | 254 +++---- .../computations/generateComputations.tsx | 188 +++--- .../connectAccountsToIncomeStatements.tsx | 184 ++--- .../createOneIncomeStatement.tsx | 316 ++++----- .../generateIncomeStatement.tsx | 188 +++--- .../getIncomeStatementChildren.tsx | 0 .../getIncomeStatementLevel.tsx | 0 .../incomeStatements/incomeStatementItem.tsx | 94 +-- .../incomeStatements/incomeStatementRow.tsx | 128 ++-- .../incomeStatements/incomeStatementsPage.tsx | 47 +- .../incomeStatementsTable.tsx | 21 +- .../journals/$idJournal/deleteOneJournal.tsx | 22 +- .../journals/$idJournal/journalPage.tsx | 41 +- .../journals/$idJournal/updateOneJournal.tsx | 270 ++++---- .../journals/createOneJournal.tsx | 254 +++---- .../journals/generateJournals.tsx | 188 +++--- .../yearSettings/journals/journalSelect.tsx | 78 +-- .../yearSettings/journals/journalsPage.tsx | 40 +- .../$idRecordLabel/deleteOneRecordLabel.tsx | 22 +- .../$idRecordLabel/recordLabelPage.tsx | 39 +- .../$idRecordLabel/updateOneRecordLabel.tsx | 228 +++---- .../recordLabels/createOneRecordLabel.tsx | 212 +++--- .../recordLabels/recordLabelSelect.tsx | 78 +-- .../recordLabels/recordLabelsPage.tsx | 32 +- .../$idYear/yearSettings/updateOneYear.tsx | 338 +++++----- .../yearSettings/yearSettingsLayout.tsx | 6 +- .../$idYear/yearSettings/yearSettingsPage.tsx | 25 +- .../$idOrganization/years/createOneYear.tsx | 342 +++++----- .../$idOrganization/years/yearCard.tsx | 72 ++ .../$idOrganization/years/yearSelect.tsx | 74 +- .../$idOrganization/years/yearsPage.tsx | 67 ++ .../organizations/addNewOrganization.tsx | 336 +++++----- .../organizations/organizationCard.tsx | 72 ++ .../organizations/organizationsPage.tsx | 58 ++ .../{ => dashboard}/settings/settingsPage.tsx | 2 +- .../support/contactSupportForm.tsx | 22 +- .../{ => dashboard}/support/supportPage.tsx | 26 +- .../features/docs/comptabilite/comptes.tsx | 245 +++++++ .../features/docs/comptabilite/documents.tsx | 267 ++++++++ .../features/docs/comptabilite/ecritures.tsx | 235 +++++++ .../docs/comptabilite/introduction.tsx | 123 ++++ .../src/features/docs/documentationIndex.tsx | 193 ++++++ .../src/features/docs/documentationLayout.tsx | 191 ++++++ .../src/features/docs/guide/demarrage.tsx | 101 +++ .../src/features/docs/guide/ecritures.tsx | 141 ++++ .../src/features/docs/guide/organisations.tsx | 132 ++++ .../src/features/docs/guide/rapports.tsx | 163 +++++ .../src/features/error/errorPage.tsx | 21 +- .../src/features/home/documentationBanner.tsx | 27 - .../src/features/home/organizationsBanner.tsx | 25 - .../yearSettings/accounts/accountsPage.tsx | 48 -- .../$idOrganization/years/yearsPage.tsx | 75 --- .../organizations/organizationsPage.tsx | 67 -- .../dashboard/src/features/rootLayout.tsx | 60 +- .../src/features/signIn/signInPage.tsx | 77 ++- .../src/features/signUp/signUpPage.tsx | 46 +- .../features/website/documentationBanner.tsx | 29 + .../src/features/website/featureCard.tsx | 45 ++ .../features/{home => website}/homePage.tsx | 6 +- .../src/features/website/landingPage.tsx | 273 ++++++++ .../features/website/organizationsBanner.tsx | 27 + packages/dashboard/src/index.html | 8 +- .../dashboard/src/routes/platformRouter.tsx | 50 +- packages/dashboard/src/routes/platformTree.ts | 198 +----- .../src/routes/root/auth/homeRoute.tsx | 15 - .../organizationSettingsRoute.tsx | 16 - .../organizationUsersRoute.tsx | 16 - .../$idAttachment/attachmentRoute.tsx | 16 - .../$idYear/attachments/attachmentsRoute.tsx | 15 - .../$idRecord/$idRecordRow/recordRowRoute.tsx | 15 - .../$idYear/records/$idRecord/recordRoute.tsx | 15 - .../years/$idYear/records/recordsRoute.tsx | 15 - .../$idYear/reports/balanceReportRoute.tsx | 15 - .../reports/balanceSheetReportRoute.tsx | 15 - .../reports/incomeStatementReportRoute.tsx | 15 - .../$idYear/reports/journalReportRoute.tsx | 15 - .../$idYear/reports/ledgerReportRoute.tsx | 15 - .../accounts/$idAccount/accountRoute.tsx | 15 - .../yearSettings/accounts/accountsRoute.tsx | 15 - .../$idBalanceSheet/balanceSheetRoute.tsx | 15 - .../balanceSheets/balanceSheetsRoute.tsx | 15 - .../incomeStatementRoute.tsx | 15 - .../computationIncomeStatementRoute.tsx | 15 - .../$idComputation/computationRoute.tsx | 15 - .../incomeStatementsRoute.tsx | 15 - .../journals/$idJournal/journalRoute.tsx | 15 - .../yearSettings/journals/journalsRoute.tsx | 15 - .../$idRecordLabel/recordLabelRoute.tsx | 15 - .../recordLabels/recordLabelsRoute.tsx | 15 - .../yearSettings/yearSettingsRoute.tsx | 15 - .../src/routes/root/authLayoutRoute.tsx | 23 - .../root/dashboard/dashboardLayoutRoute.tsx | 23 + .../root/dashboard/dashboardRootRoute.tsx | 14 + .../routes/root/dashboard/dashboardTree.ts | 164 +++++ .../organizationLayoutRoute.tsx | 30 +- .../$idOrganization/organizationPathRoute.tsx | 22 +- .../$idOrganization/organizationRoute.tsx | 2 +- .../organizationSettingsLayoutRoute.tsx | 4 +- .../organizationSettingsRoute.tsx | 16 + .../organizationUsersLayoutRoute.tsx | 2 +- .../organizationUsersRoute.tsx | 16 + .../$idAttachment/attachmentLayoutRoute.tsx | 28 +- .../$idAttachment/attachmentRoute.tsx | 16 + .../attachments/attachmentsLayoutRoute.tsx | 2 +- .../$idYear/attachments/attachmentsRoute.tsx | 15 + .../$idRecordRow/recordRowLayoutRoute.tsx | 2 +- .../$idRecord/$idRecordRow/recordRowRoute.tsx | 15 + .../records/$idRecord/recordLayoutRoute.tsx | 2 +- .../$idYear/records/$idRecord/recordRoute.tsx | 15 + .../$idYear/records/recordsLayoutRoute.tsx | 2 +- .../years/$idYear/records/recordsRoute.tsx | 15 + .../$idYear/reports/balanceReportRoute.tsx | 15 + .../reports/balanceSheetReportRoute.tsx | 15 + .../reports/incomeStatementReportRoute.tsx | 15 + .../$idYear/reports/journalReportRoute.tsx | 15 + .../$idYear/reports/ledgerReportRoute.tsx | 15 + .../$idYear/reports/reportsLayoutRoute.tsx | 4 +- .../years/$idYear/reports/reportsRoute.tsx | 2 +- .../years/$idYear/yearLayoutRoute.tsx | 30 +- .../years/$idYear/yearPathRoute.tsx | 22 +- .../years/$idYear/yearRoute.tsx | 2 +- .../$idAccount/accountLayoutRoute.tsx | 2 +- .../accounts/$idAccount/accountRoute.tsx | 15 + .../accounts/accountsLayoutRoute.tsx | 2 +- .../yearSettings/accounts/accountsRoute.tsx | 15 + .../balanceSheetLayoutRoute.tsx | 2 +- .../$idBalanceSheet/balanceSheetRoute.tsx | 15 + .../balanceSheetsLayoutRoute.tsx | 2 +- .../balanceSheets/balanceSheetsRoute.tsx | 15 + .../incomeStatementLayoutRoute.tsx | 2 +- .../incomeStatementRoute.tsx | 15 + .../computationIncomeStatementLayoutRoute.tsx | 2 +- .../computationIncomeStatementRoute.tsx | 15 + .../$idComputation/computationLayoutRoute.tsx | 2 +- .../$idComputation/computationRoute.tsx | 15 + .../computations/computationsLayoutRoute.tsx | 2 +- .../computations/computationsRoute.tsx | 2 +- .../incomeStatementsLayoutRoute.tsx | 2 +- .../incomeStatementsRoute.tsx | 15 + .../$idJournal/journalLayoutRoute.tsx | 2 +- .../journals/$idJournal/journalRoute.tsx | 15 + .../journals/journalsLayoutRoute.tsx | 2 +- .../yearSettings/journals/journalsRoute.tsx | 15 + .../$idRecordLabel/recordLabelLayoutRoute.tsx | 2 +- .../$idRecordLabel/recordLabelRoute.tsx | 15 + .../recordLabels/recordLabelsLayoutRoute.tsx | 2 +- .../recordLabels/recordLabelsRoute.tsx | 15 + .../yearSettings/yearSettingsLayoutRoute.tsx | 4 +- .../yearSettings/yearSettingsRoute.tsx | 15 + .../years/yearsLayoutRoute.tsx | 2 +- .../$idOrganization/years/yearsPathRoute.tsx | 2 +- .../$idOrganization/years/yearsRoute.tsx | 4 +- .../organizationsLayoutRoute.tsx | 28 +- .../organizations/organizationsRoute.tsx | 30 +- .../settings/settingsLayoutRoute.tsx | 28 +- .../settings/settingsRoute.tsx | 4 +- .../support/supportRoute.tsx | 30 +- .../docs/accounting/accountingLayoutRoute.tsx | 11 + .../root/docs/accounting/accountsRoute.tsx | 15 + .../root/docs/accounting/documentsRoute.tsx | 15 + .../docs/accounting/introductionRoute.tsx | 15 + .../root/docs/accounting/recordsRoute.tsx | 15 + .../src/routes/root/docs/docsLayoutRoute.tsx | 19 + .../src/routes/root/docs/docsRootRoute.tsx | 15 + .../src/routes/root/docs/docsTree.ts | 30 + .../routes/root/docs/guide/demarrageRoute.tsx | 15 + .../root/docs/guide/guideLayoutRoute.tsx | 11 + .../root/docs/guide/organisationsRoute.tsx | 15 + .../routes/root/docs/guide/rapportsRoute.tsx | 15 + .../root/docs/guide/recordRowsRoute.tsx | 15 + .../dashboard/src/routes/root/errorRoute.tsx | 30 +- .../root/{public => signIn}/signInRoute.tsx | 44 +- .../root/{public => signUp}/signUpRoute.tsx | 54 +- .../src/routes/root/website/landingRoute.tsx | 15 + .../websiteLayoutRoute.tsx} | 32 +- .../dashboard/src/routes/rootLayoutRoute.tsx | 72 +- packages/dashboard/src/utilities/cn.ts | 14 +- .../utilities/cookies/getIsAuthenticated.ts | 2 +- .../src/utilities/cookies/getUserSession.ts | 4 +- .../dashboard/src/utilities/invalidateData.ts | 2 +- packages/dashboard/src/utilities/postAPI.ts | 152 ++--- .../dashboard/src/utilities/useHTTPData.ts | 2 +- packages/dashboard/tsconfig.json | 71 +- packages/dashboard/vite.config.ts | 95 ++- packages/metadata/src/models/account.ts | 8 +- packages/metadata/src/models/attachment.ts | 4 +- packages/metadata/src/models/balanceSheet.ts | 6 +- packages/metadata/src/models/computation.ts | 4 +- .../src/models/computationIncomeStatement.ts | 6 +- packages/metadata/src/models/document.ts | 8 +- .../metadata/src/models/incomeStatement.ts | 4 +- packages/metadata/src/models/journal.ts | 4 +- packages/metadata/src/models/organization.ts | 6 +- .../metadata/src/models/organizationUser.ts | 6 +- packages/metadata/src/models/record.ts | 6 +- packages/metadata/src/models/recordLabel.ts | 6 +- packages/metadata/src/models/recordRow.ts | 4 +- packages/metadata/src/models/user.ts | 4 +- packages/metadata/src/models/userSession.ts | 4 +- packages/metadata/src/models/year.ts | 4 +- .../deleteOneOrganization.ts | 6 +- .../createOneOrganizationUser.ts | 8 +- .../deleteOneOrganizationUser.ts | 6 +- .../readAllOrganizationUsers.ts | 8 +- .../readOneOrganizationUser.ts | 8 +- .../updateOneOrganizationUser.ts | 6 +- .../updateOneOrganization.ts | 6 +- .../$idOrganization/readOneOrganization.ts | 6 +- .../$idAttachment/deleteOneAttachment.ts | 6 +- .../generateAttachmentGetSignedUrl.ts | 6 +- .../generateAttachmentPutSignedUrl.ts | 6 +- .../$idAttachment/readOneAttachment.ts | 6 +- .../$idAttachment/updateOneAttachment.ts | 6 +- .../attachments/createOneAttachment.ts | 6 +- .../$idYear/attachments/readAllAttachments.ts | 6 +- .../years/$idYear/readOneYear.ts | 6 +- .../records/$idRecord/computeOneRecord.ts | 6 +- .../records/$idRecord/deleteOneRecord.ts | 6 +- .../records/$idRecord/duplicateOneRecord.ts | 6 +- .../records/$idRecord/readOneRecord.ts | 6 +- .../$idRecordRow/deleteOneRecordRow.ts | 6 +- .../$idRecordRow/readOneRecordRow.ts | 6 +- .../$idRecordRow/updateOneRecordRow.ts | 6 +- .../recordRows/createOneRecordRow.ts | 6 +- .../$idRecord/recordRows/readAllRecordRows.ts | 6 +- .../recordRows/updateManyRecordRows.ts | 6 +- .../records/$idRecord/updateOneRecord.ts | 6 +- .../years/$idYear/records/createOneRecord.ts | 6 +- .../years/$idYear/records/readAllRecords.ts | 6 +- .../generateDocumentGetSignedUrl.ts | 6 +- .../documents/$idDocument/readOneDocument.ts | 6 +- .../reports/documents/readAllDocuments.ts | 6 +- .../generateBalanceSheetReportDocument.ts | 8 +- .../generateIncomeStatementReportDocument.ts | 8 +- .../accounts/$idAccount/deleteOneAccount.ts | 6 +- .../accounts/$idAccount/readOneAccount.ts | 6 +- .../accounts/$idAccount/updateOneAccount.ts | 6 +- .../yearSettings/accounts/createOneAccount.ts | 6 +- .../yearSettings/accounts/generateAccounts.ts | 8 +- .../yearSettings/accounts/readAllAccounts.ts | 6 +- .../$idBalanceSheet/deleteOneBalanceSheet.ts | 6 +- .../$idBalanceSheet/readOneBalanceSheet.ts | 6 +- .../$idBalanceSheet/updateOneBalanceSheet.ts | 6 +- .../connectAccountsToBalanceSheets.ts | 6 +- .../balanceSheets/createOneBalanceSheet.ts | 6 +- .../balanceSheets/generateBalanceSheets.ts | 6 +- .../balanceSheets/readAllBalanceSheets.ts | 6 +- .../deleteOneComputationIncomeStatement.ts | 6 +- .../readOneComputationIncomeStatement.ts | 6 +- .../updateOneComputationIncomeStatement.ts | 6 +- .../createOneComputationIncomeStatement.ts | 6 +- .../readAllComputationIncomeStatements.ts | 6 +- .../$idComputation/deleteOneComputation.ts | 6 +- .../$idComputation/readOneComputation.ts | 6 +- .../$idComputation/updateOneComputation.ts | 6 +- .../computations/createOneComputation.ts | 6 +- .../computations/generateComputations.ts | 6 +- .../computations/readAllComputations.ts | 6 +- .../$idYear/yearSettings/general/closeYear.ts | 6 +- .../yearSettings/general/deleteOneYear.ts | 6 +- .../$idYear/yearSettings/general/openYear.ts | 8 +- .../general/settleBalanceSheet.ts | 8 +- .../general/settleIncomeStatement.ts | 10 +- .../yearSettings/general/updateOneYear.ts | 6 +- .../deleteOneIncomeStatement.ts | 6 +- .../readOneIncomeStatement.ts | 6 +- .../updateOneIncomeStatement.ts | 6 +- .../connectAccountsToIncomeStatements.ts | 6 +- .../createOneIncomeStatement.ts | 6 +- .../generateIncomeStatements.ts | 6 +- .../readAllIncomeStatements.ts | 6 +- .../journals/$idJournal/deleteOneJournal.ts | 6 +- .../journals/$idJournal/readOneJournal.ts | 6 +- .../journals/$idJournal/updateOneJournal.ts | 6 +- .../yearSettings/journals/createOneJournal.ts | 6 +- .../yearSettings/journals/generateJournals.ts | 6 +- .../yearSettings/journals/readAllJournals.ts | 6 +- .../$idRecordLabel/deleteOneRecordLabel.ts | 6 +- .../$idRecordLabel/readOneRecordLabel.ts | 6 +- .../$idRecordLabel/updateOneRecordLabel.ts | 6 +- .../recordLabels/createOneRecordLabel.ts | 6 +- .../recordLabels/readAllRecordLabels.ts | 6 +- .../$idOrganization/years/createOneYear.ts | 6 +- .../$idOrganization/years/readAllYears.ts | 6 +- .../src/routes/auth/organizations/_index.ts | 2 +- .../activateOrganizationMembership.ts | 6 +- .../auth/organizations/addNewOrganization.ts | 6 +- .../organizations/getAllMyOrganizations.ts | 8 +- .../src/routes/auth/settings/activateUser.ts | 6 +- .../routes/auth/settings/readUserSession.ts | 8 +- .../src/routes/auth/settings/updateUser.ts | 6 +- .../routes/auth/settings/updateUserEmail.ts | 8 +- .../auth/settings/updateUserPassword.ts | 10 +- .../routes/auth/settings/validateUserEmail.ts | 6 +- .../routes/auth/support/sendSupportMessage.ts | 6 +- .../src/routes/public/user/sendMagicLink.ts | 6 +- .../metadata/src/routes/public/user/signIn.ts | 6 +- .../src/routes/public/user/signOut.ts | 4 +- .../metadata/src/routes/public/user/signUp.ts | 6 +- packages/metadata/src/schemas/account.ts | 10 +- packages/metadata/src/schemas/attachment.ts | 8 +- packages/metadata/src/schemas/balanceSheet.ts | 8 +- packages/metadata/src/schemas/computation.ts | 8 +- .../src/schemas/computationIncomeStatement.ts | 6 +- packages/metadata/src/schemas/document.ts | 6 +- .../metadata/src/schemas/incomeStatement.ts | 8 +- packages/metadata/src/schemas/journal.ts | 8 +- packages/metadata/src/schemas/organization.ts | 8 +- .../metadata/src/schemas/organizationUser.ts | 8 +- packages/metadata/src/schemas/record.ts | 8 +- packages/metadata/src/schemas/recordLabel.ts | 8 +- packages/metadata/src/schemas/recordRow.ts | 8 +- packages/metadata/src/schemas/user.ts | 8 +- packages/metadata/src/schemas/userSession.ts | 6 +- packages/metadata/src/schemas/year.ts | 8 +- packages/metadata/src/utilities/generate.ts | 2 +- packages/tools/src/seed/seed.ts | 37 +- packages/ui/package.json | 36 + packages/ui/panda.config.ts | 62 ++ packages/ui/postcss.config.cjs | 5 + packages/ui/src/components/buttons/button.tsx | 85 +++ .../src/components/buttons/buttonContent.tsx | 381 +++++++++++ .../ui/src/components/buttons/linkContent.tsx | 28 + .../src/components/layouts/circularLoader.tsx | 40 ++ packages/ui/src/components/layouts/logo.tsx | 19 + .../fonts/SometypeMono-VariableFont_wght.ttf | Bin 0 -> 65180 bytes packages/ui/src/index.ts | 17 + packages/ui/src/styles/fonts.css | 7 + packages/ui/src/utilities/cn.ts | 9 + packages/ui/src/utilities/sleep.ts | 7 + packages/ui/tsconfig.json | 40 ++ packages/website/index.html | 16 - packages/website/package.json | 22 - packages/website/public/vite.svg | 1 - packages/website/src/main.tsx | 9 - packages/website/tsconfig.json | 43 -- packages/website/vite.config.ts | 32 - 750 files changed, 21781 insertions(+), 17252 deletions(-) create mode 100644 .development/packages/api/build.sh create mode 100644 .development/packages/api/install.sh create mode 100644 .development/packages/api/migrate.sh create mode 100644 .development/packages/api/seed.sh create mode 100644 .development/packages/api/start.sh delete mode 100644 .development/packages/dashboard/entrypoint.sh delete mode 100644 .development/packages/website/entrypoint.sh create mode 100644 .production/.gitignore create mode 100644 .production/compose.yml rename {packages/api/.docker => .production/packages/api}/.dockerignore (100%) create mode 100644 .production/packages/api/.env rename {packages/api/.docker => .production/packages/api}/Dockerfile (100%) rename {packages/dashboard/.docker => .production/packages/dashboard}/.dockerignore (100%) create mode 100644 .production/packages/dashboard/.env rename {packages/dashboard/.docker => .production/packages/dashboard}/Dockerfile (100%) rename {packages/dashboard/.docker => .production/packages/dashboard}/nginx/default.conf (100%) create mode 100644 docs/BUSINESS_MODEL.md create mode 100644 packages/dashboard/panda.config.ts create mode 100644 packages/dashboard/postcss.config.cjs create mode 100644 packages/dashboard/public/favicon.svg delete mode 100644 packages/dashboard/src/components/buttons/button.tsx delete mode 100644 packages/dashboard/src/components/buttons/buttonGhost.tsx delete mode 100644 packages/dashboard/src/components/buttons/buttonGhostContent.tsx delete mode 100644 packages/dashboard/src/components/buttons/buttonOutline.tsx delete mode 100644 packages/dashboard/src/components/buttons/buttonOutlineContent.tsx delete mode 100644 packages/dashboard/src/components/buttons/buttonPlain.tsx delete mode 100644 packages/dashboard/src/components/buttons/buttonPlainContent.tsx create mode 100644 packages/dashboard/src/components/document/docDefinition.tsx create mode 100644 packages/dashboard/src/components/document/docExample.tsx create mode 100644 packages/dashboard/src/components/document/docIndexLink.tsx create mode 100644 packages/dashboard/src/components/document/docLink.tsx create mode 100644 packages/dashboard/src/components/document/docList.tsx create mode 100644 packages/dashboard/src/components/document/docNextPage.tsx create mode 100644 packages/dashboard/src/components/document/docParagraph.tsx create mode 100644 packages/dashboard/src/components/document/docSection.tsx create mode 100644 packages/dashboard/src/components/document/docTable.tsx rename packages/dashboard/src/features/{authLayout.tsx => dashboard/dashboardLayout.tsx} (57%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/organizationLayout.tsx (81%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/organizationSettings/deleteOneOrganization.tsx (79%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/organizationSettings/organizationSettingsLayout.tsx (76%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/organizationSettings/organizationSettingsPage.tsx (59%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/organizationSettings/organizationUsers/$idOrganizationUser/deleteOneOrganizationUser.tsx (80%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/organizationSettings/organizationUsers/$idOrganizationUser/updateOneOrganizationUser.tsx (83%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/organizationSettings/organizationUsers/createOneOrganizationUser.tsx (86%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/organizationSettings/organizationUsers/organizationUsersPage.tsx (51%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/organizationSettings/organizationUsers/organizationUsersTable.tsx (69%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/organizationSettings/updateOneOrganization.tsx (88%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/attachmentData.tsx (82%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/attachmentFile.tsx (71%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/attachmentPage.tsx (77%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/deleteOneAttachment.tsx (80%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/updateOneAttachment.tsx (90%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/attachments/attachmentSelect.tsx (84%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/attachments/attachmentsPage.tsx (72%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/attachments/attachmentsTable.tsx (80%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/attachments/createOneAttachment.tsx (90%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/deleteOneRecordRow.tsx (80%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/recordRowPage.tsx (80%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/updateOneRecordRow.tsx (89%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/records/$idRecord/createOneRecordRow.tsx (90%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/records/$idRecord/deleteOneRecord.tsx (80%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/records/$idRecord/duplicateOneRecord.tsx (79%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/records/$idRecord/recordPage.tsx (89%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/records/$idRecord/recordRowsTable.tsx (76%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/records/$idRecord/updateManyRecordRows.tsx (88%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/records/$idRecord/updateOneRecord.tsx (91%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/records/createOneRecord.tsx (91%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/records/recordsPage.tsx (90%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/reports/balanceReport/balanceReportPage.tsx (79%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/reports/balanceReport/balanceReportTable.tsx (65%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetAsset/balanceSheetAssetsReportItem.tsx (90%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetAsset/balanceSheetAssetsReportRow.tsx (64%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetAsset/balanceSheetAssetsReportTable.tsx (77%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetLiability/balanceSheetLiabilitiesReportItem.tsx (88%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetLiability/balanceSheetLiabilitiesReportTable.tsx (81%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetLiability/balanceSheetLiabilityiesReportRow.tsx (56%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/balanceSheetReportPage.tsx (79%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/reports/balanceSheetReport/downloadBalanceSheetReport.tsx (94%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/downloadIncomeStatementReport.tsx (89%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/incomeStatementReportItem.tsx (88%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/incomeStatementReportPage.tsx (87%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/incomeStatementReportRow.tsx (54%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/reports/incomeStatementReport/incomeStatementsReportTable.tsx (83%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/reports/journalReport/journalReportPage.tsx (79%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/reports/journalReport/journalReportTable.tsx (73%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/reports/ledgerReport/ledgerReportPage.tsx (79%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/reports/ledgerReport/ledgerReportTable.tsx (68%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/reports/reportsLayout.tsx (89%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearLayout.tsx (88%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/accountPage.tsx (79%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/deleteOneAccount.tsx (79%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/updateOneAccount.tsx (92%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountItem.tsx (72%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountSelect.tsx (84%) create mode 100644 packages/dashboard/src/features/dashboard/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountsPage.tsx rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountsTable.tsx (76%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/accounts/createOneAccount.tsx (92%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/accounts/generateAccounts.tsx (87%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/accounts/groupAccounts.tsx (100%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/accounts/sortAccounts.tsx (100%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/balanceSheetPage.tsx (75%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/deleteOneBalanceSheet.tsx (80%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/updateOneBalanceSheet.tsx (88%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetItem.tsx (84%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetRow.tsx (51%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetSelect.tsx (86%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetTable.tsx (74%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetsPage.tsx (60%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/connectAccountsToBalanceSheets.tsx (82%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/createOneBalanceSheet.tsx (88%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/generateBalanceSheets.tsx (82%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/getBalanceSheetChildren.tsx (100%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/getBalanceSheetLevel.tsx (100%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/deleteOneYear.tsx (79%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/deleteOneIncomeStatement.tsx (80%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/incomeStatementPage.tsx (75%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/updateOneIncomeStatement.tsx (88%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/computationIncomeStatementPage.tsx (75%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/deleteOneComputationIncomeStatement.tsx (80%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/updateOneComputationIncomeStatement.tsx (86%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/computationIncomeStatementTable.tsx (84%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationIncomeStatements/createOneComputationIncomeStatement.tsx (85%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationPage.tsx (73%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/deleteOneComputation.tsx (80%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/updateOneComputation.tsx (85%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/computationsTable.tsx (65%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/createOneComputation.tsx (85%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/generateComputations.tsx (82%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/connectAccountsToIncomeStatements.tsx (83%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/createOneIncomeStatement.tsx (88%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/generateIncomeStatement.tsx (83%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/getIncomeStatementChildren.tsx (100%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/getIncomeStatementLevel.tsx (100%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementItem.tsx (84%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementRow.tsx (66%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementsPage.tsx (57%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementsTable.tsx (73%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/deleteOneJournal.tsx (79%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/journalPage.tsx (75%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/updateOneJournal.tsx (86%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/journals/createOneJournal.tsx (85%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/journals/generateJournals.tsx (82%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/journals/journalSelect.tsx (84%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/journals/journalsPage.tsx (64%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/deleteOneRecordLabel.tsx (80%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/recordLabelPage.tsx (74%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/updateOneRecordLabel.tsx (83%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/createOneRecordLabel.tsx (82%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/recordLabelSelect.tsx (84%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/recordLabelsPage.tsx (63%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/updateOneYear.tsx (88%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/yearSettingsLayout.tsx (90%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/yearSettingsPage.tsx (59%) rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/createOneYear.tsx (88%) create mode 100644 packages/dashboard/src/features/dashboard/organizations/$idOrganization/years/yearCard.tsx rename packages/dashboard/src/features/{ => dashboard}/organizations/$idOrganization/years/yearSelect.tsx (83%) create mode 100644 packages/dashboard/src/features/dashboard/organizations/$idOrganization/years/yearsPage.tsx rename packages/dashboard/src/features/{ => dashboard}/organizations/addNewOrganization.tsx (89%) create mode 100644 packages/dashboard/src/features/dashboard/organizations/organizationCard.tsx create mode 100644 packages/dashboard/src/features/dashboard/organizations/organizationsPage.tsx rename packages/dashboard/src/features/{ => dashboard}/settings/settingsPage.tsx (81%) rename packages/dashboard/src/features/{ => dashboard}/support/contactSupportForm.tsx (83%) rename packages/dashboard/src/features/{ => dashboard}/support/supportPage.tsx (63%) create mode 100644 packages/dashboard/src/features/docs/comptabilite/comptes.tsx create mode 100644 packages/dashboard/src/features/docs/comptabilite/documents.tsx create mode 100644 packages/dashboard/src/features/docs/comptabilite/ecritures.tsx create mode 100644 packages/dashboard/src/features/docs/comptabilite/introduction.tsx create mode 100644 packages/dashboard/src/features/docs/documentationIndex.tsx create mode 100644 packages/dashboard/src/features/docs/documentationLayout.tsx create mode 100644 packages/dashboard/src/features/docs/guide/demarrage.tsx create mode 100644 packages/dashboard/src/features/docs/guide/ecritures.tsx create mode 100644 packages/dashboard/src/features/docs/guide/organisations.tsx create mode 100644 packages/dashboard/src/features/docs/guide/rapports.tsx delete mode 100644 packages/dashboard/src/features/home/documentationBanner.tsx delete mode 100644 packages/dashboard/src/features/home/organizationsBanner.tsx delete mode 100644 packages/dashboard/src/features/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountsPage.tsx delete mode 100644 packages/dashboard/src/features/organizations/$idOrganization/years/yearsPage.tsx delete mode 100644 packages/dashboard/src/features/organizations/organizationsPage.tsx create mode 100644 packages/dashboard/src/features/website/documentationBanner.tsx create mode 100644 packages/dashboard/src/features/website/featureCard.tsx rename packages/dashboard/src/features/{home => website}/homePage.tsx (51%) create mode 100644 packages/dashboard/src/features/website/landingPage.tsx create mode 100644 packages/dashboard/src/features/website/organizationsBanner.tsx delete mode 100644 packages/dashboard/src/routes/root/auth/homeRoute.tsx delete mode 100644 packages/dashboard/src/routes/root/auth/organizations/$idOrganization/organizationSettings/organizationSettingsRoute.tsx delete mode 100644 packages/dashboard/src/routes/root/auth/organizations/$idOrganization/organizationSettings/organizationUsers/organizationUsersRoute.tsx delete mode 100644 packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/attachmentRoute.tsx delete mode 100644 packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/attachments/attachmentsRoute.tsx delete mode 100644 packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/recordRowRoute.tsx delete mode 100644 packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/recordRoute.tsx delete mode 100644 packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/records/recordsRoute.tsx delete mode 100644 packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/reports/balanceReportRoute.tsx delete mode 100644 packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/reports/balanceSheetReportRoute.tsx delete mode 100644 packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/reports/incomeStatementReportRoute.tsx delete mode 100644 packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/reports/journalReportRoute.tsx delete mode 100644 packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/reports/ledgerReportRoute.tsx delete mode 100644 packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/accountRoute.tsx delete mode 100644 packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountsRoute.tsx delete mode 100644 packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/balanceSheetRoute.tsx delete mode 100644 packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetsRoute.tsx delete mode 100644 packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/incomeStatementRoute.tsx delete mode 100644 packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/$idComputationIncomeStatement/computationIncomeStatementRoute.tsx delete mode 100644 packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationRoute.tsx delete mode 100644 packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementsRoute.tsx delete mode 100644 packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/journalRoute.tsx delete mode 100644 packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/journalsRoute.tsx delete mode 100644 packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/recordLabelRoute.tsx delete mode 100644 packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/recordLabelsRoute.tsx delete mode 100644 packages/dashboard/src/routes/root/auth/organizations/$idOrganization/years/$idYear/yearSettings/yearSettingsRoute.tsx delete mode 100644 packages/dashboard/src/routes/root/authLayoutRoute.tsx create mode 100644 packages/dashboard/src/routes/root/dashboard/dashboardLayoutRoute.tsx create mode 100644 packages/dashboard/src/routes/root/dashboard/dashboardRootRoute.tsx create mode 100644 packages/dashboard/src/routes/root/dashboard/dashboardTree.ts rename packages/dashboard/src/routes/root/{auth => dashboard}/organizations/$idOrganization/organizationLayoutRoute.tsx (57%) rename packages/dashboard/src/routes/root/{auth => dashboard}/organizations/$idOrganization/organizationPathRoute.tsx (68%) rename packages/dashboard/src/routes/root/{auth => dashboard}/organizations/$idOrganization/organizationRoute.tsx (74%) rename packages/dashboard/src/routes/root/{auth => dashboard}/organizations/$idOrganization/organizationSettings/organizationSettingsLayoutRoute.tsx (51%) create mode 100644 packages/dashboard/src/routes/root/dashboard/organizations/$idOrganization/organizationSettings/organizationSettingsRoute.tsx rename packages/dashboard/src/routes/root/{auth => dashboard}/organizations/$idOrganization/organizationSettings/organizationUsers/organizationUsersLayoutRoute.tsx (63%) create mode 100644 packages/dashboard/src/routes/root/dashboard/organizations/$idOrganization/organizationSettings/organizationUsers/organizationUsersRoute.tsx rename packages/dashboard/src/routes/root/{auth => dashboard}/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/attachmentLayoutRoute.tsx (64%) create mode 100644 packages/dashboard/src/routes/root/dashboard/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/attachmentRoute.tsx rename packages/dashboard/src/routes/root/{auth => dashboard}/organizations/$idOrganization/years/$idYear/attachments/attachmentsLayoutRoute.tsx (67%) create mode 100644 packages/dashboard/src/routes/root/dashboard/organizations/$idOrganization/years/$idYear/attachments/attachmentsRoute.tsx rename packages/dashboard/src/routes/root/{auth => dashboard}/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/recordRowLayoutRoute.tsx (64%) create mode 100644 packages/dashboard/src/routes/root/dashboard/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRow/recordRowRoute.tsx rename packages/dashboard/src/routes/root/{auth => dashboard}/organizations/$idOrganization/years/$idYear/records/$idRecord/recordLayoutRoute.tsx (64%) create mode 100644 packages/dashboard/src/routes/root/dashboard/organizations/$idOrganization/years/$idYear/records/$idRecord/recordRoute.tsx rename packages/dashboard/src/routes/root/{auth => dashboard}/organizations/$idOrganization/years/$idYear/records/recordsLayoutRoute.tsx (67%) create mode 100644 packages/dashboard/src/routes/root/dashboard/organizations/$idOrganization/years/$idYear/records/recordsRoute.tsx create mode 100644 packages/dashboard/src/routes/root/dashboard/organizations/$idOrganization/years/$idYear/reports/balanceReportRoute.tsx create mode 100644 packages/dashboard/src/routes/root/dashboard/organizations/$idOrganization/years/$idYear/reports/balanceSheetReportRoute.tsx create mode 100644 packages/dashboard/src/routes/root/dashboard/organizations/$idOrganization/years/$idYear/reports/incomeStatementReportRoute.tsx create mode 100644 packages/dashboard/src/routes/root/dashboard/organizations/$idOrganization/years/$idYear/reports/journalReportRoute.tsx create mode 100644 packages/dashboard/src/routes/root/dashboard/organizations/$idOrganization/years/$idYear/reports/ledgerReportRoute.tsx rename packages/dashboard/src/routes/root/{auth => dashboard}/organizations/$idOrganization/years/$idYear/reports/reportsLayoutRoute.tsx (51%) rename packages/dashboard/src/routes/root/{auth => dashboard}/organizations/$idOrganization/years/$idYear/reports/reportsRoute.tsx (70%) rename packages/dashboard/src/routes/root/{auth => dashboard}/organizations/$idOrganization/years/$idYear/yearLayoutRoute.tsx (55%) rename packages/dashboard/src/routes/root/{auth => dashboard}/organizations/$idOrganization/years/$idYear/yearPathRoute.tsx (65%) rename packages/dashboard/src/routes/root/{auth => dashboard}/organizations/$idOrganization/years/$idYear/yearRoute.tsx (75%) rename packages/dashboard/src/routes/root/{auth => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/accountLayoutRoute.tsx (61%) create mode 100644 packages/dashboard/src/routes/root/dashboard/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/accountRoute.tsx rename packages/dashboard/src/routes/root/{auth => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountsLayoutRoute.tsx (63%) create mode 100644 packages/dashboard/src/routes/root/dashboard/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountsRoute.tsx rename packages/dashboard/src/routes/root/{auth => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/balanceSheetLayoutRoute.tsx (61%) create mode 100644 packages/dashboard/src/routes/root/dashboard/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/balanceSheetRoute.tsx rename packages/dashboard/src/routes/root/{auth => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetsLayoutRoute.tsx (62%) create mode 100644 packages/dashboard/src/routes/root/dashboard/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetsRoute.tsx rename packages/dashboard/src/routes/root/{auth => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/incomeStatementLayoutRoute.tsx (62%) create mode 100644 packages/dashboard/src/routes/root/dashboard/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/incomeStatementRoute.tsx rename packages/dashboard/src/routes/root/{auth => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/$idComputationIncomeStatement/computationIncomeStatementLayoutRoute.tsx (60%) create mode 100644 packages/dashboard/src/routes/root/dashboard/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/$idComputationIncomeStatement/computationIncomeStatementRoute.tsx rename packages/dashboard/src/routes/root/{auth => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationLayoutRoute.tsx (58%) create mode 100644 packages/dashboard/src/routes/root/dashboard/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/$idComputation/computationRoute.tsx rename packages/dashboard/src/routes/root/{auth => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/computationsLayoutRoute.tsx (59%) rename packages/dashboard/src/routes/root/{auth => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/computations/computationsRoute.tsx (64%) rename packages/dashboard/src/routes/root/{auth => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementsLayoutRoute.tsx (65%) create mode 100644 packages/dashboard/src/routes/root/dashboard/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementsRoute.tsx rename packages/dashboard/src/routes/root/{auth => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/journalLayoutRoute.tsx (61%) create mode 100644 packages/dashboard/src/routes/root/dashboard/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/journalRoute.tsx rename packages/dashboard/src/routes/root/{auth => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/journals/journalsLayoutRoute.tsx (62%) create mode 100644 packages/dashboard/src/routes/root/dashboard/organizations/$idOrganization/years/$idYear/yearSettings/journals/journalsRoute.tsx rename packages/dashboard/src/routes/root/{auth => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/recordLabelLayoutRoute.tsx (61%) create mode 100644 packages/dashboard/src/routes/root/dashboard/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/recordLabelRoute.tsx rename packages/dashboard/src/routes/root/{auth => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/recordLabelsLayoutRoute.tsx (63%) create mode 100644 packages/dashboard/src/routes/root/dashboard/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/recordLabelsRoute.tsx rename packages/dashboard/src/routes/root/{auth => dashboard}/organizations/$idOrganization/years/$idYear/yearSettings/yearSettingsLayoutRoute.tsx (50%) create mode 100644 packages/dashboard/src/routes/root/dashboard/organizations/$idOrganization/years/$idYear/yearSettings/yearSettingsRoute.tsx rename packages/dashboard/src/routes/root/{auth => dashboard}/organizations/$idOrganization/years/yearsLayoutRoute.tsx (68%) rename packages/dashboard/src/routes/root/{auth => dashboard}/organizations/$idOrganization/years/yearsPathRoute.tsx (63%) rename packages/dashboard/src/routes/root/{auth => dashboard}/organizations/$idOrganization/years/yearsRoute.tsx (53%) rename packages/dashboard/src/routes/root/{auth => dashboard}/organizations/organizationsLayoutRoute.tsx (67%) rename packages/dashboard/src/routes/root/{auth => dashboard}/organizations/organizationsRoute.tsx (59%) rename packages/dashboard/src/routes/root/{auth => dashboard}/settings/settingsLayoutRoute.tsx (66%) rename packages/dashboard/src/routes/root/{auth => dashboard}/settings/settingsRoute.tsx (61%) rename packages/dashboard/src/routes/root/{auth => dashboard}/support/supportRoute.tsx (54%) create mode 100644 packages/dashboard/src/routes/root/docs/accounting/accountingLayoutRoute.tsx create mode 100644 packages/dashboard/src/routes/root/docs/accounting/accountsRoute.tsx create mode 100644 packages/dashboard/src/routes/root/docs/accounting/documentsRoute.tsx create mode 100644 packages/dashboard/src/routes/root/docs/accounting/introductionRoute.tsx create mode 100644 packages/dashboard/src/routes/root/docs/accounting/recordsRoute.tsx create mode 100644 packages/dashboard/src/routes/root/docs/docsLayoutRoute.tsx create mode 100644 packages/dashboard/src/routes/root/docs/docsRootRoute.tsx create mode 100644 packages/dashboard/src/routes/root/docs/docsTree.ts create mode 100644 packages/dashboard/src/routes/root/docs/guide/demarrageRoute.tsx create mode 100644 packages/dashboard/src/routes/root/docs/guide/guideLayoutRoute.tsx create mode 100644 packages/dashboard/src/routes/root/docs/guide/organisationsRoute.tsx create mode 100644 packages/dashboard/src/routes/root/docs/guide/rapportsRoute.tsx create mode 100644 packages/dashboard/src/routes/root/docs/guide/recordRowsRoute.tsx rename packages/dashboard/src/routes/root/{public => signIn}/signInRoute.tsx (56%) rename packages/dashboard/src/routes/root/{public => signUp}/signUpRoute.tsx (54%) create mode 100644 packages/dashboard/src/routes/root/website/landingRoute.tsx rename packages/dashboard/src/routes/root/{publicLayoutRoute.tsx => website/websiteLayoutRoute.tsx} (52%) create mode 100644 packages/ui/package.json create mode 100644 packages/ui/panda.config.ts create mode 100644 packages/ui/postcss.config.cjs create mode 100644 packages/ui/src/components/buttons/button.tsx create mode 100644 packages/ui/src/components/buttons/buttonContent.tsx create mode 100644 packages/ui/src/components/buttons/linkContent.tsx create mode 100644 packages/ui/src/components/layouts/circularLoader.tsx create mode 100644 packages/ui/src/components/layouts/logo.tsx create mode 100644 packages/ui/src/fonts/SometypeMono-VariableFont_wght.ttf create mode 100644 packages/ui/src/index.ts create mode 100644 packages/ui/src/styles/fonts.css create mode 100644 packages/ui/src/utilities/cn.ts create mode 100644 packages/ui/src/utilities/sleep.ts create mode 100644 packages/ui/tsconfig.json delete mode 100644 packages/website/index.html delete mode 100644 packages/website/package.json delete mode 100644 packages/website/public/vite.svg delete mode 100644 packages/website/src/main.tsx delete mode 100644 packages/website/tsconfig.json delete mode 100644 packages/website/vite.config.ts diff --git a/.development/.dockerignore b/.development/.dockerignore index f4964cf..564d233 100644 --- a/.development/.dockerignore +++ b/.development/.dockerignore @@ -24,10 +24,14 @@ dist *.tsbuildinfo # Environment files (mounted separately per service) +# Exclude all .env files except development ones .env -**/.env .env.* -**/.env.* +packages/**/.env +packages/**/.env.* + +# Keep development environment files (needed for Docker builds) +!.development/packages/**/.env # Logs logs diff --git a/.development/compose.yml b/.development/compose.yml index 1220093..a460082 100644 --- a/.development/compose.yml +++ b/.development/compose.yml @@ -121,46 +121,17 @@ services: ports: - "5173:5173" # Vite dev server volumes: - # Source code - bind-mounted for live editing (synced between host and container) - - ../packages:/workspace/packages:cached - - ../package.json:/workspace/package.json:cached - - ../pnpm-workspace.yaml:/workspace/pnpm-workspace.yaml:cached - - ../pnpm-lock.yaml:/workspace/pnpm-lock.yaml:cached - - ../.development:/workspace/.development:cached - - # Environment file - - ./packages/dashboard/.env:/workspace/packages/dashboard/.env:cached - - # Runtime files - isolated in Docker volumes (NOT on host) - - dashboard_node_modules:/workspace/node_modules - - metadata_build:/workspace/packages/metadata/build - - pnpm_store:/root/.local/share/pnpm/store - - # Website - Public-facing website (React + Vite) - website: - build: - context: .. - dockerfile: .development/packages/website/Dockerfile - args: - NODE_VERSION: "25.2.1" - PNPM_VERSION: "10.26.1" - ports: - - "5174:5173" # Host:Container (Vite runs on 5173 inside, exposed as 5174 on host) - volumes: - # Source code - bind-mounted for live editing (synced between host and container) - - ../packages:/workspace/packages:cached - - ../package.json:/workspace/package.json:cached - - ../pnpm-workspace.yaml:/workspace/pnpm-workspace.yaml:cached - - ../pnpm-lock.yaml:/workspace/pnpm-lock.yaml:cached - - ../.development:/workspace/.development:cached - - # Environment file - - ./packages/website/.env:/workspace/packages/website/.env:cached - - # Runtime files - isolated in Docker volumes (NOT on host) - - website_node_modules:/workspace/node_modules - - metadata_build:/workspace/packages/metadata/build - - pnpm_store:/root/.local/share/pnpm/store + # Source code only - bind-mounted for live editing + # node_modules and metadata/build stay inside the image (installed at build time) + - ../packages/dashboard/src:/workspace/packages/dashboard/src:cached + - ../packages/dashboard/public:/workspace/packages/dashboard/public:cached + - ../packages/dashboard/vite.config.ts:/workspace/packages/dashboard/vite.config.ts:cached + - ../packages/dashboard/tsconfig.json:/workspace/packages/dashboard/tsconfig.json:cached + - ../packages/dashboard/panda.config.ts:/workspace/packages/dashboard/panda.config.ts:cached + # Shared UI package for live editing + - ../packages/ui/src:/workspace/packages/ui/src:cached + - ../packages/ui/tsconfig.json:/workspace/packages/ui/tsconfig.json:cached + - ../packages/ui/panda.config.ts:/workspace/packages/ui/panda.config.ts:cached # ============================================================================== # Named Volumes (Runtime data isolated from host) @@ -168,8 +139,6 @@ services: volumes: # Application runtime dependencies - isolated per service api_node_modules: - dashboard_node_modules: - website_node_modules: # Shared build output - metadata package used by multiple services metadata_build: diff --git a/.development/packages/api/build.sh b/.development/packages/api/build.sh new file mode 100644 index 0000000..a650e3d --- /dev/null +++ b/.development/packages/api/build.sh @@ -0,0 +1,10 @@ +#!/bin/bash +# ============================================================================== +# Build Metadata Package +# ============================================================================== +# Builds the metadata package which is required by API and tools +# ============================================================================== +set -e + +echo "🔨 Building @arrhes/application-metadata..." +pnpm --filter="@arrhes/application-metadata" build diff --git a/.development/packages/api/entrypoint.sh b/.development/packages/api/entrypoint.sh index 53af912..055f0f1 100644 --- a/.development/packages/api/entrypoint.sh +++ b/.development/packages/api/entrypoint.sh @@ -2,54 +2,22 @@ # ============================================================================== # API Service Entrypoint # ============================================================================== -# Runs on container startup to: -# 1. Install workspace dependencies -# 2. Build metadata package (required by API and tools) -# 3. Run database migrations -# 4. Seed demo data -# 5. Start API dev server +# Runs on container startup to initialize and start the API service +# Calls individual scripts for each task # ============================================================================== set -e +SCRIPT_DIR="/workspace/.development/packages/api" + # Fix permissions for bind-mounted workspace -# The workspace is bind-mounted from the host, so we need to ensure the node user can write to it echo "🔧 Fixing workspace permissions..." chown -R node:node /workspace -# Switch to node user for the rest of the script -echo "📦 Installing workspace dependencies..." -su node -c "CI=true pnpm install" - -echo "🔨 Building @arrhes/application-metadata..." -su node -c "pnpm --filter='@arrhes/application-metadata' build" - -echo "🗄️ Checking database..." -# Check if tables already exist -if PGPASSWORD=admin /usr/bin/psql -h postgres -U postgres -d default -c '\dt' 2>/dev/null | grep -q table_user; then - echo "Database tables already exist, skipping migration" -else - echo "Running database migrations..." - # Use expect to handle interactive prompts - select first option (no truncate) - su node -c "cd /workspace/packages/tools && expect -c ' - set timeout 60 - spawn pnpm run push - expect { - \"No, add the constraint without truncating the table\" { - send \"\r\" - exp_continue - } - \"No, abort\" { - send \"\r\" - exp_continue - } - eof - } - ' || true" -fi - -echo "🌱 Seeding demo data..." -su node -c "cd /workspace/packages/tools && pnpm run seed || echo 'Seeding skipped (data may already exist)'" +# Run all setup tasks as node user +su node -c "CI=true $SCRIPT_DIR/install.sh" +su node -c "$SCRIPT_DIR/build.sh" +su node -c "$SCRIPT_DIR/migrate.sh" +su node -c "$SCRIPT_DIR/seed.sh" -echo "🚀 Starting API dev server..." -cd /workspace/packages/api -exec su node -c "pnpm --filter='@arrhes/application-api' dev" +# Start the API server (exec replaces shell process) +exec su node -c "$SCRIPT_DIR/start.sh" diff --git a/.development/packages/api/install.sh b/.development/packages/api/install.sh new file mode 100644 index 0000000..241a3dc --- /dev/null +++ b/.development/packages/api/install.sh @@ -0,0 +1,10 @@ +#!/bin/bash +# ============================================================================== +# Install Dependencies +# ============================================================================== +# Installs all workspace dependencies using PNPM +# ============================================================================== +set -e + +echo "📦 Installing workspace dependencies..." +pnpm install diff --git a/.development/packages/api/migrate.sh b/.development/packages/api/migrate.sh new file mode 100644 index 0000000..23df81e --- /dev/null +++ b/.development/packages/api/migrate.sh @@ -0,0 +1,35 @@ +#!/bin/bash +# ============================================================================== +# Database Migration +# ============================================================================== +# Runs database migrations using Drizzle +# Checks if tables exist before running to avoid unnecessary migrations +# ============================================================================== +set -e + +echo "🗄️ Checking database..." + +# Check if tables already exist +if PGPASSWORD=admin psql -h postgres -U postgres -d default -c '\dt' 2>/dev/null | grep -q table_user; then + echo "✓ Database tables already exist, skipping migration" +else + echo "Running database migrations..." + cd /workspace/packages/tools + # Use expect to handle interactive prompts - select first option (no truncate) + expect -c ' + set timeout 60 + spawn pnpm run push + expect { + "No, add the constraint without truncating the table" { + send "\r" + exp_continue + } + "No, abort" { + send "\r" + exp_continue + } + eof + } + ' || true + echo "✓ Database migrations complete" +fi diff --git a/.development/packages/api/seed.sh b/.development/packages/api/seed.sh new file mode 100644 index 0000000..aa19bdf --- /dev/null +++ b/.development/packages/api/seed.sh @@ -0,0 +1,12 @@ +#!/bin/bash +# ============================================================================== +# Seed Demo Data +# ============================================================================== +# Seeds the database with demo data for development +# ============================================================================== +set -e + +echo "🌱 Seeding demo data..." +cd /workspace/packages/tools +pnpm run seed || echo "Seeding skipped (data may already exist)" +echo "✓ Seeding complete" diff --git a/.development/packages/api/start.sh b/.development/packages/api/start.sh new file mode 100644 index 0000000..198d320 --- /dev/null +++ b/.development/packages/api/start.sh @@ -0,0 +1,11 @@ +#!/bin/bash +# ============================================================================== +# Start API Server +# ============================================================================== +# Starts the API development server with hot reload +# ============================================================================== +set -e + +echo "🚀 Starting API dev server..." +cd /workspace/packages/api +exec pnpm --filter="@arrhes/application-api" dev diff --git a/.development/packages/dashboard/.env b/.development/packages/dashboard/.env index afaa26d..3e58450 100644 --- a/.development/packages/dashboard/.env +++ b/.development/packages/dashboard/.env @@ -1,3 +1,4 @@ +VITE_ENV="development" VITE_API_BASE_URL=http://localhost:3000 VITE_DASHBOARD_BASE_URL=http://localhost:5173 VITE_WEBSITE_BASE_URL=http://localhost:5174 diff --git a/.development/packages/dashboard/Dockerfile b/.development/packages/dashboard/Dockerfile index a36a7be..70531ce 100644 --- a/.development/packages/dashboard/Dockerfile +++ b/.development/packages/dashboard/Dockerfile @@ -1,8 +1,10 @@ # ============================================================================== -# Dashboard Service Dockerfile +# Dashboard Development Dockerfile # ============================================================================== -# Creates a Node.js container with PNPM for running the dashboard service -# Source code is bind-mounted from host, dependencies installed at runtime +# Self-contained development image for the dashboard service. +# - Dependencies installed at build time (node_modules inside image) +# - Source code bind-mounted at runtime for live editing +# - No entrypoint script needed - just run `docker compose up` # ============================================================================== ARG NODE_VERSION="25.2.1" @@ -10,14 +12,39 @@ ARG PNPM_VERSION="10.26.1" FROM node:${NODE_VERSION}-bullseye-slim -# Install PNPM package manager +ARG PNPM_VERSION + +# Install PNPM RUN npm install -g "pnpm@${PNPM_VERSION}" && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* -# Set working directory WORKDIR /workspace -# Start via entrypoint script (bind-mounted at runtime) -# NOTE: We don't switch to node user here - entrypoint will handle permissions -ENTRYPOINT ["/bin/bash", "/workspace/.development/packages/dashboard/entrypoint.sh"] +# Copy package manifests for dependency installation +COPY package.json pnpm-workspace.yaml pnpm-lock.yaml ./ + +COPY packages/metadata ./packages/metadata +COPY packages/ui ./packages/ui +COPY packages/dashboard ./packages/dashboard + +# Install all dependencies (hoisted to workspace root) +RUN pnpm install + + +# Copy metadata source and build it (dashboard depends on it) +RUN pnpm --filter="@arrhes/application-metadata" build + +RUN pnpm --filter="@arrhes/dashboard" run prepare + +# RUN pnpm --filter="@arrhes/ui" build + +# Copy environment file for Vite +COPY .development/packages/dashboard/.env ./packages/dashboard/.env + +# Set working directory to dashboard package +WORKDIR /workspace/packages/dashboard + +# Run Vite dev server +# Source files will be bind-mounted at runtime, overriding the copied files +CMD ["pnpm", "dev", "--", "--host", "0.0.0.0"] diff --git a/.development/packages/dashboard/entrypoint.sh b/.development/packages/dashboard/entrypoint.sh deleted file mode 100644 index f73adae..0000000 --- a/.development/packages/dashboard/entrypoint.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/bash -# ============================================================================== -# Dashboard Service Entrypoint -# ============================================================================== -# Runs on container startup to: -# 1. Install workspace dependencies -# 2. Build metadata package (required by dashboard) -# 3. Start Vite dev server with HMR -# ============================================================================== -set -e - -# Fix permissions for bind-mounted workspace -echo "🔧 Fixing workspace permissions..." -chown -R node:node /workspace - -echo "📦 Installing workspace dependencies..." -su node -c "CI=true pnpm install" - -echo "🔨 Building @arrhes/application-metadata..." -su node -c "pnpm --filter='@arrhes/application-metadata' build" - -echo "🚀 Starting dashboard dev server..." -cd /workspace/packages/dashboard -exec su node -c "pnpm --filter='@arrhes/application-dashboard' dev -- --host 0.0.0.0" diff --git a/.development/packages/website/Dockerfile b/.development/packages/website/Dockerfile index 45cfbf9..924f3af 100644 --- a/.development/packages/website/Dockerfile +++ b/.development/packages/website/Dockerfile @@ -1,8 +1,10 @@ # ============================================================================== -# Website Service Dockerfile +# Website Development Dockerfile # ============================================================================== -# Creates a Node.js container with PNPM for running the website service -# Source code is bind-mounted from host, dependencies installed at runtime +# Self-contained development image for the website service. +# - Dependencies installed at build time (node_modules inside image) +# - Source code bind-mounted at runtime for live editing +# - No entrypoint script needed - just run `docker compose up` # ============================================================================== ARG NODE_VERSION="25.2.1" @@ -10,14 +12,33 @@ ARG PNPM_VERSION="10.26.1" FROM node:${NODE_VERSION}-bullseye-slim -# Install PNPM package manager +ARG PNPM_VERSION + +# Install PNPM RUN npm install -g "pnpm@${PNPM_VERSION}" && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* -# Set working directory WORKDIR /workspace -# Start via entrypoint script (bind-mounted at runtime) -# NOTE: We don't switch to node user here - entrypoint will handle permissions -ENTRYPOINT ["/bin/bash", "/workspace/.development/packages/website/entrypoint.sh"] +# Copy package manifests for dependency installation +COPY package.json pnpm-workspace.yaml pnpm-lock.yaml ./ + +COPY packages/ui ./packages/ui +COPY packages/website ./packages/website + +# Install all dependencies (hoisted to workspace root) +RUN pnpm install + +# Generate PandaCSS styles (styled-system directory) +RUN pnpm --filter="@arrhes/website" run prepare + +# Copy environment file for Vite +COPY .development/packages/website/.env ./packages/website/.env + +# Set working directory to website package +WORKDIR /workspace/packages/website + +# Run Vite dev server +# Source files will be bind-mounted at runtime, overriding the copied files +CMD ["pnpm", "dev", "--", "--host", "0.0.0.0"] diff --git a/.development/packages/website/entrypoint.sh b/.development/packages/website/entrypoint.sh deleted file mode 100644 index fc9268c..0000000 --- a/.development/packages/website/entrypoint.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash -# ============================================================================== -# Website Service Entrypoint -# ============================================================================== -# Runs on container startup to: -# 1. Install workspace dependencies -# 2. Start Vite dev server with HMR -# ============================================================================== -set -e - -# Fix permissions for bind-mounted workspace -echo "🔧 Fixing workspace permissions..." -chown -R node:node /workspace - -echo "📦 Installing workspace dependencies..." -su node -c "CI=true pnpm install" - -echo "🚀 Starting website dev server..." -cd /workspace/packages/website -exec su node -c "pnpm --filter='@arrhes/application-website' dev -- --host 0.0.0.0" diff --git a/.gitignore b/.gitignore index bd9d38a..532c479 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,5 @@ pnpm-lock.yaml .pnpm-store *.tsbuildinfo + +styled-system \ No newline at end of file diff --git a/.production/.gitignore b/.production/.gitignore new file mode 100644 index 0000000..244ed9f --- /dev/null +++ b/.production/.gitignore @@ -0,0 +1,17 @@ +# ============================================================================== +# .gitignore - Keep only source files in Git +# ============================================================================== +# This configuration ensures only configuration files are tracked. +# Runtime files and generated content stay in Docker volumes. +# ============================================================================== + +# Ignore all files by default +!* + +# Track only these specific patterns: +# - .env files (development environment variables) +# - Dockerfiles (service image definitions) +# - entrypoint.sh scripts (container startup scripts) +# - compose.yml (docker compose configuration) +# - .dockerignore (build context exclusions) +# - .gitignore (this file) diff --git a/.production/compose.yml b/.production/compose.yml new file mode 100644 index 0000000..e69de29 diff --git a/packages/api/.docker/.dockerignore b/.production/packages/api/.dockerignore similarity index 100% rename from packages/api/.docker/.dockerignore rename to .production/packages/api/.dockerignore diff --git a/.production/packages/api/.env b/.production/packages/api/.env new file mode 100644 index 0000000..0953a27 --- /dev/null +++ b/.production/packages/api/.env @@ -0,0 +1,28 @@ +# Environment +ENV=development +VERBOSE=true +PORT=3000 + +# CORS and Cookies +CORS_ORIGIN=http://localhost:5173 +COOKIES_DOMAIN=localhost +COOKIES_KEY=development-secret-key-change-in-production-min-32-chars + +# URLs +API_BASE_URL=http://localhost:3000 +PLATFORM_BASE_URL=http://localhost:5173 +WEBSITE_BASE_URL=http://localhost:5174 + +# Database (Docker Compose service names) +SQL_DATABASE_URL=postgres://postgres:admin@postgres:5432/default + +# Storage (RustFS service) +STORAGE_ENDPOINT=http://rustfs:9000 +STORAGE_BUCKET_NAME=arrhes-files +STORAGE_ACCESS_KEY=rustfsadmin +STORAGE_SECRET_KEY=rustfsadmin + +# Email (Mailpit) +EMAIL_ENDPOINT=mailpit:1025 +EMAIL_USER=test +EMAIL_PASSWORD=test diff --git a/packages/api/.docker/Dockerfile b/.production/packages/api/Dockerfile similarity index 100% rename from packages/api/.docker/Dockerfile rename to .production/packages/api/Dockerfile diff --git a/packages/dashboard/.docker/.dockerignore b/.production/packages/dashboard/.dockerignore similarity index 100% rename from packages/dashboard/.docker/.dockerignore rename to .production/packages/dashboard/.dockerignore diff --git a/.production/packages/dashboard/.env b/.production/packages/dashboard/.env new file mode 100644 index 0000000..2854814 --- /dev/null +++ b/.production/packages/dashboard/.env @@ -0,0 +1,5 @@ +NODE_ENV="development" +VITE_ENV="development" +VITE_PUBLIC_API_URL="http://localhost:3100" +VITE_PUBLIC_PLATFORM_URL="http://localhost:3101" +VITE_PUBLIC_WEBSITE_URL="http://localhost:3102" diff --git a/packages/dashboard/.docker/Dockerfile b/.production/packages/dashboard/Dockerfile similarity index 100% rename from packages/dashboard/.docker/Dockerfile rename to .production/packages/dashboard/Dockerfile diff --git a/packages/dashboard/.docker/nginx/default.conf b/.production/packages/dashboard/nginx/default.conf similarity index 100% rename from packages/dashboard/.docker/nginx/default.conf rename to .production/packages/dashboard/nginx/default.conf diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index fb066a8..1832dc8 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -137,7 +137,7 @@ api/src/ - **TanStack Table** : Tableaux de données performants - **TanStack Virtual** : Virtualisation pour grandes listes - **Radix UI** : Composants accessibles headless -- **Tailwind CSS** : Framework CSS utility-first +- **Panda CSS** : Framework CSS utility-first - **React Hook Form** : Gestion de formulaires - **Valibot** : Validation côté client - **Vite** : Build tool et dev server @@ -333,7 +333,7 @@ tools/src/ | Tables | TanStack Table 8.21 | Data tables | | Virtual | TanStack Virtual 3.13 | Virtualisation listes | | UI | Radix UI | Composants accessibles | -| Styling | Tailwind CSS 4.1 | CSS utility-first | +| Styling | Panda CSS | CSS utility-first | | Forms | React Hook Form 7.63 | Gestion de formulaires | | Validation | Valibot 1.1 | Validation client-side | | Icons | Tabler Icons 3.35 | Icônes | diff --git a/docs/BUSINESS_MODEL.md b/docs/BUSINESS_MODEL.md new file mode 100644 index 0000000..ddc30df --- /dev/null +++ b/docs/BUSINESS_MODEL.md @@ -0,0 +1,101 @@ +# Business Model Strategy + +This document outlines the business model strategy for Arrhes, an open-source double-entry accounting application for French associations and SMEs. + +## Goals + +- Maximum adoption among indie hackers, solofounders, and community growth +- Sustainable revenue from businesses (and accountants later) +- AI agent as core differentiator + +## Model: Open-Core SaaS with Community Focus + +### Tier Structure + +| Tier | Price | Target | Features | +|------|-------|--------|----------| +| **Self-hosted** | Free forever | Developers, tech-savvy users | Full core app, deploy yourself | +| **Cloud Free** | 0 EUR/month | Micro-associations, testing | 1 org, 1 user, 100 ecritures/month, no agent | +| **Cloud Pro** | 9-15 EUR/month | Associations, solopreneurs | Unlimited ecritures, 3 users, basic agent features | +| **Cloud Business** | 29-49 EUR/month | SMEs, accountants | Unlimited users, full AI agent, priority support, API access | + +### Free Features (Open-Source Core) + +- Full double-entry accounting +- All journals, accounts, records +- Balance sheet & income statement +- Document/attachment management +- Multi-organization support +- Self-hosting with Docker + +### Paid Features (Premium/Agent) + +**AI Agent (core differentiator):** +- Auto-categorization of transactions +- Anomaly detection +- Natural language queries +- Automated reconciliation suggestions +- FEC generation assistance + +**Cloud conveniences:** +- Automatic backups +- SSL/security managed +- No maintenance burden + +**Business features:** +- Advanced exports (FEC, Excel, custom PDF reports) +- Bank synchronization (future) +- Multi-user with granular permissions +- API access for integrations + +## Community Growth Strategy + +1. **Make self-hosting simple** + - One-click deploy buttons (Railway, Render, Coolify, Dokploy) + - Docker Compose setup + - Clear documentation + +2. **Developer-first marketing** + - Hacker News, Reddit (r/selfhosted, r/SideProject, r/France) + - Indie Hackers community + - Product Hunt launch + - French tech communities + +3. **Open development** + - Public roadmap (GitHub Projects) + - Transparent changelog + - Accept contributions + +4. **Content marketing** + - Blog posts on French accounting + - Self-hosting tutorials + - Comparison guides + +## Revenue Streams + +| Stream | Priority | Notes | +|--------|----------|-------| +| Cloud subscriptions | Primary | Recurring, predictable | +| AI agent add-on | High | Differentiator, high perceived value | +| Annual plans | Medium | Cash flow + retention | +| Accountant partnerships | Later | Volume deals, requires sales effort | + +**Initial target:** 100 paying customers at 15 EUR/mo avg = 1,500 EUR/mo MRR + +## Competitive Positioning + +| Competitor | Their Position | Arrhes Advantage | +|------------|----------------|------------------| +| Dolibarr | ERP, complex, old UI | Modern UX, accounting-focused | +| OpenConcerto | Desktop-first | Cloud-native, modern stack | +| Pennylane | VC-funded, expensive | Open-source, self-hostable, affordable | +| Tiime | Free but limited | More control, no lock-in | + +**Positioning statement:** *"The open-source accounting tool for French associations and small businesses, with an AI assistant that actually understands your books."* + +## Open Questions + +- **Pricing model:** Per-organization vs per-user vs usage-based? +- **Agent positioning:** Separate add-on or bundled into higher tiers? +- **Free tier limits:** Balance between adoption and conversion +- **Launch timing:** Core product first, or wait for agent to differentiate? diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index c689994..3dc64a5 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -274,7 +274,7 @@ export function MyComponent({ title, description, onClose }: MyComponentProps) { } ``` -**Éviter les inline styles** (utiliser Tailwind CSS) +**Éviter les inline styles** (utiliser Panda CSS) ```typescript // ✅ Bon
diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md index 31ad434..69431da 100644 --- a/docs/DEVELOPMENT.md +++ b/docs/DEVELOPMENT.md @@ -947,7 +947,7 @@ pnpm dlx drizzle-kit studio --config=packages/tools/drizzle.config.ts - **TanStack Router** : https://tanstack.com/router/ - **TanStack Query** : https://tanstack.com/query/ - **Radix UI** : https://www.radix-ui.com/ -- **Tailwind CSS** : https://tailwindcss.com/ +- **Panda CSS** : https://panda-css.com/ --- diff --git a/justfile b/justfile index b32317b..a0d9394 100644 --- a/justfile +++ b/justfile @@ -7,7 +7,36 @@ dev cmd: dev-up: docker compose --project-directory=".development" --file="{{COMPOSE_FILE}}" --project-name="{{PROJECT}}" up -d --build + @echo "" + @echo "==============================================" + @echo " Arrhes Development Environment Started" + @echo "==============================================" + @echo "" + @echo " Services:" + @echo " Dashboard: http://localhost:5173" + @echo " API: http://localhost:3000" + @echo " Website: http://localhost:5174" + @echo "" + @echo " Infrastructure:" + @echo " PostgreSQL: localhost:5432" + @echo " Mailpit: http://localhost:8025" + @echo " RustFS: http://localhost:9001" + @echo "" + @echo " Demo Credentials:" + @echo " Email: demo@arrhes.com" + @echo " Password: demo" + @echo "" + @echo " Logs: docker compose -f {{COMPOSE_FILE}} logs -f" + @echo "==============================================" dev-down: docker ps -a --filter="name=arrhes-" -q | xargs -r docker rm -f docker compose --project-directory=".development" --file="{{COMPOSE_FILE}}" --project-name="{{PROJECT}}" down + +dev-reset: + @echo "Resetting database (clearing and reseeding)..." + docker compose --project-directory=".development" --file="{{COMPOSE_FILE}}" --project-name="{{PROJECT}}" exec api sh -c "cd /workspace/packages/tools && pnpm run reset" + @echo "Database reset complete." + +dev-logs: + docker compose --project-directory=".development" --file="{{COMPOSE_FILE}}" --project-name="{{PROJECT}}" logs -f diff --git a/packages/api/src/api.ts b/packages/api/src/api.ts index c3788f3..3996fc7 100644 --- a/packages/api/src/api.ts +++ b/packages/api/src/api.ts @@ -1,10 +1,10 @@ -import { apiFactory } from "#/factories/apiFactory.js" -import { routes } from "#/routes/routes.js" -import { apiLog } from "#/utilities/apiLog.js" -import { Exception } from "#/utilities/exception.js" -import { getClients } from "#/utilities/getClients.js" -import { getEnv } from "#/utilities/getEnv.js" -import { response } from "#/utilities/response.js" +import { apiFactory } from "./factories/apiFactory.js" +import { routes } from "./routes/routes.js" +import { apiLog } from "./utilities/apiLog.js" +import { Exception } from "./utilities/exception.js" +import { getClients } from "./utilities/getClients.js" +import { getEnv } from "./utilities/getEnv.js" +import { response } from "./utilities/response.js" import { cors } from "hono/cors" import { logger } from "hono/logger" import pg from "postgres" diff --git a/packages/api/src/clients/emailClient.ts b/packages/api/src/clients/emailClient.ts index a9023a4..0d040da 100644 --- a/packages/api/src/clients/emailClient.ts +++ b/packages/api/src/clients/emailClient.ts @@ -1,31 +1,31 @@ -import { Exception } from "#/utilities/exception.js" -import { getEnv } from "#/utilities/getEnv.js" -import { createTransport } from "nodemailer" - - -export function emailClient(env: ReturnType) { - try { - const smtpClient = createTransport({ - host: env.EMAIL_ENDPOINT, - port: 465, - secure: true, - auth: { - user: env.EMAIL_USER, - pass: env.EMAIL_PASSWORD - } - }, - { - from: "Arrhes " - } - ) - - return smtpClient - } - catch (error) { - throw new Exception({ - statusCode: 500, - internalMessage: "SQL client not available", - rawError: error, - }) - } +import { Exception } from "../utilities/exception.js" +import { getEnv } from "../utilities/getEnv.js" +import { createTransport } from "nodemailer" + + +export function emailClient(env: ReturnType) { + try { + const smtpClient = createTransport({ + host: env.EMAIL_ENDPOINT, + port: 465, + secure: true, + auth: { + user: env.EMAIL_USER, + pass: env.EMAIL_PASSWORD + } + }, + { + from: "Arrhes " + } + ) + + return smtpClient + } + catch (error) { + throw new Exception({ + statusCode: 500, + internalMessage: "SQL client not available", + rawError: error, + }) + } } \ No newline at end of file diff --git a/packages/api/src/clients/sqlClient.ts b/packages/api/src/clients/sqlClient.ts index d2d83ba..b8cc753 100644 --- a/packages/api/src/clients/sqlClient.ts +++ b/packages/api/src/clients/sqlClient.ts @@ -1,21 +1,21 @@ -import { Exception } from "#/utilities/exception.js" -import { getEnv } from "#/utilities/getEnv.js" -import { modelSchemas } from "@arrhes/application-metadata/models" -import { drizzle } from 'drizzle-orm/postgres-js' -import postgres from "postgres" - - -export function sqlClient(env: ReturnType) { - try { - const queryClient = postgres(env.SQL_DATABASE_URL) - const db = drizzle(queryClient, { schema: modelSchemas }) - return db - } - catch (error) { - throw new Exception({ - statusCode: 500, - internalMessage: "SQL client not available", - rawError: error, - }) - } +import { Exception } from "../utilities/exception.js" +import { getEnv } from "../utilities/getEnv.js" +import { modelSchemas } from "@arrhes/application-metadata/models" +import { drizzle } from 'drizzle-orm/postgres-js' +import postgres from "postgres" + + +export function sqlClient(env: ReturnType) { + try { + const queryClient = postgres(env.SQL_DATABASE_URL) + const db = drizzle(queryClient, { schema: modelSchemas }) + return db + } + catch (error) { + throw new Exception({ + statusCode: 500, + internalMessage: "SQL client not available", + rawError: error, + }) + } } \ No newline at end of file diff --git a/packages/api/src/clients/storageClient.ts b/packages/api/src/clients/storageClient.ts index 7769f0f..d25a234 100644 --- a/packages/api/src/clients/storageClient.ts +++ b/packages/api/src/clients/storageClient.ts @@ -1,25 +1,25 @@ -import { Exception } from "#/utilities/exception.js" -import { getEnv } from "#/utilities/getEnv.js" -import { S3 } from "@aws-sdk/client-s3" - - -export function storageClient(env: ReturnType) { - try { - const storageClient = new S3({ - endpoint: env.STORAGE_ENDPOINT, - credentials: { - accessKeyId: env.STORAGE_ACCESS_KEY, - secretAccessKey: env.STORAGE_SECRET_KEY, - }, - region: "fr-par" - }) - return storageClient - } - catch (error) { - throw new Exception({ - statusCode: 500, - internalMessage: "Storage client not available", - rawError: error, - }) - } +import { Exception } from "../utilities/exception.js" +import { getEnv } from "../utilities/getEnv.js" +import { S3 } from "@aws-sdk/client-s3" + + +export function storageClient(env: ReturnType) { + try { + const storageClient = new S3({ + endpoint: env.STORAGE_ENDPOINT, + credentials: { + accessKeyId: env.STORAGE_ACCESS_KEY, + secretAccessKey: env.STORAGE_SECRET_KEY, + }, + region: "fr-par" + }) + return storageClient + } + catch (error) { + throw new Exception({ + statusCode: 500, + internalMessage: "Storage client not available", + rawError: error, + }) + } } \ No newline at end of file diff --git a/packages/api/src/factories/apiFactory.ts b/packages/api/src/factories/apiFactory.ts index 4f50559..593353e 100644 --- a/packages/api/src/factories/apiFactory.ts +++ b/packages/api/src/factories/apiFactory.ts @@ -1,5 +1,5 @@ -import { getClients } from "#/utilities/getClients.js" -import { getEnv } from "#/utilities/getEnv.js" +import { getClients } from "../utilities/getClients.js" +import { getEnv } from "../utilities/getEnv.js" import { Env } from "hono" import { createFactory } from "hono/factory" diff --git a/packages/api/src/factories/authFactory.ts b/packages/api/src/factories/authFactory.ts index cd394fb..7302a34 100644 --- a/packages/api/src/factories/authFactory.ts +++ b/packages/api/src/factories/authFactory.ts @@ -1,4 +1,4 @@ -import { ApiEnv } from "#/factories/apiFactory.js" +import { ApiEnv } from "../factories/apiFactory.js" import { models } from "@arrhes/application-metadata/models" import { createFactory } from "hono/factory" diff --git a/packages/api/src/factories/publicFactory.ts b/packages/api/src/factories/publicFactory.ts index fd35d44..0a6f14c 100644 --- a/packages/api/src/factories/publicFactory.ts +++ b/packages/api/src/factories/publicFactory.ts @@ -1,4 +1,4 @@ -import { ApiEnv } from "#/factories/apiFactory.js" +import { ApiEnv } from "../factories/apiFactory.js" import { createFactory } from "hono/factory" diff --git a/packages/api/src/middlewares/authMiddleware.ts b/packages/api/src/middlewares/authMiddleware.ts index 4f748a9..74fcb3c 100644 --- a/packages/api/src/middlewares/authMiddleware.ts +++ b/packages/api/src/middlewares/authMiddleware.ts @@ -1,93 +1,93 @@ -import { AuthEnv } from "#/factories/authFactory.js" -import { parseCookies } from "#/utilities/cookies/parseCookies.js" -import { unsignString } from "#/utilities/cookies/unsignString.js" -import { Exception } from "#/utilities/exception.js" -import { selectOne } from "#/utilities/sql/selectOne.js" -import { cookiePrefix } from "#/utilities/variables.js" -import { models } from "@arrhes/application-metadata/models" -import { eq } from "drizzle-orm" -import { createMiddleware } from "hono/factory" - - -export const authMiddleware = createMiddleware(async (c, next) => { - try { - const cookies = parseCookies({ value: c.req.header("Cookie") }) - const idUserSession = unsignString({ - signedValue: cookies[`${cookiePrefix}_${"id_user_session"}`], - secret: c.var.env.COOKIES_KEY, - }) - - if (idUserSession === undefined) { - throw new Exception({ - internalMessage: "Auth error", - cause: "id_user_session not found in signed cookie", - }) - } - - const userSession = await selectOne({ - database: c.var.clients.sql, - table: models.userSession, - where: (table) => ( - eq(table.id, idUserSession) - ) - }) - if (userSession.isActive === false) { - throw new Exception({ - internalMessage: "Auth error", - cause: "userSession.isActive is false" - }) - } - c.set("userSession", userSession) - - - const user = await selectOne({ - database: c.var.clients.sql, - table: models.user, - where: (table) => ( - eq(table.id, userSession.idUser) - ) - }) - c.set("user", user) - - await next() - } - catch (error: unknown) { - - // c.res.headers.append( - // "Set-Cookie", - // serializeCookie({ - // name: `${cookiePrefix}_${"id_user_session"}`, - // value: "", - // options: { - // maxAge: userSessionCookieMaxAge, - // httpOnly: true, - // secure: true, - // sameSite: "None", - // domain: c.var.env.COOKIES_DOMAIN, - // path: "/", - // } - // }) - // ) - // c.res.headers.append( - // "Set-Cookie", - // serializeCookie({ - // name: `${cookiePrefix}_${"is_auth"}`, - // value: String(false), - // options: { - // maxAge: userSessionCookieMaxAge, - // httpOnly: false, - // secure: true, - // sameSite: "None", - // domain: c.var.env.COOKIES_DOMAIN, - // path: "/", - // } - // }) - // ) - - throw new Exception({ - statusCode: 401, - internalMessage: "Auth error", - rawError: error, - }) - } -}) +import { AuthEnv } from "../factories/authFactory.js" +import { parseCookies } from "../utilities/cookies/parseCookies.js" +import { unsignString } from "../utilities/cookies/unsignString.js" +import { Exception } from "../utilities/exception.js" +import { selectOne } from "../utilities/sql/selectOne.js" +import { cookiePrefix } from "../utilities/variables.js" +import { models } from "@arrhes/application-metadata/models" +import { eq } from "drizzle-orm" +import { createMiddleware } from "hono/factory" + + +export const authMiddleware = createMiddleware(async (c, next) => { + try { + const cookies = parseCookies({ value: c.req.header("Cookie") }) + const idUserSession = unsignString({ + signedValue: cookies[`${cookiePrefix}_${"id_user_session"}`], + secret: c.var.env.COOKIES_KEY, + }) + + if (idUserSession === undefined) { + throw new Exception({ + internalMessage: "Auth error", + cause: "id_user_session not found in signed cookie", + }) + } + + const userSession = await selectOne({ + database: c.var.clients.sql, + table: models.userSession, + where: (table) => ( + eq(table.id, idUserSession) + ) + }) + if (userSession.isActive === false) { + throw new Exception({ + internalMessage: "Auth error", + cause: "userSession.isActive is false" + }) + } + c.set("userSession", userSession) + + + const user = await selectOne({ + database: c.var.clients.sql, + table: models.user, + where: (table) => ( + eq(table.id, userSession.idUser) + ) + }) + c.set("user", user) + + await next() + } + catch (error: unknown) { + + // c.res.headers.append( + // "Set-Cookie", + // serializeCookie({ + // name: `${cookiePrefix}_${"id_user_session"}`, + // value: "", + // options: { + // maxAge: userSessionCookieMaxAge, + // httpOnly: true, + // secure: true, + // sameSite: "None", + // domain: c.var.env.COOKIES_DOMAIN, + // path: "/", + // } + // }) + // ) + // c.res.headers.append( + // "Set-Cookie", + // serializeCookie({ + // name: `${cookiePrefix}_${"is_auth"}`, + // value: String(false), + // options: { + // maxAge: userSessionCookieMaxAge, + // httpOnly: false, + // secure: true, + // sameSite: "None", + // domain: c.var.env.COOKIES_DOMAIN, + // path: "/", + // } + // }) + // ) + + throw new Exception({ + statusCode: 401, + internalMessage: "Auth error", + rawError: error, + }) + } +}) diff --git a/packages/api/src/middlewares/publicMiddleware.ts b/packages/api/src/middlewares/publicMiddleware.ts index 19b5ad8..8b5af9a 100644 --- a/packages/api/src/middlewares/publicMiddleware.ts +++ b/packages/api/src/middlewares/publicMiddleware.ts @@ -1,6 +1,6 @@ -import { publicFactory } from "#/factories/publicFactory.js" - - -export const publicMiddleware = publicFactory.createMiddleware(async (c, next) => { - await next() +import { publicFactory } from "../factories/publicFactory.js" + + +export const publicMiddleware = publicFactory.createMiddleware(async (c, next) => { + await next() }) \ No newline at end of file diff --git a/packages/api/src/middlewares/userVerificationMiddleware.ts b/packages/api/src/middlewares/userVerificationMiddleware.ts index 5c926c2..b211872 100644 --- a/packages/api/src/middlewares/userVerificationMiddleware.ts +++ b/packages/api/src/middlewares/userVerificationMiddleware.ts @@ -1,16 +1,16 @@ -import { authFactory } from "#/factories/authFactory.js" - - -export const userVerificationMiddleware = authFactory.createMiddleware(async (c, next) => { - - // if (c.var.userSession.isUserVerified === false) { - // throw new Exception({ - // statusCode: 403, - // errorCode: "USER_NOT_VERIFIED", - // message: "You must be verified", - // cause: "User is not verified" - // }) - // } - - await next() -}) +import { authFactory } from "../factories/authFactory.js" + + +export const userVerificationMiddleware = authFactory.createMiddleware(async (c, next) => { + + // if (c.var.userSession.isUserVerified === false) { + // throw new Exception({ + // statusCode: 403, + // errorCode: "USER_NOT_VERIFIED", + // message: "You must be verified", + // cause: "User is not verified" + // }) + // } + + await next() +}) diff --git a/packages/api/src/routes/auth/authRoute.ts b/packages/api/src/routes/auth/authRoute.ts index 7e3191b..a811098 100644 --- a/packages/api/src/routes/auth/authRoute.ts +++ b/packages/api/src/routes/auth/authRoute.ts @@ -1,21 +1,21 @@ -import { authFactory } from "#/factories/authFactory.js" -import { authMiddleware } from "#/middlewares/authMiddleware.js" -import { organizationsRoutes } from "#/routes/auth/organizations/organizationsRoutes.js" -import { settingsRoutes } from "#/routes/auth/settings/settingsRoutes.js" -import { supportRoutes } from "#/routes/auth/support/supportRoutes.js" -import { routePath } from "@arrhes/application-metadata/components" - - -export const authRoute = authFactory.createApp() - .use(`${routePath.auth}/*`, authMiddleware) - - -export const authRoutes = [ - ...organizationsRoutes, - ...settingsRoutes, - ...supportRoutes, -] - -for (const route of authRoutes) { - authRoute.route("/", route) +import { authFactory } from "../../factories/authFactory.js" +import { authMiddleware } from "../../middlewares/authMiddleware.js" +import { organizationsRoutes } from "../../routes/auth/organizations/organizationsRoutes.js" +import { settingsRoutes } from "../../routes/auth/settings/settingsRoutes.js" +import { supportRoutes } from "../../routes/auth/support/supportRoutes.js" +import { routePath } from "@arrhes/application-metadata/components" + + +export const authRoute = authFactory.createApp() + .use(`${routePath.auth}/*`, authMiddleware) + + +export const authRoutes = [ + ...organizationsRoutes, + ...settingsRoutes, + ...supportRoutes, +] + +for (const route of authRoutes) { + authRoute.route("/", route) } \ No newline at end of file diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/$idOrganizationRoutes.ts b/packages/api/src/routes/auth/organizations/$idOrganization/$idOrganizationRoutes.ts index 1699017..042232b 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/$idOrganizationRoutes.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/$idOrganizationRoutes.ts @@ -1,11 +1,11 @@ -import { organizationSettingsRoutes } from "#/routes/auth/organizations/$idOrganization/organizationSettings/organizationSettingsRoutes.js" -import { readOneOrganizationRoute } from "#/routes/auth/organizations/$idOrganization/readOneOrganization.js" -import { yearsRoutes } from "#/routes/auth/organizations/$idOrganization/years/yearsRoutes.js" - - -export const $idOrganizationRoutes = [ - readOneOrganizationRoute, - - ...organizationSettingsRoutes, - ...yearsRoutes, -] +import { organizationSettingsRoutes } from "../../../../routes/auth/organizations/$idOrganization/organizationSettings/organizationSettingsRoutes.js" +import { readOneOrganizationRoute } from "../../../../routes/auth/organizations/$idOrganization/readOneOrganization.js" +import { yearsRoutes } from "../../../../routes/auth/organizations/$idOrganization/years/yearsRoutes.js" + + +export const $idOrganizationRoutes = [ + readOneOrganizationRoute, + + ...organizationSettingsRoutes, + ...yearsRoutes, +] diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/general/deleteOneOrganization.ts b/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/general/deleteOneOrganization.ts index e293e32..b00d745 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/general/deleteOneOrganization.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/general/deleteOneOrganization.ts @@ -1,9 +1,9 @@ -import { authFactory } from "#/factories/authFactory.js" -import { Exception } from "#/utilities/exception.js" -import { response } from "#/utilities/response.js" -import { deleteOne } from "#/utilities/sql/deleteOne.js" -import { selectOne } from "#/utilities/sql/selectOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../factories/authFactory.js" +import { Exception } from "../../../../../../utilities/exception.js" +import { response } from "../../../../../../utilities/response.js" +import { deleteOne } from "../../../../../../utilities/sql/deleteOne.js" +import { selectOne } from "../../../../../../utilities/sql/selectOne.js" +import { bodyValidator } from "../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { deleteOneOrganizationRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/general/generalRoutes.ts b/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/general/generalRoutes.ts index c012c67..766d5a3 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/general/generalRoutes.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/general/generalRoutes.ts @@ -1,5 +1,5 @@ -import { deleteOneOrganizationRoute } from "#/routes/auth/organizations/$idOrganization/organizationSettings/general/deleteOneOrganization.js" -import { updateOneOrganizationRoute } from "#/routes/auth/organizations/$idOrganization/organizationSettings/general/updateOneOrganization.js" +import { deleteOneOrganizationRoute } from "../../../../../../routes/auth/organizations/$idOrganization/organizationSettings/general/deleteOneOrganization.js" +import { updateOneOrganizationRoute } from "../../../../../../routes/auth/organizations/$idOrganization/organizationSettings/general/updateOneOrganization.js" export const generalRoutes = [ diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/general/updateOneOrganization.ts b/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/general/updateOneOrganization.ts index 0b7f0a6..5941101 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/general/updateOneOrganization.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/general/updateOneOrganization.ts @@ -1,9 +1,9 @@ -import { authFactory } from "#/factories/authFactory.js" -import { Exception } from "#/utilities/exception.js" -import { response } from "#/utilities/response.js" -import { selectOne } from "#/utilities/sql/selectOne.js" -import { updateOne } from "#/utilities/sql/updateOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../factories/authFactory.js" +import { Exception } from "../../../../../../utilities/exception.js" +import { response } from "../../../../../../utilities/response.js" +import { selectOne } from "../../../../../../utilities/sql/selectOne.js" +import { updateOne } from "../../../../../../utilities/sql/updateOne.js" +import { bodyValidator } from "../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { updateOneOrganizationRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationSettingsRoutes.ts b/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationSettingsRoutes.ts index 710a2ee..561832d 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationSettingsRoutes.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationSettingsRoutes.ts @@ -1,5 +1,5 @@ -import { generalRoutes } from "#/routes/auth/organizations/$idOrganization/organizationSettings/general/generalRoutes.js" -import { organizationUsersRoutes } from "#/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/organizationUsersRoutes.js" +import { generalRoutes } from "../../../../../routes/auth/organizations/$idOrganization/organizationSettings/general/generalRoutes.js" +import { organizationUsersRoutes } from "../../../../../routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/organizationUsersRoutes.js" export const organizationSettingsRoutes = [ diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/$idOrganizationUser/$idOrganizationUserRoutes.ts b/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/$idOrganizationUser/$idOrganizationUserRoutes.ts index 457c565..c746427 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/$idOrganizationUser/$idOrganizationUserRoutes.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/$idOrganizationUser/$idOrganizationUserRoutes.ts @@ -1,6 +1,6 @@ -import { deleteOneOrganizationUserRoute } from "#/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/$idOrganizationUser/deleteOneOrganizationUser.js" -import { readOneOrganizationUserRoute } from "#/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/$idOrganizationUser/readOneOrganizationUser.js" -import { updateOneOrganizationUserRoute } from "#/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/$idOrganizationUser/updateOneOrganizationUser.js" +import { deleteOneOrganizationUserRoute } from "../../../../../../../routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/$idOrganizationUser/deleteOneOrganizationUser.js" +import { readOneOrganizationUserRoute } from "../../../../../../../routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/$idOrganizationUser/readOneOrganizationUser.js" +import { updateOneOrganizationUserRoute } from "../../../../../../../routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/$idOrganizationUser/updateOneOrganizationUser.js" export const $idOrganizationUserRoutes = [ diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/$idOrganizationUser/deleteOneOrganizationUser.ts b/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/$idOrganizationUser/deleteOneOrganizationUser.ts index 045a4da..76f4388 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/$idOrganizationUser/deleteOneOrganizationUser.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/$idOrganizationUser/deleteOneOrganizationUser.ts @@ -1,9 +1,9 @@ -import { authFactory } from "#/factories/authFactory.js" -import { Exception } from "#/utilities/exception.js" -import { response } from "#/utilities/response.js" -import { deleteOne } from "#/utilities/sql/deleteOne.js" -import { selectOne } from "#/utilities/sql/selectOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../factories/authFactory.js" +import { Exception } from "../../../../../../../utilities/exception.js" +import { response } from "../../../../../../../utilities/response.js" +import { deleteOne } from "../../../../../../../utilities/sql/deleteOne.js" +import { selectOne } from "../../../../../../../utilities/sql/selectOne.js" +import { bodyValidator } from "../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { deleteOneOrganizationUserRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/$idOrganizationUser/readOneOrganizationUser.ts b/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/$idOrganizationUser/readOneOrganizationUser.ts index c3be5e3..9d9b1ab 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/$idOrganizationUser/readOneOrganizationUser.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/$idOrganizationUser/readOneOrganizationUser.ts @@ -1,8 +1,8 @@ -import { authFactory } from "#/factories/authFactory.js" -import { Exception } from "#/utilities/exception.js" -import { response } from "#/utilities/response.js" -import { selectOne } from "#/utilities/sql/selectOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../factories/authFactory.js" +import { Exception } from "../../../../../../../utilities/exception.js" +import { response } from "../../../../../../../utilities/response.js" +import { selectOne } from "../../../../../../../utilities/sql/selectOne.js" +import { bodyValidator } from "../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { readOneOrganizationUserRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/$idOrganizationUser/updateOneOrganizationUser.ts b/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/$idOrganizationUser/updateOneOrganizationUser.ts index 2bdcf6b..179058b 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/$idOrganizationUser/updateOneOrganizationUser.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/$idOrganizationUser/updateOneOrganizationUser.ts @@ -1,9 +1,9 @@ -import { authFactory } from "#/factories/authFactory.js" -import { Exception } from "#/utilities/exception.js" -import { response } from "#/utilities/response.js" -import { selectOne } from "#/utilities/sql/selectOne.js" -import { updateOne } from "#/utilities/sql/updateOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../factories/authFactory.js" +import { Exception } from "../../../../../../../utilities/exception.js" +import { response } from "../../../../../../../utilities/response.js" +import { selectOne } from "../../../../../../../utilities/sql/selectOne.js" +import { updateOne } from "../../../../../../../utilities/sql/updateOne.js" +import { bodyValidator } from "../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { updateOneOrganizationUserRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/createOneOrganizationUser.ts b/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/createOneOrganizationUser.ts index 0f48960..22c4721 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/createOneOrganizationUser.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/createOneOrganizationUser.ts @@ -1,9 +1,9 @@ -import { authFactory } from "#/factories/authFactory.js" -import { Exception } from "#/utilities/exception.js" -import { response } from "#/utilities/response.js" -import { insertOne } from "#/utilities/sql/insertOne.js" -import { selectOne } from "#/utilities/sql/selectOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../factories/authFactory.js" +import { Exception } from "../../../../../../utilities/exception.js" +import { response } from "../../../../../../utilities/response.js" +import { insertOne } from "../../../../../../utilities/sql/insertOne.js" +import { selectOne } from "../../../../../../utilities/sql/selectOne.js" +import { bodyValidator } from "../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { createOneOrganizationUserRouteDefinition } from "@arrhes/application-metadata/routes" import { generateId } from "@arrhes/application-metadata/utilities" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/organizationUsersRoutes.ts b/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/organizationUsersRoutes.ts index 4a3cd4a..64b0d5e 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/organizationUsersRoutes.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/organizationUsersRoutes.ts @@ -1,6 +1,6 @@ -import { $idOrganizationUserRoutes } from "#/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/$idOrganizationUser/$idOrganizationUserRoutes.js" -import { createOneOrganizationUserRoute } from "#/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/createOneOrganizationUser.js" -import { readAllOrganizationUsersRoute } from "#/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/readAllOrganizationUsers.js" +import { $idOrganizationUserRoutes } from "../../../../../../routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/$idOrganizationUser/$idOrganizationUserRoutes.js" +import { createOneOrganizationUserRoute } from "../../../../../../routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/createOneOrganizationUser.js" +import { readAllOrganizationUsersRoute } from "../../../../../../routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/readAllOrganizationUsers.js" export const organizationUsersRoutes = [ diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/readAllOrganizationUsers.ts b/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/readAllOrganizationUsers.ts index 4f6f87c..aa43974 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/readAllOrganizationUsers.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/organizationSettings/organizationUser/readAllOrganizationUsers.ts @@ -1,8 +1,8 @@ -import { authFactory } from "#/factories/authFactory.js" -import { Exception } from "#/utilities/exception.js" -import { response } from "#/utilities/response.js" -import { selectOne } from "#/utilities/sql/selectOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../factories/authFactory.js" +import { Exception } from "../../../../../../utilities/exception.js" +import { response } from "../../../../../../utilities/response.js" +import { selectOne } from "../../../../../../utilities/sql/selectOne.js" +import { bodyValidator } from "../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { readAllOrganizationUsersRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/readOneOrganization.ts b/packages/api/src/routes/auth/organizations/$idOrganization/readOneOrganization.ts index 88cc707..aeb8ddb 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/readOneOrganization.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/readOneOrganization.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { selectOne } from "#/utilities/sql/selectOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../factories/authFactory.js" +import { response } from "../../../../utilities/response.js" +import { selectOne } from "../../../../utilities/sql/selectOne.js" +import { bodyValidator } from "../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { readOneOrganizationRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/$idYearRoutes.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/$idYearRoutes.ts index 8ee3e1c..2af011b 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/$idYearRoutes.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/$idYearRoutes.ts @@ -1,8 +1,8 @@ -import { attachmentsRoutes } from "#/routes/auth/organizations/$idOrganization/years/$idYear/attachments/attachmentsRoutes.js" -import { readOneYearRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/readOneYear.js" -import { recordsRoutes } from "#/routes/auth/organizations/$idOrganization/years/$idYear/records/recordsRoutes.js" -import { reportsRoutes } from "#/routes/auth/organizations/$idOrganization/years/$idYear/reports/reportsRoutes.js" -import { yearSettingsRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/yearSettingsRoute.js" +import { attachmentsRoutes } from "../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/attachments/attachmentsRoutes.js" +import { readOneYearRoute } from "../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/readOneYear.js" +import { recordsRoutes } from "../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/records/recordsRoutes.js" +import { reportsRoutes } from "../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/reports/reportsRoutes.js" +import { yearSettingsRoute } from "../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/yearSettingsRoute.js" export const $idYearRoutes = [ diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/$idAttachmentRoutes.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/$idAttachmentRoutes.ts index bd403ce..b3bb10e 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/$idAttachmentRoutes.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/$idAttachmentRoutes.ts @@ -1,14 +1,14 @@ -import { deleteOneAttachmentRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/deleteOneAttachment.js" -import { generateAttachmentGetSignedUrlRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/generateAttachmentGetSignedUrl.js" -import { generateAttachmentPutSignedUrlRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/generateAttachmentPutSignedUrl.js" -import { readOneAttachmentRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/readOneAttachment.js" -import { updateOneAttachmentRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/updateOneAttachment.js" - - -export const $idAttachmentRoutes = [ - deleteOneAttachmentRoute, - generateAttachmentGetSignedUrlRoute, - generateAttachmentPutSignedUrlRoute, - readOneAttachmentRoute, - updateOneAttachmentRoute, -] +import { deleteOneAttachmentRoute } from "../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/deleteOneAttachment.js" +import { generateAttachmentGetSignedUrlRoute } from "../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/generateAttachmentGetSignedUrl.js" +import { generateAttachmentPutSignedUrlRoute } from "../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/generateAttachmentPutSignedUrl.js" +import { readOneAttachmentRoute } from "../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/readOneAttachment.js" +import { updateOneAttachmentRoute } from "../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/updateOneAttachment.js" + + +export const $idAttachmentRoutes = [ + deleteOneAttachmentRoute, + generateAttachmentGetSignedUrlRoute, + generateAttachmentPutSignedUrlRoute, + readOneAttachmentRoute, + updateOneAttachmentRoute, +] diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/deleteOneAttachment.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/deleteOneAttachment.ts index 90298a1..b1ab7a0 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/deleteOneAttachment.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/deleteOneAttachment.ts @@ -1,9 +1,9 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { deleteOne } from "#/utilities/sql/deleteOne.js" -import { selectOne } from "#/utilities/sql/selectOne.js" -import { deleteObject } from "#/utilities/storage/deleteObject.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../utilities/response.js" +import { deleteOne } from "../../../../../../../../utilities/sql/deleteOne.js" +import { selectOne } from "../../../../../../../../utilities/sql/selectOne.js" +import { deleteObject } from "../../../../../../../../utilities/storage/deleteObject.js" +import { bodyValidator } from "../../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { deleteOneAttachmentRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/generateAttachmentGetSignedUrl.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/generateAttachmentGetSignedUrl.ts index aaf0105..d605782 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/generateAttachmentGetSignedUrl.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/generateAttachmentGetSignedUrl.ts @@ -1,9 +1,9 @@ -import { authFactory } from "#/factories/authFactory.js" -import { Exception } from "#/utilities/exception.js" -import { response } from "#/utilities/response.js" -import { selectOne } from "#/utilities/sql/selectOne.js" -import { generateGetSignedUrl } from "#/utilities/storage/generateGetSignedUrl.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../factories/authFactory.js" +import { Exception } from "../../../../../../../../utilities/exception.js" +import { response } from "../../../../../../../../utilities/response.js" +import { selectOne } from "../../../../../../../../utilities/sql/selectOne.js" +import { generateGetSignedUrl } from "../../../../../../../../utilities/storage/generateGetSignedUrl.js" +import { bodyValidator } from "../../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { generateAttachmentGetSignedUrlRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/generateAttachmentPutSignedUrl.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/generateAttachmentPutSignedUrl.ts index da4f0ab..9e32826 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/generateAttachmentPutSignedUrl.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/generateAttachmentPutSignedUrl.ts @@ -1,9 +1,9 @@ -import { authFactory } from "#/factories/authFactory.js" -import { Exception } from "#/utilities/exception.js" -import { response } from "#/utilities/response.js" -import { updateOne } from "#/utilities/sql/updateOne.js" -import { generatePutSignedUrl } from "#/utilities/storage/generatePutSignedUrl.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../factories/authFactory.js" +import { Exception } from "../../../../../../../../utilities/exception.js" +import { response } from "../../../../../../../../utilities/response.js" +import { updateOne } from "../../../../../../../../utilities/sql/updateOne.js" +import { generatePutSignedUrl } from "../../../../../../../../utilities/storage/generatePutSignedUrl.js" +import { bodyValidator } from "../../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { generateAttachmentPutSignedUrlRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/readOneAttachment.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/readOneAttachment.ts index 77838ed..01fff81 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/readOneAttachment.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/readOneAttachment.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { selectOne } from "#/utilities/sql/selectOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../utilities/response.js" +import { selectOne } from "../../../../../../../../utilities/sql/selectOne.js" +import { bodyValidator } from "../../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { readOneAttachmentRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/updateOneAttachment.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/updateOneAttachment.ts index a3ee4de..25aacc9 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/updateOneAttachment.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/updateOneAttachment.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { updateOne } from "#/utilities/sql/updateOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../utilities/response.js" +import { updateOne } from "../../../../../../../../utilities/sql/updateOne.js" +import { bodyValidator } from "../../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { updateOneAttachmentRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/attachmentsRoutes.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/attachmentsRoutes.ts index 0d6ce45..44a3c7d 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/attachmentsRoutes.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/attachmentsRoutes.ts @@ -1,11 +1,11 @@ -import { $idAttachmentRoutes } from "#/routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/$idAttachmentRoutes.js" -import { createOneAttachmentRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/attachments/createOneAttachment.js" -import { readAllAttachmentsRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/attachments/readAllAttachments.js" - - -export const attachmentsRoutes = [ - createOneAttachmentRoute, - readAllAttachmentsRoute, - - ...$idAttachmentRoutes, +import { $idAttachmentRoutes } from "../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/attachments/$idAttachment/$idAttachmentRoutes.js" +import { createOneAttachmentRoute } from "../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/attachments/createOneAttachment.js" +import { readAllAttachmentsRoute } from "../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/attachments/readAllAttachments.js" + + +export const attachmentsRoutes = [ + createOneAttachmentRoute, + readAllAttachmentsRoute, + + ...$idAttachmentRoutes, ] \ No newline at end of file diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/createOneAttachment.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/createOneAttachment.ts index d61c8be..d1c2a0a 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/createOneAttachment.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/createOneAttachment.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { insertOne } from "#/utilities/sql/insertOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../utilities/response.js" +import { insertOne } from "../../../../../../../utilities/sql/insertOne.js" +import { bodyValidator } from "../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { createOneAttachmentRouteDefinition } from "@arrhes/application-metadata/routes" import { generateId } from "@arrhes/application-metadata/utilities" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/readAllAttachments.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/readAllAttachments.ts index 22df5bd..119e927 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/readAllAttachments.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/attachments/readAllAttachments.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { selectMany } from "#/utilities/sql/selectMany.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../utilities/response.js" +import { selectMany } from "../../../../../../../utilities/sql/selectMany.js" +import { bodyValidator } from "../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { readAllAttachmentsRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/readOneYear.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/readOneYear.ts index b0c41d4..d54b780 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/readOneYear.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/readOneYear.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { selectOne } from "#/utilities/sql/selectOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../factories/authFactory.js" +import { response } from "../../../../../../utilities/response.js" +import { selectOne } from "../../../../../../utilities/sql/selectOne.js" +import { bodyValidator } from "../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { readOneYearRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRoutes.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRoutes.ts index bce21cb..48a3d41 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRoutes.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRoutes.ts @@ -1,7 +1,7 @@ -import { deleteOneRecordRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/deleteOneRecord.js" -import { duplicateOneRecordRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/duplicateOneRecord.js" -import { readOneRecordRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/readOneRecord.js" -import { updateOneRecordRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/updateOneRecord.js" +import { deleteOneRecordRoute } from "../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/deleteOneRecord.js" +import { duplicateOneRecordRoute } from "../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/duplicateOneRecord.js" +import { readOneRecordRoute } from "../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/readOneRecord.js" +import { updateOneRecordRoute } from "../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/updateOneRecord.js" export const $idRecordRoutes = [ diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/deleteOneRecord.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/deleteOneRecord.ts index 4fa7fa9..c7ab4c8 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/deleteOneRecord.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/deleteOneRecord.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { deleteOne } from "#/utilities/sql/deleteOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../utilities/response.js" +import { deleteOne } from "../../../../../../../../utilities/sql/deleteOne.js" +import { bodyValidator } from "../../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { deleteOneRecordRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/duplicateOneRecord.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/duplicateOneRecord.ts index 7fbecc3..d4e2a72 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/duplicateOneRecord.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/duplicateOneRecord.ts @@ -1,10 +1,10 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { insertMany } from "#/utilities/sql/insertMany.js" -import { insertOne } from "#/utilities/sql/insertOne.js" -import { selectMany } from "#/utilities/sql/selectMany.js" -import { selectOne } from "#/utilities/sql/selectOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../utilities/response.js" +import { insertMany } from "../../../../../../../../utilities/sql/insertMany.js" +import { insertOne } from "../../../../../../../../utilities/sql/insertOne.js" +import { selectMany } from "../../../../../../../../utilities/sql/selectMany.js" +import { selectOne } from "../../../../../../../../utilities/sql/selectOne.js" +import { bodyValidator } from "../../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { duplicateOneRecordRouteDefinition } from "@arrhes/application-metadata/routes" import { generateId } from "@arrhes/application-metadata/utilities" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/readOneRecord.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/readOneRecord.ts index ba49001..8e40661 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/readOneRecord.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/readOneRecord.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { selectOne } from "#/utilities/sql/selectOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../utilities/response.js" +import { selectOne } from "../../../../../../../../utilities/sql/selectOne.js" +import { bodyValidator } from "../../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { readOneRecordRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/updateOneRecord.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/updateOneRecord.ts index 2a5c344..946f63e 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/updateOneRecord.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/updateOneRecord.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { updateOne } from "#/utilities/sql/updateOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../utilities/response.js" +import { updateOne } from "../../../../../../../../utilities/sql/updateOne.js" +import { bodyValidator } from "../../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { updateOneRecordRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/createOneRecord.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/createOneRecord.ts index c560761..77f7266 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/createOneRecord.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/createOneRecord.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { insertOne } from "#/utilities/sql/insertOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../utilities/response.js" +import { insertOne } from "../../../../../../../utilities/sql/insertOne.js" +import { bodyValidator } from "../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { createOneRecordRouteDefinition } from "@arrhes/application-metadata/routes" import { generateId } from "@arrhes/application-metadata/utilities" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/readAllRecords.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/readAllRecords.ts index 0631d86..19c7308 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/readAllRecords.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/readAllRecords.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { selectMany } from "#/utilities/sql/selectMany.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../utilities/response.js" +import { selectMany } from "../../../../../../../utilities/sql/selectMany.js" +import { bodyValidator } from "../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { readAllRecordsRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/$idRecordRow/$idRecordRowRoutes.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/$idRecordRow/$idRecordRowRoutes.ts index 22e497a..f6ace19 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/$idRecordRow/$idRecordRowRoutes.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/$idRecordRow/$idRecordRowRoutes.ts @@ -1,6 +1,6 @@ -import { deleteOneRecordRowRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/$idRecordRow/deleteOneRecordRow.js" -import { readOneRecordRowRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/$idRecordRow/readOneRecordRow.js" -import { updateOneRecordRowRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/$idRecordRow/updateOneRecordRow.js" +import { deleteOneRecordRowRoute } from "../../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/$idRecordRow/deleteOneRecordRow.js" +import { readOneRecordRowRoute } from "../../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/$idRecordRow/readOneRecordRow.js" +import { updateOneRecordRowRoute } from "../../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/$idRecordRow/updateOneRecordRow.js" export const $idRecordRowRoutes = [ diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/$idRecordRow/deleteOneRecordRow.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/$idRecordRow/deleteOneRecordRow.ts index a4beb92..5c16623 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/$idRecordRow/deleteOneRecordRow.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/$idRecordRow/deleteOneRecordRow.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { deleteOne } from "#/utilities/sql/deleteOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../../utilities/response.js" +import { deleteOne } from "../../../../../../../../../utilities/sql/deleteOne.js" +import { bodyValidator } from "../../../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { deleteOneRecordRowRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/$idRecordRow/readOneRecordRow.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/$idRecordRow/readOneRecordRow.ts index 6eb3672..71e54c4 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/$idRecordRow/readOneRecordRow.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/$idRecordRow/readOneRecordRow.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { selectOne } from "#/utilities/sql/selectOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../../utilities/response.js" +import { selectOne } from "../../../../../../../../../utilities/sql/selectOne.js" +import { bodyValidator } from "../../../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { readOneRecordRowRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/$idRecordRow/updateOneRecordRow.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/$idRecordRow/updateOneRecordRow.ts index b7e58ca..685fbd4 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/$idRecordRow/updateOneRecordRow.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/$idRecordRow/updateOneRecordRow.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { updateOne } from "#/utilities/sql/updateOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../../utilities/response.js" +import { updateOne } from "../../../../../../../../../utilities/sql/updateOne.js" +import { bodyValidator } from "../../../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { updateOneRecordRowRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/createOneRecordRow.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/createOneRecordRow.ts index 24336cb..938288d 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/createOneRecordRow.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/createOneRecordRow.ts @@ -1,8 +1,8 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { insertOne } from "#/utilities/sql/insertOne.js" -import { selectOne } from "#/utilities/sql/selectOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../utilities/response.js" +import { insertOne } from "../../../../../../../../utilities/sql/insertOne.js" +import { selectOne } from "../../../../../../../../utilities/sql/selectOne.js" +import { bodyValidator } from "../../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { createOneRecordRowRouteDefinition } from "@arrhes/application-metadata/routes" import { generateId } from "@arrhes/application-metadata/utilities" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/readAllRecordRows.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/readAllRecordRows.ts index a6f39e2..2df42de 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/readAllRecordRows.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/readAllRecordRows.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { selectMany } from "#/utilities/sql/selectMany.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../utilities/response.js" +import { selectMany } from "../../../../../../../../utilities/sql/selectMany.js" +import { bodyValidator } from "../../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { readAllRecordRowsRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/recordRowsRoutes.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/recordRowsRoutes.ts index 42f292e..32d757b 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/recordRowsRoutes.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/recordRowsRoutes.ts @@ -1,7 +1,7 @@ -import { $idRecordRowRoutes } from "#/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/$idRecordRow/$idRecordRowRoutes.js" -import { createOneRecordRowRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/createOneRecordRow.js" -import { readAllRecordRowsRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/readAllRecordRows.js" -import { updateManyRecordRowsRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/updateManyRecordRows.js" +import { $idRecordRowRoutes } from "../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/$idRecordRow/$idRecordRowRoutes.js" +import { createOneRecordRowRoute } from "../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/createOneRecordRow.js" +import { readAllRecordRowsRoute } from "../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/readAllRecordRows.js" +import { updateManyRecordRowsRoute } from "../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/updateManyRecordRows.js" export const recordRowsRoutes = [ diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/updateManyRecordRows.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/updateManyRecordRows.ts index d66e8c8..23cbc70 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/updateManyRecordRows.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/updateManyRecordRows.ts @@ -1,8 +1,8 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { selectMany } from "#/utilities/sql/selectMany.js" -import { updateOne } from "#/utilities/sql/updateOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../utilities/response.js" +import { selectMany } from "../../../../../../../../utilities/sql/selectMany.js" +import { updateOne } from "../../../../../../../../utilities/sql/updateOne.js" +import { bodyValidator } from "../../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { updateManyRecordRowsRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordsRoutes.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordsRoutes.ts index e7a4cc5..8462712 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordsRoutes.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/records/recordsRoutes.ts @@ -1,7 +1,7 @@ -import { $idRecordRoutes } from "#/routes/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRoutes.js" -import { createOneRecordRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/records/createOneRecord.js" -import { readAllRecordsRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/records/readAllRecords.js" -import { recordRowsRoutes } from "#/routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/recordRowsRoutes.js" +import { $idRecordRoutes } from "../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/records/$idRecord/$idRecordRoutes.js" +import { createOneRecordRoute } from "../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/records/createOneRecord.js" +import { readAllRecordsRoute } from "../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/records/readAllRecords.js" +import { recordRowsRoutes } from "../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/records/recordRows/recordRowsRoutes.js" export const recordsRoutes = [ diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/document/$idDocument/$idDocumentRoutes.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/document/$idDocument/$idDocumentRoutes.ts index 9e5ac64..c92489d 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/document/$idDocument/$idDocumentRoutes.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/document/$idDocument/$idDocumentRoutes.ts @@ -1,8 +1,8 @@ -import { generateDocumentGetSignedUrlRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/reports/document/$idDocument/generateDocumentGetSignedUrl.js" -import { readOneDocumentRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/reports/document/$idDocument/readOneDocument.js" - - -export const $idDocumentRoutes = [ - generateDocumentGetSignedUrlRoute, - readOneDocumentRoute, +import { generateDocumentGetSignedUrlRoute } from "../../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/reports/document/$idDocument/generateDocumentGetSignedUrl.js" +import { readOneDocumentRoute } from "../../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/reports/document/$idDocument/readOneDocument.js" + + +export const $idDocumentRoutes = [ + generateDocumentGetSignedUrlRoute, + readOneDocumentRoute, ] \ No newline at end of file diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/document/$idDocument/generateDocumentGetSignedUrl.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/document/$idDocument/generateDocumentGetSignedUrl.ts index fac1895..c441560 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/document/$idDocument/generateDocumentGetSignedUrl.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/document/$idDocument/generateDocumentGetSignedUrl.ts @@ -1,8 +1,8 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { selectOne } from "#/utilities/sql/selectOne.js" -import { generateGetSignedUrl } from "#/utilities/storage/generateGetSignedUrl.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../../utilities/response.js" +import { selectOne } from "../../../../../../../../../utilities/sql/selectOne.js" +import { generateGetSignedUrl } from "../../../../../../../../../utilities/storage/generateGetSignedUrl.js" +import { bodyValidator } from "../../../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { generateDocumentGetSignedUrlRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/document/$idDocument/readOneDocument.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/document/$idDocument/readOneDocument.ts index cf2210a..8fc7080 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/document/$idDocument/readOneDocument.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/document/$idDocument/readOneDocument.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { selectOne } from "#/utilities/sql/selectOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../../utilities/response.js" +import { selectOne } from "../../../../../../../../../utilities/sql/selectOne.js" +import { bodyValidator } from "../../../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { readOneDocumentRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/document/documentsRoutes.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/document/documentsRoutes.ts index dc5c2ac..f76d344 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/document/documentsRoutes.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/document/documentsRoutes.ts @@ -1,9 +1,9 @@ -import { $idDocumentRoutes } from "#/routes/auth/organizations/$idOrganization/years/$idYear/reports/document/$idDocument/$idDocumentRoutes.js" -import { readAllDocumentsRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/reports/document/readAllDocuments.js" - - -export const documentsRoutes = [ - readAllDocumentsRoute, - - ...$idDocumentRoutes, +import { $idDocumentRoutes } from "../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/reports/document/$idDocument/$idDocumentRoutes.js" +import { readAllDocumentsRoute } from "../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/reports/document/readAllDocuments.js" + + +export const documentsRoutes = [ + readAllDocumentsRoute, + + ...$idDocumentRoutes, ] \ No newline at end of file diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/document/readAllDocuments.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/document/readAllDocuments.ts index 51c567c..e8c4231 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/document/readAllDocuments.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/document/readAllDocuments.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { selectMany } from "#/utilities/sql/selectMany.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../utilities/response.js" +import { selectMany } from "../../../../../../../../utilities/sql/selectMany.js" +import { bodyValidator } from "../../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { readAllDocumentsRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/generateBalanceSheetReportDocument.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/generateBalanceSheetReportDocument.ts index 88f8e56..1442e9c 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/generateBalanceSheetReportDocument.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/generateBalanceSheetReportDocument.ts @@ -1,10 +1,10 @@ -import { authFactory } from "#/factories/authFactory.js" -import { balanceSheetReportTemplate } from "#/utilities/email/templates/balanceSheetReport/balanceSheetReport.js" -import { response } from "#/utilities/response.js" -import { insertOne } from "#/utilities/sql/insertOne.js" -import { selectMany } from "#/utilities/sql/selectMany.js" -import { putObject } from "#/utilities/storage/putObject.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../factories/authFactory.js" +import { balanceSheetReportTemplate } from "../../../../../../../utilities/email/templates/balanceSheetReport/balanceSheetReport.js" +import { response } from "../../../../../../../utilities/response.js" +import { insertOne } from "../../../../../../../utilities/sql/insertOne.js" +import { selectMany } from "../../../../../../../utilities/sql/selectMany.js" +import { putObject } from "../../../../../../../utilities/storage/putObject.js" +import { bodyValidator } from "../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { generateBalanceSheetReportDocumentRouteDefinition } from "@arrhes/application-metadata/routes" import { generateId } from "@arrhes/application-metadata/utilities" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/generateIncomeStatementReportDocument.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/generateIncomeStatementReportDocument.ts index d09f02c..57e9a2b 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/generateIncomeStatementReportDocument.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/generateIncomeStatementReportDocument.ts @@ -1,10 +1,10 @@ -import { authFactory } from "#/factories/authFactory.js" -import { incomeStatementReportTemplate } from "#/utilities/email/templates/incomeStatementReport/incomeStatementReport.js" -import { response } from "#/utilities/response.js" -import { insertOne } from "#/utilities/sql/insertOne.js" -import { selectMany } from "#/utilities/sql/selectMany.js" -import { putObject } from "#/utilities/storage/putObject.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../factories/authFactory.js" +import { incomeStatementReportTemplate } from "../../../../../../../utilities/email/templates/incomeStatementReport/incomeStatementReport.js" +import { response } from "../../../../../../../utilities/response.js" +import { insertOne } from "../../../../../../../utilities/sql/insertOne.js" +import { selectMany } from "../../../../../../../utilities/sql/selectMany.js" +import { putObject } from "../../../../../../../utilities/storage/putObject.js" +import { bodyValidator } from "../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { generateIncomeStatementReportDocumentRouteDefinition } from "@arrhes/application-metadata/routes" import { generateId } from "@arrhes/application-metadata/utilities" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/reportsRoutes.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/reportsRoutes.ts index f2d6eaf..a946720 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/reportsRoutes.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/reports/reportsRoutes.ts @@ -1,6 +1,6 @@ -import { documentsRoutes } from "#/routes/auth/organizations/$idOrganization/years/$idYear/reports/document/documentsRoutes.js"; -import { generateBalanceSheetReportDocumentRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/reports/generateBalanceSheetReportDocument.js"; -import { generateIncomeStatementReportDocumentRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/reports/generateIncomeStatementReportDocument.js"; +import { documentsRoutes } from "../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/reports/document/documentsRoutes.js"; +import { generateBalanceSheetReportDocumentRoute } from "../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/reports/generateBalanceSheetReportDocument.js"; +import { generateIncomeStatementReportDocumentRoute } from "../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/reports/generateIncomeStatementReportDocument.js"; export const reportsRoutes = [ diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/$idAccountRoutes.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/$idAccountRoutes.ts index 5d964f8..1e1c8e1 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/$idAccountRoutes.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/$idAccountRoutes.ts @@ -1,10 +1,10 @@ -import { deleteOneAccountRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/deleteOneAccount.js" -import { readOneAccountRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/readOneAccount.js" -import { updateOneAccountRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/updateOneAccount.js" - - -export const $idAccountRoutes = [ - deleteOneAccountRoute, - readOneAccountRoute, - updateOneAccountRoute, +import { deleteOneAccountRoute } from "../../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/deleteOneAccount.js" +import { readOneAccountRoute } from "../../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/readOneAccount.js" +import { updateOneAccountRoute } from "../../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/updateOneAccount.js" + + +export const $idAccountRoutes = [ + deleteOneAccountRoute, + readOneAccountRoute, + updateOneAccountRoute, ] \ No newline at end of file diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/deleteOneAccount.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/deleteOneAccount.ts index 6b42111..8ab7717 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/deleteOneAccount.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/deleteOneAccount.ts @@ -1,36 +1,36 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { deleteOne } from "#/utilities/sql/deleteOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/application-metadata/models" -import { deleteOneAccountRouteDefinition } from "@arrhes/application-metadata/routes" -import { and, eq } from "drizzle-orm" - - -export const deleteOneAccountRoute = authFactory.createApp() - .post( - deleteOneAccountRouteDefinition.path, - bodyValidator(deleteOneAccountRouteDefinition.schemas.body), - async (c) => { - const body = c.req.valid("json") - - const deleteOneAccount = await deleteOne({ - database: c.var.clients.sql, - table: models.account, - where: (table) => ( - and( - eq(table.idOrganization, body.idOrganization), - eq(table.idYear, body.idYear), - eq(table.id, body.idAccount), - ) - ) - }) - - return response({ - context: c, - statusCode: 200, - schema: deleteOneAccountRouteDefinition.schemas.return, - data: deleteOneAccount, - }) - } +import { authFactory } from "../../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../../utilities/response.js" +import { deleteOne } from "../../../../../../../../../utilities/sql/deleteOne.js" +import { bodyValidator } from "../../../../../../../../../validators/bodyValidator.js" +import { models } from "@arrhes/application-metadata/models" +import { deleteOneAccountRouteDefinition } from "@arrhes/application-metadata/routes" +import { and, eq } from "drizzle-orm" + + +export const deleteOneAccountRoute = authFactory.createApp() + .post( + deleteOneAccountRouteDefinition.path, + bodyValidator(deleteOneAccountRouteDefinition.schemas.body), + async (c) => { + const body = c.req.valid("json") + + const deleteOneAccount = await deleteOne({ + database: c.var.clients.sql, + table: models.account, + where: (table) => ( + and( + eq(table.idOrganization, body.idOrganization), + eq(table.idYear, body.idYear), + eq(table.id, body.idAccount), + ) + ) + }) + + return response({ + context: c, + statusCode: 200, + schema: deleteOneAccountRouteDefinition.schemas.return, + data: deleteOneAccount, + }) + } ) \ No newline at end of file diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/readOneAccount.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/readOneAccount.ts index e2d51d4..263c919 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/readOneAccount.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/readOneAccount.ts @@ -1,37 +1,37 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { selectOne } from "#/utilities/sql/selectOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/application-metadata/models" -import { readOneAccountRouteDefinition } from "@arrhes/application-metadata/routes" -import { and, eq } from "drizzle-orm" - - -export const readOneAccountRoute = authFactory.createApp() - .post( - readOneAccountRouteDefinition.path, - bodyValidator(readOneAccountRouteDefinition.schemas.body), - async (c) => { - - const body = c.req.valid("json") - - const readOneAccount = await selectOne({ - database: c.var.clients.sql, - table: models.account, - where: (table) => ( - and( - eq(table.idOrganization, body.idOrganization), - eq(table.idYear, body.idYear), - eq(table.id, body.idAccount), - ) - ) - }) - - return response({ - context: c, - statusCode: 200, - schema: readOneAccountRouteDefinition.schemas.return, - data: readOneAccount, - }) - } +import { authFactory } from "../../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../../utilities/response.js" +import { selectOne } from "../../../../../../../../../utilities/sql/selectOne.js" +import { bodyValidator } from "../../../../../../../../../validators/bodyValidator.js" +import { models } from "@arrhes/application-metadata/models" +import { readOneAccountRouteDefinition } from "@arrhes/application-metadata/routes" +import { and, eq } from "drizzle-orm" + + +export const readOneAccountRoute = authFactory.createApp() + .post( + readOneAccountRouteDefinition.path, + bodyValidator(readOneAccountRouteDefinition.schemas.body), + async (c) => { + + const body = c.req.valid("json") + + const readOneAccount = await selectOne({ + database: c.var.clients.sql, + table: models.account, + where: (table) => ( + and( + eq(table.idOrganization, body.idOrganization), + eq(table.idYear, body.idYear), + eq(table.id, body.idAccount), + ) + ) + }) + + return response({ + context: c, + statusCode: 200, + schema: readOneAccountRouteDefinition.schemas.return, + data: readOneAccount, + }) + } ) \ No newline at end of file diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/updateOneAccount.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/updateOneAccount.ts index ffad143..5d7949d 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/updateOneAccount.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/updateOneAccount.ts @@ -1,58 +1,58 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { updateOne } from "#/utilities/sql/updateOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/application-metadata/models" -import { updateOneAccountRouteDefinition } from "@arrhes/application-metadata/routes" -import { and, eq } from "drizzle-orm" - - -export const updateOneAccountRoute = authFactory.createApp() - .post( - updateOneAccountRouteDefinition.path, - bodyValidator(updateOneAccountRouteDefinition.schemas.body), - async (c) => { - - const body = c.req.valid("json") - - const updateOneAccount = await updateOne({ - database: c.var.clients.sql, - table: models.account, - data: { - idAccountParent: body.idAccountParent, - - idBalanceSheetAsset: body.idBalanceSheetAsset, - balanceSheetAssetColumn: body.balanceSheetAssetColumn, - balanceSheetAssetFlow: body.balanceSheetAssetFlow, - - idBalanceSheetLiability: body.idBalanceSheetLiability, - balanceSheetLiabilityColumn: body.balanceSheetLiabilityColumn, - balanceSheetLiabilityFlow: body.balanceSheetLiabilityFlow, - - idIncomeStatement: body.idIncomeStatement, - - isClass: body.isClass, - isSelectable: body.isSelectable, - number: body.number, - label: body.label, - type: body.type, - lastUpdatedAt: new Date().toISOString(), - lastUpdatedBy: c.var.user.id, - }, - where: (table) => ( - and( - eq(table.idOrganization, body.idOrganization), - eq(table.idYear, body.idYear), - eq(table.id, body.idAccount), - ) - ) - }) - - return response({ - context: c, - statusCode: 200, - schema: updateOneAccountRouteDefinition.schemas.return, - data: updateOneAccount, - }) - } +import { authFactory } from "../../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../../utilities/response.js" +import { updateOne } from "../../../../../../../../../utilities/sql/updateOne.js" +import { bodyValidator } from "../../../../../../../../../validators/bodyValidator.js" +import { models } from "@arrhes/application-metadata/models" +import { updateOneAccountRouteDefinition } from "@arrhes/application-metadata/routes" +import { and, eq } from "drizzle-orm" + + +export const updateOneAccountRoute = authFactory.createApp() + .post( + updateOneAccountRouteDefinition.path, + bodyValidator(updateOneAccountRouteDefinition.schemas.body), + async (c) => { + + const body = c.req.valid("json") + + const updateOneAccount = await updateOne({ + database: c.var.clients.sql, + table: models.account, + data: { + idAccountParent: body.idAccountParent, + + idBalanceSheetAsset: body.idBalanceSheetAsset, + balanceSheetAssetColumn: body.balanceSheetAssetColumn, + balanceSheetAssetFlow: body.balanceSheetAssetFlow, + + idBalanceSheetLiability: body.idBalanceSheetLiability, + balanceSheetLiabilityColumn: body.balanceSheetLiabilityColumn, + balanceSheetLiabilityFlow: body.balanceSheetLiabilityFlow, + + idIncomeStatement: body.idIncomeStatement, + + isClass: body.isClass, + isSelectable: body.isSelectable, + number: body.number, + label: body.label, + type: body.type, + lastUpdatedAt: new Date().toISOString(), + lastUpdatedBy: c.var.user.id, + }, + where: (table) => ( + and( + eq(table.idOrganization, body.idOrganization), + eq(table.idYear, body.idYear), + eq(table.id, body.idAccount), + ) + ) + }) + + return response({ + context: c, + statusCode: 200, + schema: updateOneAccountRouteDefinition.schemas.return, + data: updateOneAccount, + }) + } ) \ No newline at end of file diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountsRoutes.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountsRoutes.ts index 92b504e..4bd060a 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountsRoutes.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountsRoutes.ts @@ -1,13 +1,13 @@ -import { $idAccountRoutes } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/$idAccountRoutes.js" -import { createOneAccountRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/createOneAccount.js" -import { generateAccountsRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/generateAccounts.js" -import { readAllAccountsRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/readAllAccounts.js" - - -export const accountsRoutes = [ - createOneAccountRoute, - readAllAccountsRoute, - generateAccountsRoute, - - ...$idAccountRoutes, +import { $idAccountRoutes } from "../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/$idAccount/$idAccountRoutes.js" +import { createOneAccountRoute } from "../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/createOneAccount.js" +import { generateAccountsRoute } from "../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/generateAccounts.js" +import { readAllAccountsRoute } from "../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/readAllAccounts.js" + + +export const accountsRoutes = [ + createOneAccountRoute, + readAllAccountsRoute, + generateAccountsRoute, + + ...$idAccountRoutes, ] \ No newline at end of file diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/createOneAccount.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/createOneAccount.ts index 771ba05..3db96dd 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/createOneAccount.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/createOneAccount.ts @@ -1,76 +1,76 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { insertOne } from "#/utilities/sql/insertOne.js" -import { selectOne } from "#/utilities/sql/selectOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/application-metadata/models" -import { createOneAccountRouteDefinition } from "@arrhes/application-metadata/routes" -import { generateId } from "@arrhes/application-metadata/utilities" -import { and, eq } from "drizzle-orm" - - -export const createOneAccountRoute = authFactory.createApp() - .post( - createOneAccountRouteDefinition.path, - bodyValidator(createOneAccountRouteDefinition.schemas.body), - async (c) => { - const body = c.req.valid("json") - - const readOneAccount = await selectOne({ - database: c.var.clients.sql, - table: models.account, - where: (table) => { - if (body.idAccountParent === null) { - return - } - return ( - and( - eq(table.idOrganization, body.idOrganization), - eq(table.idYear, body.idYear), - eq(table.id, body.idAccountParent), - ) - ) - } - }) - - const createOneAccount = await insertOne({ - database: c.var.clients.sql, - table: models.account, - data: { - id: generateId(), - idOrganization: body.idOrganization, - idYear: body.idYear, - idAccountParent: body.idAccountParent, - - idBalanceSheetAsset: body.idBalanceSheetAsset ?? readOneAccount?.idBalanceSheetAsset, - balanceSheetAssetColumn: body.balanceSheetAssetColumn ?? readOneAccount?.balanceSheetAssetColumn, - balanceSheetAssetFlow: body.balanceSheetAssetFlow ?? readOneAccount?.balanceSheetAssetFlow, - - idBalanceSheetLiability: body.idBalanceSheetLiability ?? readOneAccount?.idBalanceSheetLiability, - balanceSheetLiabilityColumn: body.balanceSheetLiabilityColumn ?? readOneAccount?.balanceSheetLiabilityColumn, - balanceSheetLiabilityFlow: body.balanceSheetLiabilityFlow ?? readOneAccount?.balanceSheetLiabilityFlow, - - idIncomeStatement: body.idIncomeStatement, - - isClass: body.isClass, - isSelectable: body.isSelectable, - isDefault: false, - label: body.label, - number: body.number, - type: body.type, - isMandatory: true, - createdAt: new Date().toISOString(), - lastUpdatedAt: null, - createdBy: c.var.user.id, - lastUpdatedBy: null, - } - }) - - return response({ - context: c, - statusCode: 200, - schema: createOneAccountRouteDefinition.schemas.return, - data: createOneAccount, - }) - } +import { authFactory } from "../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../utilities/response.js" +import { insertOne } from "../../../../../../../../utilities/sql/insertOne.js" +import { selectOne } from "../../../../../../../../utilities/sql/selectOne.js" +import { bodyValidator } from "../../../../../../../../validators/bodyValidator.js" +import { models } from "@arrhes/application-metadata/models" +import { createOneAccountRouteDefinition } from "@arrhes/application-metadata/routes" +import { generateId } from "@arrhes/application-metadata/utilities" +import { and, eq } from "drizzle-orm" + + +export const createOneAccountRoute = authFactory.createApp() + .post( + createOneAccountRouteDefinition.path, + bodyValidator(createOneAccountRouteDefinition.schemas.body), + async (c) => { + const body = c.req.valid("json") + + const readOneAccount = await selectOne({ + database: c.var.clients.sql, + table: models.account, + where: (table) => { + if (body.idAccountParent === null) { + return + } + return ( + and( + eq(table.idOrganization, body.idOrganization), + eq(table.idYear, body.idYear), + eq(table.id, body.idAccountParent), + ) + ) + } + }) + + const createOneAccount = await insertOne({ + database: c.var.clients.sql, + table: models.account, + data: { + id: generateId(), + idOrganization: body.idOrganization, + idYear: body.idYear, + idAccountParent: body.idAccountParent, + + idBalanceSheetAsset: body.idBalanceSheetAsset ?? readOneAccount?.idBalanceSheetAsset, + balanceSheetAssetColumn: body.balanceSheetAssetColumn ?? readOneAccount?.balanceSheetAssetColumn, + balanceSheetAssetFlow: body.balanceSheetAssetFlow ?? readOneAccount?.balanceSheetAssetFlow, + + idBalanceSheetLiability: body.idBalanceSheetLiability ?? readOneAccount?.idBalanceSheetLiability, + balanceSheetLiabilityColumn: body.balanceSheetLiabilityColumn ?? readOneAccount?.balanceSheetLiabilityColumn, + balanceSheetLiabilityFlow: body.balanceSheetLiabilityFlow ?? readOneAccount?.balanceSheetLiabilityFlow, + + idIncomeStatement: body.idIncomeStatement, + + isClass: body.isClass, + isSelectable: body.isSelectable, + isDefault: false, + label: body.label, + number: body.number, + type: body.type, + isMandatory: true, + createdAt: new Date().toISOString(), + lastUpdatedAt: null, + createdBy: c.var.user.id, + lastUpdatedBy: null, + } + }) + + return response({ + context: c, + statusCode: 200, + schema: createOneAccountRouteDefinition.schemas.return, + data: createOneAccount, + }) + } ) \ No newline at end of file diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/generateAccounts.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/generateAccounts.ts index dbaf91f..16b8ee3 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/generateAccounts.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/generateAccounts.ts @@ -1,142 +1,142 @@ -import { authFactory } from "#/factories/authFactory.js" -import { Exception } from "#/utilities/exception.js" -import { response } from "#/utilities/response.js" -import { deleteMany } from "#/utilities/sql/deleteMany.js" -import { insertMany } from "#/utilities/sql/insertMany.js" -import { selectOne } from "#/utilities/sql/selectOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" -import { DefaultAccount, defaultAssociationAccounts, defaultCompanyAccounts } from "@arrhes/application-metadata/components" -import { models } from "@arrhes/application-metadata/models" -import { generateAccountsRouteDefinition } from "@arrhes/application-metadata/routes" -import { returnedSchemas } from "@arrhes/application-metadata/schemas" -import { generateId } from "@arrhes/application-metadata/utilities" -import { and, eq } from "drizzle-orm" -import * as v from "valibot" - - -function generateAccounts(parameters: { - accounts: Array - idOrganization: v.InferOutput["id"] - idYear: v.InferOutput["id"] - idAccountParent: v.InferOutput["idAccountParent"] | null -}) { - const newAccounts: Array> = [] - - parameters.accounts.forEach((account) => { - const newAccount = { - id: generateId(), - idOrganization: parameters.idOrganization, - idYear: parameters.idYear, - idAccountParent: parameters.idAccountParent, - - idBalanceSheetAsset: null, - balanceSheetAssetColumn: null, - balanceSheetAssetFlow: null, - - idBalanceSheetLiability: null, - balanceSheetLiabilityColumn: null, - balanceSheetLiabilityFlow: null, - - idIncomeStatement: null, - - number: account.number.toString(), - isMandatory: account.isMandatory, - isClass: account.isClass, - isDefault: true, - isSelectable: account.isSelectable, - label: account.label, - type: account.type, - createdAt: new Date().toISOString(), - lastUpdatedAt: null, - createdBy: null, - lastUpdatedBy: null, - } - newAccounts.push(newAccount) - newAccounts.push(...generateAccounts({ - ...parameters, - accounts: account.children, - idAccountParent: newAccount.id - })) - }) - - return newAccounts -} - - -export const generateAccountsRoute = authFactory.createApp() - .post( - generateAccountsRouteDefinition.path, - bodyValidator(generateAccountsRouteDefinition.schemas.body), - async (c) => { - const body = c.req.valid("json") - - if (body.isReplicatingAccounts === true) { - throw new Exception({ - internalMessage: "Replicating accounts is not implemented yet", - externalMessage: "Non implémenté", - }) - } - - const generatedAccounts = await c.var.clients.sql.transaction(async (tx) => { - try { - const deletedAccounts = await deleteMany({ - database: tx, - table: models.account, - where: (table) => ( - and( - eq(table.idOrganization, body.idOrganization), - eq(table.idYear, body.idYear) - ) - ) - }) - } - catch (error: unknown) { - throw new Exception({ - internalMessage: "Failed to delete accounts", - externalMessage: "Échec de la suppression des comptes", - }) - } - - const organization = await selectOne({ - database: tx, - table: models.organization, - where: (table) => ( - eq(table.id, body.idOrganization) - ) - }) - const defaultAccounts = ( - (organization.scope === "association") - ? defaultAssociationAccounts - : defaultCompanyAccounts - ).filter((account) => { - if (account.isMandatory === false) { - if (body.isMinimalSystem === true) return false - } - return true - }) - - let newAccounts = generateAccounts({ - idOrganization: body.idOrganization, - idYear: body.idYear, - accounts: defaultAccounts, - idAccountParent: null, - }) - - const generatedAccounts = await insertMany({ - database: tx, - table: models.account, - data: newAccounts, - }) - - return generatedAccounts - }) - - - return response({ - context: c, - statusCode: 200, - schema: generateAccountsRouteDefinition.schemas.return, - data: generatedAccounts, - }) - } +import { authFactory } from "../../../../../../../../factories/authFactory.js" +import { Exception } from "../../../../../../../../utilities/exception.js" +import { response } from "../../../../../../../../utilities/response.js" +import { deleteMany } from "../../../../../../../../utilities/sql/deleteMany.js" +import { insertMany } from "../../../../../../../../utilities/sql/insertMany.js" +import { selectOne } from "../../../../../../../../utilities/sql/selectOne.js" +import { bodyValidator } from "../../../../../../../../validators/bodyValidator.js" +import { DefaultAccount, defaultAssociationAccounts, defaultCompanyAccounts } from "@arrhes/application-metadata/components" +import { models } from "@arrhes/application-metadata/models" +import { generateAccountsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" +import { generateId } from "@arrhes/application-metadata/utilities" +import { and, eq } from "drizzle-orm" +import * as v from "valibot" + + +function generateAccounts(parameters: { + accounts: Array + idOrganization: v.InferOutput["id"] + idYear: v.InferOutput["id"] + idAccountParent: v.InferOutput["idAccountParent"] | null +}) { + const newAccounts: Array> = [] + + parameters.accounts.forEach((account) => { + const newAccount = { + id: generateId(), + idOrganization: parameters.idOrganization, + idYear: parameters.idYear, + idAccountParent: parameters.idAccountParent, + + idBalanceSheetAsset: null, + balanceSheetAssetColumn: null, + balanceSheetAssetFlow: null, + + idBalanceSheetLiability: null, + balanceSheetLiabilityColumn: null, + balanceSheetLiabilityFlow: null, + + idIncomeStatement: null, + + number: account.number.toString(), + isMandatory: account.isMandatory, + isClass: account.isClass, + isDefault: true, + isSelectable: account.isSelectable, + label: account.label, + type: account.type, + createdAt: new Date().toISOString(), + lastUpdatedAt: null, + createdBy: null, + lastUpdatedBy: null, + } + newAccounts.push(newAccount) + newAccounts.push(...generateAccounts({ + ...parameters, + accounts: account.children, + idAccountParent: newAccount.id + })) + }) + + return newAccounts +} + + +export const generateAccountsRoute = authFactory.createApp() + .post( + generateAccountsRouteDefinition.path, + bodyValidator(generateAccountsRouteDefinition.schemas.body), + async (c) => { + const body = c.req.valid("json") + + if (body.isReplicatingAccounts === true) { + throw new Exception({ + internalMessage: "Replicating accounts is not implemented yet", + externalMessage: "Non implémenté", + }) + } + + const generatedAccounts = await c.var.clients.sql.transaction(async (tx) => { + try { + const deletedAccounts = await deleteMany({ + database: tx, + table: models.account, + where: (table) => ( + and( + eq(table.idOrganization, body.idOrganization), + eq(table.idYear, body.idYear) + ) + ) + }) + } + catch (error: unknown) { + throw new Exception({ + internalMessage: "Failed to delete accounts", + externalMessage: "Échec de la suppression des comptes", + }) + } + + const organization = await selectOne({ + database: tx, + table: models.organization, + where: (table) => ( + eq(table.id, body.idOrganization) + ) + }) + const defaultAccounts = ( + (organization.scope === "association") + ? defaultAssociationAccounts + : defaultCompanyAccounts + ).filter((account) => { + if (account.isMandatory === false) { + if (body.isMinimalSystem === true) return false + } + return true + }) + + let newAccounts = generateAccounts({ + idOrganization: body.idOrganization, + idYear: body.idYear, + accounts: defaultAccounts, + idAccountParent: null, + }) + + const generatedAccounts = await insertMany({ + database: tx, + table: models.account, + data: newAccounts, + }) + + return generatedAccounts + }) + + + return response({ + context: c, + statusCode: 200, + schema: generateAccountsRouteDefinition.schemas.return, + data: generatedAccounts, + }) + } ) \ No newline at end of file diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/readAllAccounts.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/readAllAccounts.ts index 465650d..bd0f60c 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/readAllAccounts.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/readAllAccounts.ts @@ -1,35 +1,35 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { selectMany } from "#/utilities/sql/selectMany.js" -import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/application-metadata/models" -import { readAllAccountsRouteDefinition } from "@arrhes/application-metadata/routes" -import { and, eq } from "drizzle-orm" - - -export const readAllAccountsRoute = authFactory.createApp() - .post( - readAllAccountsRouteDefinition.path, - bodyValidator(readAllAccountsRouteDefinition.schemas.body), - async (c) => { - const body = c.req.valid("json") - - const readAllAccounts = await selectMany({ - database: c.var.clients.sql, - table: models.account, - where: (table) => ( - and( - eq(table.idOrganization, body.idOrganization), - eq(table.idYear, body.idYear), - ) - ) - }) - - return response({ - context: c, - statusCode: 200, - schema: readAllAccountsRouteDefinition.schemas.return, - data: readAllAccounts, - }) - } +import { authFactory } from "../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../utilities/response.js" +import { selectMany } from "../../../../../../../../utilities/sql/selectMany.js" +import { bodyValidator } from "../../../../../../../../validators/bodyValidator.js" +import { models } from "@arrhes/application-metadata/models" +import { readAllAccountsRouteDefinition } from "@arrhes/application-metadata/routes" +import { and, eq } from "drizzle-orm" + + +export const readAllAccountsRoute = authFactory.createApp() + .post( + readAllAccountsRouteDefinition.path, + bodyValidator(readAllAccountsRouteDefinition.schemas.body), + async (c) => { + const body = c.req.valid("json") + + const readAllAccounts = await selectMany({ + database: c.var.clients.sql, + table: models.account, + where: (table) => ( + and( + eq(table.idOrganization, body.idOrganization), + eq(table.idYear, body.idYear), + ) + ) + }) + + return response({ + context: c, + statusCode: 200, + schema: readAllAccountsRouteDefinition.schemas.return, + data: readAllAccounts, + }) + } ) \ No newline at end of file diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/$idBalanceSheetRoutes.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/$idBalanceSheetRoutes.ts index 0a4519c..59962b3 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/$idBalanceSheetRoutes.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/$idBalanceSheetRoutes.ts @@ -1,6 +1,6 @@ -import { deleteOneBalanceSheetRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/deleteOneBalanceSheet.js" -import { readOneBalanceSheetRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/readOneBalanceSheet.js" -import { updateOneBalanceSheetRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/updateOneBalanceSheet.js" +import { deleteOneBalanceSheetRoute } from "../../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/deleteOneBalanceSheet.js" +import { readOneBalanceSheetRoute } from "../../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/readOneBalanceSheet.js" +import { updateOneBalanceSheetRoute } from "../../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/updateOneBalanceSheet.js" export const $idBalanceSheetRoutes = [ diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/deleteOneBalanceSheet.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/deleteOneBalanceSheet.ts index 07531a5..cd31f71 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/deleteOneBalanceSheet.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/deleteOneBalanceSheet.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { deleteOne } from "#/utilities/sql/deleteOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../../utilities/response.js" +import { deleteOne } from "../../../../../../../../../utilities/sql/deleteOne.js" +import { bodyValidator } from "../../../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { deleteOneBalanceSheetRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/readOneBalanceSheet.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/readOneBalanceSheet.ts index 79d6304..b01bf5f 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/readOneBalanceSheet.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/readOneBalanceSheet.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { selectOne } from "#/utilities/sql/selectOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../../utilities/response.js" +import { selectOne } from "../../../../../../../../../utilities/sql/selectOne.js" +import { bodyValidator } from "../../../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { readOneBalanceSheetRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/updateOneBalanceSheet.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/updateOneBalanceSheet.ts index ded5191..40bc721 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/updateOneBalanceSheet.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/updateOneBalanceSheet.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { updateOne } from "#/utilities/sql/updateOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../../utilities/response.js" +import { updateOne } from "../../../../../../../../../utilities/sql/updateOne.js" +import { bodyValidator } from "../../../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { updateOneBalanceSheetRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetsRoutes.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetsRoutes.ts index 8d528fb..ee8a3cd 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetsRoutes.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetsRoutes.ts @@ -1,8 +1,8 @@ -import { $idBalanceSheetRoutes } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/$idBalanceSheetRoutes.js" -import { connectAccountsToBalanceSheetsRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/connectAccountsToBalanceSheets.js" -import { createOneBalanceSheetRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/createOneBalanceSheet.js" -import { generateBalanceSheetsRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/generateBalanceSheets.js" -import { readAllBalanceSheetsRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/readAllBalanceSheets.js" +import { $idBalanceSheetRoutes } from "../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/$idBalanceSheet/$idBalanceSheetRoutes.js" +import { connectAccountsToBalanceSheetsRoute } from "../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/connectAccountsToBalanceSheets.js" +import { createOneBalanceSheetRoute } from "../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/createOneBalanceSheet.js" +import { generateBalanceSheetsRoute } from "../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/generateBalanceSheets.js" +import { readAllBalanceSheetsRoute } from "../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/readAllBalanceSheets.js" export const balanceSheetsRoutes = [ diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/connectAccountsToBalanceSheets.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/connectAccountsToBalanceSheets.ts index eea2421..3c47cbe 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/connectAccountsToBalanceSheets.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/connectAccountsToBalanceSheets.ts @@ -1,143 +1,143 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { selectMany } from "#/utilities/sql/selectMany.js" -import { selectOne } from "#/utilities/sql/selectOne.js" -import { updateOne } from "#/utilities/sql/updateOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" -import { defaultAssociationBalanceSheets, defaultCompanyBalanceSheets } from "@arrhes/application-metadata/components" -import { models } from "@arrhes/application-metadata/models" -import { connectAccountsToBalanceSheetsRouteDefinition } from "@arrhes/application-metadata/routes" -import { and, eq } from "drizzle-orm" - - -export const connectAccountsToBalanceSheetsRoute = authFactory.createApp() - .post( - connectAccountsToBalanceSheetsRouteDefinition.path, - bodyValidator(connectAccountsToBalanceSheetsRouteDefinition.schemas.body), - async (c) => { - const body = c.req.valid("json") - - const readAllAccounts = await selectMany({ - database: c.var.clients.sql, - table: models.account, - where: (table) => ( - and( - eq(table.idOrganization, body.idOrganization), - eq(table.idYear, body.idYear), - ) - ) - }) - - const readAllBalanceSheets = await selectMany({ - database: c.var.clients.sql, - table: models.balanceSheet, - where: (table) => ( - and( - eq(table.idOrganization, body.idOrganization), - eq(table.idYear, body.idYear), - ) - ) - }) - - const organization = await selectOne({ - database: c.var.clients.sql, - table: models.organization, - where: (table) => ( - eq(table.id, body.idOrganization) - ) - }) - const defaultBalanceSheets = ( - (organization.scope === "association") - ? defaultAssociationBalanceSheets - : defaultCompanyBalanceSheets - ) - - const connectAccountsToBalanceSheets = await c.var.clients.sql.transaction(async (tx) => { - for (const defaultBalanceSheet of defaultBalanceSheets) { - for (const defaultAccount of defaultBalanceSheet.accounts) { - - const foundAccount = readAllAccounts.find((account) => { - return account.number === defaultAccount.number.toString() - }) - - if (foundAccount === undefined) { - console.log("foundAccount is undefined", defaultBalanceSheet.number, defaultAccount) - continue - } - - const balanceSheet = readAllBalanceSheets.find((balanceSheet) => balanceSheet.number === defaultBalanceSheet.number.toString()) - if (balanceSheet === undefined) { - console.log("balanceSheet is undefined", defaultBalanceSheet.number) - continue - } - - const updateOneAccount = await updateOne({ - database: tx, - table: models.account, - data: { - idBalanceSheetAsset: (defaultBalanceSheet.side === "asset") - ? balanceSheet.id - : undefined, - balanceSheetAssetColumn: (defaultBalanceSheet.side === "asset") - ? (defaultAccount.isAmortization) - ? "amortization" - : "gross" - : undefined, - balanceSheetAssetFlow: (defaultBalanceSheet.side === "asset") - ? defaultAccount.flow - : undefined, - - idBalanceSheetLiability: (defaultBalanceSheet.side === "liability") - ? balanceSheet.id - : undefined, - balanceSheetLiabilityColumn: (defaultBalanceSheet.side === "liability") - ? "net" - : undefined, - balanceSheetLiabilityFlow: (defaultBalanceSheet.side === "liability") - ? defaultAccount.flow - : undefined, - - lastUpdatedAt: new Date().toISOString(), - lastUpdatedBy: c.var.user.id, - }, - where: (table) => ( - and( - eq(table.idOrganization, body.idOrganization), - eq(table.idYear, body.idYear), - eq(table.id, foundAccount.id), - ) - ) - }) - } - } - for (const account of readAllAccounts) { - - - const defaultBalanceSheet = defaultBalanceSheets.find((defaultBalanceSheet) => { - const foundAccount = defaultBalanceSheet.accounts.find((defaultAccount) => defaultAccount.number.toString() === account.number) - - return false - }) - - if (defaultBalanceSheet === undefined) { - continue - } - - const balanceSheet = readAllBalanceSheets.find((balanceSheet) => balanceSheet.number === defaultBalanceSheet.number.toString()) - if (balanceSheet === undefined) { - continue - } - - - } - }) - - - return response({ - context: c, - statusCode: 200, - schema: connectAccountsToBalanceSheetsRouteDefinition.schemas.return, - data: {}, - }) - } +import { authFactory } from "../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../utilities/response.js" +import { selectMany } from "../../../../../../../../utilities/sql/selectMany.js" +import { selectOne } from "../../../../../../../../utilities/sql/selectOne.js" +import { updateOne } from "../../../../../../../../utilities/sql/updateOne.js" +import { bodyValidator } from "../../../../../../../../validators/bodyValidator.js" +import { defaultAssociationBalanceSheets, defaultCompanyBalanceSheets } from "@arrhes/application-metadata/components" +import { models } from "@arrhes/application-metadata/models" +import { connectAccountsToBalanceSheetsRouteDefinition } from "@arrhes/application-metadata/routes" +import { and, eq } from "drizzle-orm" + + +export const connectAccountsToBalanceSheetsRoute = authFactory.createApp() + .post( + connectAccountsToBalanceSheetsRouteDefinition.path, + bodyValidator(connectAccountsToBalanceSheetsRouteDefinition.schemas.body), + async (c) => { + const body = c.req.valid("json") + + const readAllAccounts = await selectMany({ + database: c.var.clients.sql, + table: models.account, + where: (table) => ( + and( + eq(table.idOrganization, body.idOrganization), + eq(table.idYear, body.idYear), + ) + ) + }) + + const readAllBalanceSheets = await selectMany({ + database: c.var.clients.sql, + table: models.balanceSheet, + where: (table) => ( + and( + eq(table.idOrganization, body.idOrganization), + eq(table.idYear, body.idYear), + ) + ) + }) + + const organization = await selectOne({ + database: c.var.clients.sql, + table: models.organization, + where: (table) => ( + eq(table.id, body.idOrganization) + ) + }) + const defaultBalanceSheets = ( + (organization.scope === "association") + ? defaultAssociationBalanceSheets + : defaultCompanyBalanceSheets + ) + + const connectAccountsToBalanceSheets = await c.var.clients.sql.transaction(async (tx) => { + for (const defaultBalanceSheet of defaultBalanceSheets) { + for (const defaultAccount of defaultBalanceSheet.accounts) { + + const foundAccount = readAllAccounts.find((account) => { + return account.number === defaultAccount.number.toString() + }) + + if (foundAccount === undefined) { + console.log("foundAccount is undefined", defaultBalanceSheet.number, defaultAccount) + continue + } + + const balanceSheet = readAllBalanceSheets.find((balanceSheet) => balanceSheet.number === defaultBalanceSheet.number.toString()) + if (balanceSheet === undefined) { + console.log("balanceSheet is undefined", defaultBalanceSheet.number) + continue + } + + const updateOneAccount = await updateOne({ + database: tx, + table: models.account, + data: { + idBalanceSheetAsset: (defaultBalanceSheet.side === "asset") + ? balanceSheet.id + : undefined, + balanceSheetAssetColumn: (defaultBalanceSheet.side === "asset") + ? (defaultAccount.isAmortization) + ? "amortization" + : "gross" + : undefined, + balanceSheetAssetFlow: (defaultBalanceSheet.side === "asset") + ? defaultAccount.flow + : undefined, + + idBalanceSheetLiability: (defaultBalanceSheet.side === "liability") + ? balanceSheet.id + : undefined, + balanceSheetLiabilityColumn: (defaultBalanceSheet.side === "liability") + ? "net" + : undefined, + balanceSheetLiabilityFlow: (defaultBalanceSheet.side === "liability") + ? defaultAccount.flow + : undefined, + + lastUpdatedAt: new Date().toISOString(), + lastUpdatedBy: c.var.user.id, + }, + where: (table) => ( + and( + eq(table.idOrganization, body.idOrganization), + eq(table.idYear, body.idYear), + eq(table.id, foundAccount.id), + ) + ) + }) + } + } + for (const account of readAllAccounts) { + + + const defaultBalanceSheet = defaultBalanceSheets.find((defaultBalanceSheet) => { + const foundAccount = defaultBalanceSheet.accounts.find((defaultAccount) => defaultAccount.number.toString() === account.number) + + return false + }) + + if (defaultBalanceSheet === undefined) { + continue + } + + const balanceSheet = readAllBalanceSheets.find((balanceSheet) => balanceSheet.number === defaultBalanceSheet.number.toString()) + if (balanceSheet === undefined) { + continue + } + + + } + }) + + + return response({ + context: c, + statusCode: 200, + schema: connectAccountsToBalanceSheetsRouteDefinition.schemas.return, + data: {}, + }) + } ) \ No newline at end of file diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/createOneBalanceSheet.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/createOneBalanceSheet.ts index fc03fa7..fe92cb5 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/createOneBalanceSheet.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/createOneBalanceSheet.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { insertOne } from "#/utilities/sql/insertOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../utilities/response.js" +import { insertOne } from "../../../../../../../../utilities/sql/insertOne.js" +import { bodyValidator } from "../../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { createOneBalanceSheetRouteDefinition } from "@arrhes/application-metadata/routes" import { generateId } from "@arrhes/application-metadata/utilities" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/generateBalanceSheets.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/generateBalanceSheets.ts index 47187b6..3fb452b 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/generateBalanceSheets.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/generateBalanceSheets.ts @@ -1,104 +1,104 @@ -import { authFactory } from "#/factories/authFactory.js" -import { Exception } from "#/utilities/exception.js" -import { response } from "#/utilities/response.js" -import { deleteMany } from "#/utilities/sql/deleteMany.js" -import { insertMany } from "#/utilities/sql/insertMany.js" -import { selectOne } from "#/utilities/sql/selectOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" -import { defaultAssociationBalanceSheets, defaultCompanyBalanceSheets } from "@arrhes/application-metadata/components" -import { models } from "@arrhes/application-metadata/models" -import { generateBalanceSheetsRouteDefinition } from "@arrhes/application-metadata/routes" -import { returnedSchemas } from "@arrhes/application-metadata/schemas" -import { generateId } from "@arrhes/application-metadata/utilities" -import { and, eq } from "drizzle-orm" -import * as v from "valibot" - - -export const generateBalanceSheetsRoute = authFactory.createApp() - .post( - generateBalanceSheetsRouteDefinition.path, - bodyValidator(generateBalanceSheetsRouteDefinition.schemas.body), - async (c) => { - const body = c.req.valid("json") - - const generatedBalanceSheets = await c.var.clients.sql.transaction(async (tx) => { - try { - const deletedBalanceSheets = await deleteMany({ - database: tx, - table: models.balanceSheet, - where: (table) => ( - and( - eq(table.idOrganization, body.idOrganization), - eq(table.idYear, body.idYear) - ) - ) - }) - } - catch (error: unknown) { - throw new Exception({ - internalMessage: "Failed to delete balanceSheets", - externalMessage: "Échec de la suppression des lignes de bilan", - }) - } - - const organization = await selectOne({ - database: tx, - table: models.organization, - where: (table) => ( - eq(table.id, body.idOrganization) - ) - }) - const defaultBalanceSheets = ( - (organization.scope === "association") - ? defaultAssociationBalanceSheets - : defaultCompanyBalanceSheets - ) - - - const newBalanceSheets: Array> = [] - - defaultBalanceSheets - .forEach((defaultBalanceSheet) => { - const balanceSheetParent = newBalanceSheets.find((newBalanceSheet) => { - const isParent = newBalanceSheet.number === defaultBalanceSheet.numberParent?.toString() - const isSameSide = newBalanceSheet.side === defaultBalanceSheet.side - return isParent && isSameSide - }) - newBalanceSheets.push({ - id: generateId(), - idOrganization: body.idOrganization, - idYear: body.idYear, - idBalanceSheetParent: balanceSheetParent?.id ?? null, - number: defaultBalanceSheet.number.toString(), - isDefault: true, - isComputed: (balanceSheetParent === undefined) - ? true - : false, - label: defaultBalanceSheet.label, - side: defaultBalanceSheet.side, - createdAt: new Date().toISOString(), - lastUpdatedAt: null, - createdBy: null, - lastUpdatedBy: null, - }) - }) - - - const generatedBalanceSheets = await insertMany({ - database: tx, - table: models.balanceSheet, - data: newBalanceSheets, - }) - - return generatedBalanceSheets - }) - - - return response({ - context: c, - statusCode: 200, - schema: generateBalanceSheetsRouteDefinition.schemas.return, - data: generatedBalanceSheets, - }) - } +import { authFactory } from "../../../../../../../../factories/authFactory.js" +import { Exception } from "../../../../../../../../utilities/exception.js" +import { response } from "../../../../../../../../utilities/response.js" +import { deleteMany } from "../../../../../../../../utilities/sql/deleteMany.js" +import { insertMany } from "../../../../../../../../utilities/sql/insertMany.js" +import { selectOne } from "../../../../../../../../utilities/sql/selectOne.js" +import { bodyValidator } from "../../../../../../../../validators/bodyValidator.js" +import { defaultAssociationBalanceSheets, defaultCompanyBalanceSheets } from "@arrhes/application-metadata/components" +import { models } from "@arrhes/application-metadata/models" +import { generateBalanceSheetsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" +import { generateId } from "@arrhes/application-metadata/utilities" +import { and, eq } from "drizzle-orm" +import * as v from "valibot" + + +export const generateBalanceSheetsRoute = authFactory.createApp() + .post( + generateBalanceSheetsRouteDefinition.path, + bodyValidator(generateBalanceSheetsRouteDefinition.schemas.body), + async (c) => { + const body = c.req.valid("json") + + const generatedBalanceSheets = await c.var.clients.sql.transaction(async (tx) => { + try { + const deletedBalanceSheets = await deleteMany({ + database: tx, + table: models.balanceSheet, + where: (table) => ( + and( + eq(table.idOrganization, body.idOrganization), + eq(table.idYear, body.idYear) + ) + ) + }) + } + catch (error: unknown) { + throw new Exception({ + internalMessage: "Failed to delete balanceSheets", + externalMessage: "Échec de la suppression des lignes de bilan", + }) + } + + const organization = await selectOne({ + database: tx, + table: models.organization, + where: (table) => ( + eq(table.id, body.idOrganization) + ) + }) + const defaultBalanceSheets = ( + (organization.scope === "association") + ? defaultAssociationBalanceSheets + : defaultCompanyBalanceSheets + ) + + + const newBalanceSheets: Array> = [] + + defaultBalanceSheets + .forEach((defaultBalanceSheet) => { + const balanceSheetParent = newBalanceSheets.find((newBalanceSheet) => { + const isParent = newBalanceSheet.number === defaultBalanceSheet.numberParent?.toString() + const isSameSide = newBalanceSheet.side === defaultBalanceSheet.side + return isParent && isSameSide + }) + newBalanceSheets.push({ + id: generateId(), + idOrganization: body.idOrganization, + idYear: body.idYear, + idBalanceSheetParent: balanceSheetParent?.id ?? null, + number: defaultBalanceSheet.number.toString(), + isDefault: true, + isComputed: (balanceSheetParent === undefined) + ? true + : false, + label: defaultBalanceSheet.label, + side: defaultBalanceSheet.side, + createdAt: new Date().toISOString(), + lastUpdatedAt: null, + createdBy: null, + lastUpdatedBy: null, + }) + }) + + + const generatedBalanceSheets = await insertMany({ + database: tx, + table: models.balanceSheet, + data: newBalanceSheets, + }) + + return generatedBalanceSheets + }) + + + return response({ + context: c, + statusCode: 200, + schema: generateBalanceSheetsRouteDefinition.schemas.return, + data: generatedBalanceSheets, + }) + } ) \ No newline at end of file diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/readAllBalanceSheets.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/readAllBalanceSheets.ts index f882f88..b677153 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/readAllBalanceSheets.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/readAllBalanceSheets.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { selectMany } from "#/utilities/sql/selectMany.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../utilities/response.js" +import { selectMany } from "../../../../../../../../utilities/sql/selectMany.js" +import { bodyValidator } from "../../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { readAllBalanceSheetsRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/$idComputationRoutes.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/$idComputationRoutes.ts index 8374c4a..aa6258a 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/$idComputationRoutes.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/$idComputationRoutes.ts @@ -1,13 +1,13 @@ -import { computationIncomeStatementsRoutes } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/computationIncomeStatementsRoutes.js" -import { deleteOneComputationRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/deleteOneComputation.js" -import { readOneComputationRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/readOneComputation.js" -import { updateOneComputationRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/updateOneComputation.js" - - -export const $idComputationRoutes = [ - deleteOneComputationRoute, - readOneComputationRoute, - updateOneComputationRoute, - - ...computationIncomeStatementsRoutes, -] +import { computationIncomeStatementsRoutes } from "../../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/computationIncomeStatementsRoutes.js" +import { deleteOneComputationRoute } from "../../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/deleteOneComputation.js" +import { readOneComputationRoute } from "../../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/readOneComputation.js" +import { updateOneComputationRoute } from "../../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/updateOneComputation.js" + + +export const $idComputationRoutes = [ + deleteOneComputationRoute, + readOneComputationRoute, + updateOneComputationRoute, + + ...computationIncomeStatementsRoutes, +] diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/$idComputationIncomeStatementRoutes.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/$idComputationIncomeStatementRoutes.ts index 20c11c2..37d05a1 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/$idComputationIncomeStatementRoutes.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/$idComputationIncomeStatementRoutes.ts @@ -1,10 +1,10 @@ -import { deleteOneComputationIncomeStatementRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/deleteOneComputationIncomeStatement.js" -import { readOneComputationIncomeStatementRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/readOneComputationIncomeStatement.js" -import { updateOneComputationIncomeStatementRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/updateOneComputationIncomeStatement.js" - - -export const $idComputationIncomeStatementRoutes = [ - deleteOneComputationIncomeStatementRoute, - readOneComputationIncomeStatementRoute, - updateOneComputationIncomeStatementRoute, -] +import { deleteOneComputationIncomeStatementRoute } from "../../../../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/deleteOneComputationIncomeStatement.js" +import { readOneComputationIncomeStatementRoute } from "../../../../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/readOneComputationIncomeStatement.js" +import { updateOneComputationIncomeStatementRoute } from "../../../../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/updateOneComputationIncomeStatement.js" + + +export const $idComputationIncomeStatementRoutes = [ + deleteOneComputationIncomeStatementRoute, + readOneComputationIncomeStatementRoute, + updateOneComputationIncomeStatementRoute, +] diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/deleteOneComputationIncomeStatement.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/deleteOneComputationIncomeStatement.ts index 8ede8e2..34e2d37 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/deleteOneComputationIncomeStatement.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/deleteOneComputationIncomeStatement.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { deleteOne } from "#/utilities/sql/deleteOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../../../../utilities/response.js" +import { deleteOne } from "../../../../../../../../../../../utilities/sql/deleteOne.js" +import { bodyValidator } from "../../../../../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { deleteOneComputationIncomeStatementRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/readOneComputationIncomeStatement.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/readOneComputationIncomeStatement.ts index c5e5441..189d8f0 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/readOneComputationIncomeStatement.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/readOneComputationIncomeStatement.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { selectOne } from "#/utilities/sql/selectOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../../../../utilities/response.js" +import { selectOne } from "../../../../../../../../../../../utilities/sql/selectOne.js" +import { bodyValidator } from "../../../../../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { readOneComputationIncomeStatementRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/updateOneComputationIncomeStatement.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/updateOneComputationIncomeStatement.ts index 8048007..f8feecd 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/updateOneComputationIncomeStatement.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/updateOneComputationIncomeStatement.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { updateOne } from "#/utilities/sql/updateOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../../../../utilities/response.js" +import { updateOne } from "../../../../../../../../../../../utilities/sql/updateOne.js" +import { bodyValidator } from "../../../../../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { updateOneComputationIncomeStatementRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/computationIncomeStatementsRoutes.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/computationIncomeStatementsRoutes.ts index b1ed488..ef5cf41 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/computationIncomeStatementsRoutes.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/computationIncomeStatementsRoutes.ts @@ -1,12 +1,12 @@ -import { $idComputationIncomeStatementRoutes } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/$idComputationIncomeStatementRoutes.js" -import { createOneComputationIncomeStatementRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/createOneComputationIncomeStatement.js" -import { readAllComputationIncomeStatementsRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/readAllComputationIncomeStatements.js" - - -export const computationIncomeStatementsRoutes = [ - createOneComputationIncomeStatementRoute, - readAllComputationIncomeStatementsRoute, - - ...$idComputationIncomeStatementRoutes, -] - +import { $idComputationIncomeStatementRoutes } from "../../../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/$idComputationIncomeStatement/$idComputationIncomeStatementRoutes.js" +import { createOneComputationIncomeStatementRoute } from "../../../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/createOneComputationIncomeStatement.js" +import { readAllComputationIncomeStatementsRoute } from "../../../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/readAllComputationIncomeStatements.js" + + +export const computationIncomeStatementsRoutes = [ + createOneComputationIncomeStatementRoute, + readAllComputationIncomeStatementsRoute, + + ...$idComputationIncomeStatementRoutes, +] + diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/createOneComputationIncomeStatement.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/createOneComputationIncomeStatement.ts index 8594a64..3d4e7b1 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/createOneComputationIncomeStatement.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/createOneComputationIncomeStatement.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { insertOne } from "#/utilities/sql/insertOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../../../utilities/response.js" +import { insertOne } from "../../../../../../../../../../utilities/sql/insertOne.js" +import { bodyValidator } from "../../../../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { createOneComputationIncomeStatementRouteDefinition } from "@arrhes/application-metadata/routes" import { generateId } from "@arrhes/application-metadata/utilities" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/readAllComputationIncomeStatements.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/readAllComputationIncomeStatements.ts index 13e189b..177f4a0 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/readAllComputationIncomeStatements.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/computationIncomeStatements/readAllComputationIncomeStatements.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { selectMany } from "#/utilities/sql/selectMany.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../../../utilities/response.js" +import { selectMany } from "../../../../../../../../../../utilities/sql/selectMany.js" +import { bodyValidator } from "../../../../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { readAllComputationIncomeStatementsRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/deleteOneComputation.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/deleteOneComputation.ts index 81e39ec..c496a51 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/deleteOneComputation.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/deleteOneComputation.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { deleteOne } from "#/utilities/sql/deleteOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../../utilities/response.js" +import { deleteOne } from "../../../../../../../../../utilities/sql/deleteOne.js" +import { bodyValidator } from "../../../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { deleteOneComputationRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/readOneComputation.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/readOneComputation.ts index 64ff370..f40b683 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/readOneComputation.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/readOneComputation.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { selectOne } from "#/utilities/sql/selectOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../../utilities/response.js" +import { selectOne } from "../../../../../../../../../utilities/sql/selectOne.js" +import { bodyValidator } from "../../../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { readOneComputationRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/updateOneComputation.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/updateOneComputation.ts index 2a6eeb0..05196a1 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/updateOneComputation.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/updateOneComputation.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { updateOne } from "#/utilities/sql/updateOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../../utilities/response.js" +import { updateOne } from "../../../../../../../../../utilities/sql/updateOne.js" +import { bodyValidator } from "../../../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { updateOneComputationRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/computationsRoutes.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/computationsRoutes.ts index 4edd213..55721f0 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/computationsRoutes.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/computationsRoutes.ts @@ -1,13 +1,13 @@ -import { $idComputationRoutes } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/$idComputationRoutes.js" -import { createOneComputationRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/createOneComputation.js" -import { generateComputationsRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/generateComputations.js" -import { readAllComputationsRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/readAllComputations.js" - - -export const computationsRoutes = [ - createOneComputationRoute, - readAllComputationsRoute, - generateComputationsRoute, - - ...$idComputationRoutes, -] +import { $idComputationRoutes } from "../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/$idComputation/$idComputationRoutes.js" +import { createOneComputationRoute } from "../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/createOneComputation.js" +import { generateComputationsRoute } from "../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/generateComputations.js" +import { readAllComputationsRoute } from "../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/readAllComputations.js" + + +export const computationsRoutes = [ + createOneComputationRoute, + readAllComputationsRoute, + generateComputationsRoute, + + ...$idComputationRoutes, +] diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/createOneComputation.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/createOneComputation.ts index aa1cae2..29abf55 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/createOneComputation.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/createOneComputation.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { insertOne } from "#/utilities/sql/insertOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../utilities/response.js" +import { insertOne } from "../../../../../../../../utilities/sql/insertOne.js" +import { bodyValidator } from "../../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { createOneComputationRouteDefinition } from "@arrhes/application-metadata/routes" import { generateId } from "@arrhes/application-metadata/utilities" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/generateComputations.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/generateComputations.ts index 73114cd..a6a9cda 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/generateComputations.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/generateComputations.ts @@ -1,113 +1,113 @@ -import { authFactory } from "#/factories/authFactory.js" -import { Exception } from "#/utilities/exception.js" -import { response } from "#/utilities/response.js" -import { deleteMany } from "#/utilities/sql/deleteMany.js" -import { insertMany } from "#/utilities/sql/insertMany.js" -import { selectMany } from "#/utilities/sql/selectMany.js" -import { bodyValidator } from "#/validators/bodyValidator.js" -import { defaultComputations } from "@arrhes/application-metadata/components" -import { models } from "@arrhes/application-metadata/models" -import { generateComputationsRouteDefinition } from "@arrhes/application-metadata/routes" -import { generateId } from "@arrhes/application-metadata/utilities" -import { and, eq } from "drizzle-orm" - - -export const generateComputationsRoute = authFactory.createApp() - .post( - generateComputationsRouteDefinition.path, - bodyValidator(generateComputationsRouteDefinition.schemas.body), - async (c) => { - const body = c.req.valid("json") - - const generatedComputations = await c.var.clients.sql.transaction(async (tx) => { - try { - const deletedComputations = await deleteMany({ - database: tx, - table: models.computation, - where: (table) => ( - and( - eq(table.idOrganization, body.idOrganization), - eq(table.idYear, body.idYear) - ) - ) - }) - } - catch (error: unknown) { - throw new Exception({ - internalMessage: "Failed to delete computations", - externalMessage: "Échec de la suppression des journaux", - }) - } - - const incomeStatements = await selectMany({ - database: tx, - table: models.incomeStatement, - where: (table) => ( - and( - eq(table.idOrganization, body.idOrganization), - eq(table.idYear, body.idYear) - ) - ) - }) - - const newComputationIncomeStatements: Array<(typeof models.computationIncomeStatement.$inferInsert)> = [] - let newComputations = defaultComputations.map((defaultComputation, defaultComputationIndex) => { - const newComputation = { - id: generateId(), - idOrganization: body.idOrganization, - idYear: body.idYear, - index: defaultComputationIndex, - number: defaultComputation.number.toString(), - label: defaultComputation.label, - createdAt: new Date().toISOString(), - lastUpdatedAt: null, - createdBy: null, - lastUpdatedBy: null, - } - - defaultComputation.incomeStatements.forEach((_incomeStatement, index) => { - const incomeStatement = incomeStatements.find((x) => x.number === _incomeStatement.number.toString()) - - if (incomeStatement === undefined) { - return - } - - newComputationIncomeStatements.push({ - id: generateId(), - idOrganization: body.idOrganization, - idYear: body.idYear, - idComputation: newComputation.id, - idIncomeStatement: incomeStatement.id, - index: index, - operation: _incomeStatement.operation, - createdAt: new Date().toISOString(), - }) - }) - - return newComputation - }) - - const generatedComputations = await insertMany({ - database: tx, - table: models.computation, - data: newComputations, - }) - - const generatedComputationIncomeStatements = await insertMany({ - database: tx, - table: models.computationIncomeStatement, - data: newComputationIncomeStatements, - }) - - return generatedComputations - }) - - - return response({ - context: c, - statusCode: 200, - schema: generateComputationsRouteDefinition.schemas.return, - data: generatedComputations, - }) - } +import { authFactory } from "../../../../../../../../factories/authFactory.js" +import { Exception } from "../../../../../../../../utilities/exception.js" +import { response } from "../../../../../../../../utilities/response.js" +import { deleteMany } from "../../../../../../../../utilities/sql/deleteMany.js" +import { insertMany } from "../../../../../../../../utilities/sql/insertMany.js" +import { selectMany } from "../../../../../../../../utilities/sql/selectMany.js" +import { bodyValidator } from "../../../../../../../../validators/bodyValidator.js" +import { defaultComputations } from "@arrhes/application-metadata/components" +import { models } from "@arrhes/application-metadata/models" +import { generateComputationsRouteDefinition } from "@arrhes/application-metadata/routes" +import { generateId } from "@arrhes/application-metadata/utilities" +import { and, eq } from "drizzle-orm" + + +export const generateComputationsRoute = authFactory.createApp() + .post( + generateComputationsRouteDefinition.path, + bodyValidator(generateComputationsRouteDefinition.schemas.body), + async (c) => { + const body = c.req.valid("json") + + const generatedComputations = await c.var.clients.sql.transaction(async (tx) => { + try { + const deletedComputations = await deleteMany({ + database: tx, + table: models.computation, + where: (table) => ( + and( + eq(table.idOrganization, body.idOrganization), + eq(table.idYear, body.idYear) + ) + ) + }) + } + catch (error: unknown) { + throw new Exception({ + internalMessage: "Failed to delete computations", + externalMessage: "Échec de la suppression des journaux", + }) + } + + const incomeStatements = await selectMany({ + database: tx, + table: models.incomeStatement, + where: (table) => ( + and( + eq(table.idOrganization, body.idOrganization), + eq(table.idYear, body.idYear) + ) + ) + }) + + const newComputationIncomeStatements: Array<(typeof models.computationIncomeStatement.$inferInsert)> = [] + let newComputations = defaultComputations.map((defaultComputation, defaultComputationIndex) => { + const newComputation = { + id: generateId(), + idOrganization: body.idOrganization, + idYear: body.idYear, + index: defaultComputationIndex, + number: defaultComputation.number.toString(), + label: defaultComputation.label, + createdAt: new Date().toISOString(), + lastUpdatedAt: null, + createdBy: null, + lastUpdatedBy: null, + } + + defaultComputation.incomeStatements.forEach((_incomeStatement, index) => { + const incomeStatement = incomeStatements.find((x) => x.number === _incomeStatement.number.toString()) + + if (incomeStatement === undefined) { + return + } + + newComputationIncomeStatements.push({ + id: generateId(), + idOrganization: body.idOrganization, + idYear: body.idYear, + idComputation: newComputation.id, + idIncomeStatement: incomeStatement.id, + index: index, + operation: _incomeStatement.operation, + createdAt: new Date().toISOString(), + }) + }) + + return newComputation + }) + + const generatedComputations = await insertMany({ + database: tx, + table: models.computation, + data: newComputations, + }) + + const generatedComputationIncomeStatements = await insertMany({ + database: tx, + table: models.computationIncomeStatement, + data: newComputationIncomeStatements, + }) + + return generatedComputations + }) + + + return response({ + context: c, + statusCode: 200, + schema: generateComputationsRouteDefinition.schemas.return, + data: generatedComputations, + }) + } ) \ No newline at end of file diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/readAllComputations.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/readAllComputations.ts index 158d2b6..a06591b 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/readAllComputations.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/readAllComputations.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { selectMany } from "#/utilities/sql/selectMany.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../utilities/response.js" +import { selectMany } from "../../../../../../../../utilities/sql/selectMany.js" +import { bodyValidator } from "../../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { readAllComputationsRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/closeYear.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/closeYear.ts index 84d18d7..9db24d7 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/closeYear.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/closeYear.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { updateOne } from "#/utilities/sql/updateOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../utilities/response.js" +import { updateOne } from "../../../../../../../../utilities/sql/updateOne.js" +import { bodyValidator } from "../../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { closeYearRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq, not } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/deleteOneYear.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/deleteOneYear.ts index 20a20ba..aebfd96 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/deleteOneYear.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/deleteOneYear.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { deleteOne } from "#/utilities/sql/deleteOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../utilities/response.js" +import { deleteOne } from "../../../../../../../../utilities/sql/deleteOne.js" +import { bodyValidator } from "../../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { deleteOneYearRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/generalRoutes.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/generalRoutes.ts index 85788c0..355a8d8 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/generalRoutes.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/generalRoutes.ts @@ -1,9 +1,9 @@ -import { closeYearRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/closeYear.js" -import { deleteOneYearRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/deleteOneYear.js" -import { openYearRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/openYear.js" -import { settleBalanceSheetRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/settleBalanceSheet.js" -import { settleIncomeStatementRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/settleIncomeStatement.js" -import { updateOneYearRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/updateOneYear.js" +import { closeYearRoute } from "../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/closeYear.js" +import { deleteOneYearRoute } from "../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/deleteOneYear.js" +import { openYearRoute } from "../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/openYear.js" +import { settleBalanceSheetRoute } from "../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/settleBalanceSheet.js" +import { settleIncomeStatementRoute } from "../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/settleIncomeStatement.js" +import { updateOneYearRoute } from "../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/updateOneYear.js" export const generalRoutes = [ diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/openYear.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/openYear.ts index 9d1d3a7..bf3296a 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/openYear.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/openYear.ts @@ -1,6 +1,6 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../utilities/response.js" +import { bodyValidator } from "../../../../../../../../validators/bodyValidator.js" import { openYearRouteDefinition } from "@arrhes/application-metadata/routes" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/settleBalanceSheet.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/settleBalanceSheet.ts index 18404fc..35f3738 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/settleBalanceSheet.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/settleBalanceSheet.ts @@ -1,6 +1,6 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../utilities/response.js" +import { bodyValidator } from "../../../../../../../../validators/bodyValidator.js" import { settleBalanceSheetRouteDefinition } from "@arrhes/application-metadata/routes" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/settleIncomeStatement.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/settleIncomeStatement.ts index f53b6a3..67c0f08 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/settleIncomeStatement.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/settleIncomeStatement.ts @@ -1,6 +1,6 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../utilities/response.js" +import { bodyValidator } from "../../../../../../../../validators/bodyValidator.js" import { settleIncomeStatementRouteDefinition } from "@arrhes/application-metadata/routes" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/updateOneYear.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/updateOneYear.ts index 847ef96..dfd3e29 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/updateOneYear.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/updateOneYear.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { updateOne } from "#/utilities/sql/updateOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../utilities/response.js" +import { updateOne } from "../../../../../../../../utilities/sql/updateOne.js" +import { bodyValidator } from "../../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { updateOneYearRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/$idIncomeStatementRoutes.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/$idIncomeStatementRoutes.ts index 0ca0924..2f05849 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/$idIncomeStatementRoutes.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/$idIncomeStatementRoutes.ts @@ -1,6 +1,6 @@ -import { deleteOneIncomeStatementRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/deleteOneIncomeStatement.js"; -import { readOneIncomeStatementRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/readOneIncomeStatement.js"; -import { updateOneIncomeStatementRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/updateOneIncomeStatement.js"; +import { deleteOneIncomeStatementRoute } from "../../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/deleteOneIncomeStatement.js"; +import { readOneIncomeStatementRoute } from "../../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/readOneIncomeStatement.js"; +import { updateOneIncomeStatementRoute } from "../../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/updateOneIncomeStatement.js"; export const $idIncomeStatementRoutes = [ diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/deleteOneIncomeStatement.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/deleteOneIncomeStatement.ts index 448c691..c5051f6 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/deleteOneIncomeStatement.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/deleteOneIncomeStatement.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { deleteOne } from "#/utilities/sql/deleteOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../../utilities/response.js" +import { deleteOne } from "../../../../../../../../../utilities/sql/deleteOne.js" +import { bodyValidator } from "../../../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { deleteOneIncomeStatementRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/readOneIncomeStatement.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/readOneIncomeStatement.ts index 4863da8..276f180 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/readOneIncomeStatement.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/readOneIncomeStatement.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { selectOne } from "#/utilities/sql/selectOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../../utilities/response.js" +import { selectOne } from "../../../../../../../../../utilities/sql/selectOne.js" +import { bodyValidator } from "../../../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { readOneIncomeStatementRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/updateOneIncomeStatement.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/updateOneIncomeStatement.ts index 2fdee69..6aedc2b 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/updateOneIncomeStatement.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/updateOneIncomeStatement.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { updateOne } from "#/utilities/sql/updateOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../../utilities/response.js" +import { updateOne } from "../../../../../../../../../utilities/sql/updateOne.js" +import { bodyValidator } from "../../../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { updateOneIncomeStatementRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/connectAccountsToIncomeStatements.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/connectAccountsToIncomeStatements.ts index 7cee4f5..4bb7cfc 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/connectAccountsToIncomeStatements.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/connectAccountsToIncomeStatements.ts @@ -1,104 +1,104 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { selectMany } from "#/utilities/sql/selectMany.js" -import { selectOne } from "#/utilities/sql/selectOne.js" -import { updateOne } from "#/utilities/sql/updateOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" -import { defaultAssociationIncomeStatements, defaultCompanyIncomeStatements } from "@arrhes/application-metadata/components" -import { models } from "@arrhes/application-metadata/models" -import { connectAccountsToIncomeStatementsRouteDefinition } from "@arrhes/application-metadata/routes" -import { and, eq } from "drizzle-orm" - - -export const connectAccountsToIncomeStatementsRoute = authFactory.createApp() - .post( - connectAccountsToIncomeStatementsRouteDefinition.path, - bodyValidator(connectAccountsToIncomeStatementsRouteDefinition.schemas.body), - async (c) => { - const body = c.req.valid("json") - - const readAllAccounts = await selectMany({ - database: c.var.clients.sql, - table: models.account, - where: (table) => ( - and( - eq(table.idOrganization, body.idOrganization), - eq(table.idYear, body.idYear), - ) - ) - }) - - const readAllIncomeStatements = await selectMany({ - database: c.var.clients.sql, - table: models.incomeStatement, - where: (table) => ( - and( - eq(table.idOrganization, body.idOrganization), - eq(table.idYear, body.idYear), - ) - ) - }) - - - const organization = await selectOne({ - database: c.var.clients.sql, - table: models.organization, - where: (table) => ( - eq(table.id, body.idOrganization) - ) - }) - const defaultIncomeStatements = ( - (organization.scope === "association") - ? defaultAssociationIncomeStatements - : defaultCompanyIncomeStatements - ) - - const connectAccountsToIncomeStatements = await c.var.clients.sql.transaction(async (tx) => { - for (const defaultIncomeStatement of defaultIncomeStatements) { - for (const defaultAccount of defaultIncomeStatement.accounts) { - - const foundAccount = readAllAccounts.find((account) => { - return account.number === defaultAccount.toString() - }) - - if (foundAccount === undefined) { - console.log("foundAccount is undefined", defaultIncomeStatement.number, defaultAccount) - continue - } - - const incomeStatement = readAllIncomeStatements.find((incomeStatement) => incomeStatement.number === defaultIncomeStatement.number.toString()) - if (incomeStatement === undefined) { - console.log("incomeStatement is undefined", defaultIncomeStatement.number) - continue - } - - const updateOneAccount = await updateOne({ - database: tx, - table: models.account, - data: { - idIncomeStatement: incomeStatement.id, - lastUpdatedAt: new Date().toISOString(), - lastUpdatedBy: c.var.user.id, - }, - where: (table) => ( - and( - eq(table.idOrganization, body.idOrganization), - eq(table.idYear, body.idYear), - eq(table.id, foundAccount.id), - ) - ) - }) - - } - } - }) - - - return response({ - context: c, - statusCode: 200, - schema: connectAccountsToIncomeStatementsRouteDefinition.schemas.return, - data: {}, - }) - } +import { authFactory } from "../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../utilities/response.js" +import { selectMany } from "../../../../../../../../utilities/sql/selectMany.js" +import { selectOne } from "../../../../../../../../utilities/sql/selectOne.js" +import { updateOne } from "../../../../../../../../utilities/sql/updateOne.js" +import { bodyValidator } from "../../../../../../../../validators/bodyValidator.js" +import { defaultAssociationIncomeStatements, defaultCompanyIncomeStatements } from "@arrhes/application-metadata/components" +import { models } from "@arrhes/application-metadata/models" +import { connectAccountsToIncomeStatementsRouteDefinition } from "@arrhes/application-metadata/routes" +import { and, eq } from "drizzle-orm" + + +export const connectAccountsToIncomeStatementsRoute = authFactory.createApp() + .post( + connectAccountsToIncomeStatementsRouteDefinition.path, + bodyValidator(connectAccountsToIncomeStatementsRouteDefinition.schemas.body), + async (c) => { + const body = c.req.valid("json") + + const readAllAccounts = await selectMany({ + database: c.var.clients.sql, + table: models.account, + where: (table) => ( + and( + eq(table.idOrganization, body.idOrganization), + eq(table.idYear, body.idYear), + ) + ) + }) + + const readAllIncomeStatements = await selectMany({ + database: c.var.clients.sql, + table: models.incomeStatement, + where: (table) => ( + and( + eq(table.idOrganization, body.idOrganization), + eq(table.idYear, body.idYear), + ) + ) + }) + + + const organization = await selectOne({ + database: c.var.clients.sql, + table: models.organization, + where: (table) => ( + eq(table.id, body.idOrganization) + ) + }) + const defaultIncomeStatements = ( + (organization.scope === "association") + ? defaultAssociationIncomeStatements + : defaultCompanyIncomeStatements + ) + + const connectAccountsToIncomeStatements = await c.var.clients.sql.transaction(async (tx) => { + for (const defaultIncomeStatement of defaultIncomeStatements) { + for (const defaultAccount of defaultIncomeStatement.accounts) { + + const foundAccount = readAllAccounts.find((account) => { + return account.number === defaultAccount.toString() + }) + + if (foundAccount === undefined) { + console.log("foundAccount is undefined", defaultIncomeStatement.number, defaultAccount) + continue + } + + const incomeStatement = readAllIncomeStatements.find((incomeStatement) => incomeStatement.number === defaultIncomeStatement.number.toString()) + if (incomeStatement === undefined) { + console.log("incomeStatement is undefined", defaultIncomeStatement.number) + continue + } + + const updateOneAccount = await updateOne({ + database: tx, + table: models.account, + data: { + idIncomeStatement: incomeStatement.id, + lastUpdatedAt: new Date().toISOString(), + lastUpdatedBy: c.var.user.id, + }, + where: (table) => ( + and( + eq(table.idOrganization, body.idOrganization), + eq(table.idYear, body.idYear), + eq(table.id, foundAccount.id), + ) + ) + }) + + } + } + }) + + + return response({ + context: c, + statusCode: 200, + schema: connectAccountsToIncomeStatementsRouteDefinition.schemas.return, + data: {}, + }) + } ) \ No newline at end of file diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/createOneIncomeStatement.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/createOneIncomeStatement.ts index 37d30db..0f2b4eb 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/createOneIncomeStatement.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/createOneIncomeStatement.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { insertOne } from "#/utilities/sql/insertOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../utilities/response.js" +import { insertOne } from "../../../../../../../../utilities/sql/insertOne.js" +import { bodyValidator } from "../../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { createOneIncomeStatementRouteDefinition } from "@arrhes/application-metadata/routes" import { generateId } from "@arrhes/application-metadata/utilities" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/generateIncomeStatements.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/generateIncomeStatements.ts index afd1755..c3b7e24 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/generateIncomeStatements.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/generateIncomeStatements.ts @@ -1,100 +1,100 @@ -import { authFactory } from "#/factories/authFactory.js" -import { Exception } from "#/utilities/exception.js" -import { response } from "#/utilities/response.js" -import { deleteMany } from "#/utilities/sql/deleteMany.js" -import { insertMany } from "#/utilities/sql/insertMany.js" -import { selectOne } from "#/utilities/sql/selectOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" -import { defaultAssociationIncomeStatements, defaultCompanyIncomeStatements } from "@arrhes/application-metadata/components" -import { models } from "@arrhes/application-metadata/models" -import { generateIncomeStatementsRouteDefinition } from "@arrhes/application-metadata/routes" -import { returnedSchemas } from "@arrhes/application-metadata/schemas" -import { generateId } from "@arrhes/application-metadata/utilities" -import { and, eq } from "drizzle-orm" -import * as v from "valibot" - - -export const generateIncomeStatementsRoute = authFactory.createApp() - .post( - generateIncomeStatementsRouteDefinition.path, - bodyValidator(generateIncomeStatementsRouteDefinition.schemas.body), - async (c) => { - const body = c.req.valid("json") - - const generatedIncomeStatements = await c.var.clients.sql.transaction(async (tx) => { - try { - const deletedIncomeStatements = await deleteMany({ - database: tx, - table: models.incomeStatement, - where: (table) => ( - and( - eq(table.idOrganization, body.idOrganization), - eq(table.idYear, body.idYear) - ) - ) - }) - } - catch (error: unknown) { - throw new Exception({ - internalMessage: "Failed to delete incomeStatements", - externalMessage: "Échec de la suppression des lignes de compte de résultat", - }) - } - - const organization = await selectOne({ - database: tx, - table: models.organization, - where: (table) => ( - eq(table.id, body.idOrganization) - ) - }) - const defaultIncomeStatements = ( - (organization.scope === "association") - ? defaultAssociationIncomeStatements - : defaultCompanyIncomeStatements - ) - - - const newIncomeStatements: Array> = [] - - defaultIncomeStatements - .forEach((defaultIncomeStatement) => { - const incomeStatementParent = newIncomeStatements.find((newIncomeStatement) => { - return newIncomeStatement.number === defaultIncomeStatement.numberParent?.toString() - }) - newIncomeStatements.push({ - id: generateId(), - idOrganization: body.idOrganization, - idYear: body.idYear, - idIncomeStatementParent: incomeStatementParent?.id ?? null, - number: defaultIncomeStatement.number.toString(), - isDefault: true, - isComputed: (incomeStatementParent === undefined) - ? true - : false, - label: defaultIncomeStatement.label, - createdAt: new Date().toISOString(), - lastUpdatedAt: null, - createdBy: null, - lastUpdatedBy: null, - }) - }) - - const generatedIncomeStatements = await insertMany({ - database: tx, - table: models.incomeStatement, - data: newIncomeStatements, - }) - - return generatedIncomeStatements - }) - - - return response({ - context: c, - statusCode: 200, - schema: generateIncomeStatementsRouteDefinition.schemas.return, - data: generatedIncomeStatements, - }) - } +import { authFactory } from "../../../../../../../../factories/authFactory.js" +import { Exception } from "../../../../../../../../utilities/exception.js" +import { response } from "../../../../../../../../utilities/response.js" +import { deleteMany } from "../../../../../../../../utilities/sql/deleteMany.js" +import { insertMany } from "../../../../../../../../utilities/sql/insertMany.js" +import { selectOne } from "../../../../../../../../utilities/sql/selectOne.js" +import { bodyValidator } from "../../../../../../../../validators/bodyValidator.js" +import { defaultAssociationIncomeStatements, defaultCompanyIncomeStatements } from "@arrhes/application-metadata/components" +import { models } from "@arrhes/application-metadata/models" +import { generateIncomeStatementsRouteDefinition } from "@arrhes/application-metadata/routes" +import { returnedSchemas } from "@arrhes/application-metadata/schemas" +import { generateId } from "@arrhes/application-metadata/utilities" +import { and, eq } from "drizzle-orm" +import * as v from "valibot" + + +export const generateIncomeStatementsRoute = authFactory.createApp() + .post( + generateIncomeStatementsRouteDefinition.path, + bodyValidator(generateIncomeStatementsRouteDefinition.schemas.body), + async (c) => { + const body = c.req.valid("json") + + const generatedIncomeStatements = await c.var.clients.sql.transaction(async (tx) => { + try { + const deletedIncomeStatements = await deleteMany({ + database: tx, + table: models.incomeStatement, + where: (table) => ( + and( + eq(table.idOrganization, body.idOrganization), + eq(table.idYear, body.idYear) + ) + ) + }) + } + catch (error: unknown) { + throw new Exception({ + internalMessage: "Failed to delete incomeStatements", + externalMessage: "Échec de la suppression des lignes de compte de résultat", + }) + } + + const organization = await selectOne({ + database: tx, + table: models.organization, + where: (table) => ( + eq(table.id, body.idOrganization) + ) + }) + const defaultIncomeStatements = ( + (organization.scope === "association") + ? defaultAssociationIncomeStatements + : defaultCompanyIncomeStatements + ) + + + const newIncomeStatements: Array> = [] + + defaultIncomeStatements + .forEach((defaultIncomeStatement) => { + const incomeStatementParent = newIncomeStatements.find((newIncomeStatement) => { + return newIncomeStatement.number === defaultIncomeStatement.numberParent?.toString() + }) + newIncomeStatements.push({ + id: generateId(), + idOrganization: body.idOrganization, + idYear: body.idYear, + idIncomeStatementParent: incomeStatementParent?.id ?? null, + number: defaultIncomeStatement.number.toString(), + isDefault: true, + isComputed: (incomeStatementParent === undefined) + ? true + : false, + label: defaultIncomeStatement.label, + createdAt: new Date().toISOString(), + lastUpdatedAt: null, + createdBy: null, + lastUpdatedBy: null, + }) + }) + + const generatedIncomeStatements = await insertMany({ + database: tx, + table: models.incomeStatement, + data: newIncomeStatements, + }) + + return generatedIncomeStatements + }) + + + return response({ + context: c, + statusCode: 200, + schema: generateIncomeStatementsRouteDefinition.schemas.return, + data: generatedIncomeStatements, + }) + } ) \ No newline at end of file diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementsRoutes.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementsRoutes.ts index 89d0a18..6379065 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementsRoutes.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementsRoutes.ts @@ -1,8 +1,8 @@ -import { $idIncomeStatementRoutes } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/$idIncomeStatementRoutes.js" -import { connectAccountsToIncomeStatementsRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/connectAccountsToIncomeStatements.js" -import { createOneIncomeStatementRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/createOneIncomeStatement.js" -import { generateIncomeStatementsRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/generateIncomeStatements.js" -import { readAllIncomeStatementsRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/readAllIncomeStatements.js" +import { $idIncomeStatementRoutes } from "../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/$idIncomeStatement/$idIncomeStatementRoutes.js" +import { connectAccountsToIncomeStatementsRoute } from "../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/connectAccountsToIncomeStatements.js" +import { createOneIncomeStatementRoute } from "../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/createOneIncomeStatement.js" +import { generateIncomeStatementsRoute } from "../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/generateIncomeStatements.js" +import { readAllIncomeStatementsRoute } from "../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/readAllIncomeStatements.js" export const incomeStatementsRoutes = [ diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/readAllIncomeStatements.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/readAllIncomeStatements.ts index d82d25b..8dc1c43 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/readAllIncomeStatements.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/readAllIncomeStatements.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { selectMany } from "#/utilities/sql/selectMany.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../utilities/response.js" +import { selectMany } from "../../../../../../../../utilities/sql/selectMany.js" +import { bodyValidator } from "../../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { readAllIncomeStatementsRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/$idJournalRoute.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/$idJournalRoute.ts index 2707641..40adacd 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/$idJournalRoute.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/$idJournalRoute.ts @@ -1,6 +1,6 @@ -import { deleteOneJournalRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/deleteOneJournal.js" -import { readOneJournalRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/readOneJournal.js" -import { updateOneJournalRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/updateOneJournal.js" +import { deleteOneJournalRoute } from "../../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/deleteOneJournal.js" +import { readOneJournalRoute } from "../../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/readOneJournal.js" +import { updateOneJournalRoute } from "../../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/updateOneJournal.js" export const $idJournalRoutes = [ diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/deleteOneJournal.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/deleteOneJournal.ts index e25758b..898343e 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/deleteOneJournal.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/deleteOneJournal.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { deleteOne } from "#/utilities/sql/deleteOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../../utilities/response.js" +import { deleteOne } from "../../../../../../../../../utilities/sql/deleteOne.js" +import { bodyValidator } from "../../../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { deleteOneJournalRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/readOneJournal.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/readOneJournal.ts index 5b1cae2..a535006 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/readOneJournal.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/readOneJournal.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { selectOne } from "#/utilities/sql/selectOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../../utilities/response.js" +import { selectOne } from "../../../../../../../../../utilities/sql/selectOne.js" +import { bodyValidator } from "../../../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { readOneJournalRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/updateOneJournal.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/updateOneJournal.ts index 1ddb659..d05fbd3 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/updateOneJournal.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/updateOneJournal.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { updateOne } from "#/utilities/sql/updateOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../../utilities/response.js" +import { updateOne } from "../../../../../../../../../utilities/sql/updateOne.js" +import { bodyValidator } from "../../../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { updateOneJournalRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/createOneJournal.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/createOneJournal.ts index 195bf5b..2e07e1b 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/createOneJournal.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/createOneJournal.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { insertOne } from "#/utilities/sql/insertOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../utilities/response.js" +import { insertOne } from "../../../../../../../../utilities/sql/insertOne.js" +import { bodyValidator } from "../../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { createOneJournalRouteDefinition } from "@arrhes/application-metadata/routes" import { generateId } from "@arrhes/application-metadata/utilities" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/generateJournals.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/generateJournals.ts index d35717d..a17a0b1 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/generateJournals.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/generateJournals.ts @@ -1,71 +1,71 @@ -import { authFactory } from "#/factories/authFactory.js" -import { Exception } from "#/utilities/exception.js" -import { response } from "#/utilities/response.js" -import { deleteMany } from "#/utilities/sql/deleteMany.js" -import { insertMany } from "#/utilities/sql/insertMany.js" -import { bodyValidator } from "#/validators/bodyValidator.js" -import { defaultJournals } from "@arrhes/application-metadata/components" -import { models } from "@arrhes/application-metadata/models" -import { generateJournalsRouteDefinition } from "@arrhes/application-metadata/routes" -import { generateId } from "@arrhes/application-metadata/utilities" -import { and, eq } from "drizzle-orm" - - -export const generateJournalsRoute = authFactory.createApp() - .post( - generateJournalsRouteDefinition.path, - bodyValidator(generateJournalsRouteDefinition.schemas.body), - async (c) => { - const body = c.req.valid("json") - - const generatedJournals = await c.var.clients.sql.transaction(async (tx) => { - try { - const deletedJournals = await deleteMany({ - database: tx, - table: models.journal, - where: (table) => ( - and( - eq(table.idOrganization, body.idOrganization), - eq(table.idYear, body.idYear) - ) - ) - }) - } - catch (error: unknown) { - throw new Exception({ - internalMessage: "Failed to delete journals", - externalMessage: "Échec de la suppression des journaux", - }) - } - - let newJournals = defaultJournals.map((defaultJournal) => { - return ({ - id: generateId(), - idOrganization: body.idOrganization, - idYear: body.idYear, - code: defaultJournal.code, - label: defaultJournal.label, - createdAt: new Date().toISOString(), - lastUpdatedAt: null, - createdBy: null, - lastUpdatedBy: null, - }) - }) - - const generatedJournals = await insertMany({ - database: tx, - table: models.journal, - data: newJournals, - }) - - return generatedJournals - }) - - return response({ - context: c, - statusCode: 200, - schema: generateJournalsRouteDefinition.schemas.return, - data: generatedJournals, - }) - } +import { authFactory } from "../../../../../../../../factories/authFactory.js" +import { Exception } from "../../../../../../../../utilities/exception.js" +import { response } from "../../../../../../../../utilities/response.js" +import { deleteMany } from "../../../../../../../../utilities/sql/deleteMany.js" +import { insertMany } from "../../../../../../../../utilities/sql/insertMany.js" +import { bodyValidator } from "../../../../../../../../validators/bodyValidator.js" +import { defaultJournals } from "@arrhes/application-metadata/components" +import { models } from "@arrhes/application-metadata/models" +import { generateJournalsRouteDefinition } from "@arrhes/application-metadata/routes" +import { generateId } from "@arrhes/application-metadata/utilities" +import { and, eq } from "drizzle-orm" + + +export const generateJournalsRoute = authFactory.createApp() + .post( + generateJournalsRouteDefinition.path, + bodyValidator(generateJournalsRouteDefinition.schemas.body), + async (c) => { + const body = c.req.valid("json") + + const generatedJournals = await c.var.clients.sql.transaction(async (tx) => { + try { + const deletedJournals = await deleteMany({ + database: tx, + table: models.journal, + where: (table) => ( + and( + eq(table.idOrganization, body.idOrganization), + eq(table.idYear, body.idYear) + ) + ) + }) + } + catch (error: unknown) { + throw new Exception({ + internalMessage: "Failed to delete journals", + externalMessage: "Échec de la suppression des journaux", + }) + } + + let newJournals = defaultJournals.map((defaultJournal) => { + return ({ + id: generateId(), + idOrganization: body.idOrganization, + idYear: body.idYear, + code: defaultJournal.code, + label: defaultJournal.label, + createdAt: new Date().toISOString(), + lastUpdatedAt: null, + createdBy: null, + lastUpdatedBy: null, + }) + }) + + const generatedJournals = await insertMany({ + database: tx, + table: models.journal, + data: newJournals, + }) + + return generatedJournals + }) + + return response({ + context: c, + statusCode: 200, + schema: generateJournalsRouteDefinition.schemas.return, + data: generatedJournals, + }) + } ) \ No newline at end of file diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/journalsRoutes.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/journalsRoutes.ts index 3b93790..cb60737 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/journalsRoutes.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/journalsRoutes.ts @@ -1,7 +1,7 @@ -import { $idJournalRoutes } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/$idJournalRoute.js" -import { createOneJournalRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/createOneJournal.js" -import { generateJournalsRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/generateJournals.js" -import { readAllJournalsRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/readAllJournals.js" +import { $idJournalRoutes } from "../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/$idJournal/$idJournalRoute.js" +import { createOneJournalRoute } from "../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/createOneJournal.js" +import { generateJournalsRoute } from "../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/generateJournals.js" +import { readAllJournalsRoute } from "../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/readAllJournals.js" export const journalsRoutes = [ diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/readAllJournals.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/readAllJournals.ts index 116d429..55b07f5 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/readAllJournals.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/readAllJournals.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { selectMany } from "#/utilities/sql/selectMany.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../utilities/response.js" +import { selectMany } from "../../../../../../../../utilities/sql/selectMany.js" +import { bodyValidator } from "../../../../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { readAllJournalsRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/$idRecordLabelRoutes.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/$idRecordLabelRoutes.ts index 4170c3d..5699dc4 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/$idRecordLabelRoutes.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/$idRecordLabelRoutes.ts @@ -1,10 +1,10 @@ -import { deleteOneRecordLabelRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/deleteOneRecordLabel.js" -import { readOneRecordLabelRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/readOneRecordLabel.js" -import { updateOneRecordLabelRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/updateOneRecordLabel.js" - - -export const $idRecordLabelRoutes = [ - deleteOneRecordLabelRoute, - readOneRecordLabelRoute, - updateOneRecordLabelRoute, +import { deleteOneRecordLabelRoute } from "../../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/deleteOneRecordLabel.js" +import { readOneRecordLabelRoute } from "../../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/readOneRecordLabel.js" +import { updateOneRecordLabelRoute } from "../../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/updateOneRecordLabel.js" + + +export const $idRecordLabelRoutes = [ + deleteOneRecordLabelRoute, + readOneRecordLabelRoute, + updateOneRecordLabelRoute, ] \ No newline at end of file diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/deleteOneRecordLabel.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/deleteOneRecordLabel.ts index b92dc40..1043008 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/deleteOneRecordLabel.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/deleteOneRecordLabel.ts @@ -1,36 +1,36 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { deleteOne } from "#/utilities/sql/deleteOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/application-metadata/models" -import { deleteOneRecordLabelRouteDefinition } from "@arrhes/application-metadata/routes" -import { and, eq } from "drizzle-orm" - - -export const deleteOneRecordLabelRoute = authFactory.createApp() - .post( - deleteOneRecordLabelRouteDefinition.path, - bodyValidator(deleteOneRecordLabelRouteDefinition.schemas.body), - async (c) => { - const body = c.req.valid("json") - - const deleteOneRecordLabel = await deleteOne({ - database: c.var.clients.sql, - table: models.recordLabel, - where: (table) => ( - and( - eq(table.idOrganization, body.idOrganization), - eq(table.idYear, body.idYear), - eq(table.id, body.idRecordLabel), - ) - ) - }) - - return response({ - context: c, - statusCode: 200, - schema: deleteOneRecordLabelRouteDefinition.schemas.return, - data: deleteOneRecordLabel, - }) - } +import { authFactory } from "../../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../../utilities/response.js" +import { deleteOne } from "../../../../../../../../../utilities/sql/deleteOne.js" +import { bodyValidator } from "../../../../../../../../../validators/bodyValidator.js" +import { models } from "@arrhes/application-metadata/models" +import { deleteOneRecordLabelRouteDefinition } from "@arrhes/application-metadata/routes" +import { and, eq } from "drizzle-orm" + + +export const deleteOneRecordLabelRoute = authFactory.createApp() + .post( + deleteOneRecordLabelRouteDefinition.path, + bodyValidator(deleteOneRecordLabelRouteDefinition.schemas.body), + async (c) => { + const body = c.req.valid("json") + + const deleteOneRecordLabel = await deleteOne({ + database: c.var.clients.sql, + table: models.recordLabel, + where: (table) => ( + and( + eq(table.idOrganization, body.idOrganization), + eq(table.idYear, body.idYear), + eq(table.id, body.idRecordLabel), + ) + ) + }) + + return response({ + context: c, + statusCode: 200, + schema: deleteOneRecordLabelRouteDefinition.schemas.return, + data: deleteOneRecordLabel, + }) + } ) \ No newline at end of file diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/readOneRecordLabel.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/readOneRecordLabel.ts index a708409..1b76aaa 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/readOneRecordLabel.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/readOneRecordLabel.ts @@ -1,37 +1,37 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { selectOne } from "#/utilities/sql/selectOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/application-metadata/models" -import { readOneRecordLabelRouteDefinition } from "@arrhes/application-metadata/routes" -import { and, eq } from "drizzle-orm" - - -export const readOneRecordLabelRoute = authFactory.createApp() - .post( - readOneRecordLabelRouteDefinition.path, - bodyValidator(readOneRecordLabelRouteDefinition.schemas.body), - async (c) => { - - const body = c.req.valid("json") - - const readOneRecordLabel = await selectOne({ - database: c.var.clients.sql, - table: models.recordLabel, - where: (table) => ( - and( - eq(table.idOrganization, body.idOrganization), - eq(table.idYear, body.idYear), - eq(table.id, body.idRecordLabel), - ) - ) - }) - - return response({ - context: c, - statusCode: 200, - schema: readOneRecordLabelRouteDefinition.schemas.return, - data: readOneRecordLabel, - }) - } +import { authFactory } from "../../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../../utilities/response.js" +import { selectOne } from "../../../../../../../../../utilities/sql/selectOne.js" +import { bodyValidator } from "../../../../../../../../../validators/bodyValidator.js" +import { models } from "@arrhes/application-metadata/models" +import { readOneRecordLabelRouteDefinition } from "@arrhes/application-metadata/routes" +import { and, eq } from "drizzle-orm" + + +export const readOneRecordLabelRoute = authFactory.createApp() + .post( + readOneRecordLabelRouteDefinition.path, + bodyValidator(readOneRecordLabelRouteDefinition.schemas.body), + async (c) => { + + const body = c.req.valid("json") + + const readOneRecordLabel = await selectOne({ + database: c.var.clients.sql, + table: models.recordLabel, + where: (table) => ( + and( + eq(table.idOrganization, body.idOrganization), + eq(table.idYear, body.idYear), + eq(table.id, body.idRecordLabel), + ) + ) + }) + + return response({ + context: c, + statusCode: 200, + schema: readOneRecordLabelRouteDefinition.schemas.return, + data: readOneRecordLabel, + }) + } ) \ No newline at end of file diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/updateOneRecordLabel.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/updateOneRecordLabel.ts index 874ca4b..76f6d3b 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/updateOneRecordLabel.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/updateOneRecordLabel.ts @@ -1,43 +1,43 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { updateOne } from "#/utilities/sql/updateOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/application-metadata/models" -import { updateOneRecordLabelRouteDefinition } from "@arrhes/application-metadata/routes" -import { and, eq } from "drizzle-orm" - - -export const updateOneRecordLabelRoute = authFactory.createApp() - .post( - updateOneRecordLabelRouteDefinition.path, - bodyValidator(updateOneRecordLabelRouteDefinition.schemas.body), - async (c) => { - - const body = c.req.valid("json") - - const updateOneRecordLabel = await updateOne({ - database: c.var.clients.sql, - table: models.recordLabel, - data: { - label: body.label, - - lastUpdatedAt: new Date().toISOString(), - lastUpdatedBy: c.var.user.id, - }, - where: (table) => ( - and( - eq(table.idOrganization, body.idOrganization), - eq(table.idYear, body.idYear), - eq(table.id, body.idRecordLabel), - ) - ) - }) - - return response({ - context: c, - statusCode: 200, - schema: updateOneRecordLabelRouteDefinition.schemas.return, - data: updateOneRecordLabel, - }) - } +import { authFactory } from "../../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../../utilities/response.js" +import { updateOne } from "../../../../../../../../../utilities/sql/updateOne.js" +import { bodyValidator } from "../../../../../../../../../validators/bodyValidator.js" +import { models } from "@arrhes/application-metadata/models" +import { updateOneRecordLabelRouteDefinition } from "@arrhes/application-metadata/routes" +import { and, eq } from "drizzle-orm" + + +export const updateOneRecordLabelRoute = authFactory.createApp() + .post( + updateOneRecordLabelRouteDefinition.path, + bodyValidator(updateOneRecordLabelRouteDefinition.schemas.body), + async (c) => { + + const body = c.req.valid("json") + + const updateOneRecordLabel = await updateOne({ + database: c.var.clients.sql, + table: models.recordLabel, + data: { + label: body.label, + + lastUpdatedAt: new Date().toISOString(), + lastUpdatedBy: c.var.user.id, + }, + where: (table) => ( + and( + eq(table.idOrganization, body.idOrganization), + eq(table.idYear, body.idYear), + eq(table.id, body.idRecordLabel), + ) + ) + }) + + return response({ + context: c, + statusCode: 200, + schema: updateOneRecordLabelRouteDefinition.schemas.return, + data: updateOneRecordLabel, + }) + } ) \ No newline at end of file diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/createOneRecordLabel.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/createOneRecordLabel.ts index ad62948..e021292 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/createOneRecordLabel.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/createOneRecordLabel.ts @@ -1,41 +1,41 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { insertOne } from "#/utilities/sql/insertOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/application-metadata/models" -import { createOneRecordLabelRouteDefinition } from "@arrhes/application-metadata/routes" -import { generateId } from "@arrhes/application-metadata/utilities" - - -export const createOneRecordLabelRoute = authFactory.createApp() - .post( - createOneRecordLabelRouteDefinition.path, - bodyValidator(createOneRecordLabelRouteDefinition.schemas.body), - async (c) => { - const body = c.req.valid("json") - - const createOneRecordLabel = await insertOne({ - database: c.var.clients.sql, - table: models.recordLabel, - data: { - id: generateId(), - idOrganization: body.idOrganization, - idYear: body.idYear, - - label: body.label, - - createdAt: new Date().toISOString(), - lastUpdatedAt: null, - createdBy: c.var.user.id, - lastUpdatedBy: null, - } - }) - - return response({ - context: c, - statusCode: 200, - schema: createOneRecordLabelRouteDefinition.schemas.return, - data: createOneRecordLabel, - }) - } +import { authFactory } from "../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../utilities/response.js" +import { insertOne } from "../../../../../../../../utilities/sql/insertOne.js" +import { bodyValidator } from "../../../../../../../../validators/bodyValidator.js" +import { models } from "@arrhes/application-metadata/models" +import { createOneRecordLabelRouteDefinition } from "@arrhes/application-metadata/routes" +import { generateId } from "@arrhes/application-metadata/utilities" + + +export const createOneRecordLabelRoute = authFactory.createApp() + .post( + createOneRecordLabelRouteDefinition.path, + bodyValidator(createOneRecordLabelRouteDefinition.schemas.body), + async (c) => { + const body = c.req.valid("json") + + const createOneRecordLabel = await insertOne({ + database: c.var.clients.sql, + table: models.recordLabel, + data: { + id: generateId(), + idOrganization: body.idOrganization, + idYear: body.idYear, + + label: body.label, + + createdAt: new Date().toISOString(), + lastUpdatedAt: null, + createdBy: c.var.user.id, + lastUpdatedBy: null, + } + }) + + return response({ + context: c, + statusCode: 200, + schema: createOneRecordLabelRouteDefinition.schemas.return, + data: createOneRecordLabel, + }) + } ) \ No newline at end of file diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/readAllRecordLabels.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/readAllRecordLabels.ts index d42df7a..64aae90 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/readAllRecordLabels.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/readAllRecordLabels.ts @@ -1,35 +1,35 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { selectMany } from "#/utilities/sql/selectMany.js" -import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/application-metadata/models" -import { readAllRecordLabelsRouteDefinition } from "@arrhes/application-metadata/routes" -import { and, eq } from "drizzle-orm" - - -export const readAllRecordLabelsRoute = authFactory.createApp() - .post( - readAllRecordLabelsRouteDefinition.path, - bodyValidator(readAllRecordLabelsRouteDefinition.schemas.body), - async (c) => { - const body = c.req.valid("json") - - const readAllRecordLabels = await selectMany({ - database: c.var.clients.sql, - table: models.recordLabel, - where: (table) => ( - and( - eq(table.idOrganization, body.idOrganization), - eq(table.idYear, body.idYear), - ) - ) - }) - - return response({ - context: c, - statusCode: 200, - schema: readAllRecordLabelsRouteDefinition.schemas.return, - data: readAllRecordLabels, - }) - } +import { authFactory } from "../../../../../../../../factories/authFactory.js" +import { response } from "../../../../../../../../utilities/response.js" +import { selectMany } from "../../../../../../../../utilities/sql/selectMany.js" +import { bodyValidator } from "../../../../../../../../validators/bodyValidator.js" +import { models } from "@arrhes/application-metadata/models" +import { readAllRecordLabelsRouteDefinition } from "@arrhes/application-metadata/routes" +import { and, eq } from "drizzle-orm" + + +export const readAllRecordLabelsRoute = authFactory.createApp() + .post( + readAllRecordLabelsRouteDefinition.path, + bodyValidator(readAllRecordLabelsRouteDefinition.schemas.body), + async (c) => { + const body = c.req.valid("json") + + const readAllRecordLabels = await selectMany({ + database: c.var.clients.sql, + table: models.recordLabel, + where: (table) => ( + and( + eq(table.idOrganization, body.idOrganization), + eq(table.idYear, body.idYear), + ) + ) + }) + + return response({ + context: c, + statusCode: 200, + schema: readAllRecordLabelsRouteDefinition.schemas.return, + data: readAllRecordLabels, + }) + } ) \ No newline at end of file diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/recordLabelsRoutes.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/recordLabelsRoutes.ts index 23c2390..c731d76 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/recordLabelsRoutes.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/recordLabelsRoutes.ts @@ -1,11 +1,11 @@ -import { $idRecordLabelRoutes } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/$idRecordLabelRoutes.js" -import { createOneRecordLabelRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/createOneRecordLabel.js" -import { readAllRecordLabelsRoute } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/readAllRecordLabels.js" - - -export const recordLabelsRoutes = [ - createOneRecordLabelRoute, - readAllRecordLabelsRoute, - - ...$idRecordLabelRoutes, +import { $idRecordLabelRoutes } from "../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/$idRecordLabel/$idRecordLabelRoutes.js" +import { createOneRecordLabelRoute } from "../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/createOneRecordLabel.js" +import { readAllRecordLabelsRoute } from "../../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/readAllRecordLabels.js" + + +export const recordLabelsRoutes = [ + createOneRecordLabelRoute, + readAllRecordLabelsRoute, + + ...$idRecordLabelRoutes, ] \ No newline at end of file diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/yearSettingsRoute.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/yearSettingsRoute.ts index 0598f43..5a11f91 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/yearSettingsRoute.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/yearSettingsRoute.ts @@ -1,10 +1,10 @@ -import { accountsRoutes } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountsRoutes.js" -import { balanceSheetsRoutes } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetsRoutes.js" -import { computationsRoutes } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/computationsRoutes.js" -import { generalRoutes } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/generalRoutes.js" -import { incomeStatementsRoutes } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementsRoutes.js" -import { journalsRoutes } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/journalsRoutes.js" -import { recordLabelsRoutes } from "#/routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/recordLabelsRoutes.js" +import { accountsRoutes } from "../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/accounts/accountsRoutes.js" +import { balanceSheetsRoutes } from "../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/balanceSheets/balanceSheetsRoutes.js" +import { computationsRoutes } from "../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/computations/computationsRoutes.js" +import { generalRoutes } from "../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/general/generalRoutes.js" +import { incomeStatementsRoutes } from "../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/incomeStatements/incomeStatementsRoutes.js" +import { journalsRoutes } from "../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/journals/journalsRoutes.js" +import { recordLabelsRoutes } from "../../../../../../../routes/auth/organizations/$idOrganization/years/$idYear/yearSettings/recordLabels/recordLabelsRoutes.js" export const yearSettingsRoute = [ diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/createOneYear.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/createOneYear.ts index 7bf035f..bd02a41 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/createOneYear.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/createOneYear.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { insertOne } from "#/utilities/sql/insertOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../factories/authFactory.js" +import { response } from "../../../../../utilities/response.js" +import { insertOne } from "../../../../../utilities/sql/insertOne.js" +import { bodyValidator } from "../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { createOneYearRouteDefinition } from "@arrhes/application-metadata/routes" import { generateId } from "@arrhes/application-metadata/utilities" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/readAllYears.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/readAllYears.ts index 034bfa7..85026a3 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/readAllYears.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/readAllYears.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { selectMany } from "#/utilities/sql/selectMany.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../../../factories/authFactory.js" +import { response } from "../../../../../utilities/response.js" +import { selectMany } from "../../../../../utilities/sql/selectMany.js" +import { bodyValidator } from "../../../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { readAllYearsRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/$idOrganization/years/yearsRoutes.ts b/packages/api/src/routes/auth/organizations/$idOrganization/years/yearsRoutes.ts index 6617e46..a6cd038 100644 --- a/packages/api/src/routes/auth/organizations/$idOrganization/years/yearsRoutes.ts +++ b/packages/api/src/routes/auth/organizations/$idOrganization/years/yearsRoutes.ts @@ -1,11 +1,11 @@ -import { $idYearRoutes } from "#/routes/auth/organizations/$idOrganization/years/$idYear/$idYearRoutes.js" -import { createOneYearRoute } from "#/routes/auth/organizations/$idOrganization/years/createOneYear.js" -import { readAllYearsRoute } from "#/routes/auth/organizations/$idOrganization/years/readAllYears.js" - - -export const yearsRoutes = [ - createOneYearRoute, - readAllYearsRoute, - - ...$idYearRoutes, +import { $idYearRoutes } from "../../../../../routes/auth/organizations/$idOrganization/years/$idYear/$idYearRoutes.js" +import { createOneYearRoute } from "../../../../../routes/auth/organizations/$idOrganization/years/createOneYear.js" +import { readAllYearsRoute } from "../../../../../routes/auth/organizations/$idOrganization/years/readAllYears.js" + + +export const yearsRoutes = [ + createOneYearRoute, + readAllYearsRoute, + + ...$idYearRoutes, ] \ No newline at end of file diff --git a/packages/api/src/routes/auth/organizations/activateOrganizationMembership.ts b/packages/api/src/routes/auth/organizations/activateOrganizationMembership.ts index 139a5aa..5f733c4 100644 --- a/packages/api/src/routes/auth/organizations/activateOrganizationMembership.ts +++ b/packages/api/src/routes/auth/organizations/activateOrganizationMembership.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { updateOne } from "#/utilities/sql/updateOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../factories/authFactory.js" +import { response } from "../../../utilities/response.js" +import { updateOne } from "../../../utilities/sql/updateOne.js" +import { bodyValidator } from "../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { activateOrganizationMembershipRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/addNewOrganization.ts b/packages/api/src/routes/auth/organizations/addNewOrganization.ts index c1525c8..bcac0ff 100644 --- a/packages/api/src/routes/auth/organizations/addNewOrganization.ts +++ b/packages/api/src/routes/auth/organizations/addNewOrganization.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { insertOne } from "#/utilities/sql/insertOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../factories/authFactory.js" +import { response } from "../../../utilities/response.js" +import { insertOne } from "../../../utilities/sql/insertOne.js" +import { bodyValidator } from "../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { addNewOrganizationRouteDefinition } from "@arrhes/application-metadata/routes" import { generateId } from "@arrhes/application-metadata/utilities" diff --git a/packages/api/src/routes/auth/organizations/getAllMyOrganizations.ts b/packages/api/src/routes/auth/organizations/getAllMyOrganizations.ts index 262962f..592c449 100644 --- a/packages/api/src/routes/auth/organizations/getAllMyOrganizations.ts +++ b/packages/api/src/routes/auth/organizations/getAllMyOrganizations.ts @@ -1,6 +1,6 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../factories/authFactory.js" +import { response } from "../../../utilities/response.js" +import { bodyValidator } from "../../../validators/bodyValidator.js" import { getAllMyOrganizationsRouteDefinition } from "@arrhes/application-metadata/routes" import { and, eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/organizations/organizationsRoutes.ts b/packages/api/src/routes/auth/organizations/organizationsRoutes.ts index bda0010..2e33351 100644 --- a/packages/api/src/routes/auth/organizations/organizationsRoutes.ts +++ b/packages/api/src/routes/auth/organizations/organizationsRoutes.ts @@ -1,7 +1,7 @@ -import { $idOrganizationRoutes } from "#/routes/auth/organizations/$idOrganization/$idOrganizationRoutes.js" -import { activateOrganizationMembershipRoute } from "#/routes/auth/organizations/activateOrganizationMembership.js" -import { addNewOrganizationRoute } from "#/routes/auth/organizations/addNewOrganization.js" -import { getAllMyOrganizationsRoute } from "#/routes/auth/organizations/getAllMyOrganizations.js" +import { $idOrganizationRoutes } from "../../../routes/auth/organizations/$idOrganization/$idOrganizationRoutes.js" +import { activateOrganizationMembershipRoute } from "../../../routes/auth/organizations/activateOrganizationMembership.js" +import { addNewOrganizationRoute } from "../../../routes/auth/organizations/addNewOrganization.js" +import { getAllMyOrganizationsRoute } from "../../../routes/auth/organizations/getAllMyOrganizations.js" export const organizationsRoutes = [ diff --git a/packages/api/src/routes/auth/settings/activateUser.ts b/packages/api/src/routes/auth/settings/activateUser.ts index 6b58f28..78434ef 100644 --- a/packages/api/src/routes/auth/settings/activateUser.ts +++ b/packages/api/src/routes/auth/settings/activateUser.ts @@ -1,8 +1,8 @@ -import { authFactory } from "#/factories/authFactory.js" -import { Exception } from "#/utilities/exception.js" -import { response } from "#/utilities/response.js" -import { updateOne } from "#/utilities/sql/updateOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../factories/authFactory.js" +import { Exception } from "../../../utilities/exception.js" +import { response } from "../../../utilities/response.js" +import { updateOne } from "../../../utilities/sql/updateOne.js" +import { bodyValidator } from "../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { activateUserRouteDefinition } from "@arrhes/application-metadata/routes" import { eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/settings/readUserSession.ts b/packages/api/src/routes/auth/settings/readUserSession.ts index 2680529..c4542d0 100644 --- a/packages/api/src/routes/auth/settings/readUserSession.ts +++ b/packages/api/src/routes/auth/settings/readUserSession.ts @@ -1,6 +1,6 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../factories/authFactory.js" +import { response } from "../../../utilities/response.js" +import { bodyValidator } from "../../../validators/bodyValidator.js" import { readUserSessionRouteDefinition } from "@arrhes/application-metadata/routes" diff --git a/packages/api/src/routes/auth/settings/settingsRoutes.ts b/packages/api/src/routes/auth/settings/settingsRoutes.ts index a0d2ad1..5e7c9cc 100644 --- a/packages/api/src/routes/auth/settings/settingsRoutes.ts +++ b/packages/api/src/routes/auth/settings/settingsRoutes.ts @@ -1,9 +1,9 @@ -import { activateUserRoute } from "#/routes/auth/settings/activateUser.js" -import { readUserSessionRoute } from "#/routes/auth/settings/readUserSession.js" -import { updateUserRoute } from "#/routes/auth/settings/updateUser.js" -import { updateUserEmailRoute } from "#/routes/auth/settings/updateUserEmail.js" -import { updateUserPasswordRoute } from "#/routes/auth/settings/updateUserPassword.js" -import { validateUserEmailRoute } from "#/routes/auth/settings/validateUserEmail.js" +import { activateUserRoute } from "../../../routes/auth/settings/activateUser.js" +import { readUserSessionRoute } from "../../../routes/auth/settings/readUserSession.js" +import { updateUserRoute } from "../../../routes/auth/settings/updateUser.js" +import { updateUserEmailRoute } from "../../../routes/auth/settings/updateUserEmail.js" +import { updateUserPasswordRoute } from "../../../routes/auth/settings/updateUserPassword.js" +import { validateUserEmailRoute } from "../../../routes/auth/settings/validateUserEmail.js" export const settingsRoutes = [ diff --git a/packages/api/src/routes/auth/settings/updateUser.ts b/packages/api/src/routes/auth/settings/updateUser.ts index e537eb6..ad8673a 100644 --- a/packages/api/src/routes/auth/settings/updateUser.ts +++ b/packages/api/src/routes/auth/settings/updateUser.ts @@ -1,7 +1,7 @@ -import { authFactory } from "#/factories/authFactory.js" -import { response } from "#/utilities/response.js" -import { updateOne } from "#/utilities/sql/updateOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../factories/authFactory.js" +import { response } from "../../../utilities/response.js" +import { updateOne } from "../../../utilities/sql/updateOne.js" +import { bodyValidator } from "../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { updateUserRouteDefinition } from "@arrhes/application-metadata/routes" import { eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/settings/updateUserEmail.ts b/packages/api/src/routes/auth/settings/updateUserEmail.ts index 574da4c..11a9b9d 100644 --- a/packages/api/src/routes/auth/settings/updateUserEmail.ts +++ b/packages/api/src/routes/auth/settings/updateUserEmail.ts @@ -1,9 +1,9 @@ -import { authFactory } from "#/factories/authFactory.js" -import { Exception } from "#/utilities/exception.js" -import { generateVerificationToken } from "#/utilities/generateVerificationToken.js" -import { response } from "#/utilities/response.js" -import { updateOne } from "#/utilities/sql/updateOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../factories/authFactory.js" +import { Exception } from "../../../utilities/exception.js" +import { generateVerificationToken } from "../../../utilities/generateVerificationToken.js" +import { response } from "../../../utilities/response.js" +import { updateOne } from "../../../utilities/sql/updateOne.js" +import { bodyValidator } from "../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { updateUserEmailRouteDefinition } from "@arrhes/application-metadata/routes" import { pbkdf2Sync } from "crypto" diff --git a/packages/api/src/routes/auth/settings/updateUserPassword.ts b/packages/api/src/routes/auth/settings/updateUserPassword.ts index 95686e0..b09640b 100644 --- a/packages/api/src/routes/auth/settings/updateUserPassword.ts +++ b/packages/api/src/routes/auth/settings/updateUserPassword.ts @@ -1,8 +1,8 @@ -import { authFactory } from "#/factories/authFactory.js" -import { Exception } from "#/utilities/exception.js" -import { response } from "#/utilities/response.js" -import { updateOne } from "#/utilities/sql/updateOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../factories/authFactory.js" +import { Exception } from "../../../utilities/exception.js" +import { response } from "../../../utilities/response.js" +import { updateOne } from "../../../utilities/sql/updateOne.js" +import { bodyValidator } from "../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { updateUserPasswordRouteDefinition } from "@arrhes/application-metadata/routes" import { pbkdf2Sync } from "crypto" diff --git a/packages/api/src/routes/auth/settings/validateUserEmail.ts b/packages/api/src/routes/auth/settings/validateUserEmail.ts index c3f7eef..dfa41f3 100644 --- a/packages/api/src/routes/auth/settings/validateUserEmail.ts +++ b/packages/api/src/routes/auth/settings/validateUserEmail.ts @@ -1,8 +1,8 @@ -import { authFactory } from "#/factories/authFactory.js" -import { Exception } from "#/utilities/exception.js" -import { response } from "#/utilities/response.js" -import { updateOne } from "#/utilities/sql/updateOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../factories/authFactory.js" +import { Exception } from "../../../utilities/exception.js" +import { response } from "../../../utilities/response.js" +import { updateOne } from "../../../utilities/sql/updateOne.js" +import { bodyValidator } from "../../../validators/bodyValidator.js" import { models } from "@arrhes/application-metadata/models" import { validateUserEmailRouteDefinition } from "@arrhes/application-metadata/routes" import { eq } from "drizzle-orm" diff --git a/packages/api/src/routes/auth/support/sendSupportMessage.ts b/packages/api/src/routes/auth/support/sendSupportMessage.ts index 0cde9ab..863b9b6 100644 --- a/packages/api/src/routes/auth/support/sendSupportMessage.ts +++ b/packages/api/src/routes/auth/support/sendSupportMessage.ts @@ -1,8 +1,8 @@ -import { authFactory } from "#/factories/authFactory.js" -import { sendEmail } from "#/utilities/email/sendEmail.js" -import { supportTemplate } from "#/utilities/email/templates/support.js" -import { response } from "#/utilities/response.js" -import { bodyValidator } from "#/validators/bodyValidator.js" +import { authFactory } from "../../../factories/authFactory.js" +import { sendEmail } from "../../../utilities/email/sendEmail.js" +import { supportTemplate } from "../../../utilities/email/templates/support.js" +import { response } from "../../../utilities/response.js" +import { bodyValidator } from "../../../validators/bodyValidator.js" import { sendSupportMessageRouteDefinition } from "@arrhes/application-metadata/routes" diff --git a/packages/api/src/routes/auth/support/supportRoutes.ts b/packages/api/src/routes/auth/support/supportRoutes.ts index 10fbcf7..ab26ccd 100644 --- a/packages/api/src/routes/auth/support/supportRoutes.ts +++ b/packages/api/src/routes/auth/support/supportRoutes.ts @@ -1,4 +1,4 @@ -import { sendSupportMessageRoute } from "#/routes/auth/support/sendSupportMessage.js" +import { sendSupportMessageRoute } from "../../../routes/auth/support/sendSupportMessage.js" export const supportRoutes = [ diff --git a/packages/api/src/routes/public/publicRoute.ts b/packages/api/src/routes/public/publicRoute.ts index e6c74d4..5d43cbc 100644 --- a/packages/api/src/routes/public/publicRoute.ts +++ b/packages/api/src/routes/public/publicRoute.ts @@ -1,12 +1,12 @@ -import { publicFactory } from "#/factories/publicFactory.js" -import { sendMagicLinkRoute } from "#/routes/public/sendMagicLink.js" -import { signInRoute } from "#/routes/public/signIn.js" -import { signOutRoute } from "#/routes/public/signOut.js" -import { signUpRoute } from "#/routes/public/signUp.js" - - -export const publicRoute = publicFactory.createApp() - .route("/", signInRoute) - .route("/", signUpRoute) - .route("/", signOutRoute) - .route("/", sendMagicLinkRoute) +import { publicFactory } from "../../factories/publicFactory.js" +import { sendMagicLinkRoute } from "../../routes/public/sendMagicLink.js" +import { signInRoute } from "../../routes/public/signIn.js" +import { signOutRoute } from "../../routes/public/signOut.js" +import { signUpRoute } from "../../routes/public/signUp.js" + + +export const publicRoute = publicFactory.createApp() + .route("/", signInRoute) + .route("/", signUpRoute) + .route("/", signOutRoute) + .route("/", sendMagicLinkRoute) diff --git a/packages/api/src/routes/public/sendMagicLink.ts b/packages/api/src/routes/public/sendMagicLink.ts index e09fec3..9638bd0 100644 --- a/packages/api/src/routes/public/sendMagicLink.ts +++ b/packages/api/src/routes/public/sendMagicLink.ts @@ -1,32 +1,32 @@ -import { publicFactory } from "#/factories/publicFactory.js" -import { response } from "#/utilities/response.js" -import { selectOne } from "#/utilities/sql/selectOne.js" -import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/application-metadata/models" -import { sendMagicLinkRouteDefinition } from "@arrhes/application-metadata/routes" -import { eq } from "drizzle-orm" - - -export const sendMagicLinkRoute = publicFactory.createApp() - .post( - sendMagicLinkRouteDefinition.path, - bodyValidator(sendMagicLinkRouteDefinition.schemas.body), - async (c) => { - const body = c.req.valid("json") - - const user = await selectOne({ - database: c.var.clients.sql, - table: models.user, - where: (table) => ( - eq(table.email, body.email.trim().toLowerCase()) - ) - }) - - return response({ - context: c, - statusCode: 200, - schema: sendMagicLinkRouteDefinition.schemas.return, - data: {}, - }) - } +import { publicFactory } from "../../factories/publicFactory.js" +import { response } from "../../utilities/response.js" +import { selectOne } from "../../utilities/sql/selectOne.js" +import { bodyValidator } from "../../validators/bodyValidator.js" +import { models } from "@arrhes/application-metadata/models" +import { sendMagicLinkRouteDefinition } from "@arrhes/application-metadata/routes" +import { eq } from "drizzle-orm" + + +export const sendMagicLinkRoute = publicFactory.createApp() + .post( + sendMagicLinkRouteDefinition.path, + bodyValidator(sendMagicLinkRouteDefinition.schemas.body), + async (c) => { + const body = c.req.valid("json") + + const user = await selectOne({ + database: c.var.clients.sql, + table: models.user, + where: (table) => ( + eq(table.email, body.email.trim().toLowerCase()) + ) + }) + + return response({ + context: c, + statusCode: 200, + schema: sendMagicLinkRouteDefinition.schemas.return, + data: {}, + }) + } ) \ No newline at end of file diff --git a/packages/api/src/routes/public/signIn.ts b/packages/api/src/routes/public/signIn.ts index c563737..114fedd 100644 --- a/packages/api/src/routes/public/signIn.ts +++ b/packages/api/src/routes/public/signIn.ts @@ -1,100 +1,100 @@ -import { publicFactory } from "#/factories/publicFactory.js" -import { serializeCookie } from "#/utilities/cookies/serializeCookie.js" -import { signString } from "#/utilities/cookies/signString.js" -import { Exception } from "#/utilities/exception.js" -import { getRemoteAddress } from "#/utilities/getRemoteAddress.js" -import { response } from "#/utilities/response.js" -import { insertOne } from "#/utilities/sql/insertOne.js" -import { selectOne } from "#/utilities/sql/selectOne.js" -import { cookiePrefix, userSessionCookieMaxAge } from "#/utilities/variables.js" -import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/application-metadata/models" -import { signInRouteDefinition } from "@arrhes/application-metadata/routes" -import { generateId } from "@arrhes/application-metadata/utilities" -import { pbkdf2Sync } from "crypto" -import { eq } from "drizzle-orm" - - -export const signInRoute = publicFactory.createApp() - .post( - signInRouteDefinition.path, - bodyValidator(signInRouteDefinition.schemas.body), - async (c) => { - const body = c.req.valid("json") - - const user = await selectOne({ - database: c.var.clients.sql, - table: models.user, - where: (table) => ( - eq(table.email, body.email.trim().toLowerCase()) - ) - }) - - const passwordHash = pbkdf2Sync(body.password, user.passwordSalt, 128000, 64, "sha512").toString("hex") - if (passwordHash !== user.passwordHash) { - throw new Exception({ - statusCode: 400, - internalMessage: "Error signing in", - cause: "Password does not match the database one" - }) - } - - - // Store the session - const createUserSession = await insertOne({ - database: c.var.clients.sql, - table: models.userSession, - data: { - id: generateId(), - idUser: user.id, - isActive: true, - expiresAt: new Date(Date.now() + userSessionCookieMaxAge).toISOString(), - ip: getRemoteAddress({ context: c }), - createdAt: new Date().toISOString(), - lastUpdatedAt: null, - } - }) - - // Set cookies - c.res.headers.append( - "Set-Cookie", - serializeCookie({ - name: `${cookiePrefix}_${"id_user_session"}`, - value: signString({ - value: createUserSession.id, - secret: c.var.env.COOKIES_KEY, - }), - options: { - maxAge: userSessionCookieMaxAge, - httpOnly: true, - secure: true, - sameSite: "None", - domain: c.var.env.COOKIES_DOMAIN, - path: "/", - } - }) - ) - c.res.headers.append( - "Set-Cookie", - serializeCookie({ - name: `${cookiePrefix}_${"is_auth"}`, - value: String(true), - options: { - maxAge: userSessionCookieMaxAge, - httpOnly: false, - secure: true, - sameSite: "None", - domain: c.var.env.COOKIES_DOMAIN, - path: "/", - } - }) - ) - - return response({ - context: c, - statusCode: 200, - schema: signInRouteDefinition.schemas.return, - data: {}, - }) - } +import { publicFactory } from "../../factories/publicFactory.js" +import { serializeCookie } from "../../utilities/cookies/serializeCookie.js" +import { signString } from "../../utilities/cookies/signString.js" +import { Exception } from "../../utilities/exception.js" +import { getRemoteAddress } from "../../utilities/getRemoteAddress.js" +import { response } from "../../utilities/response.js" +import { insertOne } from "../../utilities/sql/insertOne.js" +import { selectOne } from "../../utilities/sql/selectOne.js" +import { cookiePrefix, userSessionCookieMaxAge } from "../../utilities/variables.js" +import { bodyValidator } from "../../validators/bodyValidator.js" +import { models } from "@arrhes/application-metadata/models" +import { signInRouteDefinition } from "@arrhes/application-metadata/routes" +import { generateId } from "@arrhes/application-metadata/utilities" +import { pbkdf2Sync } from "crypto" +import { eq } from "drizzle-orm" + + +export const signInRoute = publicFactory.createApp() + .post( + signInRouteDefinition.path, + bodyValidator(signInRouteDefinition.schemas.body), + async (c) => { + const body = c.req.valid("json") + + const user = await selectOne({ + database: c.var.clients.sql, + table: models.user, + where: (table) => ( + eq(table.email, body.email.trim().toLowerCase()) + ) + }) + + const passwordHash = pbkdf2Sync(body.password, user.passwordSalt, 128000, 64, "sha512").toString("hex") + if (passwordHash !== user.passwordHash) { + throw new Exception({ + statusCode: 400, + internalMessage: "Error signing in", + cause: "Password does not match the database one" + }) + } + + + // Store the session + const createUserSession = await insertOne({ + database: c.var.clients.sql, + table: models.userSession, + data: { + id: generateId(), + idUser: user.id, + isActive: true, + expiresAt: new Date(Date.now() + userSessionCookieMaxAge).toISOString(), + ip: getRemoteAddress({ context: c }), + createdAt: new Date().toISOString(), + lastUpdatedAt: null, + } + }) + + // Set cookies + c.res.headers.append( + "Set-Cookie", + serializeCookie({ + name: `${cookiePrefix}_${"id_user_session"}`, + value: signString({ + value: createUserSession.id, + secret: c.var.env.COOKIES_KEY, + }), + options: { + maxAge: userSessionCookieMaxAge, + httpOnly: true, + secure: true, + sameSite: "None", + domain: c.var.env.COOKIES_DOMAIN, + path: "/", + } + }) + ) + c.res.headers.append( + "Set-Cookie", + serializeCookie({ + name: `${cookiePrefix}_${"is_auth"}`, + value: String(true), + options: { + maxAge: userSessionCookieMaxAge, + httpOnly: false, + secure: true, + sameSite: "None", + domain: c.var.env.COOKIES_DOMAIN, + path: "/", + } + }) + ) + + return response({ + context: c, + statusCode: 200, + schema: signInRouteDefinition.schemas.return, + data: {}, + }) + } ) \ No newline at end of file diff --git a/packages/api/src/routes/public/signOut.ts b/packages/api/src/routes/public/signOut.ts index e7b404c..72901ec 100644 --- a/packages/api/src/routes/public/signOut.ts +++ b/packages/api/src/routes/public/signOut.ts @@ -1,91 +1,91 @@ -import { publicFactory } from "#/factories/publicFactory.js" -import { parseCookies } from "#/utilities/cookies/parseCookies.js" -import { serializeCookie } from "#/utilities/cookies/serializeCookie.js" -import { unsignString } from "#/utilities/cookies/unsignString.js" -import { Exception } from "#/utilities/exception.js" -import { response } from "#/utilities/response.js" -import { updateOne } from "#/utilities/sql/updateOne.js" -import { cookiePrefix, userSessionCookieMaxAge } from "#/utilities/variables.js" -import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/application-metadata/models" -import { signOutRouteDefinition } from "@arrhes/application-metadata/routes" -import { eq } from "drizzle-orm" - - -export const signOutRoute = publicFactory.createApp() - .post( - signOutRouteDefinition.path, - bodyValidator(signOutRouteDefinition.schemas.body), - async (c) => { - // const body = c.req.valid("json") - - try { - const idUserSession = unsignString({ - signedValue: parseCookies({ value: c.req.header("cookie") })[`${cookiePrefix}_${"id_user_session"}`], - secret: c.var.env.COOKIES_KEY, - }) - - if (idUserSession === undefined) { - throw new Exception({ - statusCode: 401, - internalMessage: "Invalid session", - cause: "idUserSession not found in signed cookie" - }) - } - - await updateOne({ - database: c.var.clients.sql, - table: models.userSession, - data: { - lastUpdatedAt: new Date().toISOString(), - isActive: false, - }, - where: (table) => ( - eq(table.id, idUserSession) - ) - }) - } - catch (erro: unknown) { - // do nothing - } - - - c.res.headers.append( - "Set-Cookie", - serializeCookie({ - name: `${cookiePrefix}_${"id_user_session"}`, - value: "", - options: { - maxAge: userSessionCookieMaxAge, - httpOnly: true, - secure: true, - sameSite: "None", - domain: c.var.env.COOKIES_DOMAIN, - path: "/", - } - }) - ) - c.res.headers.append( - "Set-Cookie", - serializeCookie({ - name: `${cookiePrefix}_${"is_auth"}`, - value: String(false), - options: { - maxAge: userSessionCookieMaxAge, - httpOnly: false, - secure: true, - sameSite: "None", - domain: c.var.env.COOKIES_DOMAIN, - path: "/", - } - }) - ) - - return response({ - context: c, - statusCode: 200, - schema: signOutRouteDefinition.schemas.return, - data: {}, - }) - } +import { publicFactory } from "../../factories/publicFactory.js" +import { parseCookies } from "../../utilities/cookies/parseCookies.js" +import { serializeCookie } from "../../utilities/cookies/serializeCookie.js" +import { unsignString } from "../../utilities/cookies/unsignString.js" +import { Exception } from "../../utilities/exception.js" +import { response } from "../../utilities/response.js" +import { updateOne } from "../../utilities/sql/updateOne.js" +import { cookiePrefix, userSessionCookieMaxAge } from "../../utilities/variables.js" +import { bodyValidator } from "../../validators/bodyValidator.js" +import { models } from "@arrhes/application-metadata/models" +import { signOutRouteDefinition } from "@arrhes/application-metadata/routes" +import { eq } from "drizzle-orm" + + +export const signOutRoute = publicFactory.createApp() + .post( + signOutRouteDefinition.path, + bodyValidator(signOutRouteDefinition.schemas.body), + async (c) => { + // const body = c.req.valid("json") + + try { + const idUserSession = unsignString({ + signedValue: parseCookies({ value: c.req.header("cookie") })[`${cookiePrefix}_${"id_user_session"}`], + secret: c.var.env.COOKIES_KEY, + }) + + if (idUserSession === undefined) { + throw new Exception({ + statusCode: 401, + internalMessage: "Invalid session", + cause: "idUserSession not found in signed cookie" + }) + } + + await updateOne({ + database: c.var.clients.sql, + table: models.userSession, + data: { + lastUpdatedAt: new Date().toISOString(), + isActive: false, + }, + where: (table) => ( + eq(table.id, idUserSession) + ) + }) + } + catch (erro: unknown) { + // do nothing + } + + + c.res.headers.append( + "Set-Cookie", + serializeCookie({ + name: `${cookiePrefix}_${"id_user_session"}`, + value: "", + options: { + maxAge: userSessionCookieMaxAge, + httpOnly: true, + secure: true, + sameSite: "None", + domain: c.var.env.COOKIES_DOMAIN, + path: "/", + } + }) + ) + c.res.headers.append( + "Set-Cookie", + serializeCookie({ + name: `${cookiePrefix}_${"is_auth"}`, + value: String(false), + options: { + maxAge: userSessionCookieMaxAge, + httpOnly: false, + secure: true, + sameSite: "None", + domain: c.var.env.COOKIES_DOMAIN, + path: "/", + } + }) + ) + + return response({ + context: c, + statusCode: 200, + schema: signOutRouteDefinition.schemas.return, + data: {}, + }) + } ) \ No newline at end of file diff --git a/packages/api/src/routes/public/signUp.ts b/packages/api/src/routes/public/signUp.ts index df7745b..c54e782 100644 --- a/packages/api/src/routes/public/signUp.ts +++ b/packages/api/src/routes/public/signUp.ts @@ -1,125 +1,125 @@ -import { publicFactory } from "#/factories/publicFactory.js" -import { serializeCookie } from "#/utilities/cookies/serializeCookie.js" -import { signString } from "#/utilities/cookies/signString.js" -import { Exception } from "#/utilities/exception.js" -import { generateVerificationToken } from "#/utilities/generateVerificationToken.js" -import { getRemoteAddress } from "#/utilities/getRemoteAddress.js" -import { response } from "#/utilities/response.js" -import { insertOne } from "#/utilities/sql/insertOne.js" -import { cookiePrefix, userSessionCookieMaxAge } from "#/utilities/variables.js" -import { bodyValidator } from "#/validators/bodyValidator.js" -import { models } from "@arrhes/application-metadata/models" -import { signUpRouteDefinition } from "@arrhes/application-metadata/routes" -import { generateId } from "@arrhes/application-metadata/utilities" -import { pbkdf2Sync } from "crypto" - - -export const signUpRoute = publicFactory.createApp() - .post( - signUpRouteDefinition.path, - bodyValidator(signUpRouteDefinition.schemas.body), - async (c) => { - const body = c.req.valid("json") - - if (body.password !== body.passwordCheck) { - throw new Exception({ - statusCode: 400, - internalMessage: "Different passwords", - externalMessage: "Les mots de passe renseignés sont différents" - }) - } - - const createUserSession = await c.var.clients.sql.transaction(async (tx) => { - - const passwordSalt = generateId() - const passwordHash = pbkdf2Sync(body.password, passwordSalt, 128000, 64, "sha512").toString("hex") - - const createUser = await insertOne({ - database: tx, - table: models.user, - data: { - id: generateId(), - isActive: true, - alias: null, - email: body.email, - isEmailValidated: false, - emailToken: generateVerificationToken(), - emailTokenExpiresAt: new Date(new Date().getTime() + (60 * 60 * 1000)).toISOString(), - passwordHash: passwordHash, - passwordSalt: passwordSalt, - createdAt: new Date().toISOString(), - lastUpdatedAt: null, - } - }) - - // Store the session - const createUserSession = await insertOne({ - database: tx, - table: models.userSession, - data: { - id: generateId(), - idUser: createUser.id, - isActive: true, - expiresAt: new Date(Date.now() + userSessionCookieMaxAge).toISOString(), - ip: getRemoteAddress({ context: c }), - createdAt: new Date().toISOString(), - lastUpdatedAt: null, - } - }) - - return createUserSession - }) - - - // Set cookies - c.res.headers.append( - "Set-Cookie", - serializeCookie({ - name: `${cookiePrefix}_${"id_user_session"}`, - value: signString({ - value: createUserSession.id, - secret: c.var.env.COOKIES_KEY, - }), - options: { - maxAge: userSessionCookieMaxAge, - httpOnly: true, - secure: true, - sameSite: "None", - domain: c.var.env.COOKIES_DOMAIN, - path: "/", - } - }) - ) - c.res.headers.append( - "Set-Cookie", - serializeCookie({ - name: `${cookiePrefix}_${"is_auth"}`, - value: String(true), - options: { - maxAge: userSessionCookieMaxAge, - httpOnly: false, - secure: true, - sameSite: "None", - domain: c.var.env.COOKIES_DOMAIN, - path: "/", - } - }) - ) - - - // await sendEmail({ - // to: userResponse.email, - // subject: "Valider votre email", - // html: emailValidationTemplate({ - // url: `${urlApp}/services/email?id=${userResponse.id}&token=${userResponse.emailToken}`, - // }) - // }) - - return response({ - context: c, - statusCode: 200, - schema: signUpRouteDefinition.schemas.return, - data: {}, - }) - } +import { publicFactory } from "../../factories/publicFactory.js" +import { serializeCookie } from "../../utilities/cookies/serializeCookie.js" +import { signString } from "../../utilities/cookies/signString.js" +import { Exception } from "../../utilities/exception.js" +import { generateVerificationToken } from "../../utilities/generateVerificationToken.js" +import { getRemoteAddress } from "../../utilities/getRemoteAddress.js" +import { response } from "../../utilities/response.js" +import { insertOne } from "../../utilities/sql/insertOne.js" +import { cookiePrefix, userSessionCookieMaxAge } from "../../utilities/variables.js" +import { bodyValidator } from "../../validators/bodyValidator.js" +import { models } from "@arrhes/application-metadata/models" +import { signUpRouteDefinition } from "@arrhes/application-metadata/routes" +import { generateId } from "@arrhes/application-metadata/utilities" +import { pbkdf2Sync } from "crypto" + + +export const signUpRoute = publicFactory.createApp() + .post( + signUpRouteDefinition.path, + bodyValidator(signUpRouteDefinition.schemas.body), + async (c) => { + const body = c.req.valid("json") + + if (body.password !== body.passwordCheck) { + throw new Exception({ + statusCode: 400, + internalMessage: "Different passwords", + externalMessage: "Les mots de passe renseignés sont différents" + }) + } + + const createUserSession = await c.var.clients.sql.transaction(async (tx) => { + + const passwordSalt = generateId() + const passwordHash = pbkdf2Sync(body.password, passwordSalt, 128000, 64, "sha512").toString("hex") + + const createUser = await insertOne({ + database: tx, + table: models.user, + data: { + id: generateId(), + isActive: true, + alias: null, + email: body.email, + isEmailValidated: false, + emailToken: generateVerificationToken(), + emailTokenExpiresAt: new Date(new Date().getTime() + (60 * 60 * 1000)).toISOString(), + passwordHash: passwordHash, + passwordSalt: passwordSalt, + createdAt: new Date().toISOString(), + lastUpdatedAt: null, + } + }) + + // Store the session + const createUserSession = await insertOne({ + database: tx, + table: models.userSession, + data: { + id: generateId(), + idUser: createUser.id, + isActive: true, + expiresAt: new Date(Date.now() + userSessionCookieMaxAge).toISOString(), + ip: getRemoteAddress({ context: c }), + createdAt: new Date().toISOString(), + lastUpdatedAt: null, + } + }) + + return createUserSession + }) + + + // Set cookies + c.res.headers.append( + "Set-Cookie", + serializeCookie({ + name: `${cookiePrefix}_${"id_user_session"}`, + value: signString({ + value: createUserSession.id, + secret: c.var.env.COOKIES_KEY, + }), + options: { + maxAge: userSessionCookieMaxAge, + httpOnly: true, + secure: true, + sameSite: "None", + domain: c.var.env.COOKIES_DOMAIN, + path: "/", + } + }) + ) + c.res.headers.append( + "Set-Cookie", + serializeCookie({ + name: `${cookiePrefix}_${"is_auth"}`, + value: String(true), + options: { + maxAge: userSessionCookieMaxAge, + httpOnly: false, + secure: true, + sameSite: "None", + domain: c.var.env.COOKIES_DOMAIN, + path: "/", + } + }) + ) + + + // await sendEmail({ + // to: userResponse.email, + // subject: "Valider votre email", + // html: emailValidationTemplate({ + // url: `${urlApp}/services/email?id=${userResponse.id}&token=${userResponse.emailToken}`, + // }) + // }) + + return response({ + context: c, + statusCode: 200, + schema: signUpRouteDefinition.schemas.return, + data: {}, + }) + } ) \ No newline at end of file diff --git a/packages/api/src/routes/routes.ts b/packages/api/src/routes/routes.ts index 0295df0..0f5885e 100644 --- a/packages/api/src/routes/routes.ts +++ b/packages/api/src/routes/routes.ts @@ -1,8 +1,8 @@ -import { apiFactory } from "#/factories/apiFactory.js" -import { authRoute } from "#/routes/auth/authRoute.js" -import { publicRoute } from "#/routes/public/publicRoute.js" - - -export const routes = apiFactory.createApp() - .route("/", authRoute) - .route("/", publicRoute) +import { apiFactory } from "../factories/apiFactory.js" +import { authRoute } from "../routes/auth/authRoute.js" +import { publicRoute } from "../routes/public/publicRoute.js" + + +export const routes = apiFactory.createApp() + .route("/", authRoute) + .route("/", publicRoute) diff --git a/packages/api/src/server.ts b/packages/api/src/server.ts index 1e28abe..570ad57 100644 --- a/packages/api/src/server.ts +++ b/packages/api/src/server.ts @@ -1,6 +1,6 @@ -import { api } from "#/api.js" -import { getClients } from "#/utilities/getClients.js" -import { getEnv } from "#/utilities/getEnv.js" +import { api } from "./api.js" +import { getClients } from "./utilities/getClients.js" +import { getEnv } from "./utilities/getEnv.js" import { createServer } from "http" diff --git a/packages/api/src/utilities/apiLog.ts b/packages/api/src/utilities/apiLog.ts index 3b271d1..42552ff 100644 --- a/packages/api/src/utilities/apiLog.ts +++ b/packages/api/src/utilities/apiLog.ts @@ -1,5 +1,5 @@ -import { getClients } from "#/utilities/getClients.js" -import { getEnv } from "#/utilities/getEnv.js" +import { getClients } from "../utilities/getClients.js" +import { getEnv } from "../utilities/getEnv.js" type ApiLog = { diff --git a/packages/api/src/utilities/cookies/parseCookies.ts b/packages/api/src/utilities/cookies/parseCookies.ts index 326a649..5d12bb4 100644 --- a/packages/api/src/utilities/cookies/parseCookies.ts +++ b/packages/api/src/utilities/cookies/parseCookies.ts @@ -1,4 +1,4 @@ -import { Exception } from "#/utilities/exception.js" +import { Exception } from "../../utilities/exception.js" export function parseCookies(parameters: { diff --git a/packages/api/src/utilities/cookies/signString.ts b/packages/api/src/utilities/cookies/signString.ts index 493f88f..3a521c1 100644 --- a/packages/api/src/utilities/cookies/signString.ts +++ b/packages/api/src/utilities/cookies/signString.ts @@ -1,4 +1,4 @@ -import { Exception } from "#/utilities/exception.js" +import { Exception } from "../../utilities/exception.js" import { createHmac } from "crypto" diff --git a/packages/api/src/utilities/cookies/unsignString.ts b/packages/api/src/utilities/cookies/unsignString.ts index e42dded..d95065c 100644 --- a/packages/api/src/utilities/cookies/unsignString.ts +++ b/packages/api/src/utilities/cookies/unsignString.ts @@ -1,5 +1,5 @@ -import { signString } from "#/utilities/cookies/signString.js" -import { Exception } from "#/utilities/exception.js" +import { signString } from "../../utilities/cookies/signString.js" +import { Exception } from "../../utilities/exception.js" import { timingSafeEqual } from "crypto" diff --git a/packages/api/src/utilities/email/sendEmail.ts b/packages/api/src/utilities/email/sendEmail.ts index de1473a..c1c3ea8 100644 --- a/packages/api/src/utilities/email/sendEmail.ts +++ b/packages/api/src/utilities/email/sendEmail.ts @@ -1,36 +1,36 @@ -import { Exception } from "#/utilities/exception.js" -import { getClients } from "#/utilities/getClients.js" -import { getEnv } from "#/utilities/getEnv.js" - - -export async function sendEmail(parameters: { - var: { - env: ReturnType - clients: Awaited> - }, - subject: string - from?: string - to: string | string[] - html: string - // attachments?: { - // content: Buffer | string | undefined - // filename: string - // }[] -}) { - try { - const response = await parameters.var.clients.email.sendMail(parameters) - - if (!response.accepted) { - throw new Exception({ - internalMessage: "Email not sent", - cause: response.rejected.toString() - }) - } - } - catch (error: unknown) { - throw new Exception({ - internalMessage: "Email not sent", - rawError: error - }) - } -} +import { Exception } from "../../utilities/exception.js" +import { getClients } from "../../utilities/getClients.js" +import { getEnv } from "../../utilities/getEnv.js" + + +export async function sendEmail(parameters: { + var: { + env: ReturnType + clients: Awaited> + }, + subject: string + from?: string + to: string | string[] + html: string + // attachments?: { + // content: Buffer | string | undefined + // filename: string + // }[] +}) { + try { + const response = await parameters.var.clients.email.sendMail(parameters) + + if (!response.accepted) { + throw new Exception({ + internalMessage: "Email not sent", + cause: response.rejected.toString() + }) + } + } + catch (error: unknown) { + throw new Exception({ + internalMessage: "Email not sent", + rawError: error + }) + } +} diff --git a/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetAssets/balanceSheetAssetsReportItem.tsx b/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetAssets/balanceSheetAssetsReportItem.tsx index 6422999..569176f 100644 --- a/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetAssets/balanceSheetAssetsReportItem.tsx +++ b/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetAssets/balanceSheetAssetsReportItem.tsx @@ -1,6 +1,6 @@ -import { BalanceSheetAssetsReportRow } from "#/utilities/email/templates/balanceSheetReport/balanceSheetAssets/balanceSheetAssetsReportRow.js" -import { getBalanceSheetChildren } from "#/utilities/email/templates/balanceSheetReport/getBalanceSheetChildren.js" -import { numberToRomanString } from "#/utilities/numberToRomanString.js" +import { BalanceSheetAssetsReportRow } from "./balanceSheetAssetsReportRow.js" +import { getBalanceSheetChildren } from "../getBalanceSheetChildren.js" +import { numberToRomanString } from "../../../../numberToRomanString.js" import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { Style } from "hono/css" import { Fragment } from "hono/jsx/jsx-runtime" diff --git a/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetAssets/balanceSheetAssetsReportRow.tsx b/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetAssets/balanceSheetAssetsReportRow.tsx index 1301e15..f72797a 100644 --- a/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetAssets/balanceSheetAssetsReportRow.tsx +++ b/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetAssets/balanceSheetAssetsReportRow.tsx @@ -1,5 +1,5 @@ -import { PriceFormat } from "#/utilities/email/templates/components/price/priceFormat.js" -import { Table } from "#/utilities/email/templates/components/table/table.js" +import { PriceFormat } from "../../components/price/priceFormat.js" +import { Table } from "../../components/table/table.js" import { Style, css, cx } from "hono/css" import { Fragment } from "hono/jsx/jsx-runtime" diff --git a/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetAssets/balanceSheetAssetsReportTable.tsx b/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetAssets/balanceSheetAssetsReportTable.tsx index 4de09e6..32b7c7e 100644 --- a/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetAssets/balanceSheetAssetsReportTable.tsx +++ b/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetAssets/balanceSheetAssetsReportTable.tsx @@ -1,7 +1,7 @@ -import { BalanceSheetAssetsReportItem } from "#/utilities/email/templates/balanceSheetReport/balanceSheetAssets/balanceSheetAssetsReportItem.js" -import { BalanceSheetAssetsReportRow } from "#/utilities/email/templates/balanceSheetReport/balanceSheetAssets/balanceSheetAssetsReportRow.js" -import { getBalanceSheetChildren } from "#/utilities/email/templates/balanceSheetReport/getBalanceSheetChildren.js" -import { Table } from "#/utilities/email/templates/components/table/table.js" +import { BalanceSheetAssetsReportItem } from "./balanceSheetAssetsReportItem.js" +import { BalanceSheetAssetsReportRow } from "./balanceSheetAssetsReportRow.js" +import { getBalanceSheetChildren } from "../getBalanceSheetChildren.js" +import { Table } from "../../components/table/table.js" import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { Style, css } from "hono/css" import { Fragment } from "hono/jsx/jsx-runtime" diff --git a/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetLiabilities/balanceSheetLiabilitiesReportItem.tsx b/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetLiabilities/balanceSheetLiabilitiesReportItem.tsx index 8aadb4d..6f18315 100644 --- a/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetLiabilities/balanceSheetLiabilitiesReportItem.tsx +++ b/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetLiabilities/balanceSheetLiabilitiesReportItem.tsx @@ -1,6 +1,6 @@ -import { BalanceSheetLiabilitiesReportRow } from "#/utilities/email/templates/balanceSheetReport/balanceSheetLiabilities/balanceSheetLiabilitiesReportRow.js" -import { getBalanceSheetChildren } from "#/utilities/email/templates/balanceSheetReport/getBalanceSheetChildren.js" -import { numberToRomanString } from "#/utilities/numberToRomanString.js" +import { BalanceSheetLiabilitiesReportRow } from "./balanceSheetLiabilitiesReportRow.js" +import { getBalanceSheetChildren } from "../getBalanceSheetChildren.js" +import { numberToRomanString } from "../../../../numberToRomanString.js" import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { Style } from "hono/css" import { Fragment } from "hono/jsx/jsx-runtime" diff --git a/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetLiabilities/balanceSheetLiabilitiesReportRow.tsx b/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetLiabilities/balanceSheetLiabilitiesReportRow.tsx index 444cd82..cb00c74 100644 --- a/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetLiabilities/balanceSheetLiabilitiesReportRow.tsx +++ b/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetLiabilities/balanceSheetLiabilitiesReportRow.tsx @@ -1,5 +1,5 @@ -import { PriceFormat } from "#/utilities/email/templates/components/price/priceFormat.js" -import { Table } from "#/utilities/email/templates/components/table/table.js" +import { PriceFormat } from "../../components/price/priceFormat.js" +import { Table } from "../../components/table/table.js" import { Style, css, cx } from "hono/css" import { Fragment } from "hono/jsx/jsx-runtime" diff --git a/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetLiabilities/balanceSheetLiabilitiesReportTable.tsx b/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetLiabilities/balanceSheetLiabilitiesReportTable.tsx index a1b268f..4f2dd73 100644 --- a/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetLiabilities/balanceSheetLiabilitiesReportTable.tsx +++ b/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetLiabilities/balanceSheetLiabilitiesReportTable.tsx @@ -1,7 +1,7 @@ -import { BalanceSheetLiabilitiesReportItem } from "#/utilities/email/templates/balanceSheetReport/balanceSheetLiabilities/balanceSheetLiabilitiesReportItem.js" -import { BalanceSheetLiabilitiesReportRow } from "#/utilities/email/templates/balanceSheetReport/balanceSheetLiabilities/balanceSheetLiabilitiesReportRow.js" -import { getBalanceSheetChildren } from "#/utilities/email/templates/balanceSheetReport/getBalanceSheetChildren.js" -import { Table } from "#/utilities/email/templates/components/table/table.js" +import { BalanceSheetLiabilitiesReportItem } from "./balanceSheetLiabilitiesReportItem.js" +import { BalanceSheetLiabilitiesReportRow } from "./balanceSheetLiabilitiesReportRow.js" +import { getBalanceSheetChildren } from "../getBalanceSheetChildren.js" +import { Table } from "../../components/table/table.js" import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { Style, css } from "hono/css" import { Fragment } from "hono/jsx/jsx-runtime" diff --git a/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetReport.tsx b/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetReport.tsx index 7ac2dae..c837dc0 100644 --- a/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetReport.tsx +++ b/packages/api/src/utilities/email/templates/balanceSheetReport/balanceSheetReport.tsx @@ -1,5 +1,5 @@ -import { BalanceSheetAssetsReportTable } from "#/utilities/email/templates/balanceSheetReport/balanceSheetAssets/balanceSheetAssetsReportTable.js" -import { BalanceSheetLiabilitiesReportTable } from "#/utilities/email/templates/balanceSheetReport/balanceSheetLiabilities/balanceSheetLiabilitiesReportTable.js" +import { BalanceSheetAssetsReportTable } from "./balanceSheetAssets/balanceSheetAssetsReportTable.js" +import { BalanceSheetLiabilitiesReportTable } from "./balanceSheetLiabilities/balanceSheetLiabilitiesReportTable.js" import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { Style, css } from "hono/css" import * as v from "valibot" diff --git a/packages/api/src/utilities/email/templates/incomeStatementReport/incomeStatementReport.tsx b/packages/api/src/utilities/email/templates/incomeStatementReport/incomeStatementReport.tsx index fc4d517..f8a124b 100644 --- a/packages/api/src/utilities/email/templates/incomeStatementReport/incomeStatementReport.tsx +++ b/packages/api/src/utilities/email/templates/incomeStatementReport/incomeStatementReport.tsx @@ -1,4 +1,4 @@ -import { IncomeStatementsReportTable } from "#/utilities/email/templates/incomeStatementReport/incomeStatementsReportTable.js" +import { IncomeStatementsReportTable } from "./incomeStatementsReportTable.js" import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { Style, css } from "hono/css" import * as v from "valibot" diff --git a/packages/api/src/utilities/email/templates/incomeStatementReport/incomeStatementReportItem.tsx b/packages/api/src/utilities/email/templates/incomeStatementReport/incomeStatementReportItem.tsx index cd982a6..467f783 100644 --- a/packages/api/src/utilities/email/templates/incomeStatementReport/incomeStatementReportItem.tsx +++ b/packages/api/src/utilities/email/templates/incomeStatementReport/incomeStatementReportItem.tsx @@ -1,6 +1,6 @@ -import { getIncomeStatementChildren } from "#/utilities/email/templates/incomeStatementReport/getIncomeStatementChildren.js" -import { IncomeStatementReportRow } from "#/utilities/email/templates/incomeStatementReport/incomeStatementReportRow.js" -import { numberToRomanString } from "#/utilities/numberToRomanString.js" +import { getIncomeStatementChildren } from "./getIncomeStatementChildren.js" +import { IncomeStatementReportRow } from "./incomeStatementReportRow.js" +import { numberToRomanString } from "../../../numberToRomanString.js" import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { Fragment } from "hono/jsx/jsx-runtime" import * as v from "valibot" diff --git a/packages/api/src/utilities/email/templates/incomeStatementReport/incomeStatementReportRow.tsx b/packages/api/src/utilities/email/templates/incomeStatementReport/incomeStatementReportRow.tsx index b3b795f..5f0f737 100644 --- a/packages/api/src/utilities/email/templates/incomeStatementReport/incomeStatementReportRow.tsx +++ b/packages/api/src/utilities/email/templates/incomeStatementReport/incomeStatementReportRow.tsx @@ -1,5 +1,5 @@ -import { PriceFormat } from "#/utilities/email/templates/components/price/priceFormat.js" -import { Table } from "#/utilities/email/templates/components/table/table.js" +import { PriceFormat } from "../components/price/priceFormat.js" +import { Table } from "../components/table/table.js" import { css, cx, Style } from "hono/css" import { Fragment } from "hono/jsx/jsx-runtime" diff --git a/packages/api/src/utilities/email/templates/incomeStatementReport/incomeStatementsReportTable.tsx b/packages/api/src/utilities/email/templates/incomeStatementReport/incomeStatementsReportTable.tsx index 1b61987..3fe9766 100644 --- a/packages/api/src/utilities/email/templates/incomeStatementReport/incomeStatementsReportTable.tsx +++ b/packages/api/src/utilities/email/templates/incomeStatementReport/incomeStatementsReportTable.tsx @@ -1,8 +1,8 @@ -import { PriceFormat } from "#/utilities/email/templates/components/price/priceFormat.js" -import { Table } from "#/utilities/email/templates/components/table/table.js" -import { getIncomeStatementChildren } from "#/utilities/email/templates/incomeStatementReport/getIncomeStatementChildren.js" -import { IncomeStatementReportItem } from "#/utilities/email/templates/incomeStatementReport/incomeStatementReportItem.js" -import { numberToRomanString } from "#/utilities/numberToRomanString.js" +import { PriceFormat } from "../components/price/priceFormat.js" +import { Table } from "../components/table/table.js" +import { getIncomeStatementChildren } from "./getIncomeStatementChildren.js" +import { IncomeStatementReportItem } from "./incomeStatementReportItem.js" +import { numberToRomanString } from "../../../numberToRomanString.js" import { returnedSchemas } from "@arrhes/application-metadata/schemas" import { css } from "hono/css" import * as v from "valibot" diff --git a/packages/api/src/utilities/getClients.ts b/packages/api/src/utilities/getClients.ts index 4678a0a..23d3338 100644 --- a/packages/api/src/utilities/getClients.ts +++ b/packages/api/src/utilities/getClients.ts @@ -1,7 +1,7 @@ -import { emailClient } from "#/clients/emailClient.js" -import { sqlClient } from "#/clients/sqlClient.js" -import { storageClient } from "#/clients/storageClient.js" -import { getEnv } from "#/utilities/getEnv.js" +import { emailClient } from "../clients/emailClient.js" +import { sqlClient } from "../clients/sqlClient.js" +import { storageClient } from "../clients/storageClient.js" +import { getEnv } from "../utilities/getEnv.js" export async function getClients(env: ReturnType) { diff --git a/packages/api/src/utilities/getEnv.ts b/packages/api/src/utilities/getEnv.ts index 2307402..303a135 100644 --- a/packages/api/src/utilities/getEnv.ts +++ b/packages/api/src/utilities/getEnv.ts @@ -1,45 +1,45 @@ -import { validate } from "#/utilities/validate.js" -import * as v from "valibot" - - -enum Env { - development = "development", - production = "production" -} - -const envSchema = v.object({ - ENV: v.enum_(Env), - VERBOSE: v.picklist(["true", "false"]), - PORT: v.string(), - - CORS_ORIGIN: v.string(), - COOKIES_DOMAIN: v.string(), - COOKIES_KEY: v.string(), - - API_BASE_URL: v.string(), - PLATFORM_BASE_URL: v.string(), - WEBSITE_BASE_URL: v.string(), - - SQL_DATABASE_URL: v.string(), - - STORAGE_ENDPOINT: v.string(), - STORAGE_BUCKET_NAME: v.string(), - STORAGE_ACCESS_KEY: v.string(), - STORAGE_SECRET_KEY: v.string(), - - EMAIL_ENDPOINT: v.string(), - EMAIL_USER: v.string(), - EMAIL_PASSWORD: v.string(), -}) - - -export function getEnv() { - const parsedEnv = validate({ - schema: envSchema, - // @ts-ignore - data: process.env, - message: "Missing environment variables", - }) - - return parsedEnv -} +import { validate } from "../utilities/validate.js" +import * as v from "valibot" + + +enum Env { + development = "development", + production = "production" +} + +const envSchema = v.object({ + ENV: v.enum_(Env), + VERBOSE: v.picklist(["true", "false"]), + PORT: v.string(), + + CORS_ORIGIN: v.string(), + COOKIES_DOMAIN: v.string(), + COOKIES_KEY: v.string(), + + API_BASE_URL: v.string(), + PLATFORM_BASE_URL: v.string(), + WEBSITE_BASE_URL: v.string(), + + SQL_DATABASE_URL: v.string(), + + STORAGE_ENDPOINT: v.string(), + STORAGE_BUCKET_NAME: v.string(), + STORAGE_ACCESS_KEY: v.string(), + STORAGE_SECRET_KEY: v.string(), + + EMAIL_ENDPOINT: v.string(), + EMAIL_USER: v.string(), + EMAIL_PASSWORD: v.string(), +}) + + +export function getEnv() { + const parsedEnv = validate({ + schema: envSchema, + // @ts-ignore + data: process.env, + message: "Missing environment variables", + }) + + return parsedEnv +} diff --git a/packages/api/src/utilities/response.ts b/packages/api/src/utilities/response.ts index ff4bcbd..b07163c 100644 --- a/packages/api/src/utilities/response.ts +++ b/packages/api/src/utilities/response.ts @@ -1,7 +1,7 @@ -import { ApiEnv } from "#/factories/apiFactory.js" -import { AuthEnv } from "#/factories/authFactory.js" -import { PublicEnv } from "#/factories/publicFactory.js" -import { validate } from "#/utilities/validate.js" +import { ApiEnv } from "../factories/apiFactory.js" +import { AuthEnv } from "../factories/authFactory.js" +import { PublicEnv } from "../factories/publicFactory.js" +import { validate } from "../utilities/validate.js" import { routeDefinition } from "@arrhes/application-metadata/utilities" import { Context } from "hono" import { ContentfulStatusCode } from "hono/utils/http-status" diff --git a/packages/api/src/utilities/safeParseJSON.ts b/packages/api/src/utilities/safeParseJSON.ts index 8c81e2b..18a302a 100644 --- a/packages/api/src/utilities/safeParseJSON.ts +++ b/packages/api/src/utilities/safeParseJSON.ts @@ -1,5 +1,5 @@ -import { completeStringifiedJSON } from "#/utilities/completeStringifiedJSON.js" -import { Exception } from "#/utilities/exception.js" +import { completeStringifiedJSON } from "../utilities/completeStringifiedJSON.js" +import { Exception } from "../utilities/exception.js" export function safeParseJSON(parameters: { diff --git a/packages/api/src/utilities/sql/deleteMany.ts b/packages/api/src/utilities/sql/deleteMany.ts index c65a0f6..4123cea 100644 --- a/packages/api/src/utilities/sql/deleteMany.ts +++ b/packages/api/src/utilities/sql/deleteMany.ts @@ -1,5 +1,5 @@ -import { sqlClient } from "#/clients/sqlClient.js" -import { Exception } from "#/utilities/exception.js" +import { sqlClient } from "../../clients/sqlClient.js" +import { Exception } from "../../utilities/exception.js" import { SQL, TableConfig } from "drizzle-orm" import { PgTable } from "drizzle-orm/pg-core" diff --git a/packages/api/src/utilities/sql/deleteOne.ts b/packages/api/src/utilities/sql/deleteOne.ts index d43ee24..2d3579c 100644 --- a/packages/api/src/utilities/sql/deleteOne.ts +++ b/packages/api/src/utilities/sql/deleteOne.ts @@ -1,5 +1,5 @@ -import { sqlClient } from "#/clients/sqlClient.js" -import { Exception } from "#/utilities/exception.js" +import { sqlClient } from "../../clients/sqlClient.js" +import { Exception } from "../../utilities/exception.js" import { SQL, TableConfig } from "drizzle-orm" import { PgTable } from "drizzle-orm/pg-core" diff --git a/packages/api/src/utilities/sql/insertMany.ts b/packages/api/src/utilities/sql/insertMany.ts index 3d77d0b..2ccb24e 100644 --- a/packages/api/src/utilities/sql/insertMany.ts +++ b/packages/api/src/utilities/sql/insertMany.ts @@ -1,5 +1,5 @@ -import { sqlClient } from "#/clients/sqlClient.js" -import { Exception } from "#/utilities/exception.js" +import { sqlClient } from "../../clients/sqlClient.js" +import { Exception } from "../../utilities/exception.js" import { PgInsertValue, PgTable, TableConfig } from "drizzle-orm/pg-core" diff --git a/packages/api/src/utilities/sql/insertOne.ts b/packages/api/src/utilities/sql/insertOne.ts index c9f1708..5a09ab0 100644 --- a/packages/api/src/utilities/sql/insertOne.ts +++ b/packages/api/src/utilities/sql/insertOne.ts @@ -1,5 +1,5 @@ -import { sqlClient } from "#/clients/sqlClient.js" -import { Exception } from "#/utilities/exception.js" +import { sqlClient } from "../../clients/sqlClient.js" +import { Exception } from "../../utilities/exception.js" import { TableConfig } from "drizzle-orm" import { PgInsertValue, PgTable } from "drizzle-orm/pg-core" diff --git a/packages/api/src/utilities/sql/selectMany.ts b/packages/api/src/utilities/sql/selectMany.ts index 13b27b8..e7797d2 100644 --- a/packages/api/src/utilities/sql/selectMany.ts +++ b/packages/api/src/utilities/sql/selectMany.ts @@ -1,5 +1,5 @@ -import { sqlClient } from "#/clients/sqlClient.js" -import { Exception } from "#/utilities/exception.js" +import { sqlClient } from "../../clients/sqlClient.js" +import { Exception } from "../../utilities/exception.js" import { SQL, TableConfig } from "drizzle-orm" import { PgTable } from "drizzle-orm/pg-core" diff --git a/packages/api/src/utilities/sql/selectOne.ts b/packages/api/src/utilities/sql/selectOne.ts index cd621da..e66c65c 100644 --- a/packages/api/src/utilities/sql/selectOne.ts +++ b/packages/api/src/utilities/sql/selectOne.ts @@ -1,5 +1,5 @@ -import { sqlClient } from "#/clients/sqlClient.js" -import { Exception } from "#/utilities/exception.js" +import { sqlClient } from "../../clients/sqlClient.js" +import { Exception } from "../../utilities/exception.js" import { SQL, TableConfig } from "drizzle-orm" import { PgTable } from "drizzle-orm/pg-core" diff --git a/packages/api/src/utilities/sql/updateOne.ts b/packages/api/src/utilities/sql/updateOne.ts index 8c2fd8e..9804cc0 100644 --- a/packages/api/src/utilities/sql/updateOne.ts +++ b/packages/api/src/utilities/sql/updateOne.ts @@ -1,5 +1,5 @@ -import { sqlClient } from "#/clients/sqlClient.js" -import { Exception } from "#/utilities/exception.js" +import { sqlClient } from "../../clients/sqlClient.js" +import { Exception } from "../../utilities/exception.js" import { SQL, TableConfig } from "drizzle-orm" import { PgTable, PgUpdateSetSource } from "drizzle-orm/pg-core" diff --git a/packages/api/src/utilities/storage/deleteObject.ts b/packages/api/src/utilities/storage/deleteObject.ts index 4031767..1e54cbb 100644 --- a/packages/api/src/utilities/storage/deleteObject.ts +++ b/packages/api/src/utilities/storage/deleteObject.ts @@ -1,6 +1,6 @@ -import { Exception } from "#/utilities/exception.js" -import { getClients } from "#/utilities/getClients.js" -import { getEnv } from "#/utilities/getEnv.js" +import { Exception } from "../../utilities/exception.js" +import { getClients } from "../../utilities/getClients.js" +import { getEnv } from "../../utilities/getEnv.js" import { DeleteObjectCommand } from "@aws-sdk/client-s3" diff --git a/packages/api/src/utilities/storage/generateDeleteSignedUrl.ts b/packages/api/src/utilities/storage/generateDeleteSignedUrl.ts index e273e3c..ff1db14 100644 --- a/packages/api/src/utilities/storage/generateDeleteSignedUrl.ts +++ b/packages/api/src/utilities/storage/generateDeleteSignedUrl.ts @@ -1,6 +1,6 @@ -import { Exception } from "#/utilities/exception.js" -import { getClients } from "#/utilities/getClients.js" -import { getEnv } from "#/utilities/getEnv.js" +import { Exception } from "../../utilities/exception.js" +import { getClients } from "../../utilities/getClients.js" +import { getEnv } from "../../utilities/getEnv.js" import { DeleteObjectCommand } from "@aws-sdk/client-s3" import { getSignedUrl } from "@aws-sdk/s3-request-presigner" diff --git a/packages/api/src/utilities/storage/generateGetSignedUrl.ts b/packages/api/src/utilities/storage/generateGetSignedUrl.ts index 9e71b40..d8f9284 100644 --- a/packages/api/src/utilities/storage/generateGetSignedUrl.ts +++ b/packages/api/src/utilities/storage/generateGetSignedUrl.ts @@ -1,7 +1,7 @@ -import { Exception } from "#/utilities/exception.js" -import { getClients } from "#/utilities/getClients.js" -import { getEnv } from "#/utilities/getEnv.js" -import { storageFileExpiresIn } from "#/utilities/variables.js" +import { Exception } from "../../utilities/exception.js" +import { getClients } from "../../utilities/getClients.js" +import { getEnv } from "../../utilities/getEnv.js" +import { storageFileExpiresIn } from "../../utilities/variables.js" import { GetObjectCommand } from "@aws-sdk/client-s3" import { getSignedUrl } from "@aws-sdk/s3-request-presigner" diff --git a/packages/api/src/utilities/storage/generatePutSignedUrl.ts b/packages/api/src/utilities/storage/generatePutSignedUrl.ts index 6b705d9..0d9170a 100644 --- a/packages/api/src/utilities/storage/generatePutSignedUrl.ts +++ b/packages/api/src/utilities/storage/generatePutSignedUrl.ts @@ -1,6 +1,6 @@ -import { Exception } from "#/utilities/exception.js" -import { getClients } from "#/utilities/getClients.js" -import { getEnv } from "#/utilities/getEnv.js" +import { Exception } from "../../utilities/exception.js" +import { getClients } from "../../utilities/getClients.js" +import { getEnv } from "../../utilities/getEnv.js" import { PutObjectCommand } from "@aws-sdk/client-s3" import { getSignedUrl } from "@aws-sdk/s3-request-presigner" diff --git a/packages/api/src/utilities/storage/getObject.ts b/packages/api/src/utilities/storage/getObject.ts index 9ed7c48..68d087b 100644 --- a/packages/api/src/utilities/storage/getObject.ts +++ b/packages/api/src/utilities/storage/getObject.ts @@ -1,6 +1,6 @@ -import { Exception } from "#/utilities/exception.js" -import { getClients } from "#/utilities/getClients.js" -import { getEnv } from "#/utilities/getEnv.js" +import { Exception } from "../../utilities/exception.js" +import { getClients } from "../../utilities/getClients.js" +import { getEnv } from "../../utilities/getEnv.js" import { GetObjectCommand } from "@aws-sdk/client-s3" diff --git a/packages/api/src/utilities/storage/putObject.ts b/packages/api/src/utilities/storage/putObject.ts index 7cdb68d..b8ce55d 100644 --- a/packages/api/src/utilities/storage/putObject.ts +++ b/packages/api/src/utilities/storage/putObject.ts @@ -1,6 +1,6 @@ -import { Exception } from "#/utilities/exception.js" -import { getClients } from "#/utilities/getClients.js" -import { getEnv } from "#/utilities/getEnv.js" +import { Exception } from "../../utilities/exception.js" +import { getClients } from "../../utilities/getClients.js" +import { getEnv } from "../../utilities/getEnv.js" import { PutObjectCommand } from "@aws-sdk/client-s3" diff --git a/packages/api/src/utilities/validate.ts b/packages/api/src/utilities/validate.ts index 9979c02..291f6eb 100644 --- a/packages/api/src/utilities/validate.ts +++ b/packages/api/src/utilities/validate.ts @@ -1,30 +1,30 @@ -import { Exception } from "#/utilities/exception.js" -import * as v from "valibot" - - -export function validate< - T extends v.GenericSchema ->(parameters: { - schema: T - data: v.InferOutput -}) { - - const parsed = v.safeParse( - parameters.schema, - parameters.data, - { - abortEarly: true, - abortPipeEarly: true, - }, - ) - - if (parsed.success === false) { - throw new Exception({ - statusCode: 500, - internalMessage: "Invalid data", - cause: JSON.stringify(v.flatten(parsed.issues)), - }) - } - - return parsed.output +import { Exception } from "../utilities/exception.js" +import * as v from "valibot" + + +export function validate< + T extends v.GenericSchema +>(parameters: { + schema: T + data: v.InferOutput +}) { + + const parsed = v.safeParse( + parameters.schema, + parameters.data, + { + abortEarly: true, + abortPipeEarly: true, + }, + ) + + if (parsed.success === false) { + throw new Exception({ + statusCode: 500, + internalMessage: "Invalid data", + cause: JSON.stringify(v.flatten(parsed.issues)), + }) + } + + return parsed.output } \ No newline at end of file diff --git a/packages/api/src/validators/bodyValidator.ts b/packages/api/src/validators/bodyValidator.ts index 7d92ce8..2d8efa9 100644 --- a/packages/api/src/validators/bodyValidator.ts +++ b/packages/api/src/validators/bodyValidator.ts @@ -1,25 +1,25 @@ -import { Exception } from "#/utilities/exception.js" -import { validate } from "#/utilities/validate.js" -import { validator } from "hono/validator" -import * as v from "valibot" - - -export const bodyValidator = >(schema: T) => { - return validator("json", async (value, c) => { - try { - const validatedBody = validate({ - schema: schema, - data: value - }) - return validatedBody - } - catch (error: unknown) { - throw new Exception({ - statusCode: 400, - internalMessage: "The body object can not be parsed", - externalMessage: "Invalid request", - rawError: error - }) - } - }) +import { Exception } from "../utilities/exception.js" +import { validate } from "../utilities/validate.js" +import { validator } from "hono/validator" +import * as v from "valibot" + + +export const bodyValidator = >(schema: T) => { + return validator("json", async (value, c) => { + try { + const validatedBody = validate({ + schema: schema, + data: value + }) + return validatedBody + } + catch (error: unknown) { + throw new Exception({ + statusCode: 400, + internalMessage: "The body object can not be parsed", + externalMessage: "Invalid request", + rawError: error + }) + } + }) } \ No newline at end of file diff --git a/packages/dashboard/package.json b/packages/dashboard/package.json index 1a88874..5c698c5 100644 --- a/packages/dashboard/package.json +++ b/packages/dashboard/package.json @@ -3,30 +3,29 @@ "type": "module", "private": false, "scripts": { + "prepare": "panda codegen", "dev": "vite", - "build": "tsc && vite build", + "build": "panda codegen && tsc && vite build", "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0" }, "devDependencies": { "@eslint/js": "9.39.1", - "@tailwindcss/vite": "4.1.17", + "@pandacss/dev": "1.8.1", "@types/node": "24.10.1", "@types/react": "19.2.7", "@types/react-dom": "19.2.3", "@vitejs/plugin-react": "5.1.1", - "clsx": "2.1.1", "eslint": "9.39.1", "eslint-plugin-react-hooks": "7.0.1", "eslint-plugin-react-refresh": "0.4.24", "globals": "16.5.0", - "tailwind-merge": "3.4.0", - "tailwindcss": "4.1.17", "typescript": "5.9.3", "typescript-eslint": "8.48.0", "vite": "7.2.4" }, "dependencies": { "@arrhes/application-metadata": "workspace:*", + "@arrhes/ui": "workspace:*", "@hookform/resolvers": "5.2.2", "@radix-ui/react-dialog": "1.1.15", "@radix-ui/react-dropdown-menu": "2.1.16", @@ -48,12 +47,6 @@ "react-imask": "7.6.1", "valibot": "1.2.0" }, - "imports": { - "#/*": "./src/*" - }, - "exports": { - "#/*": "./build/*" - }, "browserslist": { "production": [ "cover 99.99%", diff --git a/packages/dashboard/panda.config.ts b/packages/dashboard/panda.config.ts new file mode 100644 index 0000000..d739db2 --- /dev/null +++ b/packages/dashboard/panda.config.ts @@ -0,0 +1,26 @@ +import { defineConfig } from '@pandacss/dev' +import uiConfig from '../ui/panda.config' + + +export default defineConfig({ + // Whether to use css reset + preflight: true, + + // Where to look for your css declarations + include: ['../ui/src/**/*.{ts,tsx}', './src/**/*.{ts,tsx}'], + + // Files to exclude + exclude: [], + + // Use theme from UI package + theme: uiConfig.theme, + + // Import map for the UI package + importMap: '@arrhes/ui', + + // The output directory for your css system + outdir: 'styled-system', + + // Use JSX style props + jsxFramework: "react", +}) diff --git a/packages/dashboard/postcss.config.cjs b/packages/dashboard/postcss.config.cjs new file mode 100644 index 0000000..97a9426 --- /dev/null +++ b/packages/dashboard/postcss.config.cjs @@ -0,0 +1,5 @@ +module.exports = { + plugins: { + "@pandacss/dev/postcss": {}, + }, +} diff --git a/packages/dashboard/public/favicon.svg b/packages/dashboard/public/favicon.svg new file mode 100644 index 0000000..c418b79 --- /dev/null +++ b/packages/dashboard/public/favicon.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/dashboard/src/assets/css/root.css b/packages/dashboard/src/assets/css/root.css index 629e947..f9d0790 100644 --- a/packages/dashboard/src/assets/css/root.css +++ b/packages/dashboard/src/assets/css/root.css @@ -1,70 +1,85 @@ -@import "tailwindcss"; -@reference "./theme.css"; -@import "tailwindcss/preflight.css" layer(base); - - -@layer theme, base; - -@layer base { - - html { - font-size: 16px; - overflow: auto; - } - - body { - /* @apply overflow-auto; */ - } - - *, - *::before, - *::after { - @apply box-border bg-clip-padding; - } - - * { - @apply m-0 p-0 list-none scroll-smooth outline-none font-mono; - } - - span, - p, - h1, - h2, - h3, - h4, - h5, - h6, - label, - small, - input, - button, - textarea, - select { - @apply text-sm font-normal text-neutral; - } - - a { - @apply no-underline; - } - - #root { - @apply bg-background relative min-h-[100dvh] h-[100dvh] min-w-[100dvw] w-[100dvw] overflow-x-hidden overflow-y-auto flex flex-col justify-center items-center; - } - - img, - picture, - video, - canvas, - svg { - @apply box-border block; - } - - input, - button { - @apply focus:outline-none; - } - - svg { - @apply stroke-[1.5px]; - } -} \ No newline at end of file +@layer reset, base, tokens, recipes, utilities; + +@layer base { + html { + font-size: 16px; + overflow: auto; + } + + *, + *::before, + *::after { + box-sizing: border-box; + background-clip: padding-box; + } + + * { + margin: 0; + padding: 0; + list-style: none; + scroll-behavior: smooth; + outline: none; + font-family: "Sometype Mono", monospace; + } + + span, + p, + h1, + h2, + h3, + h4, + h5, + h6, + label, + small, + input, + button, + textarea, + select { + font-size: 0.875rem; + font-weight: normal; + color: var(--colors-neutral); + } + + a { + text-decoration: none; + } + + #root { + background-color: var(--colors-background); + position: relative; + min-height: 100dvh; + height: 100dvh; + min-width: 100dvw; + width: 100dvw; + overflow-x: hidden; + overflow-y: auto; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + } + + img, + picture, + video, + canvas, + svg { + box-sizing: border-box; + display: block; + } + + input, + button { + outline: none; + } + + input:focus, + button:focus { + outline: none; + } + + svg { + stroke-width: 1.5px; + } +} diff --git a/packages/dashboard/src/assets/css/theme.css b/packages/dashboard/src/assets/css/theme.css index f53aa8e..12e64de 100644 --- a/packages/dashboard/src/assets/css/theme.css +++ b/packages/dashboard/src/assets/css/theme.css @@ -1,37 +1,13 @@ -@import "tailwindcss"; -@import "./fonts.css"; - - -@theme { - --color-*: initial; - --color-white: #FFFFFF; - /* --color-background: #F9F9F9; */ - --color-background: #F9F9F9; - --color-neutral: #1F292E; - --color-success: #34B234; - --color-error: #C91D1D; - --color-warning: #E8B130; - --color-information: #309be8; - - --font-mono: "Sometype Mono", monospace; - - --breakpoint-sm: 320px; - --breakpoint-md: 768px; - --breakpoint-lg: 1024px; - --breakpoint-xl: 1280px; - - --radius-xs: 0.125rem; - --radius-sm: 0.25rem; - --radius-md: 0.5rem; - --radius-lg: 1rem; - --radius-xl: 2rem; - - --inset-shadow: inset 0 2px 4px 0 rgb(0 0 0 / 0.05); - /* --shadow-xs: 0 0 0.125rem rgba(0, 0, 0, 0.1); */ - --shadow-xs: rgba(17, 17, 26, 0.1) 0px 1px 0px; - - --max-width-sm: 320px; - --max-width-md: 768px; - --max-width-lg: 1024px; - --max-width-xl: 1280px; -} \ No newline at end of file +/* Theme variables are now defined in panda.config.ts */ +/* This file is kept for backwards compatibility */ + +:root { + --colors-white: #FFFFFF; + --colors-background: #F9F9F9; + --colors-neutral: #1F292E; + --colors-success: #34B234; + --colors-error: #C91D1D; + --colors-warning: #E8B130; + --colors-information: #309be8; + --colors-primary: #2563eb; +} diff --git a/packages/dashboard/src/components/buttons/button.tsx b/packages/dashboard/src/components/buttons/button.tsx deleted file mode 100644 index df5df98..0000000 --- a/packages/dashboard/src/components/buttons/button.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import { ButtonGhostContent } from "#/components/buttons/buttonGhostContent.js" -import { ButtonOutlineContent } from "#/components/buttons/buttonOutlineContent.js" -import { ButtonPlainContent } from "#/components/buttons/buttonPlainContent.js" -import { cn } from "#/utilities/cn.js" -import { sleep } from "#/utilities/sleep.js" -import { cloneElement, ComponentProps, ComponentPropsWithRef, MouseEvent, ReactElement, useState } from "react" - - -export type Button = Omit, "children"> & { - hasLoader?: boolean - children?: ReactElement> -} - -export function Button(props: Button) { - const [isLoading, setIsLoading] = useState(false) - - async function handleClick(e: MouseEvent) { - - if (props.onClick === undefined) return - if (props.hasLoader === false) return props.onClick(e) - - setIsLoading(true) - await Promise.all([sleep(100), props.onClick(e)]) - setIsLoading(false) - - e.preventDefault() - } - - - return ( - - ) -} \ No newline at end of file diff --git a/packages/dashboard/src/components/buttons/buttonGhost.tsx b/packages/dashboard/src/components/buttons/buttonGhost.tsx deleted file mode 100644 index 20868f2..0000000 --- a/packages/dashboard/src/components/buttons/buttonGhost.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import { cn } from "#/utilities/cn.js" -import { Button } from "./button.js" -import { ButtonGhostContent } from "./buttonGhostContent.js" - - -export function ButtonGhost(props: - ButtonGhostContent & Button -) { - return ( - - ) -} \ No newline at end of file diff --git a/packages/dashboard/src/components/buttons/buttonGhostContent.tsx b/packages/dashboard/src/components/buttons/buttonGhostContent.tsx deleted file mode 100644 index 346d53a..0000000 --- a/packages/dashboard/src/components/buttons/buttonGhostContent.tsx +++ /dev/null @@ -1,108 +0,0 @@ -import { CircularLoader } from "#/components/layouts/circularLoader.js" -import { cn } from "#/utilities/cn.js" -import { Icon, IconProps } from "@tabler/icons-react" -import { ComponentProps, ReactElement, cloneElement } from "react" - - -export type GhostColors = "neutral" | "error" | "warning" | "success" | "information" - -export type ButtonGhostContent = { - isLoading?: boolean - disabled?: boolean - text?: string - title?: string - icon?: ReactElement> - color?: GhostColors - isActive?: boolean - className?: ComponentProps<'div'>['className'] -} - -const variants = { - "neutral": { - container: "hover:bg-neutral/5 hover:border-neutral/5", - loader: "stroke-neutral", - icon: "stroke-neutral", - text: "text-neutral" - }, - "error": { - container: "hover:bg-error/5 hover:border-error/5", - loader: "stroke-error", - icon: "stroke-error", - text: "text-error" - }, - "warning": { - container: "hover:bg-warning/5 hover:border-warning/5", - loader: "stroke-warning", - icon: "stroke-warning", - text: "text-warning" - }, - "success": { - container: "hover:bg-success/5 hover:border-success/5", - loader: "stroke-success", - icon: "stroke-success", - text: "text-success" - }, - "information": { - container: "hover:bg-information/5 hover:border-information/5", - loader: "stroke-information", - icon: "stroke-information", - text: "text-information" - } -} - -export function ButtonGhostContent(props: ButtonGhostContent) { - return ( -
- { - (!props.isLoading) - ? null - : ( - - ) - } - { - (props.icon && !props.isLoading) - ? cloneElement(props.icon, { - "aria-disabled": props.disabled, - size: 16, - className: cn( - "min-w-[16px] w-[16px] min-h-[16px] h-[16px]", - variants[props?.color ?? "neutral"].icon - ), - strokeWidth: 1 - }) - : null - } - { - (props.text === undefined) - ? null - : ( - - {props.text} - - ) - } -
- ) -} diff --git a/packages/dashboard/src/components/buttons/buttonOutline.tsx b/packages/dashboard/src/components/buttons/buttonOutline.tsx deleted file mode 100644 index 2336beb..0000000 --- a/packages/dashboard/src/components/buttons/buttonOutline.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import { cn } from "#/utilities/cn.js" -import { Button } from "./button.js" -import { ButtonOutlineContent } from "./buttonOutlineContent.js" - - -type ButtonOutline = ButtonOutlineContent & Button - -export function ButtonOutline(props: ButtonOutline) { - return ( - - ) -} diff --git a/packages/dashboard/src/components/buttons/buttonOutlineContent.tsx b/packages/dashboard/src/components/buttons/buttonOutlineContent.tsx deleted file mode 100644 index 00ba163..0000000 --- a/packages/dashboard/src/components/buttons/buttonOutlineContent.tsx +++ /dev/null @@ -1,132 +0,0 @@ -import { CircularLoader } from "#/components/layouts/circularLoader.js" -import { cn } from "#/utilities/cn.js" -import { Icon, IconProps } from "@tabler/icons-react" -import { cloneElement, ComponentProps, ReactElement } from "react" - - -export type OutlineColors = "neutral" | "error" | "warning" | "success" | "information" - -export type ButtonOutlineContent = { - isLoading?: boolean - disabled?: boolean - text?: string - title?: string - icon?: ReactElement> - rightIcon?: ReactElement> - color?: OutlineColors - className?: ComponentProps<'div'>['className'] -} - -const variants = { - "neutral": { - container: "border-neutral/25 hover:bg-neutral/5 group-focus:bg-neutral/5", - loader: "stroke-neutral", - icon: "stroke-neutral", - rightIcon: "stroke-neutral/50", - text: "text-neutral/75", - }, - "error": { - container: "border-error/50 hover:bg-error/5 group-focus:bg-error/5", - loader: "stroke-error", - icon: "stroke-error", - rightIcon: "stroke-error/50", - text: "text-error", - }, - "warning": { - container: "border-warning/50 hover:bg-warning/5 group-focus:bg-warning/5", - loader: "stroke-warning", - icon: "stroke-warning", - rightIcon: "stroke-warning/50", - text: "text-warning", - }, - "success": { - container: "border-success/50 hover:bg-success/5 group-focus:bg-success/5", - loader: "stroke-success", - icon: "stroke-success", - rightIcon: "stroke-success/50", - text: "text-success", - }, - "information": { - container: "border-information/50 hover:bg-information/5 group-focus:bg-information/5", - loader: "stroke-information", - icon: "stroke-information", - rightIcon: "stroke-information/50", - text: "text-information", - }, -} - -export function ButtonOutlineContent(props: ButtonOutlineContent) { - return ( -
- { - (props.icon === undefined) - ? (null) - : cloneElement(props.icon, { - "aria-disabled": props.disabled, - size: 16, - className: cn( - "min-w-[16px] w-[16px] min-h-[16px] h-[16px] text-white aria-disabled:text-neutral/50", - variants[props?.color ?? "neutral"].icon - ), - strokeWidth: 1 - }) - } - { - (props.text === undefined) - ? null - : ( - - {props.text} - - ) - } - { - (props.rightIcon === undefined) - ? (null) - : ( -
- {(props.isLoading === true) - ? ( - - ) - : ( - cloneElement(props.rightIcon, { - "aria-disabled": props.disabled, - size: 12, - className: cn( - "min-w-[8px] w-[12px] min-h-[8px] h-[12px] text-white aria-disabled:text-neutral/50", - variants[props?.color ?? "neutral"].rightIcon - ), - strokeWidth: 1 - }) - ) - } -
- ) - } -
- ) -} diff --git a/packages/dashboard/src/components/buttons/buttonPlain.tsx b/packages/dashboard/src/components/buttons/buttonPlain.tsx deleted file mode 100644 index c7d6ebf..0000000 --- a/packages/dashboard/src/components/buttons/buttonPlain.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import { cn } from "#/utilities/cn.js" -import { Button } from "./button.js" -import { ButtonPlainContent } from "./buttonPlainContent.js" - - -export function ButtonPlain(props: - ButtonPlainContent & Button -) { - return ( - - ) -} diff --git a/packages/dashboard/src/components/buttons/buttonPlainContent.tsx b/packages/dashboard/src/components/buttons/buttonPlainContent.tsx deleted file mode 100644 index 293922c..0000000 --- a/packages/dashboard/src/components/buttons/buttonPlainContent.tsx +++ /dev/null @@ -1,87 +0,0 @@ -import { cn } from "#/utilities/cn.js" -import { Icon, IconLoader2, IconProps } from "@tabler/icons-react" -import { ComponentProps, ReactElement, cloneElement } from "react" - - -export type PlainColors = "neutral" | "error" | "warning" | "success" | "information" - -export type ButtonPlainContent = { - isLoading?: boolean - disabled?: boolean - text?: string - title?: string - icon?: ReactElement> - color?: PlainColors - className?: ComponentProps<'div'>['className'] -} - -const variants = { - "neutral": { - container: "bg-neutral border-neutral" - }, - "error": { - container: "bg-error border-error" - }, - "warning": { - container: "bg-warning border-warning" - }, - "success": { - container: "bg-success border-success" - }, - "information": { - container: "bg-information border-information" - }, -} - -export function ButtonPlainContent(props: ButtonPlainContent) { - return ( -
- { - (!props.isLoading) - ? (null) - : ( - - ) - } - { - (props.icon && !props.isLoading) - ? - cloneElement(props.icon, { - "aria-disabled": props.disabled, - size: 16, - className: cn( - "min-w-[16px] w-[16px] min-h-[16px] h-[16px] text-white aria-disabled:text-neutral/50" - ), - stroke: 2 - }) - : null - } - { - (!props.text) ? null : ( - - {props.text} - - ) - } -
- ) -} diff --git a/packages/dashboard/src/components/document/docDefinition.tsx b/packages/dashboard/src/components/document/docDefinition.tsx new file mode 100644 index 0000000..ff498a5 --- /dev/null +++ b/packages/dashboard/src/components/document/docDefinition.tsx @@ -0,0 +1,28 @@ +import { css } from "../../utilities/cn.js" + + +export function DocDefinition(props: { + term: string + definition: string +}) { + return ( +
+
{props.term}
+
{props.definition}
+
+ ) +} diff --git a/packages/dashboard/src/components/document/docExample.tsx b/packages/dashboard/src/components/document/docExample.tsx new file mode 100644 index 0000000..af09a0c --- /dev/null +++ b/packages/dashboard/src/components/document/docExample.tsx @@ -0,0 +1,33 @@ +import { css } from "../../utilities/cn.js" + + +export function DocExample(props: { + title?: string + children: React.ReactNode +}) { + return ( +
+ {props.title && ( +

Exemple : {props.title}

+ )} +
+ {props.children} +
+
+ ) +} diff --git a/packages/dashboard/src/components/document/docIndexLink.tsx b/packages/dashboard/src/components/document/docIndexLink.tsx new file mode 100644 index 0000000..374f401 --- /dev/null +++ b/packages/dashboard/src/components/document/docIndexLink.tsx @@ -0,0 +1,20 @@ +import { css } from "../../utilities/cn.js"; +import { Link } from "@tanstack/react-router"; + + +export function DocIndexLink(props: { to: string; label: string }) { + return ( + + {props.label} + + ) +} diff --git a/packages/dashboard/src/components/document/docLink.tsx b/packages/dashboard/src/components/document/docLink.tsx new file mode 100644 index 0000000..14f3f1b --- /dev/null +++ b/packages/dashboard/src/components/document/docLink.tsx @@ -0,0 +1,20 @@ +import { css } from "../../utilities/cn.js" +import { Link } from "@tanstack/react-router" + + +export function DocLink(props: { + to: string + children: React.ReactNode +}) { + return ( + + {props.children} + + ) +} diff --git a/packages/dashboard/src/components/document/docList.tsx b/packages/dashboard/src/components/document/docList.tsx new file mode 100644 index 0000000..014ebb1 --- /dev/null +++ b/packages/dashboard/src/components/document/docList.tsx @@ -0,0 +1,22 @@ +import { css } from "../../utilities/cn.js" + + +export function DocList(props: { + items: string[] +}) { + return ( +
    + {props.items.map((item, index) => ( +
  • + - + {item} +
  • + ))} +
+ ) +} diff --git a/packages/dashboard/src/components/document/docNextPage.tsx b/packages/dashboard/src/components/document/docNextPage.tsx new file mode 100644 index 0000000..b75b012 --- /dev/null +++ b/packages/dashboard/src/components/document/docNextPage.tsx @@ -0,0 +1,48 @@ +import { css, cx } from "../../utilities/cn.js" +import { IconChevronRight } from "@tabler/icons-react" +import { Link } from "@tanstack/react-router" + + +export function DocNextPage(props: { + to: string + label: string +}) { + return ( + +
+ Page suivante +

{props.label}

+
+ + + ) +} diff --git a/packages/dashboard/src/components/document/docParagraph.tsx b/packages/dashboard/src/components/document/docParagraph.tsx new file mode 100644 index 0000000..0ebff45 --- /dev/null +++ b/packages/dashboard/src/components/document/docParagraph.tsx @@ -0,0 +1,16 @@ +import { css } from "../../utilities/cn.js" + + +export function DocParagraph(props: { + children: React.ReactNode +}) { + return ( +

+ {props.children} +

+ ) +} diff --git a/packages/dashboard/src/components/document/docSection.tsx b/packages/dashboard/src/components/document/docSection.tsx new file mode 100644 index 0000000..4cd5df8 --- /dev/null +++ b/packages/dashboard/src/components/document/docSection.tsx @@ -0,0 +1,23 @@ +import { css } from "../../utilities/cn.js" + + +export function DocSection(props: { + title: string + children: React.ReactNode +}) { + return ( +
+

+ {props.title} +

+ {props.children} +
+ ) +} diff --git a/packages/dashboard/src/components/document/docTable.tsx b/packages/dashboard/src/components/document/docTable.tsx new file mode 100644 index 0000000..0f07a18 --- /dev/null +++ b/packages/dashboard/src/components/document/docTable.tsx @@ -0,0 +1,55 @@ +import { css } from "../../utilities/cn.js" + + +export function DocTable(props: { + headers: string[] + rows: string[][] +}) { + return ( +
+ + + + {props.headers.map((header, index) => ( + + ))} + + + + {props.rows.map((row, rowIndex) => ( + + {row.map((cell, cellIndex) => ( + + ))} + + ))} + +
+ {header} +
+ {cell} +
+
+ ) +} diff --git a/packages/dashboard/src/components/formats/formatBase.tsx b/packages/dashboard/src/components/formats/formatBase.tsx index 5b3902d..eeb6bf2 100644 --- a/packages/dashboard/src/components/formats/formatBase.tsx +++ b/packages/dashboard/src/components/formats/formatBase.tsx @@ -1,21 +1,28 @@ -import { cn } from "#/utilities/cn.js" -import { ComponentProps, ReactNode } from "react" - - -type FormatBase = { - children: ReactNode - className?: ComponentProps<'div'>['className'] -} - -export function FormatBase(props: FormatBase) { - return ( -
- {props.children} -
- ) -} +import { css, cx } from "../../utilities/cn.js" +import { ComponentProps, ReactNode } from "react" + + +type FormatBase = { + children: ReactNode + className?: ComponentProps<'div'>['className'] +} + +export function FormatBase(props: FormatBase) { + return ( +
+ {props.children} +
+ ) +} diff --git a/packages/dashboard/src/components/formats/formatBoolean.tsx b/packages/dashboard/src/components/formats/formatBoolean.tsx index 06685ed..4489f8b 100644 --- a/packages/dashboard/src/components/formats/formatBoolean.tsx +++ b/packages/dashboard/src/components/formats/formatBoolean.tsx @@ -1,25 +1,25 @@ -import { Chip } from "#/components/layouts/chip.js" -import { ComponentProps } from "react" -import { FormatBase } from "./formatBase.js" - - -export function formatBoolean(boolean?: boolean | null) { - if (!boolean) return "Non" - return "Oui" -} - - -export function FormatBoolean(props: { - boolean?: boolean | null - text?: string - className?: ComponentProps<'div'>['className'] -}) { - return ( - - - - ) -} +import { Chip } from "../../components/layouts/chip.js" +import { ComponentProps } from "react" +import { FormatBase } from "./formatBase.js" + + +export function formatBoolean(boolean?: boolean | null) { + if (!boolean) return "Non" + return "Oui" +} + + +export function FormatBoolean(props: { + boolean?: boolean | null + text?: string + className?: ComponentProps<'div'>['className'] +}) { + return ( + + + + ) +} diff --git a/packages/dashboard/src/components/formats/formatDate.tsx b/packages/dashboard/src/components/formats/formatDate.tsx index 3bec55e..05a4fb7 100644 --- a/packages/dashboard/src/components/formats/formatDate.tsx +++ b/packages/dashboard/src/components/formats/formatDate.tsx @@ -1,38 +1,38 @@ -import { FormatText } from "#/components/formats/formatText.js" -import { ComponentProps } from "react" -import { FormatNull } from "./formatNull.js" - - -export function formatDate(rawDate?: string | Date | undefined | null) { - if ((!rawDate) || (String(new Date(rawDate)) === "Invalid Date")) return undefined - - const date = new Date(rawDate) - let day = String(date.getDate()) - let month = String(date.getMonth() + 1) - let year = String(date.getFullYear()) - let hour = String(date.getHours()) - let minute = String(date.getMinutes()) - - if (date.getDate() < 10) day = "0" + day - if ((date.getMonth() + 1) < 10) month = "0" + month - if ((date.getHours()) < 10) hour = "0" + hour - if ((date.getMinutes()) < 10) minute = "0" + minute - - return `${[day, month, year].join('/')}` -} - - -export function FormatDate(props: { - date?: string | Date | undefined | null - className?: ComponentProps<'div'>['className'] -}) { - if (!props.date) return - if (String(new Date(props.date)) === "Invalid Date") return - return ( - - {formatDate(props.date)} - - ) -} +import { FormatText } from "../../components/formats/formatText.js" +import { ComponentProps } from "react" +import { FormatNull } from "./formatNull.js" + + +export function formatDate(rawDate?: string | Date | undefined | null) { + if ((!rawDate) || (String(new Date(rawDate)) === "Invalid Date")) return undefined + + const date = new Date(rawDate) + let day = String(date.getDate()) + let month = String(date.getMonth() + 1) + let year = String(date.getFullYear()) + let hour = String(date.getHours()) + let minute = String(date.getMinutes()) + + if (date.getDate() < 10) day = "0" + day + if ((date.getMonth() + 1) < 10) month = "0" + month + if ((date.getHours()) < 10) hour = "0" + hour + if ((date.getMinutes()) < 10) minute = "0" + minute + + return `${[day, month, year].join('/')}` +} + + +export function FormatDate(props: { + date?: string | Date | undefined | null + className?: ComponentProps<'div'>['className'] +}) { + if (!props.date) return + if (String(new Date(props.date)) === "Invalid Date") return + return ( + + {formatDate(props.date)} + + ) +} diff --git a/packages/dashboard/src/components/formats/formatDateTime.tsx b/packages/dashboard/src/components/formats/formatDateTime.tsx index 44e1c18..5fb0bb7 100644 --- a/packages/dashboard/src/components/formats/formatDateTime.tsx +++ b/packages/dashboard/src/components/formats/formatDateTime.tsx @@ -1,51 +1,61 @@ -import { ComponentProps } from "react" -import { FormatNull } from "./formatNull.js" - - -export function formatDateTime(rawDate?: string | Date | undefined | null) { - if ((!rawDate) || (String(new Date(rawDate)) === "Invalid Date")) return "/" - - const date = new Date(rawDate) - let day = String(date.getDate()) - let month = String(date.getMonth() + 1) - let year = String(date.getFullYear()) - let hour = String(date.getHours()) - let minute = String(date.getMinutes()) - - if (date.getDate() < 10) day = "0" + day - if ((date.getMonth() + 1) < 10) month = "0" + month - if ((date.getHours()) < 10) hour = "0" + hour - if ((date.getMinutes()) < 10) minute = "0" + minute - - return `${[day, month, year].join('/')} ${[hour, minute].join(':')}` -} - - -type FormatDateTime = { - date?: string | Date | undefined | null - className?: ComponentProps<'div'>['className'] -} - -export function FormatDateTime(props: FormatDateTime) { - if (!props.date) return - if (String(new Date(props.date)) === "Invalid Date") return - - const date = new Date(props.date) - let day = String(date.getDate()) - let month = String(date.getMonth() + 1) - let year = String(date.getFullYear()) - let hour = String(date.getHours()) - let minute = String(date.getMinutes()) - - if (date.getDate() < 10) day = "0" + day - if ((date.getMonth() + 1) < 10) month = "0" + month - if ((date.getHours()) < 10) hour = "0" + hour - if ((date.getMinutes()) < 10) minute = "0" + minute - - return ( -
- {`${[day, month, year].join('/')}`} - {`${[hour, minute].join(':')}`} -
- ) -} +import { css } from "../../utilities/cn.js" +import { ComponentProps } from "react" +import { FormatNull } from "./formatNull.js" + + +export function formatDateTime(rawDate?: string | Date | undefined | null) { + if ((!rawDate) || (String(new Date(rawDate)) === "Invalid Date")) return "/" + + const date = new Date(rawDate) + let day = String(date.getDate()) + let month = String(date.getMonth() + 1) + let year = String(date.getFullYear()) + let hour = String(date.getHours()) + let minute = String(date.getMinutes()) + + if (date.getDate() < 10) day = "0" + day + if ((date.getMonth() + 1) < 10) month = "0" + month + if ((date.getHours()) < 10) hour = "0" + hour + if ((date.getMinutes()) < 10) minute = "0" + minute + + return `${[day, month, year].join('/')} ${[hour, minute].join(':')}` +} + + +type FormatDateTime = { + date?: string | Date | undefined | null + className?: ComponentProps<'div'>['className'] +} + +export function FormatDateTime(props: FormatDateTime) { + if (!props.date) return + if (String(new Date(props.date)) === "Invalid Date") return + + const date = new Date(props.date) + let day = String(date.getDate()) + let month = String(date.getMonth() + 1) + let year = String(date.getFullYear()) + let hour = String(date.getHours()) + let minute = String(date.getMinutes()) + + if (date.getDate() < 10) day = "0" + day + if ((date.getMonth() + 1) < 10) month = "0" + month + if ((date.getHours()) < 10) hour = "0" + hour + if ((date.getMinutes()) < 10) minute = "0" + minute + + return ( +
+ {`${[day, month, year].join('/')}`} + {`${[hour, minute].join(':')}`} +
+ ) +} diff --git a/packages/dashboard/src/components/formats/formatError.tsx b/packages/dashboard/src/components/formats/formatError.tsx index 7258eb5..3bdbc9b 100644 --- a/packages/dashboard/src/components/formats/formatError.tsx +++ b/packages/dashboard/src/components/formats/formatError.tsx @@ -1,17 +1,29 @@ -import { ComponentProps } from "react" -import { FormatBase } from "./formatBase.js" - - - -export function FormatError(props: { - text: string - className?: ComponentProps<'div'>['className'] -}) { - return ( - - - {props.text} - - - ) -} +import { css } from "../../utilities/cn.js" +import { ComponentProps } from "react" +import { FormatBase } from "./formatBase.js" + + + +export function FormatError(props: { + text: string + className?: ComponentProps<'div'>['className'] +}) { + return ( + + + {props.text} + + + ) +} diff --git a/packages/dashboard/src/components/formats/formatFileSize.tsx b/packages/dashboard/src/components/formats/formatFileSize.tsx index fb91a47..c9545b4 100644 --- a/packages/dashboard/src/components/formats/formatFileSize.tsx +++ b/packages/dashboard/src/components/formats/formatFileSize.tsx @@ -1,32 +1,41 @@ -import { FormatBase } from "#/components/formats/formatBase.js" -import { FormatNull } from "#/components/formats/formatNull.js" -import { ComponentProps } from "react" - - -const sizes = ['o', 'ko', 'Mo', 'Go', 'To'] - -export function formatFileSize(size?: number | null) { - if (size === undefined || size === null) return "/" - - if (size == 0) return `0 ${sizes.at(0)}` - const i = Math.floor(Math.log(size) / Math.log(1000)) - return `${parseFloat((size / Math.pow(1000, i)).toFixed(2))} ${sizes.at(i)}` - -} - - -type FormatFileSize = { - size?: number | null - className?: ComponentProps<'div'>['className'] -} - -export function FormatFileSize(props: FormatFileSize) { - if (props.size === undefined || props.size === null) return - return ( - - - {formatFileSize(props.size)} - - - ) -} +import { FormatBase } from "../../components/formats/formatBase.js" +import { FormatNull } from "../../components/formats/formatNull.js" +import { css } from "../../utilities/cn.js" +import { ComponentProps } from "react" + + +const sizes = ['o', 'ko', 'Mo', 'Go', 'To'] + +export function formatFileSize(size?: number | null) { + if (size === undefined || size === null) return "/" + + if (size == 0) return `0 ${sizes.at(0)}` + const i = Math.floor(Math.log(size) / Math.log(1000)) + return `${parseFloat((size / Math.pow(1000, i)).toFixed(2))} ${sizes.at(i)}` + +} + + +type FormatFileSize = { + size?: number | null + className?: ComponentProps<'div'>['className'] +} + +export function FormatFileSize(props: FormatFileSize) { + if (props.size === undefined || props.size === null) return + return ( + + + {formatFileSize(props.size)} + + + ) +} diff --git a/packages/dashboard/src/components/formats/formatLink.tsx b/packages/dashboard/src/components/formats/formatLink.tsx index 602f35d..a5b8312 100644 --- a/packages/dashboard/src/components/formats/formatLink.tsx +++ b/packages/dashboard/src/components/formats/formatLink.tsx @@ -1,33 +1,47 @@ -import { Button } from "#/components/buttons/button.js" -import { toast } from "#/contexts/toasts/useToast.js" -import { ComponentProps } from "react" -import { FormatBase } from "./formatBase.js" -import { FormatNull } from "./formatNull.js" - - -type FormatLinkProps = { - text: string | null - className?: ComponentProps<'span'>['className'] -} - -export function FormatLink(props: FormatLinkProps) { - if (!props.text) return - - const copyContent = (toCopy: string | null) => { - toast({ title: "Contenu copié dans le presse-papier.", variant: "information" }) - return navigator.clipboard.writeText(!toCopy ? "" : toCopy) - } - - return ( - - - - ) -} +import { Button } from "@arrhes/ui" +import { toast } from "../../contexts/toasts/useToast.js" +import { css } from "../../utilities/cn.js" +import { ComponentProps } from "react" +import { FormatBase } from "./formatBase.js" +import { FormatNull } from "./formatNull.js" + + +type FormatLinkProps = { + text: string | null + className?: ComponentProps<'span'>['className'] +} + +export function FormatLink(props: FormatLinkProps) { + if (!props.text) return + + const copyContent = (toCopy: string | null) => { + toast({ title: "Contenu copié dans le presse-papier.", variant: "information" }) + return navigator.clipboard.writeText(!toCopy ? "" : toCopy) + } + + return ( + + + + ) +} diff --git a/packages/dashboard/src/components/formats/formatNull.tsx b/packages/dashboard/src/components/formats/formatNull.tsx index 8b5febf..6bcacaf 100644 --- a/packages/dashboard/src/components/formats/formatNull.tsx +++ b/packages/dashboard/src/components/formats/formatNull.tsx @@ -1,19 +1,30 @@ -import { cn } from "#/utilities/cn.js" -import { ComponentProps } from "react" - - -type FormatNull = { - text?: string - className?: ComponentProps<'span'>['className'] -} - -export function FormatNull(props: FormatNull) { - return ( - - {props.text ?? "/"} - - ) -} +import { css, cx } from "../../utilities/cn.js" +import { ComponentProps } from "react" + + +type FormatNull = { + text?: string + className?: ComponentProps<'span'>['className'] +} + +export function FormatNull(props: FormatNull) { + return ( + + {props.text ?? "/"} + + ) +} diff --git a/packages/dashboard/src/components/formats/formatPrice.tsx b/packages/dashboard/src/components/formats/formatPrice.tsx index 7b2b697..e58b897 100644 --- a/packages/dashboard/src/components/formats/formatPrice.tsx +++ b/packages/dashboard/src/components/formats/formatPrice.tsx @@ -1,53 +1,57 @@ -import { FormatNull } from "#/components/formats/formatNull.js" -import { cn } from "#/utilities/cn.js" -import { ComponentProps } from "react" - - -export function formatPrice(parameters: { - price?: number | null | string -}) { - if (parameters.price === undefined || parameters.price === null) return "/" - const price = Number(parameters.price) - const processedPrice = Math.abs(price) < 0.0090 - ? 0 - : price - return ( - new Intl.NumberFormat("fr", { - minimumFractionDigits: 2, - maximumFractionDigits: 2, - //@ts-ignore - roundingMode: "halfExpand" - }).format(processedPrice).replace(/,/g, '.') - ) -} - - -export function FormatPrice(props: { - price?: number | null | string - className?: ComponentProps<'div'>['className'] -}) { - if (props.price === undefined || props.price === null) { - return ( - - ) - } - const price = Number(props.price) - const processedPrice = Math.abs(price) < 0.0090 - ? 0 - : price - return ( - - {processedPrice < 0 - ? `(${formatPrice({ - price: Math.abs(processedPrice) - })})` - : formatPrice({ - price: Math.abs(processedPrice) - })} - - ) -} +import { FormatNull } from "../../components/formats/formatNull.js" +import { css, cx } from "../../utilities/cn.js" +import { ComponentProps } from "react" + + +export function formatPrice(parameters: { + price?: number | null | string +}) { + if (parameters.price === undefined || parameters.price === null) return "/" + const price = Number(parameters.price) + const processedPrice = Math.abs(price) < 0.0090 + ? 0 + : price + return ( + new Intl.NumberFormat("fr", { + minimumFractionDigits: 2, + maximumFractionDigits: 2, + //@ts-ignore + roundingMode: "halfExpand" + }).format(processedPrice).replace(/,/g, '.') + ) +} + + +export function FormatPrice(props: { + price?: number | null | string + className?: ComponentProps<'div'>['className'] +}) { + if (props.price === undefined || props.price === null) { + return ( + + ) + } + const price = Number(props.price) + const processedPrice = Math.abs(price) < 0.0090 + ? 0 + : price + return ( + + {processedPrice < 0 + ? `(${formatPrice({ + price: Math.abs(processedPrice) + })})` + : formatPrice({ + price: Math.abs(processedPrice) + })} + + ) +} diff --git a/packages/dashboard/src/components/formats/formatSelect.tsx b/packages/dashboard/src/components/formats/formatSelect.tsx index d83ac62..1d6df2b 100644 --- a/packages/dashboard/src/components/formats/formatSelect.tsx +++ b/packages/dashboard/src/components/formats/formatSelect.tsx @@ -1,30 +1,30 @@ -import { Chip, ChipColors } from "#/components/layouts/chip.js" -import { ComponentProps } from "react" -import { FormatBase } from "./formatBase.js" -import { FormatNull } from "./formatNull.js" - - -export function formatSelect(key: string | null | undefined, options: { key: string, label: string }[]) { - return options.find(x => x.key === key)?.label ?? "" -} - - -type FormatSelect = { - option?: string | null - options: Array<{ - key: string - label: string - }> - color?: ChipColors - className?: ComponentProps<'div'>['className'] -} - -export function FormatSelect(props: FormatSelect) { - const option = formatSelect(props.option, props.options) - if (!option) return - return ( - - - - ) -} +import { Chip, ChipColors } from "../../components/layouts/chip.js" +import { ComponentProps } from "react" +import { FormatBase } from "./formatBase.js" +import { FormatNull } from "./formatNull.js" + + +export function formatSelect(key: string | null | undefined, options: { key: string, label: string }[]) { + return options.find(x => x.key === key)?.label ?? "" +} + + +type FormatSelect = { + option?: string | null + options: Array<{ + key: string + label: string + }> + color?: ChipColors + className?: ComponentProps<'div'>['className'] +} + +export function FormatSelect(props: FormatSelect) { + const option = formatSelect(props.option, props.options) + if (!option) return + return ( + + + + ) +} diff --git a/packages/dashboard/src/components/formats/formatText.tsx b/packages/dashboard/src/components/formats/formatText.tsx index c34a0f4..44f31fc 100644 --- a/packages/dashboard/src/components/formats/formatText.tsx +++ b/packages/dashboard/src/components/formats/formatText.tsx @@ -1,22 +1,27 @@ -import { cn } from "#/utilities/cn.js" -import { ComponentProps, ReactNode } from "react" -import { FormatNull } from "./formatNull.js" - - -export function FormatText(props: { - wrap?: boolean - className?: ComponentProps<'span'>['className'] - children?: ReactNode -} -) { - if (!props.children) return - return ( - - {props.children} - - ) -} +import { css, cx } from "../../utilities/cn.js" +import { ComponentProps, ReactNode } from "react" +import { FormatNull } from "./formatNull.js" + + +export function FormatText(props: { + wrap?: boolean + className?: ComponentProps<'span'>['className'] + children?: ReactNode +} +) { + if (!props.children) return + return ( + + {props.children} + + ) +} diff --git a/packages/dashboard/src/components/forms/formControl.tsx b/packages/dashboard/src/components/forms/formControl.tsx index f41f457..7e164e1 100644 --- a/packages/dashboard/src/components/forms/formControl.tsx +++ b/packages/dashboard/src/components/forms/formControl.tsx @@ -1,28 +1,28 @@ -import { CircularLoader } from "#/components/layouts/circularLoader.js" -import { Slot } from "@radix-ui/react-slot" -import { ComponentProps, Suspense } from "react" -import { useFormField } from "./useFormField.js" - - -type FormControl = ComponentProps - -export function FormControl(props: FormControl) { - const { error, formItemId, formDescriptionId, formMessageId } = useFormField() - - return ( - } - > - - - ) +import { CircularLoader } from "../../components/layouts/circularLoader.js" +import { Slot } from "@radix-ui/react-slot" +import { ComponentProps, Suspense } from "react" +import { useFormField } from "./useFormField.js" + + +type FormControl = ComponentProps + +export function FormControl(props: FormControl) { + const { error, formItemId, formDescriptionId, formMessageId } = useFormField() + + return ( + } + > + + + ) } \ No newline at end of file diff --git a/packages/dashboard/src/components/forms/formError.tsx b/packages/dashboard/src/components/forms/formError.tsx index cce02b5..625c694 100644 --- a/packages/dashboard/src/components/forms/formError.tsx +++ b/packages/dashboard/src/components/forms/formError.tsx @@ -1,24 +1,31 @@ -import { cn } from "#/utilities/cn.js" -import { forwardRef } from "react" -import { useFormField } from "./useFormField.js" - - -export const FormError = forwardRef< - HTMLParagraphElement, - React.HTMLAttributes ->(function (props, ref) { - const { error, formMessageId } = useFormField() - const body = error ? String(error?.message) : props.children - - if (!body) return null - return ( -

- {body} -

- ) -}) +import { css, cx } from "../../utilities/cn.js" +import { forwardRef } from "react" +import { useFormField } from "./useFormField.js" + + +export const FormError = forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(function (props, ref) { + const { error, formMessageId } = useFormField() + const body = error ? String(error?.message) : props.children + + if (!body) return null + return ( +

+ {body} +

+ ) +}) diff --git a/packages/dashboard/src/components/forms/formItem.tsx b/packages/dashboard/src/components/forms/formItem.tsx index 25fe3ef..da9dc82 100644 --- a/packages/dashboard/src/components/forms/formItem.tsx +++ b/packages/dashboard/src/components/forms/formItem.tsx @@ -1,19 +1,29 @@ -import { cn } from "#/utilities/cn.js" -import { HTMLAttributes, useId } from "react" -import { FormItemContext } from "./formItemContext.js" - - -type FormItem = HTMLAttributes - -export function FormItem(props: FormItem) { - const id = useId() - - return ( - -
- - ) +import { css, cx } from "../../utilities/cn.js" +import { HTMLAttributes, useId } from "react" +import { FormItemContext } from "./formItemContext.js" + + +type FormItem = HTMLAttributes + +export function FormItem(props: FormItem) { + const id = useId() + + return ( + +
+ + ) } \ No newline at end of file diff --git a/packages/dashboard/src/components/forms/formLabel.tsx b/packages/dashboard/src/components/forms/formLabel.tsx index 54403b7..f5d1a7b 100644 --- a/packages/dashboard/src/components/forms/formLabel.tsx +++ b/packages/dashboard/src/components/forms/formLabel.tsx @@ -1,63 +1,98 @@ - -import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@radix-ui/react-tooltip" -import { IconInfoSquare } from "@tabler/icons-react" -import { HTMLAttributes } from "react" -import { useFormField } from "./useFormField.js" - - -type FormLabel = { - label: string | undefined - isRequired?: boolean - description?: string | undefined - tooltip?: string | undefined - labelProps?: HTMLAttributes -} - -export function FormLabel(props: FormLabel) { - const { formItemId } = useFormField() - - return ( - - ) + +import { css } from "../../utilities/cn.js" +import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@radix-ui/react-tooltip" +import { IconInfoSquare } from "@tabler/icons-react" +import { HTMLAttributes } from "react" +import { useFormField } from "./useFormField.js" + + +type FormLabel = { + label: string | undefined + isRequired?: boolean + description?: string | undefined + tooltip?: string | undefined + labelProps?: HTMLAttributes +} + +export function FormLabel(props: FormLabel) { + const { formItemId } = useFormField() + + return ( + + ) } \ No newline at end of file diff --git a/packages/dashboard/src/components/forms/formRoot.tsx b/packages/dashboard/src/components/forms/formRoot.tsx index b32f070..ed8ce7a 100644 --- a/packages/dashboard/src/components/forms/formRoot.tsx +++ b/packages/dashboard/src/components/forms/formRoot.tsx @@ -1,87 +1,109 @@ -import { ButtonPlain } from "#/components/buttons/buttonPlain.js" -import { cn } from "#/utilities/cn.js" -import { valibotResolver } from "@hookform/resolvers/valibot" -import { ReactElement, useEffect, useRef } from "react" -import { DefaultValues, FormProvider, useForm, UseFormReturn } from "react-hook-form" -import * as v from "valibot" - - -export function FormRoot< - T extends Record, - U extends v.GenericSchema ->(props: { - schema: U - defaultValues: DefaultValues> - onSubmit: (data: v.InferOutput) => Promise - onCancel: ((data: v.InferOutput) => void) | (() => Promise) | undefined - onSuccess: ((data: v.InferOutput) => void) | (() => Promise) | undefined - resetOnSubmit?: boolean - submitOnPressEnterKey?: boolean - submitButtonProps: Parameters[0] - children: (form: UseFormReturn, any, v.InferOutput>) => ReactElement -}) { - const form = useForm({ - mode: "onSubmit", - criteriaMode: "all", - shouldFocusError: true, - defaultValues: props.defaultValues, - resolver: valibotResolver(props.schema), - }) - const submitButtonRef = useRef(null) - - useEffect(() => { - const listener = async (event: KeyboardEvent) => { - if (event.code === "Enter" || event.code === "NumpadEnter") { - event.preventDefault() - submitButtonRef.current?.click() - } - } - document.addEventListener("keydown", listener) - return () => { - document.removeEventListener("keydown", listener) - } - }, []) - - return ( - -
-
-
- {props.children(form)} -
- { - event.preventDefault() - - const triggerResponse = await form.trigger() - if (!triggerResponse) return - - const data = form.getValues() - const response = await props.onSubmit(data) - if (!response) return - - if (props.resetOnSubmit === true) { - form.reset() - } - - if (props.onSuccess !== undefined) { - await props.onSuccess(data) - } - }} - /> -
-
-
- ) -} +import { Button, type ButtonProps } from "@arrhes/ui" +import { css, cx } from "../../utilities/cn.js" +import { valibotResolver } from "@hookform/resolvers/valibot" +import { ReactElement, useEffect, useRef } from "react" +import { DefaultValues, FormProvider, useForm, UseFormReturn } from "react-hook-form" +import * as v from "valibot" + + +export function FormRoot< + T extends Record, + U extends v.GenericSchema +>(props: { + schema: U + defaultValues: DefaultValues> + onSubmit: (data: v.InferOutput) => Promise + onCancel: ((data: v.InferOutput) => void) | (() => Promise) | undefined + onSuccess: ((data: v.InferOutput) => void) | (() => Promise) | undefined + resetOnSubmit?: boolean + submitOnPressEnterKey?: boolean + submitButtonProps: Parameters[0] + children: (form: UseFormReturn, any, v.InferOutput>) => ReactElement +}) { + const form = useForm({ + mode: "onSubmit", + criteriaMode: "all", + shouldFocusError: true, + defaultValues: props.defaultValues, + resolver: valibotResolver(props.schema), + }) + const submitButtonRef = useRef(null) + + useEffect(() => { + const listener = async (event: KeyboardEvent) => { + if (event.code === "Enter" || event.code === "NumpadEnter") { + event.preventDefault() + submitButtonRef.current?.click() + } + } + document.addEventListener("keydown", listener) + return () => { + document.removeEventListener("keydown", listener) + } + }, []) + + return ( + +
+
+
+ {props.children(form)} +
+
+
+
+ ) +} diff --git a/packages/dashboard/src/components/forms/formSubmit.tsx b/packages/dashboard/src/components/forms/formSubmit.tsx index 000cfe1..443b105 100644 --- a/packages/dashboard/src/components/forms/formSubmit.tsx +++ b/packages/dashboard/src/components/forms/formSubmit.tsx @@ -1,50 +1,52 @@ -import { ButtonGhost } from "#/components/buttons/buttonGhost.js" -import { ButtonPlain } from "#/components/buttons/buttonPlain.js" - - -export type FormSubmit = { - previousLabel?: string - previousCallback?: (data?: T) => Promise - nextLabel: string - nextCallback: (data?: T) => Promise - stepCount?: string - stepName?: string -} - - -export function FormSubmit(props: FormSubmit) { - const handleNext = async () => { - await props.nextCallback() - } - - const handlePrevious = () => { - if (props.previousCallback === undefined) return undefined - props.previousCallback() - } - - return ( -
-
- { - (props.previousCallback === undefined) ? null : ( - - ) - } - -
- {(!props.stepCount && !props.stepName) ? null : -
- {(!props.stepCount) ? null : {props.stepCount}} - {(!props.stepName) ? null : {props.stepName}} -
- } -
- ) -} +import { Button } from "@arrhes/ui" +import { css } from "../../utilities/cn.js" + + +export type FormSubmit = { + previousLabel?: string + previousCallback?: (data?: T) => Promise + nextLabel: string + nextCallback: (data?: T) => Promise + stepCount?: string + stepName?: string +} + + +export function FormSubmit(props: FormSubmit) { + const handleNext = async () => { + await props.nextCallback() + } + + const handlePrevious = () => { + if (props.previousCallback === undefined) return undefined + props.previousCallback() + } + + return ( +
+
+ { + (props.previousCallback === undefined) ? null : ( +
+ {(!props.stepCount && !props.stepName) ? null : +
+ {(!props.stepCount) ? null : {props.stepCount}} + {(!props.stepName) ? null : {props.stepName}} +
+ } +
+ ) +} diff --git a/packages/dashboard/src/components/forms/useFormField.tsx b/packages/dashboard/src/components/forms/useFormField.tsx index 16113d2..e5c6e1e 100644 --- a/packages/dashboard/src/components/forms/useFormField.tsx +++ b/packages/dashboard/src/components/forms/useFormField.tsx @@ -1,31 +1,31 @@ -import { ClientError } from "#/utilities/clientError.js" -import { useContext } from "react" -import { useFormContext } from "react-hook-form" -import { FormFieldContext } from "./formFieldContext.js" -import { FormItemContext } from "./formItemContext.js" - - -export const useFormField = () => { - const fieldContext = useContext(FormFieldContext) - const itemContext = useContext(FormItemContext) - const { getFieldState, formState } = useFormContext() - - const fieldState = getFieldState(fieldContext.name, formState) - - if (!fieldContext) { - throw new ClientError({ - message: "useFormField should be used within ", - }) - } - - const { id } = itemContext - - return { - id, - name: fieldContext.name, - formItemId: `${id}-form-item`, - formDescriptionId: `${id}-form-item-description`, - formMessageId: `${id}-form-item-message`, - ...fieldState, - } +import { ClientError } from "../../utilities/clientError.js" +import { useContext } from "react" +import { useFormContext } from "react-hook-form" +import { FormFieldContext } from "./formFieldContext.js" +import { FormItemContext } from "./formItemContext.js" + + +export const useFormField = () => { + const fieldContext = useContext(FormFieldContext) + const itemContext = useContext(FormItemContext) + const { getFieldState, formState } = useFormContext() + + const fieldState = getFieldState(fieldContext.name, formState) + + if (!fieldContext) { + throw new ClientError({ + message: "useFormField should be used within ", + }) + } + + const { id } = itemContext + + return { + id, + name: fieldContext.name, + formItemId: `${id}-form-item`, + formDescriptionId: `${id}-form-item-description`, + formMessageId: `${id}-form-item-message`, + ...fieldState, + } } \ No newline at end of file diff --git a/packages/dashboard/src/components/inputs/inputCombobox.tsx b/packages/dashboard/src/components/inputs/inputCombobox.tsx index fbe8003..d35e0c4 100644 --- a/packages/dashboard/src/components/inputs/inputCombobox.tsx +++ b/packages/dashboard/src/components/inputs/inputCombobox.tsx @@ -1,169 +1,199 @@ - -import { Button } from "#/components/buttons/button.js" -import { FormatNull } from "#/components/formats/formatNull.js" -import { CircularLoader } from "#/components/layouts/circularLoader.js" -import { Virtualizer } from "#/components/layouts/virtualizer.js" -import { Popover } from "#/components/overlays/popover/popover.js" -import { cn } from "#/utilities/cn.js" -import { debounce } from "#/utilities/debounce.js" -import { IconCheck, IconChevronDown } from "@tabler/icons-react" -import { ComponentProps, useEffect, useState } from "react" -import { FieldError } from "react-hook-form" - - -export function InputCombobox(props: { - error?: FieldError - placeholder?: string - value?: TValue | null - defaultValue?: TValue | null - onChange: (value?: TValue | null) => void - options: Array<{ - key: TValue - label: string - }> - isLoading?: boolean - isDisabled?: boolean - autoFocus?: boolean - className?: ComponentProps<'div'>['className'] - allowEmpty?: boolean -}) { - const [open, setOpen] = useState(false) - const [rawQuery, setRawQuery] = useState("") - const [currentOptions, setCurrentOptions] = useState(props.options) - const currentOption = props.options?.find(x => (x.key === (props.value ?? props.defaultValue))) - - useEffect(() => { - debounce({ - function: () => { - setCurrentOptions(props.options.filter(x => x.label.toLowerCase().includes(rawQuery.toLowerCase()))) - } - }) - }, [rawQuery]) - - return ( - - - - - { - (open === false) - ? (null) - : ( - -
- setRawQuery(e.currentTarget.value)} - /> -
-
- { - (props.isLoading === false) - ? (null) - : ( - - ) - } - { - (props.options.length > 0) - ? (null) - : ( - - ) - } - - {(option) => { - return ( -
{ - if (props.isDisabled) return - if ((props.allowEmpty === true) && (option.key === props.value)) { - props.onChange(undefined) - setOpen(false) - return - } - props.onChange(option.key) - setOpen(false) - }} - className={cn( - "w-full h-fit flex justify-between items-center gap-2 p-2 cursor-pointer", - (currentOption?.key === option.key) ? "bg-neutral/5" : "bg-none hover:bg-neutral/5" - )} - > - - {option.label} - - -
- ) - }} -
-
-
- )} -
- ) -} + +import { Button } from "@arrhes/ui" +import { FormatNull } from "../../components/formats/formatNull.js" +import { CircularLoader } from "../../components/layouts/circularLoader.js" +import { Virtualizer } from "../../components/layouts/virtualizer.js" +import { Popover } from "../../components/overlays/popover/popover.js" +import { css, cx } from "../../utilities/cn.js" +import { debounce } from "../../utilities/debounce.js" +import { IconCheck, IconChevronDown } from "@tabler/icons-react" +import { ComponentProps, useEffect, useState } from "react" +import { FieldError } from "react-hook-form" + + +export function InputCombobox(props: { + error?: FieldError + placeholder?: string + value?: TValue | null + defaultValue?: TValue | null + onChange: (value?: TValue | null) => void + options: Array<{ + key: TValue + label: string + }> + isLoading?: boolean + isDisabled?: boolean + autoFocus?: boolean + className?: ComponentProps<'div'>['className'] + allowEmpty?: boolean +}) { + const [open, setOpen] = useState(false) + const [rawQuery, setRawQuery] = useState("") + const [currentOptions, setCurrentOptions] = useState(props.options) + const currentOption = props.options?.find(x => (x.key === (props.value ?? props.defaultValue))) + + useEffect(() => { + debounce({ + function: () => { + setCurrentOptions(props.options.filter(x => x.label.toLowerCase().includes(rawQuery.toLowerCase()))) + } + }) + }, [rawQuery]) + + return ( + + + + + { + (open === false) + ? (null) + : ( + +
+ setRawQuery(e.currentTarget.value)} + /> +
+
+ { + (props.isLoading === false) + ? (null) + : ( + + ) + } + { + (props.options.length > 0) + ? (null) + : ( + + ) + } + + {(option) => { + return ( +
{ + if (props.isDisabled) return + if ((props.allowEmpty === true) && (option.key === props.value)) { + props.onChange(undefined) + setOpen(false) + return + } + props.onChange(option.key) + setOpen(false) + }} + className={cx( + css({ + w: "full", + h: "fit-content", + display: "flex", + justifyContent: "space-between", + alignItems: "center", + gap: "2", + p: "2", + cursor: "pointer" + }), + (currentOption?.key === option.key) ? css({ bg: "neutral/5" }) : css({ bg: "none", _hover: { bg: "neutral/5" } }) + )} + > + + {option.label} + + +
+ ) + }} +
+
+
+ )} +
+ ) +} diff --git a/packages/dashboard/src/components/inputs/inputComboboxMultiple.tsx b/packages/dashboard/src/components/inputs/inputComboboxMultiple.tsx index 740f59d..2ff7e74 100644 --- a/packages/dashboard/src/components/inputs/inputComboboxMultiple.tsx +++ b/packages/dashboard/src/components/inputs/inputComboboxMultiple.tsx @@ -1,170 +1,185 @@ -import { Button } from "#/components/buttons/button.js" -import { ButtonGhost } from "#/components/buttons/buttonGhost.js" -import { FormatNull } from "#/components/formats/formatNull.js" -import { CircularLoader } from "#/components/layouts/circularLoader.js" -import { Command, CommandInput, CommandItem, CommandList } from "#/components/layouts/command.js" -import { Popover } from "#/components/overlays/popover/popover.js" -import { cn } from "#/utilities/cn.js" -import { IconCheck, IconSelector, IconX } from "@tabler/icons-react" -import { CommandEmpty, CommandLoading } from "cmdk" -import { Fragment, useState } from "react" - - - -type InputComboboxMultiple = { - placeholder: string - emptyLabel?: string - options: Array<{ - key: TValue - label: string - }> - selectedOptions: Array<{ - key: TValue - label: string - }> - onChange: (newValues: Array<{ - key: TValue - label: string - }>) => void - className?: string - autoFocus?: boolean - loading?: boolean - isDisabled?: boolean -} - -export function InputComboboxMultiple(props: InputComboboxMultiple) { - - const [open, setOpen] = useState(false) - - const handleUnselect = (index: number) => props.onChange([...props.selectedOptions.slice(0, index), ...props.selectedOptions.slice(index + 1)]) - - const options = props.options - .filter((option) => !props.selectedOptions.some((x) => x.key === option.key)) - - return ( -
-
- {(props.selectedOptions.length === 0) ? ( -
- -
- ) : ( - props.selectedOptions.map((option, index) => ( - -
- - {option.label} - - handleUnselect(index)} - icon={} - /> -
-
- )) - )} -
- - - - - { - !open ? null : ( - - { - const option = options?.find(x => x.key === value)?.label.toLowerCase() - if (option?.includes(search.toLowerCase())) return 1 - return 0 - }} - > - - { - (props.loading === true) - ? ( - - - - ) - : (null) - } - - -
- - No result - -
-
- { - options.map((option) => { - const isSelected = !!props.selectedOptions.find((x) => x.key === option.key) - return ( - { - if (props.isDisabled) return - props.onChange( - isSelected - ? props.selectedOptions.filter((x) => x.key !== option.key) - : [...props.selectedOptions, option] - ) - setOpen(false) - }} - className={cn( - "p-3 h-[40px] flex justify-between items-center overflow-auto gap-3", - isSelected ? "bg-neutral/10" : "bg-none hover:bg-neutral/5" - )} - > - - {option.label} - - - - ) - }) - } -
-
-
- )} -
-
- ) -} +import { Button } from "@arrhes/ui" +import { FormatNull } from "../../components/formats/formatNull.js" +import { CircularLoader } from "../../components/layouts/circularLoader.js" +import { Command, CommandInput, CommandItem, CommandList } from "../../components/layouts/command.js" +import { Popover } from "../../components/overlays/popover/popover.js" +import { css, cx } from "../../utilities/cn.js" +import { IconCheck, IconSelector, IconX } from "@tabler/icons-react" +import { CommandEmpty, CommandLoading } from "cmdk" +import { Fragment, useState } from "react" + + + +type InputComboboxMultiple = { + placeholder: string + emptyLabel?: string + options: Array<{ + key: TValue + label: string + }> + selectedOptions: Array<{ + key: TValue + label: string + }> + onChange: (newValues: Array<{ + key: TValue + label: string + }>) => void + className?: string + autoFocus?: boolean + loading?: boolean + isDisabled?: boolean +} + +export function InputComboboxMultiple(props: InputComboboxMultiple) { + + const [open, setOpen] = useState(false) + + const handleUnselect = (index: number) => props.onChange([...props.selectedOptions.slice(0, index), ...props.selectedOptions.slice(index + 1)]) + + const options = props.options + .filter((option) => !props.selectedOptions.some((x) => x.key === option.key)) + + return ( +
+
+ {(props.selectedOptions.length === 0) ? ( +
+ +
+ ) : ( + props.selectedOptions.map((option, index) => ( + +
+ + {option.label} + +
+
+ )) + )} +
+ + + + + { + !open ? null : ( + + { + const option = options?.find(x => x.key === value)?.label.toLowerCase() + if (option?.includes(search.toLowerCase())) return 1 + return 0 + }} + > + + { + (props.loading === true) + ? ( + + + + ) + : (null) + } + + +
+ + No result + +
+
+ { + options.map((option) => { + const isSelected = !!props.selectedOptions.find((x) => x.key === option.key) + return ( + { + if (props.isDisabled) return + props.onChange( + isSelected + ? props.selectedOptions.filter((x) => x.key !== option.key) + : [...props.selectedOptions, option] + ) + setOpen(false) + }} + className={cx( + css({ + p: "3", + h: "[40px]", + display: "flex", + justifyContent: "space-between", + alignItems: "center", + overflow: "auto", + gap: "3" + }), + isSelected ? css({ bg: "neutral/10" }) : css({ bg: "none", _hover: { bg: "neutral/5" } }) + )} + > + + {option.label} + + + + ) + }) + } +
+
+
+ )} +
+
+ ) +} diff --git a/packages/dashboard/src/components/inputs/inputDataCombobox.tsx b/packages/dashboard/src/components/inputs/inputDataCombobox.tsx index 0b4ddb9..71ff466 100644 --- a/packages/dashboard/src/components/inputs/inputDataCombobox.tsx +++ b/packages/dashboard/src/components/inputs/inputDataCombobox.tsx @@ -1,39 +1,39 @@ -import { InputCombobox } from "#/components/inputs/inputCombobox.js" -import { useHTTPData } from "#/utilities/useHTTPData.js" -import { routeDefinition } from "@arrhes/application-metadata/utilities" -import * as v from "valibot" - - -export function InputDataCombobox< - TRouteDefinition extends ReturnType ->(props: { - routeDefinition: TRouteDefinition - body: v.InferInput - placeholder?: string - getOption: (data: v.InferOutput[number]) => ({ key: string, label: string }) - value?: string | null - onChange: (value?: string | null) => void -}) { - const response = useHTTPData({ - routeDefinition: props.routeDefinition, - body: props.body, - }) - - return ( - props.getOption(item)) - : [props.getOption(response.data)] - } - /> - ) -} +import { InputCombobox } from "../../components/inputs/inputCombobox.js" +import { useDataFromAPI } from "../../utilities/useHTTPData.js" +import { routeDefinition } from "@arrhes/application-metadata/utilities" +import * as v from "valibot" + + +export function InputDataCombobox< + TRouteDefinition extends ReturnType +>(props: { + routeDefinition: TRouteDefinition + body: v.InferInput + placeholder?: string + getOption: (data: v.InferOutput[number]) => ({ key: string, label: string }) + value?: string | null + onChange: (value?: string | null) => void +}) { + const response = useDataFromAPI({ + routeDefinition: props.routeDefinition, + body: props.body, + }) + + return ( + props.getOption(item)) + : [props.getOption(response.data)] + } + /> + ) +} diff --git a/packages/dashboard/src/components/inputs/inputDate.tsx b/packages/dashboard/src/components/inputs/inputDate.tsx index d3907d7..83f299e 100644 --- a/packages/dashboard/src/components/inputs/inputDate.tsx +++ b/packages/dashboard/src/components/inputs/inputDate.tsx @@ -1,88 +1,104 @@ -import { cn } from "#/utilities/cn.js" -import { InputHTMLAttributes } from "react" -import { FieldError } from "react-hook-form" -import { IMask, IMaskInput } from "react-imask" - - -export function InputDate(props: - & Omit, "defaultValue" | "value" | "onChange"> - & { - error?: FieldError - defaultValue?: string | undefined | null - value?: string | undefined | null - onChange: (value: string | undefined) => void - } -) { - - function input(value: string | undefined | null) { - if (!value) return undefined - if (String(new Date(value)) === "Invalid Date") return undefined - - let date = new Date(value) - let day = String(date.getDate()) - let month = String(date.getMonth() + 1) - let year = String(date.getFullYear()) - - if (date.getDate() < 10) day = "0" + day - if ((date.getMonth() + 1) < 10) month = "0" + month - return [day, month, year].join(' / ') - } - - function output(value: string | undefined) { - if (!value) return undefined - const yearMonthDay = value.split(' / ') - return new Date(Number(yearMonthDay[2]), Number(yearMonthDay[1]) - 1, Number(yearMonthDay[0]), 12, 0, 0)?.toISOString() - } - - return ( -
- props.onChange(output(String(value)))} - value={input(props.value)} - className={cn( - "rounded-[inherit] w-full text-sm placeholder:text-neutral/25 p-2", - "overflow-hidden whitespace-nowrap text-ellipsis", - )} - inputMode="decimal" - /> -
- ) -} +import { css, cx } from "../../utilities/cn.js" +import { InputHTMLAttributes } from "react" +import { FieldError } from "react-hook-form" +import { IMask, IMaskInput } from "react-imask" + + +export function InputDate(props: + & Omit, "defaultValue" | "value" | "onChange"> + & { + error?: FieldError + defaultValue?: string | undefined | null + value?: string | undefined | null + onChange: (value: string | undefined) => void + } +) { + + function input(value: string | undefined | null) { + if (!value) return undefined + if (String(new Date(value)) === "Invalid Date") return undefined + + let date = new Date(value) + let day = String(date.getDate()) + let month = String(date.getMonth() + 1) + let year = String(date.getFullYear()) + + if (date.getDate() < 10) day = "0" + day + if ((date.getMonth() + 1) < 10) month = "0" + month + return [day, month, year].join(' / ') + } + + function output(value: string | undefined) { + if (!value) return undefined + const yearMonthDay = value.split(' / ') + return new Date(Number(yearMonthDay[2]), Number(yearMonthDay[1]) - 1, Number(yearMonthDay[0]), 12, 0, 0)?.toISOString() + } + + return ( +
+ props.onChange(output(String(value)))} + value={input(props.value)} + className={css({ + rounded: "inherit", + w: "full", + fontSize: "sm", + _placeholder: { color: "neutral/25" }, + p: "2", + overflow: "hidden", + whiteSpace: "nowrap", + textOverflow: "ellipsis" + })} + inputMode="decimal" + /> +
+ ) +} diff --git a/packages/dashboard/src/components/inputs/inputDisabled.tsx b/packages/dashboard/src/components/inputs/inputDisabled.tsx index 4135c9e..6325e33 100644 --- a/packages/dashboard/src/components/inputs/inputDisabled.tsx +++ b/packages/dashboard/src/components/inputs/inputDisabled.tsx @@ -1,24 +1,37 @@ -import { cn } from "#/utilities/cn.js" -import { InputHTMLAttributes, useRef } from 'react' -import { FieldError } from 'react-hook-form' - - -type InputDisabled = Omit, "value" | "onChange"> & { - error?: FieldError - value?: string | null - onChange?: (value?: string | null | undefined) => void -} - -export function InputDisabled(props: InputDisabled) { - const ref = useRef(null) - return ( - - ) -} +import { css, cx } from "../../utilities/cn.js" +import { InputHTMLAttributes, useRef } from 'react' +import { FieldError } from 'react-hook-form' + + +type InputDisabled = Omit, "value" | "onChange"> & { + error?: FieldError + value?: string | null + onChange?: (value?: string | null | undefined) => void +} + +export function InputDisabled(props: InputDisabled) { + const ref = useRef(null) + return ( + + ) +} diff --git a/packages/dashboard/src/components/inputs/inputFile.tsx b/packages/dashboard/src/components/inputs/inputFile.tsx index 70279f5..b633fde 100644 --- a/packages/dashboard/src/components/inputs/inputFile.tsx +++ b/packages/dashboard/src/components/inputs/inputFile.tsx @@ -1,53 +1,72 @@ -import { Button } from "#/components/buttons/button.js" -import { InputHTMLAttributes, useRef } from 'react' -import { FieldError } from 'react-hook-form' - - -export function InputFile(props: - & Omit, "value" | "onChange"> & { - error?: FieldError - value?: File | null - onChange?: (value?: File | null | undefined) => void - type?: "image" - } -) { - const inputRef = useRef(null) - - // useImperativeHandle(props.ref, () => inputRef.current as HTMLInputElement) - - return ( -
{ - event.preventDefault() - if (!props.onChange) return - if (event.dataTransfer.files) { - props.onChange(event.dataTransfer.files[0]) - } - }} - onDragOver={(event) => event.preventDefault()} - > - { - if (!props.onChange) return - if (event.target.files) { - props.onChange(event.target.files[0]) - } - }} - accept={!props.type ? "*" : "image/*"} - className="hidden w-full h-full" - /> - -
- ) -} +import { Button } from "@arrhes/ui" +import { css } from "../../utilities/cn.js" +import { InputHTMLAttributes, useRef } from 'react' +import { FieldError } from 'react-hook-form' + + +export function InputFile(props: + & Omit, "value" | "onChange"> & { + error?: FieldError + value?: File | null + onChange?: (value?: File | null | undefined) => void + type?: "image" + } +) { + const inputRef = useRef(null) + + // useImperativeHandle(props.ref, () => inputRef.current as HTMLInputElement) + + return ( +
{ + event.preventDefault() + if (!props.onChange) return + if (event.dataTransfer.files) { + props.onChange(event.dataTransfer.files[0]) + } + }} + onDragOver={(event) => event.preventDefault()} + > + { + if (!props.onChange) return + if (event.target.files) { + props.onChange(event.target.files[0]) + } + }} + accept={!props.type ? "*" : "image/*"} + className={css({ display: "none", w: "full", h: "full" })} + /> + +
+ ) +} diff --git a/packages/dashboard/src/components/inputs/inputNumber.tsx b/packages/dashboard/src/components/inputs/inputNumber.tsx index 8541cbd..2ddd86c 100644 --- a/packages/dashboard/src/components/inputs/inputNumber.tsx +++ b/packages/dashboard/src/components/inputs/inputNumber.tsx @@ -1,62 +1,77 @@ -import { cn } from "#/utilities/cn.js" -import { InputHTMLAttributes } from "react" -import { FieldError } from "react-hook-form" -import { IMask, IMaskInput } from 'react-imask' - - -export function InputPrice(props: - & Omit, "defaultValue" | "value" | "onChange"> - & { - error?: FieldError - defaultValue?: string | undefined | null - value?: string | undefined | null - onChange: (value: string | undefined) => void - } -) { - - function input(value: string | undefined | null) { - if (value === null || value === undefined) return undefined - return value - } - - function output(value: string | undefined) { - if (value === undefined) return value - return value - } - - return ( -
- { event.currentTarget.select() }} - // onFocus={(event) => { event.currentTarget.setSelectionRange(-1, -1) }} - onAccept={(value: unknown) => props.onChange(output(String(value)))} - value={input(props.value)} - className={cn( - "rounded-[inherit] w-full text-base placeholder:text-neutral/25 p-2", - "focus:shadow-inner focus:bg-neutral/5", - "overflow-hidden whitespace-nowrap text-ellipsis" - )} - inputMode="decimal" - /> -
- - ) -} +import { css, cx } from "../../utilities/cn.js" +import { InputHTMLAttributes } from "react" +import { FieldError } from "react-hook-form" +import { IMask, IMaskInput } from 'react-imask' + + +export function InputPrice(props: + & Omit, "defaultValue" | "value" | "onChange"> + & { + error?: FieldError + defaultValue?: string | undefined | null + value?: string | undefined | null + onChange: (value: string | undefined) => void + } +) { + + function input(value: string | undefined | null) { + if (value === null || value === undefined) return undefined + return value + } + + function output(value: string | undefined) { + if (value === undefined) return value + return value + } + + return ( +
+ { event.currentTarget.select() }} + // onFocus={(event) => { event.currentTarget.setSelectionRange(-1, -1) }} + onAccept={(value: unknown) => props.onChange(output(String(value)))} + value={input(props.value)} + className={css({ + rounded: "inherit", + w: "full", + fontSize: "base", + _placeholder: { color: "neutral/25" }, + p: "2", + _focus: { shadow: "inset", bg: "neutral/5" }, + overflow: "hidden", + whiteSpace: "nowrap", + textOverflow: "ellipsis" + })} + inputMode="decimal" + /> +
+ + ) +} diff --git a/packages/dashboard/src/components/inputs/inputPassword.tsx b/packages/dashboard/src/components/inputs/inputPassword.tsx index ffd64c2..651fd8c 100644 --- a/packages/dashboard/src/components/inputs/inputPassword.tsx +++ b/packages/dashboard/src/components/inputs/inputPassword.tsx @@ -1,60 +1,79 @@ -import { Button } from "#/components/buttons/button.js" -import { cn } from "#/utilities/cn.js" -import { IconEye, IconEyeClosed } from '@tabler/icons-react' -import { InputHTMLAttributes, forwardRef, useState } from 'react' -import { FieldError } from 'react-hook-form' - - -type InputPassword = Omit, "value" | "onChange"> & { - error?: FieldError - value?: string | null - onChange: (value?: string | null | undefined) => void - autoFocus?: boolean -} - -export const InputPassword = forwardRef( - function (props, ref) { - const [showPassword, setShowPassword] = useState(false) - const handleClickShowPassword = () => setShowPassword((show) => !show) - - function input(value: string | undefined | null) { - if (!value) return "" - return value - } - - function output(value: string) { - if (!value) return null - return value - } - - return ( -
- props.onChange(output(e.currentTarget.value))} - autoFocus={props.autoFocus} - /> - -
- ) - } -) +import { Button } from "@arrhes/ui" +import { css, cx } from "../../utilities/cn.js" +import { IconEye, IconEyeClosed } from '@tabler/icons-react' +import { InputHTMLAttributes, forwardRef, useState } from 'react' +import { FieldError } from 'react-hook-form' + + +type InputPassword = Omit, "value" | "onChange"> & { + error?: FieldError + value?: string | null + onChange: (value?: string | null | undefined) => void + autoFocus?: boolean +} + +export const InputPassword = forwardRef( + function (props, ref) { + const [showPassword, setShowPassword] = useState(false) + const handleClickShowPassword = () => setShowPassword((show) => !show) + + function input(value: string | undefined | null) { + if (!value) return "" + return value + } + + function output(value: string) { + if (!value) return null + return value + } + + return ( +
+ props.onChange(output(e.currentTarget.value))} + autoFocus={props.autoFocus} + /> + +
+ ) + } +) diff --git a/packages/dashboard/src/components/inputs/inputRating.tsx b/packages/dashboard/src/components/inputs/inputRating.tsx index 37acfec..bd2f0e2 100644 --- a/packages/dashboard/src/components/inputs/inputRating.tsx +++ b/packages/dashboard/src/components/inputs/inputRating.tsx @@ -1,53 +1,57 @@ -import { cn } from "#/utilities/cn.js" -import { IconStarFilled } from '@tabler/icons-react' -import { InputHTMLAttributes, forwardRef } from 'react' -import { FieldError } from 'react-hook-form' - - -type InputText = Omit, "value" | "onChange"> & { - error?: FieldError - value?: number | null - onChange?: (value?: number | null | undefined) => void -} - -export const InputRating = forwardRef( - function (props, ref) { - - function input(value: number | undefined | null) { - if (!value) return 0 - return value - } - - function output(value: number) { - if (value === 0) return undefined - return value - } - - return ( -
- - {Array(5) - .fill(0) - .map((_, i) => ( -
{ - if (!props.onChange) return - props?.onChange(output((i === +input(props.value) - 1) ? 0 : i + 1)) - } - } - > - -
- ))} -
- ) - } -) +import { css, cx } from "../../utilities/cn.js" +import { IconStarFilled } from '@tabler/icons-react' +import { InputHTMLAttributes, forwardRef } from 'react' +import { FieldError } from 'react-hook-form' + + +type InputText = Omit, "value" | "onChange"> & { + error?: FieldError + value?: number | null + onChange?: (value?: number | null | undefined) => void +} + +export const InputRating = forwardRef( + function (props, ref) { + + function input(value: number | undefined | null) { + if (!value) return 0 + return value + } + + function output(value: number) { + if (value === 0) return undefined + return value + } + + return ( +
+ + {Array(5) + .fill(0) + .map((_, i) => ( +
{ + if (!props.onChange) return + props?.onChange(output((i === +input(props.value) - 1) ? 0 : i + 1)) + } + } + > + +
+ ))} +
+ ) + } +) diff --git a/packages/dashboard/src/components/inputs/inputSelect.tsx b/packages/dashboard/src/components/inputs/inputSelect.tsx index d470dd5..0c39dc4 100644 --- a/packages/dashboard/src/components/inputs/inputSelect.tsx +++ b/packages/dashboard/src/components/inputs/inputSelect.tsx @@ -1,157 +1,207 @@ -import { Button } from "#/components/buttons/button.js" -import { FormatNull } from "#/components/formats/formatNull.js" -import { CircularLoader } from "#/components/layouts/circularLoader.js" -import { Popover } from "#/components/overlays/popover/popover.js" -import { cn } from "#/utilities/cn.js" -import { IconCheck, IconChevronDown } from "@tabler/icons-react" -import { InputHTMLAttributes, useState } from 'react' -import { FieldError } from 'react-hook-form' - - -export function InputSelect(props: - & Omit, "value" | "onChange"> - & { - error?: FieldError - value?: TValue | null - defaultValue?: TValue | null - onChange?: (value?: TValue | null | undefined) => void - options: Array<{ - key: TValue - label: string - }> | undefined - autoFocus?: boolean - allowEmpty?: boolean - isDisabled?: boolean - isLoading?: boolean - } -) { - const [open, setOpen] = useState(false) - - function input(value: TValue | null | undefined) { - return value - } - - function output(value: TValue | undefined | null) { - if (!value) return null - return value - } - - const currentOption = props.options?.find(x => x.key === input(props.value ?? props.defaultValue)) - return ( - - - {/* { - if (props.isDisabled === true) return - setOpen(!open) - }} - className={cn( - "w-fit group", - props.isDisabled ? "cursor-not-allowed" : "", - props.className - )} - data-open={open} - icon={} - text="Filter" - />*/} - - - -
- { - (props.isLoading === true) - ? ( - - ) - : (props.options === undefined || props.options.length === 0) - ? ( - - ) - : props.options.map((option) => ( -
{ - if (props.isDisabled === true) return - if (props.onChange === undefined) return - if ((props.allowEmpty === true) && (option.key === props.value)) { - props.onChange(undefined) - setOpen(false) - return - } - props.onChange(output(option.key)) - setOpen(false) - }} - className={cn( - "relative w-full flex justify-between items-center gap-2 p-2 rounded-sm border border-transparent cursor-pointer", - (option.key === props.value) ? "bg-neutral/5 border-neutral/5" : "bg-none hover:bg-neutral/5 hover:border-neutral/5" - )} - > - - {option.label} - - -
- )) - } -
-
-
- ) -} +import { Button } from "@arrhes/ui" +import { FormatNull } from "../../components/formats/formatNull.js" +import { CircularLoader } from "../../components/layouts/circularLoader.js" +import { Popover } from "../../components/overlays/popover/popover.js" +import { css, cx } from "../../utilities/cn.js" +import { IconCheck, IconChevronDown } from "@tabler/icons-react" +import { InputHTMLAttributes, useState } from 'react' +import { FieldError } from 'react-hook-form' + + +export function InputSelect(props: + & Omit, "value" | "onChange"> + & { + error?: FieldError + value?: TValue | null + defaultValue?: TValue | null + onChange?: (value?: TValue | null | undefined) => void + options: Array<{ + key: TValue + label: string + }> | undefined + autoFocus?: boolean + allowEmpty?: boolean + isDisabled?: boolean + isLoading?: boolean + } +) { + const [open, setOpen] = useState(false) + + function input(value: TValue | null | undefined) { + return value + } + + function output(value: TValue | undefined | null) { + if (!value) return null + return value + } + + const currentOption = props.options?.find(x => x.key === input(props.value ?? props.defaultValue)) + return ( + + + + + +
+ { + (props.isLoading === true) + ? ( + + ) + : (props.options === undefined || props.options.length === 0) + ? ( + + ) + : props.options.map((option) => ( +
{ + if (props.isDisabled === true) return + if (props.onChange === undefined) return + if ((props.allowEmpty === true) && (option.key === props.value)) { + props.onChange(undefined) + setOpen(false) + return + } + props.onChange(output(option.key)) + setOpen(false) + }} + className={cx( + css({ + position: "relative", + w: "full", + display: "flex", + justifyContent: "space-between", + alignItems: "center", + gap: "2", + p: "2", + rounded: "sm", + border: "1px solid transparent", + cursor: "pointer" + }), + css(option.key === props.value + ? { bg: "neutral/5", borderColor: "neutral/5" } + : { bg: "none", _hover: { bg: "neutral/5", borderColor: "neutral/5" } } + ) + )} + > + + {option.label} + + +
+ )) + } +
+
+
+ ) +} diff --git a/packages/dashboard/src/components/inputs/inputSwitch.tsx b/packages/dashboard/src/components/inputs/inputSwitch.tsx index 9b8f48e..cdb1153 100644 --- a/packages/dashboard/src/components/inputs/inputSwitch.tsx +++ b/packages/dashboard/src/components/inputs/inputSwitch.tsx @@ -1,42 +1,64 @@ - -import { cn } from "#/utilities/cn.js" -import * as SwitchPrimitives from "@radix-ui/react-switch" -import { ComponentProps } from "react" - - -type InputSwitch = Omit, "value" | "onChange"> & { - value: boolean - onChange: (value: boolean) => void -} - -export function InputSwitch(props: InputSwitch) { - function input(value: boolean | undefined | null) { - if (!value) return false - return value - } - - function output(value: boolean) { - return value - } - - return ( - props.onChange(output(checked))} - autoFocus={props.autoFocus} - > - - - ) -} + +import { css, cx } from "../../utilities/cn.js" +import * as SwitchPrimitives from "@radix-ui/react-switch" +import { ComponentProps } from "react" + + +type InputSwitch = Omit, "value" | "onChange"> & { + value: boolean + onChange: (value: boolean) => void +} + +export function InputSwitch(props: InputSwitch) { + function input(value: boolean | undefined | null) { + if (!value) return false + return value + } + + function output(value: boolean) { + return value + } + + return ( + props.onChange(output(checked))} + autoFocus={props.autoFocus} + > + + + ) +} diff --git a/packages/dashboard/src/components/inputs/inputText.tsx b/packages/dashboard/src/components/inputs/inputText.tsx index 714ee82..6a2c27f 100644 --- a/packages/dashboard/src/components/inputs/inputText.tsx +++ b/packages/dashboard/src/components/inputs/inputText.tsx @@ -1,46 +1,62 @@ -import { cn } from "#/utilities/cn.js" -import { InputHTMLAttributes } from 'react' -import { FieldError } from 'react-hook-form' - - -type InputText = Omit, "value" | "onChange"> & { - error?: FieldError - value?: string | null | undefined - onChange?: (value?: string | null | undefined) => void -} - -export function InputText(props: InputText) { - function input(value: string | undefined | null) { - if (!value) return "" - return value - } - - function output(value: string | undefined | null) { - if (!value) return null - return value - } - - return ( -
- { - if (!props.onChange) return - props?.onChange(output(e.currentTarget.value)) - }} - /> -
- ) +import { css, cx } from "../../utilities/cn.js" +import { InputHTMLAttributes } from 'react' +import { FieldError } from 'react-hook-form' + + +type InputText = Omit, "value" | "onChange"> & { + error?: FieldError + value?: string | null | undefined + onChange?: (value?: string | null | undefined) => void +} + +export function InputText(props: InputText) { + function input(value: string | undefined | null) { + if (!value) return "" + return value + } + + function output(value: string | undefined | null) { + if (!value) return null + return value + } + + return ( +
+ { + if (!props.onChange) return + props?.onChange(output(e.currentTarget.value)) + }} + /> +
+ ) } \ No newline at end of file diff --git a/packages/dashboard/src/components/inputs/inputTextArea.tsx b/packages/dashboard/src/components/inputs/inputTextArea.tsx index fa75cee..907609d 100644 --- a/packages/dashboard/src/components/inputs/inputTextArea.tsx +++ b/packages/dashboard/src/components/inputs/inputTextArea.tsx @@ -1,48 +1,64 @@ -import { cn } from "#/utilities/cn.js" -import { ComponentPropsWithRef, useRef } from 'react' -import { FieldError } from 'react-hook-form' - - -export function InputTextArea(props: - & Omit, "value" | "onChange"> - & { - error?: FieldError - value?: string | null - onChange: (value?: string | null | undefined) => void - } -) { - const textAreaRef = useRef(null) - - function input(value: string | undefined | null) { - if (!value) return "" - return value - } - - function output(value: string) { - if (!value) return null - return value - } - - return ( -