35 lines
666 B
Go
35 lines
666 B
Go
package db
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/rs/zerolog/log"
|
|
)
|
|
|
|
type CreateUserTxParams struct {
|
|
CreateUserParams
|
|
AfterCreate func(user User) error
|
|
}
|
|
|
|
type CreateUserTxResult struct {
|
|
User User `json:"user"`
|
|
}
|
|
|
|
func (store *PostgresStore) CreateUserTx(ctx context.Context, arg CreateUserTxParams) (CreateUserTxResult, error) {
|
|
var result CreateUserTxResult
|
|
|
|
err := store.execTx(ctx, func(q *Queries) error {
|
|
var err error
|
|
|
|
result.User, err = q.CreateUser(ctx, arg.CreateUserParams)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
log.Info().Msgf("user %s created successfully", result.User.Username)
|
|
|
|
return arg.AfterCreate(result.User)
|
|
})
|
|
return result, err
|
|
}
|