(fix) felhős projekthez csak bejelentkezés után lehet csatlakozni, név megjelenítése a kapcsolatok mellett a terepbejárás nézetben.
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 6s
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 6s
This commit is contained in:
@@ -4,6 +4,7 @@ import 'dart:io';
|
||||
import 'package:connectivity_plus/connectivity_plus.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:supabase_flutter/supabase_flutter.dart';
|
||||
import 'package:terepi_seged/services/app_logger.dart';
|
||||
import 'package:uuid/uuid.dart';
|
||||
|
||||
import '../models/contact.dart';
|
||||
@@ -81,16 +82,34 @@ class ContactService extends GetxService {
|
||||
|
||||
/// Új kapcsolat vagy szerver-oldali frissítés.
|
||||
/// Visszaadja, hogy a művelet OFFLINE pufferbe került-e (true = várólistán).
|
||||
Future<bool> save(Contact c) async {
|
||||
Future<bool> save(Contact c, {String? existingLocalUuid}) async {
|
||||
// Meglévő (szerver-oldali) rekord frissítése CSAK online — lásd korlát.
|
||||
final isUpdate = c.id != null;
|
||||
|
||||
if (await _isOnline) {
|
||||
try {
|
||||
await _client.from('terepi_seged_contacts').upsert(c.toWriteMap());
|
||||
// Ha ez korábban egy PENDING (helyi puffer-) sorból indult, és
|
||||
// most sikerült felmenni, a régi helyi sort törölni kell —
|
||||
// különben örökre "függőben" maradna, és a flush() is
|
||||
// duplikálná.
|
||||
if (existingLocalUuid != null) {
|
||||
await _db.deletePendingContact(existingLocalUuid);
|
||||
}
|
||||
return false; // felment
|
||||
} catch (e) {
|
||||
if (isUpdate) rethrow; // frissítést nem pufferelünk
|
||||
if (e is PostgrestException) {
|
||||
// Válasz érkezett a szervertől, de hibás (séma, RLS, megkötés) —
|
||||
// ez NEM hálózati probléma. Ha csendben pufferbe tennénk, ez a
|
||||
// sor SOSEM jutna fel, és senki nem venné észre — inkább
|
||||
// azonnal, láthatóan hibázzon.
|
||||
AppLogger.e('ContactService.save',
|
||||
'Supabase hiba új kapcsolat mentésekor: $e');
|
||||
rethrow;
|
||||
}
|
||||
// Valódi hálózati/kapcsolati hiba (pl. pillanatnyi kiesés) →
|
||||
// pufferbe, a flush() majd újrapróbálja.
|
||||
// Új rekord + online hiba (pl. pillanatnyi kiesés) → pufferbe.
|
||||
}
|
||||
} else if (isUpdate) {
|
||||
@@ -101,7 +120,7 @@ class ContactService extends GetxService {
|
||||
|
||||
// Offline (vagy online-hiba) új rekord → outbox.
|
||||
await _db.insertPendingContact({
|
||||
'local_uuid': _uuid.v4(),
|
||||
'local_uuid': existingLocalUuid ?? _uuid.v4(),
|
||||
'project_id': c.projectId,
|
||||
'name': c.name.trim(),
|
||||
'address': c.address.trim(),
|
||||
@@ -173,8 +192,12 @@ class ContactService extends GetxService {
|
||||
// Sikeres felküldés → a lokális példány törölhető.
|
||||
await _db.deletePendingContact(m['local_uuid'] as String);
|
||||
uploaded++;
|
||||
} catch (_) {
|
||||
// A sor marad a pufferben, a következő flush újrapróbálja.
|
||||
} catch (e) {
|
||||
// A sor marad a pufferben (legközelebb újrapróbáljuk) — de
|
||||
// naplózzuk, hogy ne maradjon örökre észrevétlen, ha a hiba nem
|
||||
// hálózati, hanem tartós (pl. séma-eltérés, RLS).
|
||||
AppLogger.e('ContactService.flush',
|
||||
'Kapcsolat feltöltési hiba (local_uuid=${m['local_uuid']}): $e');
|
||||
}
|
||||
}
|
||||
return uploaded;
|
||||
|
||||
Reference in New Issue
Block a user