Terepbejárás geometriák szerkesztése: kontrollpontok és tulajdonságok.

This commit is contained in:
2026-06-19 12:53:50 +02:00
parent 1276ac0610
commit 0257beec38
8 changed files with 921 additions and 108 deletions
+79 -1
View File
@@ -3,6 +3,8 @@ import 'dart:io';
import 'package:path_provider/path_provider.dart';
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart' as p;
import 'package:terepi_seged/enums/note_type.dart';
import 'package:terepi_seged/models/note_item.dart';
import 'package:terepi_seged/models/track.dart';
import 'package:uuid/uuid.dart';
import '../models/project.dart';
@@ -116,7 +118,7 @@ class AppDatabase {
await db.execute('''
CREATE TABLE IF NOT EXISTS note_items (
id INTEGER PRIMARY KEY AUTOINCREMENT,
project_id INTEGER NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
project_id INTEGER REFERENCES projects(id) ON DELETE CASCADE,
type TEXT NOT NULL,
points_json TEXT NOT NULL,
color TEXT NOT NULL DEFAULT '#185FA5',
@@ -381,4 +383,80 @@ class AppDatabase {
whereArgs: ['synced'],
);
}
// ------------------- Terepbejárás pontok, vonalak, területek
/// Elem mentése - visszaadja a kapott AQLite id-t
Future<int> insertNoteItem(NoteItem item) async {
final db = await database;
return db.insert('note_items', item.toMap());
}
/// Elem frissítése (szín, label, koordináták módosítása után).
Future<void> updateNoteItem(NoteItem item) async {
final db = await database;
await db.update(
'note_items',
item.toMap(),
where: 'id = ?',
whereArgs: [item.id],
);
}
/// Egy elem törlése.
Future<void> deleteNoteItem(int id) async {
final db = await database;
await db.delete(
'note_items',
where: 'id = ?',
whereArgs: [id],
);
}
/// Projekt összes eleme — opcionálisan típus szerint szűrve.
Future<List<NoteItem>> listNoteItems(int? projectId, {NoteType? type}) async {
final db = await database;
String? where;
List<Object?> whereArgs = [];
if (projectId != null) {
where = type != null ? 'project_id = ? AND type = ?' : 'project_id = ?';
whereArgs = type != null ? [projectId, type.name] : [projectId];
} else {
// Projekt nélküli elemek
where = type != null ? 'type = ?' : null;
whereArgs = type != null ? [type.name] : [];
}
final rows = await db.query(
'note_items',
where: where,
whereArgs: whereArgs,
orderBy: 'created_at ASC',
);
return rows.map(NoteItem.fromMap).toList();
}
/// Egyetlen elem lekérése id alapján.
Future<NoteItem?> getNoteItem(int id) async {
final db = await database;
final rows = await db.query(
'note_items',
where: 'id = ?',
whereArgs: [id],
limit: 1,
);
return rows.isEmpty ? null : NoteItem.fromMap(rows.first);
}
/// Projekt összes elemének törlése.
Future<void> deleteAllNoteItems(int projectId) async {
final db = await database;
await db.delete(
'note_items',
where: 'project_id = ?',
whereArgs: [projectId],
);
}
}