initial vibecoded release

This commit is contained in:
cyberbread-ru
2026-05-15 16:35:12 +04:00
commit 993478e6e3
78 changed files with 3044 additions and 0 deletions
@@ -0,0 +1,65 @@
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
import '../models/note.dart';
import 'note_repository.dart';
class LocalNoteRepository implements NoteRepository {
static Database? _db;
Future<Database> get _database async {
_db ??= await _initDb();
return _db!;
}
Future<Database> _initDb() async {
final dbPath = await getDatabasesPath();
final path = join(dbPath, 'notes.db');
return openDatabase(
path,
version: 1,
onCreate: (db, version) => db.execute('''
CREATE TABLE notes (
id TEXT PRIMARY KEY,
title TEXT NOT NULL,
content TEXT NOT NULL,
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL
)
'''),
);
}
@override
Future<List<Note>> getAll() async {
final db = await _database;
final rows = await db.query('notes', orderBy: 'updated_at DESC');
return rows.map(Note.fromMap).toList();
}
@override
Future<Note?> getById(String id) async {
final db = await _database;
final rows = await db.query('notes', where: 'id = ?', whereArgs: [id]);
if (rows.isEmpty) return null;
return Note.fromMap(rows.first);
}
@override
Future<Note> save(Note note) async {
final db = await _database;
await db.insert(
'notes',
note.toMap(),
conflictAlgorithm: ConflictAlgorithm.replace,
);
return note;
}
@override
Future<void> delete(String id) async {
final db = await _database;
await db.delete('notes', where: 'id = ?', whereArgs: [id]);
}
}