chore: init

This commit is contained in:
Julien Froidefond
2025-09-13 08:59:07 +02:00
commit 3aa895a02e
8 changed files with 292 additions and 0 deletions

BIN
.DS_Store vendored Normal file

Binary file not shown.

BIN
.cursor/.DS_Store vendored Normal file

Binary file not shown.

View File

@@ -0,0 +1,32 @@
---
globs: app/api/**/*.ts
---
# API Routes Rules
1. Routes MUST only use services for data access
2. Routes MUST handle input validation
3. Routes MUST return typed responses
4. Routes MUST use proper error handling
Example of correct API route:
```typescript
import { MyService } from "@/services/my-service";
export async function GET(request: Request) {
try {
const service = new MyService(pool);
const data = await service.getData();
return Response.json(data);
} catch (error) {
return Response.error();
}
}
```
❌ FORBIDDEN:
- Direct database queries
- Business logic implementation
- Untyped responses

31
.cursor/rules/clients.mdc Normal file
View File

@@ -0,0 +1,31 @@
---
globs: clients/**/*.ts
---
# HTTP Clients Rules
1. All HTTP calls MUST be in clients/domains/
2. Each domain MUST have its own client
3. Clients MUST use the base HTTP client
4. Clients MUST type their responses
Example of correct client:
```typescript
import { HttpClient } from "@/clients/base/http-client";
import { MyData } from "@/lib/types";
export class MyClient {
constructor(private httpClient: HttpClient) {}
async getData(): Promise<MyData[]> {
return this.httpClient.get("/api/data");
}
}
```
❌ FORBIDDEN:
- Direct fetch calls
- Business logic in clients
- Untyped responses

View File

@@ -0,0 +1,28 @@
---
globs: components/**/*.tsx
---
# Components Rules
1. UI components MUST be in components/ui/
2. Feature components MUST be in their feature folder
3. Components MUST use clients for data fetching
4. Components MUST be properly typed
Example of correct component:
```typescript
import { useMyClient } from '@/hooks/use-my-client';
export const MyComponent = () => {
const { data } = useMyClient();
return <div>{data.map(item => <Item key={item.id} {...item} />)}</div>;
};
```
❌ FORBIDDEN:
- Direct service usage
- Direct database queries
- Direct fetch calls
- Untyped props

View File

@@ -0,0 +1,30 @@
---
alwaysApply: true
---
# Project Structure Rules
1. Backend:
- [services/](mdc:services/) - ALL database access
- [app/api/](mdc:app/api/) - API routes using services
2. Frontend:
- [clients/](mdc:clients/) - HTTP clients
- [components/](mdc:components/) - React components
- [hooks/](mdc:hooks/) - React hooks
3. Shared:
- [lib/](mdc:lib/) - Types and utilities
- [scripts/](mdc:scripts/) - Utility scripts
Key Files:
- [services/database.ts](mdc:services/database.ts) - Database pool
- [clients/base/http-client.ts](mdc:clients/base/http-client.ts) - Base HTTP client
- [lib/types.ts](mdc:lib/types.ts) - Shared types
❌ FORBIDDEN:
- Database access outside services/
- HTTP calls outside clients/
- Business logic in components/

View File

