cpd/lib/database/todo_db.dart

111 lines
3.1 KiB
Dart
Raw Normal View History

import 'package:cpd/database/todo_interface.dart';
import 'package:flutter/material.dart';
import 'package:sqflite/sqflite.dart';
import 'package:cpd/database/db.dart';
import 'package:cpd/database/habit.dart';
class TodoDB implements ToDoInterface {
final tableName = 'todos';
@override
Future<void> createTable(Database database) async {
try {
await database.execute("""CREATE TABLE IF NOT EXISTS $tableName (
id INTEGER PRIMARY KEY AUTOINCREMENT,
isComplete INTEGER NOT NULL,
title TEXT NOT NULL,
subtitle TEXT,
iconCodePoint INTEGER NOT NULL,
iconFontFamily TEXT NOT NULL
)""");
} catch (e) {
return Future.error(e);
}
}
@override
2024-05-24 00:01:08 +02:00
Future<int> create({required String title, required String subtitle, required IconData icon}) async {
try {
final database = await HabitDatabase().database;
return await database.rawInsert(
'''INSERT INTO $tableName (isComplete, title, subtitle, iconCodePoint, iconFontFamily)
VALUES (?, ?, ?, ?, ?)''',
[0, title, subtitle, icon.codePoint, icon.fontFamily],
);
} catch (e) {
return Future.error(e);
2024-05-24 00:01:08 +02:00
}
}
@override
2024-05-24 00:01:08 +02:00
Future<List<Habit>> fetchAll() async {
try {
final database = await HabitDatabase().database;
final todos = await database.query(tableName);
return todos.map((todo) => Habit.fromSqfliteDatabase(todo)).toList();
} catch (e) {
return Future.error(e);
}
}
@override
Future<Habit?> fetchById(int id) async {
try {
final database = await HabitDatabase().database;
final todo = await database.query(tableName, where: 'id = ?', whereArgs: [id]);
if (todo.isNotEmpty) {
return Habit.fromSqfliteDatabase(todo.first);
} else {
return null;
}
} catch (e) {
return Future.error(e);
}
}
@override
2024-05-24 00:01:08 +02:00
Future<int> update({required int id, required String title, required String subtitle, required IconData icon}) async {
try {
final database = await HabitDatabase().database;
return await database.update(tableName, {
'title': title,
'subtitle': subtitle,
'iconCodePoint': icon.codePoint,
'iconFontFamily': icon.fontFamily,
},
where: 'id = ?',
conflictAlgorithm: ConflictAlgorithm.rollback,
whereArgs: [id],
);
} catch (e) {
return Future.error(e);
}
}
@override
Future<void> delete(int id) async {
try {
final database = await HabitDatabase().database;
await database.delete(tableName, where: 'id = ?', whereArgs: [id]);
} catch (e) {
return Future.error(e);
}
}
@override
Future<int?> updateCompletionStatus(int id, bool isCompleted) async {
try {
final database = await HabitDatabase().database;
return await database.update(tableName, {
'isComplete': isCompleted ? 1 : 0,
},
where: 'id = ?',
conflictAlgorithm: ConflictAlgorithm.rollback,
whereArgs: [id],
);
} catch (e) {
return Future.error(e);
}
}
}