package database import ( "context" "database/sql" "embed" "fmt" "quyun/v2/database/models" "go.ipao.vip/atom" "go.ipao.vip/atom/container" "go.ipao.vip/atom/contracts" "go.ipao.vip/atom/opt" "gorm.io/gorm" ) //go:embed migrations/* var MigrationFS embed.FS func Truncate(ctx context.Context, db *sql.DB, tableName ...string) error { for _, name := range tableName { sql := fmt.Sprintf("TRUNCATE TABLE %s RESTART IDENTITY", name) if _, err := db.ExecContext(ctx, sql); err != nil { return fmt.Errorf("truncate table %s: %w", name, err) } } return nil } func WrapLike(v string) string { return "%" + v + "%" } func WrapLikeLeft(v string) string { return "%" + v } func WrapLikeRight(v string) string { return "%" + v } func Provide(...opt.Option) error { if err := container.Container.Provide(func(db *gorm.DB) contracts.Initial { models.SetDefault(db) return models.Q }, atom.GroupInitial); err != nil { return fmt.Errorf("provide database initial: %w", err) } return nil } func DefaultProvider() container.ProviderContainer { return container.ProviderContainer{ Provider: Provide, Options: []opt.Option{}, } }