mirror of
https://gitlab.dit.htwk-leipzig.de/htwk-software/htwkalender.git
synced 2026-01-16 11:32:26 +01:00
feat: introduce feed management for individual and professor modules across frontend and backend services.
This commit is contained in:
@@ -27,6 +27,9 @@ type BaseModel struct {
|
||||
type Feed struct {
|
||||
Modules string `db:"modules" json:"modules"`
|
||||
Retrieved JSONTime `db:"retrieved" json:"retrieved"`
|
||||
Deleted bool `db:"deleted" json:"deleted"`
|
||||
Type string `db:"type" json:"type"` // "prof" or "student"
|
||||
User string `db:"user" json:"user"` // Relation to users table
|
||||
BaseModel
|
||||
}
|
||||
|
||||
|
||||
@@ -62,6 +62,9 @@ type FeedRecord struct {
|
||||
Modules []FeedModule `db:"modules" json:"modules"`
|
||||
Retrieved JSONTime `db:"retrieved" json:"retrieved"`
|
||||
Deleted bool `db:"deleted" json:"deleted"`
|
||||
Type string `db:"type" json:"type"` // "prof" or "student"
|
||||
User string `db:"user" json:"user"` // User ID relation
|
||||
UserEmail string `db:"user_email" json:"userEmail"` // User Email for filtering
|
||||
BaseModel
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user