package grpcserver import ( "log/slog" "net" mcdslauth "git.wntrmute.dev/kyle/mcdsl/auth" mcdslgrpc "git.wntrmute.dev/kyle/mcdsl/grpcserver" pb "git.wntrmute.dev/kyle/mcns/gen/mcns/v1" "git.wntrmute.dev/kyle/mcns/internal/db" ) // Deps holds the dependencies injected into the gRPC server. type Deps struct { DB *db.DB Authenticator *mcdslauth.Authenticator } // Server wraps a mcdsl grpcserver.Server with MCNS-specific services. type Server struct { srv *mcdslgrpc.Server } // New creates a configured gRPC server with MCNS services registered. func New(certFile, keyFile string, deps Deps, logger *slog.Logger) (*Server, error) { srv, err := mcdslgrpc.New(certFile, keyFile, deps.Authenticator, methodMap(), logger, nil) if err != nil { return nil, err } s := &Server{srv: srv} pb.RegisterAdminServiceServer(srv.GRPCServer, &adminService{db: deps.DB}) pb.RegisterAuthServiceServer(srv.GRPCServer, &authService{auth: deps.Authenticator}) pb.RegisterZoneServiceServer(srv.GRPCServer, &zoneService{db: deps.DB, logger: logger}) pb.RegisterRecordServiceServer(srv.GRPCServer, &recordService{db: deps.DB, logger: logger}) return s, nil } // Serve starts the gRPC server on the given listener. func (s *Server) Serve(lis net.Listener) error { return s.srv.GRPCServer.Serve(lis) } // GracefulStop gracefully stops the gRPC server. func (s *Server) GracefulStop() { s.srv.Stop() }