niki/domain/account/delivery/grpc/server.go

76 lines
1.5 KiB
Go

package grpc
import (
"context"
"fmt"
"log"
"net"
pb "git.gocasts.ir/ebhomengo/niki/contract/goprotobuf/account"
"git.gocasts.ir/ebhomengo/niki/domain/account/service"
"git.gocasts.ir/ebhomengo/niki/pkg/grpc"
)
type Config struct {
Port int `koanf:"port"`
Network string `koanf:"network"`
}
type Server struct {
server grpc.RPCServer
config Config
svcAccount service.Service
pb.UnimplementedAccountServiceServer
}
func New(server grpc.RPCServer, cfg Config) Server {
return Server{
server: server,
config: cfg,
}
}
func (s Server) SendOtp(ctx context.Context, req *pb.SendOtpRequest) (*pb.SendOtpResponse, error) {
err := s.svcAccount.SendOTP(ctx, req.PhoneNumber)
if err != nil {
return nil, err
}
return &pb.SendOtpResponse{}, nil
}
func (s Server) LoginOrRegister(ctx context.Context, req *pb.LoginOrRegisterRequest) (*pb.LoginOrRegisterResponse, error) {
res := &pb.LoginOrRegisterResponse{}
driver, err := s.svcAccount.LoginOrRegisterDriver(ctx, req.PhoneNumber, req.VerifyCode)
if err != nil {
return nil, err
}
id := uint64(driver.ID)
res.Id = id
res.PhoneNumber = driver.PhoneNumber
return res, nil
}
func (s Server) Start() error {
listener, err := net.Listen(s.config.Network, fmt.Sprintf(":%d", s.config.Port))
if err != nil {
return err
}
accountSvcServer := Server{}
pb.RegisterAccountServiceServer(s.server.Server, &accountSvcServer)
if err := s.server.Server.Serve(listener); err != nil {
log.Fatalf("failed to serve: %v", err)
}
return nil
}