Bascule sur l'ORM GORM
- On n'utilise plus la pattern CQRS trop lourde pour le système - Un système de models/repository "à la Symfony" est utilisé pour les requêtes
This commit is contained in:
@ -4,10 +4,7 @@ import (
|
||||
"context"
|
||||
"net/http"
|
||||
|
||||
"forge.cadoles.com/Cadoles/daddy/internal/migration"
|
||||
"gitlab.com/wpetit/goweb/cqrs"
|
||||
|
||||
"forge.cadoles.com/Cadoles/daddy/internal/database"
|
||||
"forge.cadoles.com/Cadoles/daddy/internal/orm"
|
||||
|
||||
"gitlab.com/wpetit/goweb/logger"
|
||||
|
||||
@ -84,21 +81,7 @@ func getServiceContainer(ctx context.Context, conf *config.Config) (*service.Con
|
||||
oidc.WithScopes("email", "openid"),
|
||||
))
|
||||
|
||||
ctn.Provide(database.ServiceName, database.ServiceProvider(conf.Database.DSN))
|
||||
|
||||
dbpool, err := database.From(ctn)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "could not retrieve database service")
|
||||
}
|
||||
|
||||
versionResolver := database.NewVersionResolver(dbpool)
|
||||
if err := versionResolver.Init(ctx); err != nil {
|
||||
return nil, errors.Wrap(err, "could not initialize database version resolver")
|
||||
}
|
||||
|
||||
ctn.Provide(migration.ServiceName, migration.ServiceProvider(versionResolver))
|
||||
|
||||
ctn.Provide(cqrs.ServiceName, cqrs.ServiceProvider())
|
||||
ctn.Provide(orm.ServiceName, orm.ServiceProvider("postgres", conf.Database.DSN, conf.Debug))
|
||||
|
||||
return ctn, nil
|
||||
}
|
||||
|
@ -1,37 +0,0 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"forge.cadoles.com/Cadoles/daddy/internal/command"
|
||||
"forge.cadoles.com/Cadoles/daddy/internal/query"
|
||||
"github.com/pkg/errors"
|
||||
"gitlab.com/wpetit/goweb/cqrs"
|
||||
"gitlab.com/wpetit/goweb/service"
|
||||
)
|
||||
|
||||
func initCommands(ctn *service.Container) error {
|
||||
dispatcher, err := cqrs.From(ctn)
|
||||
if err != nil {
|
||||
return errors.WithStack(err)
|
||||
}
|
||||
|
||||
dispatcher.RegisterCommand(
|
||||
cqrs.MatchCommandRequest(&command.CreateUserCommandRequest{}),
|
||||
cqrs.CommandHandlerFunc(command.HandleCreateUserCommand),
|
||||
)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func initQueries(ctn *service.Container) error {
|
||||
dispatcher, err := cqrs.From(ctn)
|
||||
if err != nil {
|
||||
return errors.WithStack(err)
|
||||
}
|
||||
|
||||
dispatcher.RegisterQuery(
|
||||
cqrs.MatchQueryRequest(&query.FindUserQueryRequest{}),
|
||||
cqrs.QueryHandlerFunc(query.HandleFindUserQuery),
|
||||
)
|
||||
|
||||
return nil
|
||||
}
|
@ -153,23 +153,6 @@ func main() {
|
||||
os.Exit(0)
|
||||
}
|
||||
|
||||
// Init commands and queries
|
||||
if err := initCommands(ctn); err != nil {
|
||||
logger.Fatal(
|
||||
ctx,
|
||||
"could not init commands",
|
||||
logger.E(err),
|
||||
)
|
||||
}
|
||||
|
||||
if err := initQueries(ctn); err != nil {
|
||||
logger.Fatal(
|
||||
ctx,
|
||||
"could not init queries",
|
||||
logger.E(err),
|
||||
)
|
||||
}
|
||||
|
||||
r := chi.NewRouter()
|
||||
|
||||
// Define base middlewares
|
||||
|
@ -3,9 +3,9 @@ package main
|
||||
import (
|
||||
"context"
|
||||
|
||||
"forge.cadoles.com/Cadoles/daddy/internal/database"
|
||||
"forge.cadoles.com/Cadoles/daddy/internal/migration"
|
||||
"github.com/jackc/pgx/v4"
|
||||
"forge.cadoles.com/Cadoles/daddy/internal/model"
|
||||
"forge.cadoles.com/Cadoles/daddy/internal/orm"
|
||||
"github.com/jinzhu/gorm"
|
||||
"github.com/pkg/errors"
|
||||
"gitlab.com/wpetit/goweb/logger"
|
||||
"gitlab.com/wpetit/goweb/service"
|
||||
@ -18,11 +18,13 @@ const (
|
||||
)
|
||||
|
||||
func applyMigration(ctx context.Context, ctn *service.Container) error {
|
||||
migr, err := migration.From(ctn)
|
||||
orm, err := orm.From(ctn)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
migr := orm.Migration()
|
||||
|
||||
// Register available migrations
|
||||
migr.Register(
|
||||
m000initialSchema(),
|
||||
@ -74,29 +76,31 @@ func applyMigration(ctx context.Context, ctn *service.Container) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func m000initialSchema() migration.Migration {
|
||||
return database.NewMigration(
|
||||
// nolint: gochecknoglobals
|
||||
var initialModels = []interface{}{
|
||||
&model.User{},
|
||||
}
|
||||
|
||||
func m000initialSchema() orm.Migration {
|
||||
return orm.NewDBMigration(
|
||||
"00_initial_schema",
|
||||
func(ctx context.Context, tx pgx.Tx) error {
|
||||
_, err := tx.Exec(ctx, `
|
||||
CREATE TABLE users (
|
||||
id SERIAL PRIMARY KEY,
|
||||
name TEXT,
|
||||
email TEXT NOT NULL,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
connected_at TIMESTAMPTZ,
|
||||
CONSTRAINT unique_email unique(email)
|
||||
);
|
||||
`)
|
||||
func(ctx context.Context, tx *gorm.DB) error {
|
||||
for _, m := range initialModels {
|
||||
if err := tx.AutoMigrate(m).Error; err != nil {
|
||||
return errors.WithStack(err)
|
||||
}
|
||||
}
|
||||
|
||||
return err
|
||||
return nil
|
||||
},
|
||||
func(ctx context.Context, tx pgx.Tx) error {
|
||||
_, err := tx.Exec(ctx, `
|
||||
DROP TABLE users;
|
||||
`)
|
||||
func(ctx context.Context, tx *gorm.DB) error {
|
||||
for _, m := range initialModels {
|
||||
if err := tx.DropTableIfExists(m).Error; err != nil {
|
||||
return errors.WithStack(err)
|
||||
}
|
||||
}
|
||||
|
||||
return err
|
||||
return nil
|
||||
},
|
||||
)
|
||||
}
|
||||
|
Reference in New Issue
Block a user