60 lines
1.2 KiB
Go
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
|
|
}
|