upp/module.go
2025-01-02 22:44:20 +08:00

103 lines
1.7 KiB
Go

package upp
import (
"context"
"crypto/tls"
"log"
"github.com/loveuer/upp/pkg/api"
"github.com/loveuer/upp/pkg/cache"
"github.com/loveuer/upp/pkg/db"
"github.com/loveuer/upp/pkg/es"
"github.com/loveuer/upp/pkg/interfaces"
)
type module func(u *upp)
func InitDB(uri string, models ...any) module {
db, err := db.New(uri)
if err != nil {
log.Panic(err.Error())
}
if err = db.AutoMigrate(models...); err != nil {
log.Panic(err.Error())
}
return func(u *upp) {
u.db = db
}
}
func InitCache(uri string) module {
cache, err := cache.New(uri)
if err != nil {
log.Panic(err.Error())
}
return func(u *upp) {
u.cache = cache
}
}
func InitES(uri string) module {
client, err := es.New(context.TODO(), uri)
if err != nil {
log.Panic(err.Error())
}
return func(u *upp) {
u.es = client
}
}
type ApiConfig struct {
Address string
TLSConfig *tls.Config
}
func InitApi(api *api.App, cfgs ...ApiConfig) module {
cfg := ApiConfig{}
if len(cfgs) > 0 {
cfg = cfgs[0]
}
if cfg.Address == "" {
cfg.Address = "localhost:8080"
}
return func(u *upp) {
api.Upp = u
u.api = &uppApi{
engine: api,
config: cfg,
}
}
}
func InitTaskChan(ch <-chan func(upp interfaces.Upp) error) module {
return func(u *upp) {
if u.taskCh == nil {
u.taskCh = make([]<-chan func(u interfaces.Upp) error, 0)
}
u.taskCh = append(u.taskCh, ch)
}
}
// sync functions
// 添加 同步执行函数
func InitFn(fns ...func(interfaces.Upp)) module {
return func(u *upp) {
u.initFns._sync = append(u.initFns._sync, fns...)
}
}
// async functions
// 添加 异步执行函数
func InitAsyncFn(fns ...func(interfaces.Upp)) module {
return func(u *upp) {
u.initFns._async = append(u.initFns._async, fns...)
}
}