Class tag support, add Adabelle
This commit is contained in:
15
class.go
15
class.go
@@ -2,6 +2,7 @@ package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"time"
|
||||
|
||||
"google.golang.org/api/calendar/v3"
|
||||
@@ -13,6 +14,7 @@ type Class struct {
|
||||
End string
|
||||
Students []string
|
||||
Days []time.Weekday
|
||||
Tags map[string]string
|
||||
Zoom string
|
||||
}
|
||||
|
||||
@@ -25,6 +27,19 @@ func (c Class) happensOnDay(t time.Time) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func (c Class) tagsMatch(t time.Time) bool {
|
||||
for key, value := range c.Tags {
|
||||
tagValue, err := getTagAt(key, t)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
if value != tagValue {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func (c Class) buildEvent(t time.Time) *calendar.Event {
|
||||
dateStr := t.Format("2006-01-02")
|
||||
|
||||
|
||||
78
classes.go
78
classes.go
@@ -5,16 +5,31 @@ import (
|
||||
)
|
||||
|
||||
var allStudents = []string{
|
||||
"adabelle.pratt@heliosns.org",
|
||||
"oliver.park@heliosns.org",
|
||||
}
|
||||
|
||||
var greenStudents = []string{
|
||||
"adabelle.pratt@heliosns.org",
|
||||
"oliver.park@heliosns.org",
|
||||
}
|
||||
|
||||
var weekDays = []time.Weekday{time.Monday, time.Tuesday, time.Wednesday, time.Thursday, time.Friday}
|
||||
var weekDaysButFriday = []time.Weekday{time.Monday, time.Tuesday, time.Wednesday, time.Thursday}
|
||||
|
||||
var tags = TagMap{
|
||||
"week": TagChangeList{
|
||||
TagChange{
|
||||
Start: "2020-09-14",
|
||||
Value: "A",
|
||||
},
|
||||
TagChange{
|
||||
Start: "2020-09-21",
|
||||
Value: "B",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
var classes = []Class {
|
||||
Class{
|
||||
Summary: "👋 Morning Circle",
|
||||
@@ -37,6 +52,7 @@ var classes = []Class {
|
||||
Days: weekDays,
|
||||
Zoom: "https://us02web.zoom.us/j/2274643506?pwd=Nm5NUXMwOVJKbEUzNE5VSkZCQzJ2UT09",
|
||||
Students: []string{
|
||||
"adabelle.pratt@heliosns.org",
|
||||
"oliver.park@heliosns.org",
|
||||
},
|
||||
},
|
||||
@@ -101,6 +117,16 @@ var classes = []Class {
|
||||
"oliver.park@heliosns.org",
|
||||
},
|
||||
},
|
||||
Class{
|
||||
Summary: "🎨 Art",
|
||||
Start: "12:45",
|
||||
End: "13:30",
|
||||
Days: []time.Weekday{time.Monday, time.Tuesday, time.Wednesday},
|
||||
Zoom: "https://us02web.zoom.us/j/86969790982?pwd=TEMraThVbHhMUlBHUjFZYXZVRnpFQT09",
|
||||
Students: []string{
|
||||
"adabelle.pratt@heliosns.org",
|
||||
},
|
||||
},
|
||||
Class{
|
||||
Summary: "🎶 Music & Movement (Blue/Green)",
|
||||
Start: "12:45",
|
||||
@@ -124,4 +150,56 @@ var classes = []Class {
|
||||
Days: []time.Weekday{time.Friday},
|
||||
Zoom: "https://us02web.zoom.us/j/2274643506?pwd=Nm5NUXMwOVJKbEUzNE5VSkZCQzJ2UT09",
|
||||
},
|
||||
Class{
|
||||
Summary: "🍎 Rachel & Oliver",
|
||||
Start: "13:45",
|
||||
End: "14:00",
|
||||
Days: []time.Weekday{time.Monday},
|
||||
Tags: map[string]string{
|
||||
"week": "A",
|
||||
},
|
||||
Zoom: "https://us02web.zoom.us/j/3839164321?pwd=aDNUdzN3bjlZbG93NlNqd09hU2xmUT09",
|
||||
Students: []string{
|
||||
"oliver.park@heliosns.org",
|
||||
},
|
||||
},
|
||||
Class{
|
||||
Summary: "🍎 Claudia & Oliver",
|
||||
Start: "13:45",
|
||||
End: "14:00",
|
||||
Days: []time.Weekday{time.Monday},
|
||||
Tags: map[string]string{
|
||||
"week": "B",
|
||||
},
|
||||
Zoom: "https://us02web.zoom.us/j/2274643506?pwd=Nm5NUXMwOVJKbEUzNE5VSkZCQzJ2UT09",
|
||||
Students: []string{
|
||||
"oliver.park@heliosns.org",
|
||||
},
|
||||
},
|
||||
Class{
|
||||
Summary: "🍎 Claudia & Adabelle",
|
||||
Start: "13:45",
|
||||
End: "14:00",
|
||||
Days: []time.Weekday{time.Wednesday},
|
||||
Tags: map[string]string{
|
||||
"week": "A",
|
||||
},
|
||||
Zoom: "https://us02web.zoom.us/j/2274643506?pwd=Nm5NUXMwOVJKbEUzNE5VSkZCQzJ2UT09",
|
||||
Students: []string{
|
||||
"adabelle.pratt@heliosns.org",
|
||||
},
|
||||
},
|
||||
Class{
|
||||
Summary: "🍎 Rachel & Adabelle",
|
||||
Start: "13:45",
|
||||
End: "14:00",
|
||||
Days: []time.Weekday{time.Wednesday},
|
||||
Tags: map[string]string{
|
||||
"week": "B",
|
||||
},
|
||||
Zoom: "https://us02web.zoom.us/j/3839164321?pwd=aDNUdzN3bjlZbG93NlNqd09hU2xmUT09",
|
||||
Students: []string{
|
||||
"adabelle.pratt@heliosns.org",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
4
main.go
4
main.go
@@ -71,6 +71,10 @@ func main() {
|
||||
continue
|
||||
}
|
||||
|
||||
if !class.tagsMatch(date) {
|
||||
continue
|
||||
}
|
||||
|
||||
ev := class.buildEvent(date)
|
||||
|
||||
old := eventMap[ev.Summary]
|
||||
|
||||
42
tag.go
Normal file
42
tag.go
Normal file
@@ -0,0 +1,42 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
type TagChange struct {
|
||||
Start string
|
||||
Value string
|
||||
}
|
||||
|
||||
type TagChangeList []TagChange
|
||||
type TagKey string
|
||||
type TagMap map[TagKey]TagChangeList
|
||||
|
||||
func getTagAt(key string, t time.Time) (string, error) {
|
||||
// Guaranteed to be in local time
|
||||
date := t.Format("2006-01-02")
|
||||
|
||||
tagChanges := tags[TagKey(key)]
|
||||
|
||||
if tagChanges == nil {
|
||||
return "", fmt.Errorf("tag key not found: %s", key)
|
||||
}
|
||||
|
||||
value := ""
|
||||
|
||||
for _, change := range tagChanges {
|
||||
if strings.Compare(change.Start, date) > 0 {
|
||||
break
|
||||
}
|
||||
value = change.Value
|
||||
}
|
||||
|
||||
if value == "" {
|
||||
return "", fmt.Errorf("tag key '%s' has no value yet", key)
|
||||
}
|
||||
|
||||
return value, nil
|
||||
}
|
||||
Reference in New Issue
Block a user