@@ -0,0 +1,42 @@
---
globs: services/*.ts
---
# Services Rules
1. Services MUST contain ALL PostgreSQL queries
2. Services are the ONLY layer allowed to communicate with the database
3. Each service MUST:
- Use the pool from [services/database.ts](mdc:services/database.ts)
- Implement proper transaction management
- Handle errors and logging
- Validate data before insertion
- Have a clear interface
Example of correct service implementation:
```typescript
export class MyService {
constructor(private pool: Pool) {}
async myMethod(): Promise<Result> {
const client = await this.pool.connect();
try {
await client.query("BEGIN");
// ... queries
await client.query("COMMIT");
} catch (error) {
await client.query("ROLLBACK");
throw error;
} finally {
client.release();
}
}
}
```
❌ FORBIDDEN:
- Direct database queries outside services
- Raw SQL in API routes
- Database logic in components

129
TODO.md Normal file
View File

@@ -0,0 +1,129 @@
# TowerControl - Plan de développement
## Phase 1: Setup initial et architecture backend (Priorité 1)
### 1.1 Configuration projet Next.js
- [ ] Initialiser Next.js avec TypeScript
- [ ] Configurer ESLint, Prettier
- [ ] Setup structure de dossiers selon les règles du workspace
- [ ] Configurer base de données (SQLite local pour commencer)
- [ ] Setup Prisma ORM
### 1.2 Architecture backend - Services de base
- [ ] Créer `services/database.ts` - Pool de connexion DB
- [ ] Créer `services/reminders.ts` - Service pour récupérer les rappels macOS
- [ ] Créer `lib/types.ts` - Types partagés (Task, Tag, Project, etc.)
- [ ] Créer `services/task-processor.ts` - Logique métier des tâches
### 1.3 Intégration Rappels macOS (Focus principal Phase 1)
- [ ] Rechercher comment accéder aux rappels macOS en local (SQLite, AppleScript, ou API)
- [ ] Créer script d'extraction des rappels depuis la DB locale macOS
- [ ] Parser les tags et catégories des rappels
- [ ] Mapper les données vers le modèle interne
- [ ] Créer service de synchronisation périodique
### 1.4 API Routes de base
- [ ] `app/api/tasks/route.ts` - CRUD tâches
- [ ] `app/api/tasks/sync/route.ts` - Synchronisation rappels
- [ ] `app/api/tags/route.ts` - Gestion des tags
- [ ] Middleware d'authentification basique (si nécessaire)
## Phase 2: Interface utilisateur Kanban (Priorité 2)
### 2.1 Composants de base
- [ ] `components/kanban/Board.tsx` - Tableau Kanban principal
- [ ] `components/kanban/Column.tsx` - Colonnes du Kanban
- [ ] `components/kanban/TaskCard.tsx` - Cartes de tâches
- [ ] `components/ui/` - Composants UI réutilisables
### 2.2 Clients HTTP
- [ ] `clients/tasks-client.ts` - Client pour les tâches
- [ ] `clients/base/http-client.ts` - Client HTTP de base
- [ ] Gestion des erreurs et loading states
### 2.3 Hooks React
- [ ] `hooks/useTasks.ts` - Hook pour la gestion des tâches
- [ ] `hooks/useKanban.ts` - Hook pour la logique Kanban (drag & drop)
- [ ] `hooks/useSync.ts` - Hook pour la synchronisation
### 2.4 Interface Kanban
- [ ] Affichage des tâches par statut/tag
- [ ] Drag & drop entre colonnes
- [ ] Filtrage par tags/projets
- [ ] Recherche dans les tâches
## Phase 3: Intégration Jira (Priorité 3)
### 3.1 Services Jira
- [ ] `services/jira-client.ts` - Client Jira API
- [ ] `services/jira-sync.ts` - Synchronisation des tâches Jira
- [ ] Gestion multi-projets Jira
- [ ] Mapping des statuts Jira vers Kanban interne
### 3.2 API Routes Jira
- [ ] `app/api/jira/projects/route.ts` - Liste des projets
- [ ] `app/api/jira/tasks/route.ts` - Tâches Jira
- [ ] `app/api/jira/sync/route.ts` - Synchronisation
- [ ] Configuration des credentials Jira
### 3.3 Interface Jira
- [ ] Sélecteur de projets Jira
- [ ] Affichage mixte rappels + Jira dans le Kanban
- [ ] Indicateurs visuels pour différencier les sources
## Phase 4: Statistiques équipe (Priorité 4)
### 4.1 Services analytics
- [ ] `services/team-analytics.ts` - Calculs statistiques équipe
- [ ] `services/jira-team-sync.ts` - Récupération données équipe
- [ ] Agrégation des métriques (vélocité, burndown, etc.)
### 4.2 Dashboard équipe
- [ ] `components/dashboard/TeamStats.tsx` - Statistiques équipe
- [ ] `components/charts/` - Graphiques (vélocité, burndown, etc.)
- [ ] `app/team/page.tsx` - Page dédiée équipe
- [ ] Filtres par période, membre, projet
## Phase 5: Outils additionnels (Priorité 5)
### 5.1 Intégrations futures
- [ ] Calendrier (événements, deadlines)
- [ ] Notifications (rappels, alertes)
- [ ] Export/Import de données
- [ ] Thèmes et personnalisation
### 5.2 Optimisations
- [ ] Cache Redis pour les données Jira
- [ ] Optimisation des requêtes DB
- [ ] Pagination des tâches
- [ ] Mode offline basique
## Configuration technique
### Stack
- **Frontend**: Next.js 14, React, TypeScript, Tailwind CSS
- **Backend**: Next.js API Routes, Prisma ORM
- **Database**: SQLite (local) → PostgreSQL (production)
- **Intégrations**: macOS Reminders, Jira API
- **UI**: Shadcn/ui, React DnD pour le Kanban
### Structure respectée
```
/services/ # Accès DB et logique métier
/app/api/ # Routes API utilisant les services
/clients/ # Clients HTTP frontend
/components/ # Composants React (pas de logique métier)
/hooks/ # Hooks React
/lib/ # Types et utilitaires partagés
```
## Prochaines étapes immédiates
1. **Setup Next.js** avec la structure de dossiers
2. **Recherche technique** : Comment accéder aux rappels macOS localement
3. **Créer le service `reminders.ts`** pour l'extraction des données
4. **API de base** pour les tâches et synchronisation
---
*Ce plan se concentre d'abord sur le backend et les rappels macOS comme demandé. Chaque phase peut être développée indépendamment.*