Загрузка данных
using Dapper;
using Microsoft.Data.Sqlite;
public class TodoList
{
public static void AddTaskCommand(SqliteConnection connection)
{
while (true)
{
Console.WriteLine("Введите название задачи:");
var taskTitle = Console.ReadLine();
if (taskTitle == null || taskTitle.Length <= 3)
{
continue;
}
connection.Execute("INSERT INTO tasks(title) VALUES (@Title)", new
{
Title = taskTitle,
});
break;
}
}
public static List<Task> GetAllTasks(SqliteConnection connection)
{
var rows = connection.Query<dynamic>(
"SELECT tasks.id as TaskId, tasks.finished as TaskFinished, tags.id as TagId, tasks.title as TaskTitle, tags.title as TagTitle " +
"FROM tasks INNER JOIN task_tags ON task_tags.task_id = tasks.id " +
"INNER JOIN tags ON tags.id = task_tags.tag_id");
var tasks = rows.GroupBy(it => it.TaskId).Select(group =>
{
var taskId = Convert.ToInt32(group.Key);
var taskTitle = group.First().TaskTitle;
var taskFinished = group.First().TaskFinished;
var tags = group.Select(item => new Tag
{
Id = Convert.ToInt32(item.TagId),
Title = item.TagTitle
}).ToList();
return new Task
{
Id = taskId,
Title = taskTitle,
Finished = Convert.ToBoolean(taskFinished),
Tags = tags
};
});
public static List<Task> GetAllTasks(SqliteConnection connection)
{
var rows = connection.Query<dynamic>("SELECT tasks.id as TaskId, tasks.finished as TaskFinished, tags.id as TagId, tasks.title as TaskTitle, tags.title as TagTitle FROM tasks INNER JOIN task_tags ON task_tags.task_id = tasks.id INNER JOIN tags ON tags.id = task_tags.tag_id");
var tasks = rows.GroupBy((it) => it.TaskId).Select(it =>
{
var taskId = Convert.ToInt32(it.Key);
var taskTitle = it.First().TaskTitle;
var taskFinished = it.First().TaskFinished;
var tags = it.Select(it => new Tag
{
Id = Convert.ToInt32(it.TagId),
Title = it.TagTitle,
});
return new Task
{
Id = taskId,
Title = taskTitle,
Finished = Convert.ToBoolean(taskFinished),
Tags = tags.ToList(),
};
});
return tasks.ToList();
}
return tasks.ToList();
}
public static void DeleteTask(SqliteConnection connection)
{
Console.WriteLine("Введите номер задачи для удаления:");
var id = Convert.ToInt32(Console.ReadLine());
connection.Execute("DELETE FROM tasks WHERE id = @Id", new { Id = id });
}
public static void SetFinishedTaskCommand(SqliteConnection connection)
{
Console.WriteLine("Введите номер задачи для выполнения:");
var id = Convert.ToInt32(Console.ReadLine());
connection.Execute("UPDATE tasks SET finished = NOT finished WHERE id = @Id", new { Id = id });
}
public static void RemoveTaskCommand(SqliteConnection connection)
{
Console.WriteLine("Введите номер задачи для удаления всех задач:");
var id = Convert.ToInt32(Console.ReadLine());
connection.Execute("DELETE FROM tasks WHERE id = @Id", new { Id = id });
}
public static void RemoveAllTasks(SqliteConnection connection)
{
connection.Execute("DELETE FROM tasks");
}
}