this-rs 0.0.2

A generic entity and relationship management framework for Rust
Documentation
# Contributing to This-RS 🦀

Merci de votre intérêt pour contribuer à This-RS ! Ce document explique comment participer au projet.

## 🚀 Quick Start

1. **Fork le repository**
2. **Clone votre fork**
   ```bash
   git clone https://github.com/VOTRE_USERNAME/this-rs.git
   cd this-rs
   ```
3. **Créer une branche**
   ```bash
   git checkout -b feature/ma-fonctionnalite
   ```
4. **Faire vos modifications**
5. **Tester**
   ```bash
   cargo test --all-features
   cargo fmt --all -- --check
   cargo clippy --all-targets --all-features -- -D warnings
   ```
6. **Commit et push**
   ```bash
   git add .
   git commit -m "feat: description de ma fonctionnalité"
   git push origin feature/ma-fonctionnalite
   ```
7. **Ouvrir une Pull Request**

## 📋 Types de Contributions

### 🐛 Bug Reports
Ouvrez une issue avec:
- Description claire du bug
- Steps to reproduce
- Version de This-RS
- Version de Rust (`rustc --version`)
- OS et version

### ✨ Feature Requests
Ouvrez une issue avec:
- Description de la fonctionnalité
- Use case concret
- Exemple d'API souhaitée (si applicable)

### 📝 Documentation
- Corriger des typos
- Améliorer les explications
- Ajouter des exemples
- Traduire la documentation

### 💻 Code Contributions
- Nouvelles fonctionnalités
- Corrections de bugs
- Améliorations de performance
- Refactoring

## 🏗️ Architecture du Projet

```
this-rs/
├── src/
│   ├── core/           # Traits et types fondamentaux
│   ├── links/          # Système de gestion des liens
│   ├── config/         # Configuration YAML
│   ├── server/         # ServerBuilder et routing
│   └── entities/       # Macros et helpers
├── examples/           # Exemples d'utilisation
├── docs/              # Documentation
└── tests/             # Tests d'intégration
```

### Principes d'Architecture

1. **Généricité**: Le core ne doit pas référencer de types concrets d'entités
2. **Flexibilité**: Les utilisateurs doivent pouvoir étendre sans modifier le framework
3. **Type Safety**: Utiliser le système de types de Rust au maximum
4. **NoSQL-First**: Design pensé pour DynamoDB/ScyllaDB

## 🧪 Tests

### Exécuter tous les tests
```bash
cargo test --all-features
```

### Tests unitaires
```bash
cargo test --lib
```

### Tests d'intégration
```bash
cargo test --test '*'
```

### Tests des exemples
```bash
cargo test --examples
```

### Doc tests
```bash
cargo test --doc
```

## 🎨 Style de Code

### Formatting
Utilisez `rustfmt`:
```bash
cargo fmt --all
```

### Linting
Utilisez `clippy`:
```bash
cargo clippy --all-targets --all-features -- -D warnings
```

### Conventions de Nommage
- **Types**: `PascalCase` (ex: `EntityDescriptor`)
- **Fonctions/Variables**: `snake_case` (ex: `build_routes`)
- **Constantes**: `SCREAMING_SNAKE_CASE` (ex: `DEFAULT_TIMEOUT`)
- **Traits**: `PascalCase` (ex: `LinkService`)

### Documentation
- Chaque fonction publique doit avoir un doc comment
- Utiliser `///` pour la documentation
- Inclure des exemples dans la doc quand pertinent

Exemple:
```rust
/// Fetches an entity by ID as JSON
///
/// # Arguments
/// * `tenant_id` - The tenant ID for isolation
/// * `entity_id` - The unique ID of the entity
///
/// # Returns
/// The entity serialized as JSON, or an error if not found
///
/// # Example
/// ```ignore
/// let entity = fetcher.fetch_as_json(&tenant_id, &entity_id).await?;
/// ```
async fn fetch_as_json(
    &self,
    tenant_id: &Uuid,
    entity_id: &Uuid,
) -> Result<serde_json::Value>;
```

## 📝 Commit Messages

Suivre la convention [Conventional Commits](https://www.conventionalcommits.org/):

```
<type>(<scope>): <description>

[optional body]

[optional footer]
```

### Types
- `feat`: Nouvelle fonctionnalité
- `fix`: Correction de bug
- `docs`: Documentation uniquement
- `style`: Formatage, point-virgules manquants, etc.
- `refactor`: Refactoring (ni feat ni fix)
- `perf`: Amélioration de performance
- `test`: Ajout ou correction de tests
- `chore`: Maintenance (dependencies, build, etc.)
- `ci`: Modifications CI/CD

### Exemples
```bash
feat(links): add batch fetching for entity enrichment
fix(server): handle missing tenant_id gracefully
docs(readme): update quick start example
refactor(core): simplify EntityRegistry implementation
```

## 🔄 Pull Request Process

1. **Assurez-vous que les tests passent**
   ```bash
   cargo test --all-features
   cargo clippy --all-targets --all-features -- -D warnings
   cargo fmt --all -- --check
   ```

2. **Mettez à jour la documentation** si nécessaire

3. **Ajoutez des tests** pour les nouvelles fonctionnalités

4. **Remplissez le template de PR** avec:
   - Description des changements
   - Issue liée (si applicable)
   - Type de changement (feat/fix/docs/etc.)
   - Checklist des vérifications

5. **Attendez la review**
   - Au moins 1 approbation requise
   - La CI doit passer (tous les jobs verts ✅)

## 🚫 Ce qui N'est PAS Accepté

- ❌ Code non formaté (`cargo fmt`)
- ❌ Warnings clippy non résolus
- ❌ Tests cassés
- ❌ Breaking changes sans discussion préalable
- ❌ Fonctionnalités sans tests
- ❌ Code sans documentation

## 🎯 Roadmap

Consultez les [GitHub Issues](https://github.com/triviere/this-rs/issues) pour voir les tâches planifiées.

### Priorités Actuelles
1. 🚧 Storage abstraction layer
2. 🚧 DynamoDB/ScyllaDB implementation
3. 🚧 Batch operations
4. 📅 Macros procédurales pour entités
5. 📅 Exemples avancés

## 💬 Questions ?

- Ouvrez une [Discussion GitHub]https://github.com/triviere/this-rs/discussions
- Rejoignez le Discord (lien à venir)
- Contactez les maintainers

## 📜 License

En contribuant à This-RS, vous acceptez que vos contributions soient sous [MIT License](LICENSE-MIT).

---

Merci de contribuer à This-RS ! 🦀✨