feat:#36 updated feed service with more protobuf endpoints

This commit is contained in:
Elmar Kresse
2024-06-18 23:46:23 +02:00
parent 4792b07e8c
commit acc048a80a
10 changed files with 197 additions and 69 deletions

View File

@@ -0,0 +1,33 @@
package grpc
import (
"context"
"github.com/pocketbase/pocketbase"
pb "htwkalender/common/genproto/modules"
"htwkalender/data-manager/service/db"
)
type FeedServiceHandler struct {
app *pocketbase.PocketBase
pb.UnimplementedFeedServiceServer
}
func (s *FeedServiceHandler) GetFeed(ctx context.Context, in *pb.GetFeedRequest) (*pb.GetFeedResponse, error) {
s.app.Logger().Info(
"Protobuf - GetFeed",
"uuid", in.Id,
)
// get feed from database by UUID
feed, err := db.FindFeedByToken(s.app, in.Id)
if err != nil {
return nil, err
}
// Implement your logic here to fetch feed data based on the UUID
// Example response
return &pb.GetFeedResponse{
Feed: feedToProto(feed),
}, nil
}

View File

@@ -31,3 +31,13 @@ func eventsToProto(events model.Events) []*pb.Event {
}
return protoEvents
}
func feedToProto(feed *model.Feed) *pb.Feed {
return &pb.Feed{
Id: feed.Id,
Created: feed.Created.String(),
Updated: feed.Updated.String(),
Retrieved: feed.Retrieved.String(),
Modules: feed.Modules,
}
}

View File

@@ -0,0 +1,69 @@
package grpc
import (
"context"
"github.com/pocketbase/pocketbase"
pb "htwkalender/common/genproto/modules"
"htwkalender/data-manager/service/db"
)
type ModuleServiceHandler struct {
app *pocketbase.PocketBase
pb.UnimplementedModuleServiceServer
}
func (s *ModuleServiceHandler) GetModule(ctx context.Context, in *pb.GetModuleRequest) (*pb.GetModuleResponse, error) {
s.app.Logger().Info(
"Protobuf - GetModule",
"uuid", in.Uuid,
)
// get module from database by UUID
module, err := db.FindModuleByUUID(s.app, in.Uuid)
if err != nil {
return nil, err
}
events, err := db.FindAllEventsByModule(s.app, module)
if err != nil {
return nil, err
}
//map module Events to proto struct Events
protoEvents := make([]*pb.Event, 0)
for _, event := range events {
protoEvents = append(protoEvents, eventToProto(&event))
}
//map module to proto struct
protoModule := &pb.Module{
Uuid: module.UUID,
Name: module.Name,
Prof: module.Prof,
Course: module.Course,
Semester: module.Semester,
Events: protoEvents,
}
// Implement your logic here to fetch module data based on the UUID
// Example response
return &pb.GetModuleResponse{
Module: protoModule,
}, nil
}
func (s *ModuleServiceHandler) GetEventsForModules(ctx context.Context, in *pb.GetModulesRequest) (*pb.GetEventsResponse, error) {
s.app.Logger().Info(
"Protobuf - GetEventsForModules",
"uuids", in.Uuids,
)
events, err := db.GetPlanForModules(s.app, in.Uuids)
if err != nil {
return nil, err
}
return &pb.GetEventsResponse{
Events: eventsToProto(events),
}, nil
}

View File

@@ -1,9 +1,7 @@
package grpc
import (
"context"
"github.com/pocketbase/pocketbase"
"htwkalender/data-manager/service/db"
"log"
"net"
@@ -11,78 +9,23 @@ import (
pb "htwkalender/common/genproto/modules"
)
type ModulesGrpcHandler struct {
app *pocketbase.PocketBase
pb.UnimplementedModuleServiceServer
}
func (s *ModulesGrpcHandler) GetModule(ctx context.Context, in *pb.GetModuleRequest) (*pb.GetModuleResponse, error) {
s.app.Logger().Info(
"Protobuf - GetModule",
"uuid", in.Uuid,
)
// get module from database by UUID
module, err := db.FindModuleByUUID(s.app, in.Uuid)
if err != nil {
return nil, err
}
events, err := db.FindAllEventsByModule(s.app, module)
if err != nil {
return nil, err
}
//map module Events to proto struct Events
protoEvents := make([]*pb.Event, 0)
for _, event := range events {
protoEvents = append(protoEvents, eventToProto(&event))
}
//map module to proto struct
protoModule := &pb.Module{
Uuid: module.UUID,
Name: module.Name,
Prof: module.Prof,
Course: module.Course,
Semester: module.Semester,
Events: protoEvents,
}
// Implement your logic here to fetch module data based on the UUID
// Example response
return &pb.GetModuleResponse{
Module: protoModule,
}, nil
}
func StartGRPCServer(app *pocketbase.PocketBase) {
lis, err := net.Listen("tcp", ":50051")
if err != nil {
log.Fatalf("failed to listen: %v", err)
}
s := grpc.NewServer()
pb.RegisterModuleServiceServer(s, &ModulesGrpcHandler{
pb.RegisterModuleServiceServer(s, &ModuleServiceHandler{
app: app,
})
pb.RegisterFeedServiceServer(s, &FeedServiceHandler{
app: app,
})
log.Printf("server listening at %v", lis.Addr())
if err := s.Serve(lis); err != nil {
log.Fatalf("failed to serve: %v", err)
}
}
func (s *ModulesGrpcHandler) GetEventsForModules(ctx context.Context, in *pb.GetModulesRequest) (*pb.GetEventsResponse, error) {
s.app.Logger().Info(
"Protobuf - GetEventsForModules",
"uuids", in.Uuids,
)
events, err := db.GetPlanForModules(s.app, in.Uuids)
if err != nil {
return nil, err
}
return &pb.GetEventsResponse{
Events: eventsToProto(events),
}, nil
}