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]);
}
}
+8
View File
@@ -0,0 +1,8 @@
import '../models/note.dart';
abstract class NoteRepository {
Future<List<Note>> getAll();
Future<Note?> getById(String id);
Future<Note> save(Note note);
Future<void> delete(String id);
}
@@ -0,0 +1,42 @@
import '../models/note.dart';
import '../repositories/note_repository.dart';
import '../services/api_client.dart';
class RemoteNoteRepository implements NoteRepository {
final ApiClient _api;
RemoteNoteRepository({required ApiClient api}) : _api = api;
@override
Future<List<Note>> getAll() async {
final response = await _api.get('/notes/');
final List data = response.data as List;
return data.map((json) => Note.fromJson(json as Map<String, dynamic>)).toList();
}
@override
Future<Note?> getById(String id) async {
try {
final response = await _api.get('/notes/$id');
return Note.fromJson(response.data as Map<String, dynamic>);
} catch (_) {
return null;
}
}
@override
Future<Note> save(Note note) async {
final response = await _api.post('/notes/', note.toJson());
return Note.fromJson(response.data as Map<String, dynamic>);
}
Future<Note> update(Note note) async {
final response = await _api.put('/notes/${note.id}', note.toJson());
return Note.fromJson(response.data as Map<String, dynamic>);
}
@override
Future<void> delete(String id) async {
await _api.delete('/notes/$id');
}
}