package main import ( "database/sql" "fmt" "html/template" "log" "net/http" "time" _ "github.com/mattn/go-sqlite3" ) func CreateTasklist(title string, db *sql.DB) Tasklist { tasks := []Task{ { Name: "Promotion", Description: ` (make a post on the website to promote openings times and for each film event, posting description and announcement on telegram channel, forwarding it to telegram groups, making a fb event, making a post about fb event on the fb page, sharing the event to fb groups) `, }, { Name: "Opening", Description: `(checking toilet if there is toilet paper and fresh towel, refill fridge, sorting deposit bottles, quickly tidy up the place)`, }, { Name: "Entering", Description: `(checking if there are new books to be entered into the library catalogue, categorizing them, stamping them, putting them into the book shelf)`, }, { Name: "CleanUp", Description: `(includes cleaning up, tidying up, rearranging chairs, closing or arranging somebody to lock the front and back doors)`, }, { Name: "Weekly Toilet & Kitchen", Description: `(whiping the floor in kitchen and bathroom, clean toilet, clean sink, check soap and menstruation supplies)`, }, } stmt, err := db.Prepare("select promotion, opening, entering, cleanup, weeklytoilet from tasklists where name = ?") if err != nil { fmt.Println(err) } defer stmt.Close() var promotion, opening, entering, cleanup, weeklytoilet string err = stmt.QueryRow(title).Scan(&promotion, &opening, &entering, &cleanup, &weeklytoilet) if err == nil { tasks[0].Value = promotion tasks[1].Value = opening tasks[2].Value = entering tasks[3].Value = cleanup tasks[4].Value = weeklytoilet } return Tasklist{ Title: title, Tasks: tasks, Updated: false, } } func InsertToDB(tasklist Tasklist, db *sql.DB) { stmt, err := db.Prepare("select name from tasklists where name = ?") if err != nil { log.Fatal(err) } defer stmt.Close() var name string err = stmt.QueryRow(tasklist.Title).Scan(&name) if err != nil { db.Exec("insert into tasklists(name, promotion, opening, entering, cleanup, weeklytoilet) values(?, ?, ?, ?, ?, ?)", tasklist.Title, tasklist.Tasks[0].Value, tasklist.Tasks[1].Value, tasklist.Tasks[2].Value, tasklist.Tasks[3].Value, tasklist.Tasks[4].Value) } else { _, err := db.Exec("update tasklists set promotion = ?,opening = ?,entering = ?,cleanup = ?,weeklytoilet = ? where name = ?", tasklist.Tasks[0].Value, tasklist.Tasks[1].Value, tasklist.Tasks[2].Value, tasklist.Tasks[3].Value, tasklist.Tasks[4].Value, tasklist.Title) if err != nil { fmt.Println("Error during update: ", err) } } } type Task struct { Name string Description string Value string } type Tasklist struct { Title string Tasks []Task Updated bool } type Tasklists struct { Tasklists []Tasklist } type QueryResult struct { Tasklists []Tasklist } func (n *Tasklist) Print() { fmt.Println(n.Title) for _, task := range n.Tasks { fmt.Println("\t Name: ", task.Name) fmt.Println("\t Descr: ", task.Description) fmt.Println("\t Value: ", task.Value) } } func GetNextNDaysOfName(n int, name time.Weekday, current time.Time) []time.Time { result := make([]time.Time, n) for index := 0; index < n; { if current.Weekday() == name { result[index] = current index++ } current = current.AddDate(0, 0, 1) } return result } const DB_NAME = "./tasklist.db" const TASK_DAY = time.Tuesday const AMOUNT_DAYS = 4 func main() { db, err := sql.Open("sqlite3", DB_NAME) if err != nil { log.Fatal(err) } defer db.Close() sqlStmt := ` create table if not exists tasklists (name test not null primary key, promotion text, opening text, entering text, cleanup text, weeklytoilet text); ` _, err = db.Exec(sqlStmt) if err != nil { log.Printf("%q: %s\n", err, sqlStmt) return } tmpl := template.Must(template.ParseFiles("forms.html")) http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { days := GetNextNDaysOfName(AMOUNT_DAYS, TASK_DAY, time.Now()) tasklist_arr := QueryResult{make([]Tasklist, AMOUNT_DAYS)} for idx, day := range days { tasklist_arr.Tasklists[idx] = CreateTasklist(day.Format("Jan 2, 2006"), db) } if r.Method != http.MethodPost { tmpl.Execute(w, tasklist_arr) return } for idx, task := range tasklist_arr.Tasklists { if task.Title == r.FormValue("Name") { for idx2 := range task.Tasks { task.Tasks[idx2].Value = r.FormValue(task.Tasks[idx2].Name) } tasklist_arr.Tasklists[idx].Updated = true InsertToDB(tasklist_arr.Tasklists[idx], db) } } tmpl.Execute(w, tasklist_arr) }) http.ListenAndServe(":8080", nil) }