Files
Hua.Todo/TodoList/Services/SqliteDataService.cs
T
ShaoHua ceb77e624e feat:基础功能实现
feat: 重构 TodoList 架构,新增动态 API 与 MAUI 内嵌 Web 服务
feat:优化交互逻辑,优化发布流程
2026-04-05 00:53:42 +08:00

77 lines
2.3 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using SQLite;
using TodoList.Models;
namespace TodoList.Services
{
public class SqliteDataService : IDataService
{
private readonly SQLiteAsyncConnection _database;
public SqliteDataService()
{
var appData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
var folder = Path.Combine(appData, "TodoListApp");
Directory.CreateDirectory(folder);
var databasePath = Path.Combine(folder, "TodoList.sqlite");
_database = new SQLiteAsyncConnection(databasePath);
_database.CreateTableAsync<TodoItem>().Wait();
}
public async Task<List<TodoItem>> LoadTasksAsync(bool? completed = null)
{
var query = _database.Table<TodoItem>();
if (completed.HasValue)
{
query = query.Where(t => t.IsCompleted == completed.Value);
}
return await query.ToListAsync();
}
public async Task<TodoItem> SaveTaskAsync(TodoItem task)
{
await _database.InsertOrReplaceAsync(task);
return task;
}
public async Task<TodoItem> UpdateTaskAsync(TodoItem task)
{
await _database.UpdateAsync(task);
return task;
}
public async Task<TodoItem> ToggleCompleteAsync(string id)
{
var task = await _database.FindAsync<TodoItem>(id);
if (task != null)
{
task.IsCompleted = !task.IsCompleted;
task.CompletedAt = task.IsCompleted ? DateTime.Now : null;
task.SyncStatus = SyncStatus.Pending;
await _database.UpdateAsync(task);
}
return task;
}
public async Task SaveAllAsync(List<TodoItem> tasks)
{
await _database.RunInTransactionAsync(tran =>
{
foreach (var task in tasks)
{
tran.InsertOrReplace(task);
}
});
}
public async Task DeleteTaskAsync(string id)
{
await _database.DeleteAsync<TodoItem>(id);
}
}
}