feat: introduce feed management for individual and professor modules across frontend and backend services.

This commit is contained in:
Elmar Kresse
2025-11-22 21:20:41 +01:00
parent 34ad90d50d
commit ac6e1fe0dd
21 changed files with 1655 additions and 240 deletions

View File

@@ -18,12 +18,13 @@ package grpc
import (
"context"
"github.com/goccy/go-json"
"google.golang.org/grpc"
pb "htwkalender/common/genproto/modules"
"htwkalender/ical/model"
"log/slog"
"time"
"github.com/goccy/go-json"
"google.golang.org/grpc"
)
func GetFeed(feedId string, conn *grpc.ClientConn) (model.FeedRecord, error) {
@@ -65,5 +66,8 @@ func protoToFeed(feed *pb.Feed) (model.FeedRecord, error) {
Retrieved: model.ToJSONTime(feed.Retrieved),
Modules: modules,
Deleted: feed.Deleted,
Type: feed.Type,
User: feed.User,
UserEmail: feed.UserEmail,
}, nil
}

View File

@@ -24,6 +24,8 @@ import (
"htwkalender/ical/service/functions"
"log/slog"
"time"
commonProf "htwkalender/common/professor"
)
const expirationTime = 5 * time.Minute
@@ -59,6 +61,11 @@ func Feed(app model.AppType, token string, userAgent string) (string, string, er
return "", "", err
}
// Filter by professor if type is "prof"
if feed.Type == "prof" && feed.UserEmail != "" {
events = filterEventsByProfessor(events, feed.UserEmail)
}
// Sort events by start date
events.Sort()
@@ -126,3 +133,22 @@ func FeedRoom(app model.AppType, room string, userAgent string) (string, string,
return icalFeed.Content, etag, nil
}
func filterEventsByProfessor(events model.Events, email string) model.Events {
if email == "" {
return events
}
firstName, lastName, err := commonProf.ExtractNameFromEmail(email)
if err != nil {
return events
}
var filteredEvents model.Events
for _, event := range events {
if commonProf.MatchesProfessor(event.Prof, firstName, lastName) {
filteredEvents = append(filteredEvents, event)
}
}
return filteredEvents
}