- ownerUid je Haushalt (Alt-Haushalte: erster memberUids-Eintrag = Ersteller); Besitzer-Anzeige in Mitglieder- und Haushaltsliste - Haushalt umbenennen (Dialog im Haushalts-Screen); Rules erlauben Clients am Haushalts-Dokument nur noch das Namensfeld - Cloud Functions leaveHousehold (selbst austreten, auch als Sitter) und removeMember (nur Besitzer); beide biegen den aktiven Zeiger des Betroffenen um und legen notfalls einen frischen eigenen Haushalt an - Haushalts-Wechsler im Drawer (PopupMenu, ab zwei Haushalten) - Tages-Checkliste und nächste Fälligkeit aggregieren über alle Haushalte, mit Zwischenüberschrift je Haushalt; Bestätigen schreibt in den Herkunfts-Haushalt der Aufgabe - Widget-Tests: Gruppierung, Besitzer-Rechte, Umbenennen Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
60 lines
1.9 KiB
Dart
60 lines
1.9 KiB
Dart
import 'package:cloud_firestore/cloud_firestore.dart';
|
|
import 'package:firebase_auth/firebase_auth.dart';
|
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
|
|
import '../../../core/firebase/firebase_providers.dart';
|
|
|
|
/// Anmeldung, Registrierung und der Haushalts-Bootstrap.
|
|
class AuthRepository {
|
|
AuthRepository(this._auth, this._firestore);
|
|
|
|
final FirebaseAuth _auth;
|
|
final FirebaseFirestore _firestore;
|
|
|
|
Future<void> signIn({required String email, required String password}) async {
|
|
await _auth.signInWithEmailAndPassword(email: email, password: password);
|
|
}
|
|
|
|
/// Registrierung: legt Nutzer, persönliches Profil-Dokument und einen
|
|
/// neuen Haushalt in einem Rutsch an. Der Nutzer ist automatisch Mitglied
|
|
/// seines eigenen Haushalts (V2 fügt per Einladung weitere hinzu).
|
|
Future<void> signUp({required String email, required String password}) async {
|
|
final credential = await _auth.createUserWithEmailAndPassword(
|
|
email: email,
|
|
password: password,
|
|
);
|
|
final uid = credential.user!.uid;
|
|
|
|
final householdRef = _firestore.collection('households').doc();
|
|
final userRef = _firestore.collection('users').doc(uid);
|
|
final batch = _firestore.batch();
|
|
batch.set(householdRef, {
|
|
'name': 'Mein Haushalt',
|
|
'ownerUid': uid,
|
|
'memberUids': [uid],
|
|
'members': {
|
|
uid: {
|
|
'role': 'member',
|
|
'email': email,
|
|
'joinedAt': FieldValue.serverTimestamp(),
|
|
},
|
|
},
|
|
'createdAt': FieldValue.serverTimestamp(),
|
|
});
|
|
batch.set(userRef, {
|
|
'email': email,
|
|
'householdId': householdRef.id,
|
|
'createdAt': FieldValue.serverTimestamp(),
|
|
});
|
|
await batch.commit();
|
|
}
|
|
|
|
Future<void> signOut() => _auth.signOut();
|
|
}
|
|
|
|
final authRepositoryProvider = Provider<AuthRepository>((ref) {
|
|
return AuthRepository(
|
|
ref.watch(firebaseAuthProvider),
|
|
ref.watch(firestoreProvider),
|
|
);
|
|
});
|