From 65b2975b24ecfc8b10122d242a07ece1a51e09f9 Mon Sep 17 00:00:00 2001 From: Ian Gulliver Date: Sun, 13 Sep 2020 21:27:40 +0000 Subject: [PATCH] Class tag support, add Adabelle --- class.go | 15 +++++++++++ classes.go | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ main.go | 4 +++ tag.go | 42 +++++++++++++++++++++++++++++ 4 files changed, 139 insertions(+) create mode 100644 tag.go diff --git a/class.go b/class.go index 973f42e..434256b 100644 --- a/class.go +++ b/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") diff --git a/classes.go b/classes.go index 1edc2db..1b6eb83 100644 --- a/classes.go +++ b/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", + }, + }, } diff --git a/main.go b/main.go index 84be626..d6bc4ab 100644 --- a/main.go +++ b/main.go @@ -71,6 +71,10 @@ func main() { continue } + if !class.tagsMatch(date) { + continue + } + ev := class.buildEvent(date) old := eventMap[ev.Summary] diff --git a/tag.go b/tag.go new file mode 100644 index 0000000..092e535 --- /dev/null +++ b/tag.go @@ -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 +}