b239ae3e5f
Replaces Firebase with a self-hosted PHP/MySQL API served from winded.prymsolutions.com. Includes full backend (schema, auth, events, teams, brackets, suggestions, stats, media, file upload) and updated Flutter repositories and domain models. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
49 lines
1.2 KiB
Dart
49 lines
1.2 KiB
Dart
/// Immutable domain model representing an authenticated Winded user.
|
|
///
|
|
/// This is a pure-Dart model intentionally decoupled from Firebase types so
|
|
/// the rest of the app can depend on it without pulling in firebase_auth.
|
|
class AppUser {
|
|
const AppUser({
|
|
required this.uid,
|
|
required this.email,
|
|
this.displayName,
|
|
this.photoUrl,
|
|
});
|
|
|
|
final String uid;
|
|
final String email;
|
|
final String? displayName;
|
|
final String? photoUrl;
|
|
|
|
AppUser copyWith({
|
|
String? uid,
|
|
String? email,
|
|
String? displayName,
|
|
String? photoUrl,
|
|
}) {
|
|
return AppUser(
|
|
uid: uid ?? this.uid,
|
|
email: email ?? this.email,
|
|
displayName: displayName ?? this.displayName,
|
|
photoUrl: photoUrl ?? this.photoUrl,
|
|
);
|
|
}
|
|
|
|
@override
|
|
bool operator ==(Object other) {
|
|
if (identical(this, other)) return true;
|
|
return other is AppUser &&
|
|
other.uid == uid &&
|
|
other.email == email &&
|
|
other.displayName == displayName &&
|
|
other.photoUrl == photoUrl;
|
|
}
|
|
|
|
@override
|
|
int get hashCode => Object.hash(uid, email, displayName, photoUrl);
|
|
|
|
@override
|
|
String toString() =>
|
|
'AppUser(uid: $uid, email: $email, displayName: $displayName)';
|
|
}
|