first commit
This commit is contained in:
79
server/server.go
Normal file
79
server/server.go
Normal file
@@ -0,0 +1,79 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log"
|
||||
mathrand "math/rand"
|
||||
"net"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"git.fossy.my.id/bagas/tunnel-please-controller/db/sqlc/repository"
|
||||
identifier "git.fossy.my.id/bagas/tunnel-please-grpc/gen"
|
||||
"github.com/google/uuid"
|
||||
"google.golang.org/grpc"
|
||||
"google.golang.org/grpc/reflection"
|
||||
"google.golang.org/protobuf/types/known/emptypb"
|
||||
)
|
||||
|
||||
type Server struct {
|
||||
Database *repository.Queries
|
||||
identifier.UnimplementedIdentityServer
|
||||
}
|
||||
|
||||
func (s *Server) Get(ctx context.Context, request *identifier.IdentifierRequest) (*identifier.IdentifierResponse, error) {
|
||||
parse, err := uuid.Parse(request.GetId())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
data, err := s.Database.GetIdentifierById(ctx, parse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &identifier.IdentifierResponse{
|
||||
Id: data.ID.String(),
|
||||
Slug: data.Slug,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *Server) Create(ctx context.Context, request *emptypb.Empty) (*identifier.IdentifierResponse, error) {
|
||||
createIdentifier, err := s.Database.CreateIdentifier(ctx, GenerateRandomString(32))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &identifier.IdentifierResponse{
|
||||
Id: createIdentifier.ID.String(),
|
||||
Slug: createIdentifier.Slug,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func GenerateRandomString(length int) string {
|
||||
const charset = "abcdefghijklmnopqrstuvwxyz"
|
||||
seededRand := mathrand.New(mathrand.NewSource(time.Now().UnixNano() + int64(mathrand.Intn(9999))))
|
||||
var result strings.Builder
|
||||
for i := 0; i < length; i++ {
|
||||
randomIndex := seededRand.Intn(len(charset))
|
||||
result.WriteString(string(charset[randomIndex]))
|
||||
}
|
||||
return result.String()
|
||||
}
|
||||
|
||||
func New(database *repository.Queries) *Server {
|
||||
return &Server{Database: database}
|
||||
}
|
||||
|
||||
func (s *Server) ListenAndServe(Addr string) error {
|
||||
listener, err := net.Listen("tcp", Addr)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
grpcServer := grpc.NewServer()
|
||||
reflection.Register(grpcServer)
|
||||
|
||||
identifier.RegisterIdentityServer(grpcServer, s)
|
||||
if err := grpcServer.Serve(listener); err != nil {
|
||||
log.Fatalf("failed to serve: %v", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user