-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathschedule.go
More file actions
105 lines (95 loc) · 2.37 KB
/
schedule.go
File metadata and controls
105 lines (95 loc) · 2.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
package main
import (
"log"
"html/template"
"net/http"
"sort"
"time"
"cloud.google.com/go/datastore"
"google.golang.org/api/iterator"
)
type ScheduleDay struct {
Date string
Scheduled *Gamenight
Invitations []*Invitation
}
type ScheduleData struct {
Base BaseTemplate
Days []ScheduleDay
}
func handleSchedule(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
user, _ := getUserSession(ctx, r)
data := ScheduleData{
Base: BaseTemplate{
Tab: "schedule",
User: user,
DevServer: devServer(ctx),
},
}
tmpl := template.Must(template.ParseFiles("templates/base.html", "templates/schedule.html"))
// List all the currently scheduled gamenights
days := make(map[string]ScheduleDay)
now := time.Now().In(tz())
it := dsClient.Run(ctx,
datastore.NewQuery("Gamenight").
FilterField("d", ">=", now))
var dayList []string
for {
var gn Gamenight
_, err := it.Next(&gn)
if err == iterator.Done {
break
} else if err != nil {
log.Printf("Error getting gamenight: %v", err)
data.Base.Error = "Database error"
tmpl.ExecuteTemplate(w, "schedule.html", data)
return
}
if err = gn.Load(ctx); err != nil {
log.Printf("Error filling gamenight: %v", err)
}
date := gn.Date.Format("2006-01-02")
if _, ok := days[date]; !ok {
days[date] = ScheduleDay{
Date: gn.Date.Format("Monday, Jan 2, 2006"),
Scheduled: &gn,
}
dayList = append(dayList, date)
}
}
// Get all the pending invitations.
invs, err := getAllInvitations(ctx, now, false)
if err != nil {
log.Printf("Error getting gamenights: %v", err)
data.Base.Error = "Database error"
tmpl.ExecuteTemplate(w, "schedule.html", data)
return
}
for _, inv := range invs {
if err = inv.Load(ctx); err != nil {
log.Printf("Error filling invitation: %v", err)
}
date := inv.Date.Format("2006-01-02")
e, ok := days[date]
if !ok {
e = ScheduleDay{
Date: inv.Date.Format("Monday, Jan 2, 2006"),
Invitations: []*Invitation{},
}
dayList = append(dayList, date)
}
if days[date].Scheduled == nil || !days[date].Scheduled.Invite.Key.Equal(inv.Key) {
e.Invitations = append(e.Invitations, inv)
}
days[date] = e
}
sort.Strings(dayList)
for _, k := range dayList {
data.Days = append(data.Days, days[k])
}
err = tmpl.ExecuteTemplate(w, "schedule.html", data)
if err != nil {
log.Printf("Error executing schedule.html: %v", err)
}
}