Files
htwkalender/services/ical/service/ical/ical.go

77 lines
1.5 KiB
Go

package ical
import (
"bytes"
"github.com/jordic/goics"
"htwkalender-ical/model"
"htwkalender-ical/service/connector"
"log/slog"
"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
}
func DeleteFeedRecord(token string) error {
err := connector.DeleteFeedRecord(token)
if err != nil {
return err
}
return nil
}
func CreateFeed(modules []model.FeedCollection) (string, error) {
// Save feed
token, err := connector.SaveFeedRecord(modules)
if err != nil {
slog.Error("Failed to save feed", "error", err)
return "", err
}
return token, nil
}