auto commit
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"fmt"
|
||||
|
||||
_ "github.com/lib/pq"
|
||||
)
|
||||
|
||||
const (
|
||||
host = "202.46.28.160"
|
||||
port = 45432
|
||||
user = "5803024008"
|
||||
password = "pw5803024008"
|
||||
dbname = "tgs01_5803024008"
|
||||
)
|
||||
|
||||
// InitDB returns a database connection
|
||||
func InitDB() (*sql.DB, error) {
|
||||
// connection string
|
||||
psqlconn := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable", host, port, user, password, dbname)
|
||||
|
||||
// open database
|
||||
db, err := sql.Open("postgres", psqlconn)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// check db
|
||||
err = db.Ping()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
fmt.Println("Connected to database!")
|
||||
return db, nil
|
||||
}
|
||||
|
||||
func CheckError(err error) {
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
)
|
||||
|
||||
// CreateGroup inserts a new group into the database
|
||||
func CreateGroup(db *sql.DB, groupName string) error {
|
||||
query := `INSERT INTO groups (group_name) VALUES ($1)`
|
||||
_, err := db.Exec(query, groupName)
|
||||
return err
|
||||
}
|
||||
|
||||
// GetGroupByID retrieves a group by its ID
|
||||
func GetGroupByID(db *sql.DB, groupID int) (*Groups, error) {
|
||||
query := `SELECT group_id, group_name FROM groups WHERE group_id = $1`
|
||||
row := db.QueryRow(query, groupID)
|
||||
|
||||
var group Groups
|
||||
err := row.Scan(&group.GroupId, &group.GroupName)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &group, nil
|
||||
}
|
||||
|
||||
// RemoveGroup deletes a group and all its associated tasks
|
||||
func RemoveGroup(db *sql.DB, groupID int) error {
|
||||
tx, err := db.Begin()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer tx.Rollback()
|
||||
|
||||
// Delete all tasks in the group first
|
||||
_, err = tx.Exec("DELETE FROM tasks WHERE group_id = $1", groupID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Delete the group
|
||||
_, err = tx.Exec("DELETE FROM groups WHERE group_id = $1", groupID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return tx.Commit()
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"time"
|
||||
)
|
||||
|
||||
type Groups struct{
|
||||
GroupId int `json:"group_id"`
|
||||
GroupName string `json:"group_name"`
|
||||
}
|
||||
|
||||
type Tasks struct{
|
||||
TaskID int `json:"task_id"`
|
||||
TaskName string `json:"task_name"` // Maps to "task" column in SQL
|
||||
TaskDescription string `json:"task_desc"` // Maps to "task_desc" column in SQL (changed from *int to string)
|
||||
GroupID int `json:"group_id"`
|
||||
IsDone bool `json:"is_done"` // Maps to "isdone" column in SQL
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user