package db import ( "database/sql" "errors" ) // GetAllTasks retrieves all tasks from the database func GetAllTasks() ([]Task, error) { var tasks []Task query := `SELECT "TaskID", "TaskName", "TaskDescription", "GroupID", "IsDone", "CreatedAt" FROM "Tasks" ORDER BY "CreatedAt" DESC` rows, err := DB.Query(query) if err != nil { return nil, err } defer rows.Close() for rows.Next() { var task Task err := rows.Scan(&task.TaskID, &task.TaskName, &task.TaskDescription, &task.GroupID, &task.IsDone, &task.CreatedAt) if err != nil { return nil, err } tasks = append(tasks, task) } return tasks, nil } // GetTasksByGroupID retrieves all tasks for a specific group func GetTasksByGroupID(groupID int) ([]Task, error) { var tasks []Task query := `SELECT "TaskID", "TaskName", "TaskDescription", "GroupID", "IsDone", "CreatedAt" FROM "Tasks" WHERE "GroupID" = $1 ORDER BY "CreatedAt" DESC` rows, err := DB.Query(query, groupID) if err != nil { return nil, err } defer rows.Close() for rows.Next() { var task Task err := rows.Scan(&task.TaskID, &task.TaskName, &task.TaskDescription, &task.GroupID, &task.IsDone, &task.CreatedAt) if err != nil { return nil, err } tasks = append(tasks, task) } return tasks, nil } // GetTaskByID retrieves a single task by ID func GetTaskByID(taskID int) (*Task, error) { var task Task query := `SELECT "TaskID", "TaskName", "TaskDescription", "GroupID", "IsDone", "CreatedAt" FROM "Tasks" WHERE "TaskID" = $1` err := DB.QueryRow(query, taskID).Scan(&task.TaskID, &task.TaskName, &task.TaskDescription, &task.GroupID, &task.IsDone, &task.CreatedAt) if err != nil { if err == sql.ErrNoRows { return nil, errors.New("task not found") } return nil, err } return &task, nil } // CreateTask creates a new task in the database func CreateTask(taskName string, taskDescription *string, groupID int) (*Task, error) { var task Task query := `INSERT INTO "Tasks" ("TaskName", "TaskDescription", "GroupID") VALUES ($1, $2, $3) RETURNING "TaskID", "TaskName", "TaskDescription", "GroupID", "IsDone", "CreatedAt"` err := DB.QueryRow(query, taskName, taskDescription, groupID). Scan(&task.TaskID, &task.TaskName, &task.TaskDescription, &task.GroupID, &task.IsDone, &task.CreatedAt) if err != nil { return nil, err } return &task, nil } // UpdateTask updates an existing task func UpdateTask(taskID int, taskName string, taskDescription *string) error { query := `UPDATE "Tasks" SET "TaskName" = $1, "TaskDescription" = $2 WHERE "TaskID" = $3` result, err := DB.Exec(query, taskName, taskDescription, taskID) if err != nil { return err } rowsAffected, err := result.RowsAffected() if err != nil { return err } if rowsAffected == 0 { return errors.New("task not found") } return nil } // MarkTaskDone marks a task as completed func MarkTaskDone(taskID int) error { query := `UPDATE "Tasks" SET "IsDone" = true WHERE "TaskID" = $1` result, err := DB.Exec(query, taskID) if err != nil { return err } rowsAffected, err := result.RowsAffected() if err != nil { return err } if rowsAffected == 0 { return errors.New("task not found") } return nil } // DeleteTask deletes a task from the database func DeleteTask(taskID int) error { query := `DELETE FROM "Tasks" WHERE "TaskID" = $1` result, err := DB.Exec(query, taskID) if err != nil { return err } rowsAffected, err := result.RowsAffected() if err != nil { return err } if rowsAffected == 0 { return errors.New("task not found") } return nil }