Add Drift SQLite database for local task storage
- Create AppDatabase with Tasks table - Add CRUD operations for local task persistence - Include generated database code
This commit is contained in:
parent
ceef4f4c72
commit
ccc7d544db
70
lib/core/database/app_database.dart
Normal file
70
lib/core/database/app_database.dart
Normal file
@ -0,0 +1,70 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:drift/drift.dart';
|
||||
import 'package:drift/native.dart';
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
import 'package:path/path.dart' as p;
|
||||
|
||||
part 'app_database.g.dart';
|
||||
|
||||
class Tasks extends Table {
|
||||
TextColumn get id => text()();
|
||||
TextColumn get title => text().withLength(min: 1, max: 500)();
|
||||
TextColumn get description => text().nullable()();
|
||||
DateTimeColumn get date => dateTime()();
|
||||
TextColumn get time => text().nullable()();
|
||||
TextColumn get priority => text().withDefault(const Constant('medium'))();
|
||||
BoolColumn get isDone => boolean().withDefault(const Constant(false))();
|
||||
DateTimeColumn get createdAt => dateTime().withDefault(currentDateAndTime)();
|
||||
DateTimeColumn get updatedAt => dateTime().withDefault(currentDateAndTime)();
|
||||
|
||||
@override
|
||||
Set<Column> get primaryKey => {id};
|
||||
}
|
||||
|
||||
@DriftDatabase(tables: [Tasks])
|
||||
class AppDatabase extends _$AppDatabase {
|
||||
AppDatabase() : super(_openConnection());
|
||||
|
||||
@override
|
||||
int get schemaVersion => 1;
|
||||
|
||||
// Task CRUD operations
|
||||
Future<List<Task>> getTasksByDate(DateTime date) {
|
||||
final startOfDay = DateTime(date.year, date.month, date.day);
|
||||
final endOfDay = startOfDay.add(const Duration(days: 1));
|
||||
return (select(tasks)
|
||||
..where((t) => t.date.isBiggerOrEqualValue(startOfDay))
|
||||
..where((t) => t.date.isSmallerThanValue(endOfDay))
|
||||
..orderBy([(t) => OrderingTerm.asc(t.priority)]))
|
||||
.get();
|
||||
}
|
||||
|
||||
Future<Task?> getTaskById(String id) {
|
||||
return (select(tasks)..where((t) => t.id.equals(id))).getSingleOrNull();
|
||||
}
|
||||
|
||||
Future<int> insertTask(TasksCompanion task) {
|
||||
return into(tasks).insert(task);
|
||||
}
|
||||
|
||||
Future<bool> updateTask(TasksCompanion task) {
|
||||
return update(tasks).replace(task);
|
||||
}
|
||||
|
||||
Future<int> deleteTaskById(String id) {
|
||||
return (delete(tasks)..where((t) => t.id.equals(id))).go();
|
||||
}
|
||||
|
||||
Future<List<Task>> getAllTasks() {
|
||||
return select(tasks).get();
|
||||
}
|
||||
}
|
||||
|
||||
LazyDatabase _openConnection() {
|
||||
return LazyDatabase(() async {
|
||||
final dbFolder = await getApplicationDocumentsDirectory();
|
||||
final file = File(p.join(dbFolder.path, 'agenda_tasks.sqlite'));
|
||||
return NativeDatabase.createInBackground(file);
|
||||
});
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user