123 lines
2.8 KiB
Go
123 lines
2.8 KiB
Go
|
package pages
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"net/http"
|
||
|
"strconv"
|
||
|
"time"
|
||
|
|
||
|
"github.com/Cameron-Reed1/todo-web/db"
|
||
|
"github.com/Cameron-Reed1/todo-web/pages/templates"
|
||
|
"github.com/Cameron-Reed1/todo-web/types"
|
||
|
)
|
||
|
|
||
|
func OverdueFragment(w http.ResponseWriter, r *http.Request) {
|
||
|
items, err := db.GetOverdueTodos()
|
||
|
if err != nil {
|
||
|
w.WriteHeader(http.StatusInternalServerError)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
templates.TodoList(items).Render(r.Context(), w)
|
||
|
}
|
||
|
|
||
|
func TodayFragment(w http.ResponseWriter, r *http.Request) {
|
||
|
items, err := db.GetTodayTodos()
|
||
|
if err != nil {
|
||
|
w.WriteHeader(http.StatusInternalServerError)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
templates.TodoList(items).Render(r.Context(), w)
|
||
|
}
|
||
|
|
||
|
func UpcomingFragment(w http.ResponseWriter, r *http.Request) {
|
||
|
items, err := db.GetUpcomingTodos()
|
||
|
if err != nil {
|
||
|
w.WriteHeader(http.StatusInternalServerError)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
templates.TodoList(items).Render(r.Context(), w)
|
||
|
}
|
||
|
|
||
|
func CreateItem(w http.ResponseWriter, r *http.Request) {
|
||
|
var todo types.Todo
|
||
|
var err error
|
||
|
|
||
|
todo.Text = r.FormValue("name")
|
||
|
start := r.FormValue("start")
|
||
|
due := r.FormValue("due")
|
||
|
|
||
|
if start != "" {
|
||
|
start_time, err := time.Parse("2006-01-02T03:04", start)
|
||
|
if err != nil {
|
||
|
fmt.Printf("Bad start time: %s\n", start)
|
||
|
w.WriteHeader(http.StatusBadRequest)
|
||
|
return
|
||
|
}
|
||
|
todo.Start = start_time.Unix()
|
||
|
} else {
|
||
|
todo.Start = 0
|
||
|
}
|
||
|
|
||
|
if due != "" {
|
||
|
due_time, err := time.Parse("2006-01-02T15:04", due)
|
||
|
if err != nil {
|
||
|
fmt.Printf("Bad due time: %s\n", due)
|
||
|
w.WriteHeader(http.StatusBadRequest)
|
||
|
return
|
||
|
}
|
||
|
todo.Due = due_time.Unix()
|
||
|
} else {
|
||
|
todo.Due = 0
|
||
|
}
|
||
|
|
||
|
fmt.Printf("New item: %s: %d - %d\n", todo.Text, todo.Start, todo.Due)
|
||
|
|
||
|
err = db.AddTodo(&todo)
|
||
|
if err != nil {
|
||
|
w.WriteHeader(http.StatusInternalServerError)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
w.Write([]byte{})
|
||
|
}
|
||
|
|
||
|
func DeleteItem(w http.ResponseWriter, r *http.Request) {
|
||
|
idStr := r.PathValue("id")
|
||
|
id, err := strconv.Atoi(idStr)
|
||
|
|
||
|
if idStr == "" || err != nil {
|
||
|
w.WriteHeader(http.StatusBadRequest)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
err = db.DeleteTodo(id)
|
||
|
|
||
|
if err != nil {
|
||
|
w.WriteHeader(http.StatusInternalServerError)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
w.Write([]byte{})
|
||
|
}
|
||
|
|
||
|
func SetItemCompleted(w http.ResponseWriter, r *http.Request) {
|
||
|
idStr := r.PathValue("id")
|
||
|
id, err := strconv.Atoi(idStr)
|
||
|
|
||
|
if idStr == "" || err != nil {
|
||
|
w.WriteHeader(http.StatusBadRequest)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
completed := r.FormValue("completed") == "on"
|
||
|
if err = db.SetCompleted(id, completed); err != nil {
|
||
|
w.WriteHeader(http.StatusInternalServerError)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
w.Write([]byte{})
|
||
|
}
|