Adatbázis új struktúra és könyvtár, projektrendszer bevezetése, ProjectService
This commit is contained in:
@@ -0,0 +1,130 @@
|
||||
import 'package:get/get.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'package:supabase_flutter/supabase_flutter.dart';
|
||||
import 'package:uuid/uuid.dart';
|
||||
import '../models/project.dart';
|
||||
import 'app_database.dart';
|
||||
|
||||
class ProjectService extends GetxService {
|
||||
static ProjectService get to => Get.find();
|
||||
|
||||
final activeProject = Rxn<Project>();
|
||||
final projects = <Project>[].obs;
|
||||
|
||||
int? get activeProjectId => activeProject.value?.id;
|
||||
|
||||
@override
|
||||
Future<void> onInit() async {
|
||||
super.onInit();
|
||||
await _loadProjects();
|
||||
await _restoreActiveProject();
|
||||
}
|
||||
|
||||
Future<void> _loadProjects() async {
|
||||
projects.value = await AppDatabase.instance.listProjects();
|
||||
}
|
||||
|
||||
// Az utoljára aktív projektet tárolja a SharedPreferences
|
||||
Future<void> _restoreActiveProject() async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
final savedId = prefs.getInt('active_project_id');
|
||||
|
||||
if (savedId != null) {
|
||||
final project = await AppDatabase.instance.getProject(savedId);
|
||||
if (project != null && project.status == ProjectStatus.active) {
|
||||
activeProject.value = project;
|
||||
return;
|
||||
}
|
||||
}
|
||||
// Fallback: az első aktív projekt
|
||||
if (projects.isNotEmpty) {
|
||||
await setActiveProject(projects.first);
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> setActiveProject(Project project) async {
|
||||
activeProject.value = project;
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
await prefs.setInt('active_project_id', project.id!);
|
||||
|
||||
// Frissítjük az updated_at-et hogy a lista tetejére kerüljön
|
||||
await AppDatabase.instance.updateProject(project.copyWith());
|
||||
await _loadProjects();
|
||||
}
|
||||
|
||||
Future<Project> createProject({
|
||||
required String name,
|
||||
String client = '',
|
||||
String description = '',
|
||||
ProjectCrs crs = ProjectCrs.eov,
|
||||
String color = '#185FA5',
|
||||
}) async {
|
||||
final now = DateTime.now();
|
||||
final project = Project(
|
||||
uuid: const Uuid().v4(),
|
||||
name: name,
|
||||
client: client,
|
||||
description: description,
|
||||
crs: crs,
|
||||
color: color,
|
||||
createdAt: now,
|
||||
updatedAt: now,
|
||||
);
|
||||
final id = await AppDatabase.instance.insertProject(project);
|
||||
final saved = project.copyWith();
|
||||
await _loadProjects();
|
||||
return await AppDatabase.instance.getProject(id) ?? saved;
|
||||
}
|
||||
|
||||
/// Online projekt — szinkronizál Supabase-szel
|
||||
Future<Project> createOnlineProject({
|
||||
required String name,
|
||||
String client = '',
|
||||
ProjectCrs crs = ProjectCrs.eov,
|
||||
String color = '#185FA5',
|
||||
}) async {
|
||||
final project = Project(
|
||||
uuid: const Uuid().v4(),
|
||||
name: name,
|
||||
client: client,
|
||||
crs: crs,
|
||||
color: color,
|
||||
isLocalOnly: false, // ← szinkronizált
|
||||
createdAt: DateTime.now(),
|
||||
updatedAt: DateTime.now(),
|
||||
);
|
||||
|
||||
// Lokálisan mentjük
|
||||
final id = await AppDatabase.instance.insertProject(project);
|
||||
|
||||
// Supabase-be is
|
||||
await Supabase.instance.client.from('projects').insert(project.toMap());
|
||||
|
||||
await _loadProjects();
|
||||
return await AppDatabase.instance.getProject(id) ?? project;
|
||||
}
|
||||
|
||||
/// Lokális projekt — soha nem kerül Supabase-be
|
||||
Future<Project> createLocalProject({
|
||||
required String name,
|
||||
String client = '',
|
||||
ProjectCrs crs = ProjectCrs.eov,
|
||||
String color = '#185FA5',
|
||||
}) async {
|
||||
final project = Project(
|
||||
uuid: const Uuid().v4(),
|
||||
name: name,
|
||||
client: client,
|
||||
crs: crs,
|
||||
color: color,
|
||||
isLocalOnly: true, // ← csak lokális
|
||||
createdAt: DateTime.now(),
|
||||
updatedAt: DateTime.now(),
|
||||
);
|
||||
|
||||
// Csak lokálisan
|
||||
final id = await AppDatabase.instance.insertProject(project);
|
||||
await _loadProjects();
|
||||
return await AppDatabase.instance.getProject(id) ?? project;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user