leafittome/lib/features/auth/data/auth_repository.dart
cschlaefke 778b3bd34d V2.2: Besitzer-Konzept, Haushalte umbenennen, Austreten/Entfernen, Checkliste über alle Haushalte
- 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>
2026-07-19 21:39:10 +02:00

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),
);
});