main, fix

This commit is contained in:
Tomas Dvorak
2026-01-06 13:38:45 +01:00
parent d712fe1074
commit 9f44fd57f7
11 changed files with 492 additions and 194 deletions
@@ -147,25 +147,74 @@ class AuthRepository {
Future<User> _createUserProfile(String userId, String username, String email) async {
final now = DateTime.now().toIso8601String();
final response = await _client.from('users').insert({
'id': userId,
'username': username,
'email': email,
'created_at': now,
'updated_at': now,
}).select().single();
try {
// First try with the regular client (might fail due to RLS)
final response = await _client.from('users').insert({
'id': userId,
'username': username,
'email': email,
'created_at': now,
'updated_at': now,
}).select();
return _mapSupabaseDataToUser(response);
if (response.isNotEmpty) {
return _mapSupabaseDataToUser(response.first);
}
} catch (e) {
// If regular client fails due to RLS, try with service role client
try {
final serviceClient = getServiceRoleClient();
final response = await serviceClient.from('users').insert({
'id': userId,
'username': username,
'email': email,
'created_at': now,
'updated_at': now,
}).select();
if (response.isNotEmpty) {
return _mapSupabaseDataToUser(response.first);
}
} catch (e2) {
// If both fail, create a basic user profile from auth metadata
// This allows the app to function even without database profile creation
return User(
id: userId,
username: username,
email: email,
createdAt: DateTime.parse(now),
updatedAt: DateTime.parse(now),
);
}
}
// Fallback if no response but no error
return User(
id: userId,
username: username,
email: email,
createdAt: DateTime.parse(now),
updatedAt: DateTime.parse(now),
);
}
Future<void> _ensureUserProfileExists(String userId, dynamic supabaseUser) async {
final existingProfile = await _client
.from('users')
.select('id')
.eq('id', userId)
.maybeSingle();
try {
final existingProfile = await _client
.from('users')
.select('id')
.eq('id', userId)
.maybeSingle();
if (existingProfile == null) {
if (existingProfile == null) {
final username = supabaseUser.userMetadata?['username'] ??
'user_${userId.substring(0, 8)}';
final email = supabaseUser.email ?? '';
await _createUserProfile(userId, username, email);
}
} catch (e) {
// If RLS policy prevents reading, we'll assume the profile doesn't exist
// and let the _createUserProfile method handle the creation gracefully
final username = supabaseUser.userMetadata?['username'] ??
'user_${userId.substring(0, 8)}';
final email = supabaseUser.email ?? '';