summaryrefslogtreecommitdiff
path: root/internal/pb/server.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/pb/server.go')
-rw-r--r--internal/pb/server.go47
1 files changed, 47 insertions, 0 deletions
diff --git a/internal/pb/server.go b/internal/pb/server.go
new file mode 100644
index 0000000..0e8ecb7
--- /dev/null
+++ b/internal/pb/server.go
@@ -0,0 +1,47 @@
+package pb
+
+import (
+ "context"
+ "errors"
+ "log/slog"
+
+ "github.com/ChausseBenjamin/rafta/internal/db"
+ "github.com/ChausseBenjamin/rafta/internal/intercept"
+ m "github.com/ChausseBenjamin/rafta/pkg/model"
+ "google.golang.org/grpc"
+)
+
+var ErrOutOfBoundsPort = errors.New("given port is out of bounds (1024-65535)")
+
+// Implements ComsServer interface
+type UserServer struct {
+ db *db.Store
+ m.UnimplementedRaftaUserServer
+}
+
+type AdminServer struct {
+ db *db.Store
+ m.UnimplementedRaftaAdminServer
+}
+
+func NewUserServer(store *db.Store) *UserServer {
+ return &UserServer{db: store}
+}
+
+func NewAdminServer(store *db.Store) *AdminServer {
+ return &AdminServer{db: store}
+}
+
+// Setup creates a new gRPC with both services
+// and starts listening on the given port
+func Setup(ctx context.Context, store *db.Store) (*grpc.Server, error) {
+ slog.DebugContext(ctx, "Configuring gRPC server")
+ server := grpc.NewServer(grpc.ChainUnaryInterceptor(
+ intercept.Tagging,
+ ))
+
+ m.RegisterRaftaUserServer(server, NewUserServer(store))
+ m.RegisterRaftaAdminServer(server, NewAdminServer(store))
+
+ return server, nil
+}