# Rapport d'audit — Éléments inutilisés et problèmes identifiés

> Généré le 2026-02-18 — branche `feature/event`

---

## 1. Bugs critiques corrigés dans cette session

| Fichier | Ligne | Description | Statut |
|---------|-------|-------------|--------|
| `entrypoint.go` | 652, 664, 676, 688 | `fmt.Errorf(res.Err)` → format string non-constant (erreur de build) | ✅ Corrigé |
| `models/utils/abstracts.go` | 136 | `VerifyAuth` déréférençait `request.Admin` avant de vérifier `request != nil` | ✅ Corrigé |
| `models/utils/abstracts.go` | 68-78 | `DeepCopy()` faisait `Unmarshal` dans un pointeur nil → retournait toujours `nil` | ✅ Corrigé |
| `models/resources/resource.go` | 176 | `instances = append(instances)` — argument manquant, l'instance n'était jamais ajoutée | ✅ Corrigé |
| `models/resources/priced_resource.go` | 63-69 | Code mort après `return true` dans `IsBooked()` | ✅ Corrigé |
| `tools/remote_caller.go` | 118 | `CallDelete` vérifiait `req.Body == nil` (toujours vrai pour DELETE), court-circuitant la lecture de la réponse | ✅ Corrigé |

---

## 2. Debug prints à supprimer (fmt.Println en production)

Ces appels `fmt.Println` polluent stdout et peuvent exposer des informations sensibles.

| Fichier | Lignes | Contenu |
|---------|--------|---------|
| `models/bill/bill.go` | ~197 | `fmt.Println(err)` |
| `models/collaborative_area/collaborative_area_mongo_accessor.go` | ~95, 109, 118, 123 | Debug sur `res`, `sharedWorkspace.AllowedPeersGroup`, `canFound`, `peerskey` |
| `models/peer/peer_cache.go` | ~44, 55 | URL et `"Launching peer execution on..."` |
| `models/resources/storage.go` | ~196 | `fmt.Println("GetPriceHT", ...)` |
| `models/workflow/workflow.go` | ~158, 164, 170, 176 | 4× `fmt.Println(err)` |
| `tools/nats_caller.go` | ~110, 117, 122, 126 | 4× `fmt.Println()` divers |
| `tools/remote_caller.go` | 227 | `fmt.Println("Error reading the body...")` (devrait utiliser le logger) |
| `dbs/dbs.go` | 47 | `fmt.Println("Recovered. Error:\n", r, debug.Stack())` |

> **Note :** `priced_resource.go` et `data.go` corrigés dans cette session.

---

## 3. Code commenté significatif

### 3.1 Validation de pricing désactivée (workflow)
**Fichier :** `models/workflow/workflow.go` — ~lignes 631-634
```go
// Should be commented once the Pricing selection feature has been implemented
// if priced.SelectPricing() == nil {
//     return resources, priceds, errors.New("no pricings are selected... can't proceed")
// }
```
Une vérification de sécurité critique est désactivée. Sans elle, des ressources sans pricing peuvent être traitées silencieusement.

### 3.2 PAY_PER_USE — stratégie supprimée mais traces restantes
**Fichier :** `models/common/pricing/pricing_strategy.go` — lignes 47, 61-63
```go
// PAY_PER_USE  // per request. ( unpredictible )
/*case PAY_PER_USE:
    return bs, true*/
```
La constante `PAY_PER_USE` a été supprimée mais les commentaires laissés créent de la confusion.

### 3.3 Vérification d'autorisation peer désactivée
**Fichier :** `models/resources/resource.go` — lignes 98-104
```go
/*if ok, _ := utils.IsMySelf(request.PeerID, ...); ok {*/
profile = pricing.GetDefaultPricingProfile()
/*} else {
    return nil, errors.New("no pricing profile found")
}*/
```
Le profil par défaut est retourné sans vérifier si le pair est bien `myself`. Sécurité à revoir.

---

## 4. Logique erronée non corrigée (à traiter)

### 4.1 IsTimeStrategy — logique inversée
**Fichier :** `models/common/pricing/pricing_strategy.go` — ligne 88
```go
func IsTimeStrategy(i int) bool {
    return len(TimePricingStrategyList()) < i  // BUG: devrait être ">"
}
```
La condition est inversée. Retourne `true` pour des valeurs hors de la liste. Fonction actuellement non utilisée (voir §5).

