CalvinLiu123 9282bee836 commit
2025-09-17 13:55:53 +07:00

99 lines
2.7 KiB
Go

package db
import (
"database/sql"
"time"
)
// CreateTask inserts a new task into the database
func CreateTask(db *sql.DB, taskName string, taskDescription string, groupID int) error {
query := `INSERT INTO tasks (task_name, task_desc, group_id, is_done, created_at)
VALUES ($1, $2, $3, $4, $5)`
_, err := db.Exec(query, taskName, taskDescription, groupID, false, time.Now())
return err
}
// GetAllTasks retrieves all tasks from the database
func GetAllTasks(db *sql.DB) ([]Tasks, error) {
query := `SELECT task_id, task_name, task_desc, group_id, is_done, created_at
FROM tasks ORDER BY created_at DESC`
rows, err := db.Query(query)
if err != nil {
return nil, err
}
defer rows.Close()
var tasks []Tasks
for rows.Next() {
var task Tasks
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 specific task by its ID
func GetTaskByID(db *sql.DB, taskID int) (*Tasks, error) {
query := `SELECT task_id, task_name, task_desc, group_id, is_done, created_at
FROM tasks WHERE task_id = $1`
row := db.QueryRow(query, taskID)
var task Tasks
err := row.Scan(&task.TaskID, &task.TaskName, &task.TaskDescription,
&task.GroupID, &task.IsDone, &task.CreatedAt)
if err != nil {
return nil, err
}
return &task, nil
}
// GetTasksByGroupID retrieves all tasks for a specific group
func GetTasksByGroupID(db *sql.DB, groupID int) ([]Tasks, error) {
query := `SELECT task_id, task_name, task_desc, group_id, is_done, created_at
FROM tasks WHERE group_id = $1`
rows, err := db.Query(query, groupID)
if err != nil {
return nil, err
}
defer rows.Close()
var tasks []Tasks
for rows.Next() {
var task Tasks
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
}
// MarkTaskAsDone updates a task's status to completed
func MarkTaskAsDone(db *sql.DB, taskID int) error {
query := `UPDATE tasks SET is_done = true WHERE task_id = $1`
_, err := db.Exec(query, taskID)
return err
}
// RemoveTask deletes a task from the database
func RemoveTask(db *sql.DB, taskID int) error {
query := `DELETE FROM tasks WHERE task_id = $1`
_, err := db.Exec(query, taskID)
return err
}
// UpdateTask updates task name and description
func UpdateTask(db *sql.DB, taskID int, taskName string, taskDescription string) error {
query := `UPDATE tasks SET task_name = $1, task_desc = $2 WHERE task_id = $3`
_, err := db.Exec(query, taskName, taskDescription, taskID)
return err
}