Initial commit: AudiOhm - Alternative Spotify avec streaming YouTube

Backend:
- FastAPI avec PostgreSQL et Redis
- Authentification JWT complète
- API REST pour musique, playlists, recherche
- Streaming audio via yt-dlp
- SQLAlchemy 2.0 async

Frontend:
- Flutter avec thème néon cyberpunk
- State management Riverpod
- Layout adaptatif desktop/mobile
- Lecteur audio avec mini-player

Infrastructure:
- Docker Compose (PostgreSQL + Redis)
- Scripts d'installation automatisés
- Scripts de build pour exécutables

Fichiers ajoutés:
- BUILD_CLIENT_*.bat/sh: Scripts de compilation
- BUILD_CLIENT_README.md: Documentation compilation
- CHECK_FLUTTER.sh: Vérificateur d'environnement
- requirements.txt mis à jour pour Python 3.13
- Modèles SQLAlchemy corrigés (metadata -> extra_metadata)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
root
2026-01-18 20:08:36 +00:00
commit a89c7894cf
132 changed files with 23178 additions and 0 deletions
@@ -0,0 +1,25 @@
/// Search Page Widget Tests
library;
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:spotify_le_2/presentation/pages/search/search_page.dart';
void main() {
testWidgets('SearchPage shows desktop layout on wide screen', (tester) async {
// TODO: Implement test with MediaQuery width >= 800
});
testWidgets('SearchPage shows mobile layout on narrow screen', (tester) async {
// TODO: Implement test with MediaQuery width < 800
});
testWidgets('Search input triggers search', (tester) async {
// TODO: Test typing in search bar
});
testWidgets('Track tap plays music', (tester) async {
// TODO: Test tapping a track card
});
}
@@ -0,0 +1,28 @@
/// Search Provider Tests
library;
import 'package:flutter_test/flutter_test.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:spotify_le_2/presentation/providers/search_provider.dart';
void main() {
group('SearchNotifier', () {
// TODO: Setup mock MusicApiService
test('initial state is empty', () {
// TODO: Implement test
});
test('search updates state with results', () {
// TODO: Implement test with mocked API
});
test('search debounces input', () async {
// TODO: Test that debounce timer works correctly
});
test('clear resets state', () {
// TODO: Test clear functionality
});
});
}