### 4.2 IsBillingStrategyAllowed — case SUBSCRIPTION sans retour
**Fichier :** `models/common/pricing/pricing_strategy.go` — lignes 54-65
```go
case SUBSCRIPTION:
    /*case PAY_PER_USE:
    return bs, true*/
// Aucun return ici → tombe dans le default
```
Le cas `SUBSCRIPTION` ne retourne rien explicitement, ce qui est trompeur.

---

## 5. Éléments inutilisés

### 5.1 Fonction jamais appelée
| Symbole | Fichier | Ligne |
|---------|---------|-------|
| `IsTimeStrategy(i int) bool` | `models/common/pricing/pricing_strategy.go` | 88 |

De plus, cette fonction a une logique erronée (voir §4.1).

### 5.2 Variable singleton inutilisée
| Symbole | Fichier | Ligne |
|---------|---------|-------|
| `HTTPCallerInstance` | `tools/remote_caller.go` | 57 |

Déclarée comme singleton mais jamais utilisée — de nouvelles instances sont créées via `NewHTTPCaller()`.

---

## 6. Tests supprimés (couverture perdue)

Les fichiers suivants ont été supprimés sur la branche `feature/event` et la couverture correspondante n'est plus assurée :

| Fichier supprimé | Modèles non couverts |
|------------------|----------------------|
| `models/peer/tests/peer_cache_test.go` | `PeerCache` — logique d'exécution distribuée |
| `models/peer/tests/peer_test.go` | `Peer` — modèle et accesseur |
| `models/utils/tests/abstracts_test.go` | `AbstractObject` — méthodes de base |
| `models/utils/tests/common_test.go` | `GenericStoreOne`, `GenericDeleteOne`, etc. |
| `models/workflow_execution/tests/workflow_test.go` | `WorkflowExecution` — modèle et accesseur |

> `models/order/tests/order_test.go` existe mais ne contient **aucune fonction de test**.

---

## 7. Fautes d'orthographe dans les identifiants publics

Ces typos sont dans des noms exportés (API publique) — les corriger est un **breaking change**.

### 7.1 `Instanciated` → `Instantiated`
Apparaît 50+ fois dans les types exportés centraux :
- `AbstractInstanciatedResource[T]` (resource.go, compute.go, data.go, storage.go, processing.go, workflow.go)
- `AbstractInstanciatedResource.Instances`
- Tests : `resources.AbstractInstanciatedResource[*MockInstance]{...}`

### 7.2 `ressource` → `resource` (dans les messages d'erreur)
**Fichier :** `entrypoint.go` — messages dans `LoadOneStorage`, `LoadOneComputing`, etc.
```go
"Error while loading storage ressource " + storageId  // "ressource" est du français
```

### 7.3 `GARANTED` → `GUARANTEED`
**Fichiers :** `models/common/pricing/pricing_profile.go`, `models/resources/storage.go`
```go
GARANTED_ON_DELAY        // pricing_profile.go:72
GARANTED                 // pricing_profile.go:73
GARANTED_ON_DELAY_STORAGE // storage.go:106
GARANTED_STORAGE         // storage.go:107
```

### 7.4 `CREATE_EXECTUTION` → `CREATE_EXECUTION`
**Fichier :** `tools/nats_caller.go` — ligne 34
```go
CREATE_EXECTUTION  // faute de frappe dans la constante enum
```

### 7.5 `PROPALGATION` → `PROPAGATION`
**Fichier :** `tools/nats_caller.go` — lignes 29, 45, 56
```go
"propalgation event"  // et PROPALGATION_EVENT
```

---

## 8. Incohérences de nommage mineures

| Fichier | Problème |
|---------|----------|
| `models/resources/interfaces.go:19` | Paramètre `instance_id` en snake_case dans une signature Go (devrait être `instanceID`) |
| `entrypoint.go:505` | Message de panique dans `CopyOne` dit `"Panic recovered in UpdateOne"` |
| `tools/remote_caller.go:110` | Commentaire `// CallPut calls the DELETE method` (copie-colle incorrect) |

---

## 9. Résumé

| Catégorie | Nombre | Priorité |
|-----------|--------|----------|
| Bugs critiques corrigés | 6 | ✅ Fait |
| Debug `fmt.Println` restants | 15+ | 🔴 Haute |
| Code commenté important | 3 | 🟠 Moyenne |
| Logique erronée (non corrigée) | 2 | 🟠 Moyenne |
| Éléments inutilisés | 2 | 🟡 Faible |
| Tests supprimés (couverture perdue) | 5 fichiers | 🟠 Moyenne |
| Typos dans API publique | 5 types | 🟡 Faible (breaking change) |
| Incohérences mineures | 3 | 🟢 Très faible |
