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
+58
View File
@@ -0,0 +1,58 @@
import 'package:equatable/equatable.dart';
/// User entity
class User extends Equatable {
final String id;
final String email;
final String username;
final String? displayName;
final String? avatarUrl;
final bool isPremium;
final DateTime createdAt;
final DateTime updatedAt;
const User({
required this.id,
required this.email,
required this.username,
this.displayName,
this.avatarUrl,
this.isPremium = false,
required this.createdAt,
required this.updatedAt,
});
User copyWith({
String? id,
String? email,
String? username,
String? displayName,
String? avatarUrl,
bool? isPremium,
DateTime? createdAt,
DateTime? updatedAt,
}) {
return User(
id: id ?? this.id,
email: email ?? this.email,
username: username ?? this.username,
displayName: displayName ?? this.displayName,
avatarUrl: avatarUrl ?? this.avatarUrl,
isPremium: isPremium ?? this.isPremium,
createdAt: createdAt ?? this.createdAt,
updatedAt: updatedAt ?? this.updatedAt,
);
}
@override
List<Object?> get props => [
id,
email,
username,
displayName,
avatarUrl,
isPremium,
createdAt,
updatedAt,
];
}