- Create AppDatabase with Tasks table - Add CRUD operations for local task persistence - Include generated database code
71 lines
2.1 KiB
Dart
71 lines
2.1 KiB
Dart
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);
|
|
});
|
|
}
|