From 44e1333b3a379b42fe046526aae437782f178653 Mon Sep 17 00:00:00 2001 From: kalipso Date: Tue, 9 May 2023 16:48:31 +0200 Subject: [PATCH] init --- README.md | 2 + flake.nix | 11 ++++ forms.html | 152 ++++++++++++++++++++++++++++++++++++++++++++++ go.mod | 5 ++ main.go | 175 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 345 insertions(+) create mode 100644 README.md create mode 100644 flake.nix create mode 100644 forms.html create mode 100644 go.mod create mode 100644 main.go diff --git a/README.md b/README.md new file mode 100644 index 0000000..414aeee --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# malobeo Tasklist + diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..a96aa14 --- /dev/null +++ b/flake.nix @@ -0,0 +1,11 @@ +{ + description = "A very basic flake"; + + outputs = { self, nixpkgs }: { + + packages.x86_64-linux.hello = nixpkgs.legacyPackages.x86_64-linux.hello; + + packages.x86_64-linux.default = self.packages.x86_64-linux.hello; + + }; +} diff --git a/forms.html b/forms.html new file mode 100644 index 0000000..4f799be --- /dev/null +++ b/forms.html @@ -0,0 +1,152 @@ + + + + + + malobeo tasklist + Bootstrap Example + + + + + + +
+
+
+
+
+
+

tasklist

+
+ enter your name to make yourself happy +
+
+
+
+
+
+
+ + +{{range .Tasklists}} +
+
+
+
+ +
+
+

{{.Title}}

+ {{ if .Updated }} +

Updated

+ {{end}} +
+ {{range .Tasks}} +
+ + +
{{.Description}}
+
+ {{end}} + + +
+
+
+
+
+
+
+
+{{end}} + + +` diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..b355076 --- /dev/null +++ b/go.mod @@ -0,0 +1,5 @@ +module tasklist + +go 1.20 + +require github.com/mattn/go-sqlite3 v1.14.16 // indirect diff --git a/main.go b/main.go new file mode 100644 index 0000000..c9811bd --- /dev/null +++ b/main.go @@ -0,0 +1,175 @@ +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) +}