init
This commit is contained in:
175
main.go
Normal file
175
main.go
Normal file
@@ -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)
|
||||
}
|
||||
Reference in New Issue
Block a user