Class tag support, add Adabelle
This commit is contained in:
15
class.go
15
class.go
@@ -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")
|
||||||
|
|
||||||
|
|||||||
78
classes.go
78
classes.go
@@ -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",
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
4
main.go
4
main.go
@@ -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
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