Files
api_tmpl/internal/worker/processor.go
T
FernandoJVideira c4ee0ce4dc chore: rename simple_bank to api_tmpl and clean up for template use
Rename the module, proto service, and all identifiers from simple_bank/
SimpleBank to api_tmpl/ApiTmpl, and regenerate the gRPC/gateway/swagger/
mock code accordingly.

- Scrub real secrets (SMTP password, auth token secret) from api.env/
  api_test.env, untrack them, and add api.env.example/api_test.env.example
- Remove committed build artifacts (tmp/main, tmp/build-errors.log,
  dbml-error.log) and gitignore them going forward
- Fix Dockerfile paths (build target, migrations copy) that referenced a
  stale project layout
- Rewrite README to match the actual cmd/ + internal/ structure and add a
  "using this as a template" section
2026-08-25 03:02:37 +01:00

68 lines
1.5 KiB
Go

package worker
import (
"context"
"github.com/FernandoJVideira/api_tmpl/internal/config"
db "github.com/FernandoJVideira/api_tmpl/internal/db/sqlc"
"github.com/FernandoJVideira/api_tmpl/internal/mailer"
"github.com/hibiken/asynq"
"github.com/redis/go-redis/v9"
"github.com/rs/zerolog/log"
)
const (
CriticalQueue = "critical"
DefaultQueue = "default"
)
type TaskProcessor interface {
Start() error
Shutdown()
ProcessTaskSendVerifyEmail(ctx context.Context, task *asynq.Task) error
}
type RedisTaskProcessor struct {
server *asynq.Server
store db.Store
mailer mailer.MailSender
config config.Config
}
func NewRedisTaskProcessor(redisOpt asynq.RedisClientOpt, store db.Store, mailer mailer.MailSender, config config.Config) TaskProcessor {
logger := NewLogger()
redis.SetLogger(logger)
server := asynq.NewServer(
redisOpt,
asynq.Config{
Queues: map[string]int{
CriticalQueue: 10,
DefaultQueue: 5,
},
ErrorHandler: asynq.ErrorHandlerFunc(func(ctx context.Context, task *asynq.Task, err error) {
log.Error().Err(err).Str("type", task.Type()).Bytes("payload", task.Payload()).Msg("process task failed")
}),
Logger: NewLogger(),
},
)
return &RedisTaskProcessor{
server: server,
store: store,
mailer: mailer,
config: config,
}
}
func (r *RedisTaskProcessor) Start() error {
mux := asynq.NewServeMux()
mux.HandleFunc(TaskSendVerifyEmail, r.ProcessTaskSendVerifyEmail)
return r.server.Start(mux)
}
func (r *RedisTaskProcessor) Shutdown() {
r.server.Shutdown()
}