Class tag support, add Adabelle

This commit is contained in:
Ian Gulliver
2020-09-13 21:27:40 +00:00
parent 7f939b677d
commit 65b2975b24
4 changed files with 139 additions and 0 deletions

View File

@@ -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")

View File

@@ -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",
},
},
}

View File

@@ -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
View 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
}