summaryrefslogtreecommitdiff
path: root/internal/pb/server.go
diff options
context:
space:
mode:
authorBenjamin Chausse <benjamin@chausse.xyz>2025-02-22 09:59:10 -0500
committerBenjamin Chausse <benjamin@chausse.xyz>2025-02-22 09:59:10 -0500
commitf36f77472a82d6ebfac153aed6d17f154ae239a6 (patch)
treed749ecc2ebf86a39b15ac3026d3e100d0276442b /internal/pb/server.go
parent2cb9e5fe823391c09a99424138192d0fbec727af (diff)
Good foundations
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
+}