Add webhook logging, pagination, middleware, migrations, and prod hardening
- Webhook event logging repo and subscription webhook idempotency - Pagination helper (echohelpers) with cursor/offset support - Request ID and structured logging middleware - Push client improvements (FCM HTTP v1, better error handling) - Task model version column, business constraint migrations, targeted indexes - Expanded categorization chain tests - Email service and config hardening - CI workflow updates, .gitignore additions, .env.example updates Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -13,22 +13,38 @@ import (
|
||||
"github.com/treytartt/casera-api/internal/models"
|
||||
)
|
||||
|
||||
// zerologGormWriter adapts zerolog for GORM's logger interface
|
||||
type zerologGormWriter struct{}
|
||||
|
||||
func (w zerologGormWriter) Printf(format string, args ...interface{}) {
|
||||
log.Warn().Msgf(format, args...)
|
||||
}
|
||||
|
||||
var db *gorm.DB
|
||||
|
||||
// Connect establishes a connection to the PostgreSQL database
|
||||
func Connect(cfg *config.DatabaseConfig, debug bool) (*gorm.DB, error) {
|
||||
// Configure GORM logger
|
||||
// Configure GORM logger with slow query detection
|
||||
logLevel := logger.Silent
|
||||
if debug {
|
||||
logLevel = logger.Info
|
||||
}
|
||||
|
||||
gormLogger := logger.New(
|
||||
zerologGormWriter{},
|
||||
logger.Config{
|
||||
SlowThreshold: 200 * time.Millisecond,
|
||||
LogLevel: logLevel,
|
||||
IgnoreRecordNotFoundError: true,
|
||||
},
|
||||
)
|
||||
|
||||
gormConfig := &gorm.Config{
|
||||
Logger: logger.Default.LogMode(logLevel),
|
||||
Logger: gormLogger,
|
||||
NowFunc: func() time.Time {
|
||||
return time.Now().UTC()
|
||||
},
|
||||
PrepareStmt: true, // Cache prepared statements
|
||||
PrepareStmt: true,
|
||||
}
|
||||
|
||||
// Connect to database
|
||||
|
||||
Reference in New Issue
Block a user