df/bff/gapi/server.go
2023-10-19 00:28:53 +02:00

60 lines
1.2 KiB
Go

package gapi
import (
"fmt"
"log/slog"
"os"
db "github.com/itsscb/df/bff/db/sqlc"
"github.com/itsscb/df/bff/mail"
"github.com/itsscb/df/bff/pb"
"github.com/itsscb/df/bff/token"
"github.com/itsscb/df/bff/util"
)
// Server serves gRPC requests for df service
type Server struct {
pb.UnimplementedDfServer
store db.Store
config util.Config
tokenMaker token.Maker
mailSender mail.EmailSender
}
func NewServer(config util.Config, store db.Store) (*Server, error) {
tokenMaker, err := token.NewPasetoMaker(config.TokenPrivateKeyHex)
if err != nil {
return nil, fmt.Errorf("cannot create token maker: %w", err)
}
mailSender := mail.NewGmailSender("df", config.SMTPMail, config.SMTPPassword)
server := &Server{
store: store,
config: config,
tokenMaker: tokenMaker,
mailSender: mailSender,
}
logLevel := slog.LevelError
var logSource bool
if config.Environment == "development" {
logLevel = slog.LevelDebug
logSource = true
}
opts := slog.HandlerOptions{
Level: logLevel,
AddSource: logSource,
}
logger := slog.New(slog.NewTextHandler(os.Stdout, &opts))
if config.LogOutput == "json" {
logger = slog.New(slog.NewJSONHandler(os.Stdout, &opts))
}
slog.SetDefault(logger)
return server, nil
}