feat(frontend): module Articles complet (liste, création, modification, suppression)

- Article model (MP/PSF/PF, stock, seuil alerte)
- ArticleService : fetchAll, fetchByType, create, update, delete
- ArticleProvider : filtrage par type + recherche temps réel
- ArticlesScreen : liste, chips filtres, barre recherche, alertes stock
- ArticleFormScreen : formulaire création/édition avec validation
- Rapport PFE : section 5.6 module Articles

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-20 20:23:06 +01:00
co-authored by Claude Sonnet 4.6
parent 601a7d0373
commit ed21c3cb80
7 changed files with 915 additions and 1 deletions
@@ -0,0 +1,28 @@
import 'api_client.dart';
import '../models/article.dart';
class ArticleService {
static Future<List<Article>> fetchAll() async {
final res = await ApiClient.instance.get('/articles');
return (res.data as List).map((e) => Article.fromJson(e)).toList();
}
static Future<List<Article>> fetchByType(String type) async {
final res = await ApiClient.instance.get('/articles/type/$type');
return (res.data as List).map((e) => Article.fromJson(e)).toList();
}
static Future<Article> create(Article article) async {
final res = await ApiClient.instance.post('/articles', data: article.toJson());
return Article.fromJson(res.data);
}
static Future<Article> update(int id, Article article) async {
final res = await ApiClient.instance.put('/articles/$id', data: article.toJson());
return Article.fromJson(res.data);
}
static Future<void> delete(int id) async {
await ApiClient.instance.delete('/articles/$id');
}
}