mirror of
https://gitlab.dit.htwk-leipzig.de/htwk-software/htwkalender.git
synced 2026-01-16 19:42:26 +01:00
56 lines
1.2 KiB
Go
56 lines
1.2 KiB
Go
package ical
|
|
|
|
import (
|
|
"bytes"
|
|
"github.com/jordic/goics"
|
|
"htwkalender-ical/model"
|
|
"htwkalender-ical/service/connector"
|
|
"time"
|
|
)
|
|
|
|
const expirationTime = 5 * time.Minute
|
|
|
|
func Feed(token string) (string, error) {
|
|
// get feed by token
|
|
feed, err := connector.GetFeedByToken(token)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
var events model.Events
|
|
|
|
for _, module := range feed.Modules {
|
|
moduleWithEvents, err := connector.GetModuleWithEvents(module)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
events = append(events, moduleWithEvents.Events...)
|
|
}
|
|
|
|
// Sorte events by start date
|
|
events.Sort()
|
|
|
|
modules := make(map[string]model.FeedCollection)
|
|
for _, module := range feed.Modules {
|
|
modules[module.UUID] = model.FeedCollection(module)
|
|
}
|
|
|
|
b := bytes.Buffer{}
|
|
goics.NewICalEncode(&b).Encode(IcalModel{Events: events, Mapping: modules})
|
|
icalFeed := &model.FeedModel{Content: b.String(), ExpiresAt: model.JSONTime(time.Now().Add(expirationTime))}
|
|
|
|
return icalFeed.Content, nil
|
|
}
|
|
|
|
func FeedRecord(token string) (model.FeedRecord, error) {
|
|
|
|
feedRecord, err := connector.GetFeedByToken(token)
|
|
if err != nil {
|
|
return model.FeedRecord{}, err
|
|
}
|
|
|
|
return feedRecord, nil
|
|
|
|
}
|