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 ( import (
"fmt" "fmt"
"log"
"time" "time"
"google.golang.org/api/calendar/v3" "google.golang.org/api/calendar/v3"
@@ -13,6 +14,7 @@ type Class struct {
End string End string
Students []string Students []string
Days []time.Weekday Days []time.Weekday
Tags map[string]string
Zoom string Zoom string
} }
@@ -25,6 +27,19 @@ func (c Class) happensOnDay(t time.Time) bool {
return false 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 { func (c Class) buildEvent(t time.Time) *calendar.Event {
dateStr := t.Format("2006-01-02") dateStr := t.Format("2006-01-02")

View File

@@ -5,16 +5,31 @@ import (
) )
var allStudents = []string{ var allStudents = []string{
"adabelle.pratt@heliosns.org",
"oliver.park@heliosns.org", "oliver.park@heliosns.org",
} }
var greenStudents = []string{ var greenStudents = []string{
"adabelle.pratt@heliosns.org",
"oliver.park@heliosns.org", "oliver.park@heliosns.org",
} }
var weekDays = []time.Weekday{time.Monday, time.Tuesday, time.Wednesday, time.Thursday, time.Friday} 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 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 { var classes = []Class {
Class{ Class{
Summary: "👋 Morning Circle", Summary: "👋 Morning Circle",
@@ -37,6 +52,7 @@ var classes = []Class {
Days: weekDays, Days: weekDays,
Zoom: "https://us02web.zoom.us/j/2274643506?pwd=Nm5NUXMwOVJKbEUzNE5VSkZCQzJ2UT09", Zoom: "https://us02web.zoom.us/j/2274643506?pwd=Nm5NUXMwOVJKbEUzNE5VSkZCQzJ2UT09",
Students: []string{ Students: []string{
"adabelle.pratt@heliosns.org",
"oliver.park@heliosns.org", "oliver.park@heliosns.org",
}, },
}, },
@@ -101,6 +117,16 @@ var classes = []Class {
"oliver.park@heliosns.org", "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{ Class{
Summary: "🎶 Music & Movement (Blue/Green)", Summary: "🎶 Music & Movement (Blue/Green)",
Start: "12:45", Start: "12:45",
@@ -124,4 +150,56 @@ var classes = []Class {
Days: []time.Weekday{time.Friday}, Days: []time.Weekday{time.Friday},
Zoom: "https://us02web.zoom.us/j/2274643506?pwd=Nm5NUXMwOVJKbEUzNE5VSkZCQzJ2UT09", 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 continue
} }
if !class.tagsMatch(date) {
continue
}
ev := class.buildEvent(date) ev := class.buildEvent(date)
old := eventMap[ev.Summary] 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
}