106 lines
2.9 KiB
Go
106 lines
2.9 KiB
Go
|
package svc
|
||
|
|
||
|
import (
|
||
|
"backend/internal/config"
|
||
|
mgo "backend/pkg/library/mongo"
|
||
|
cfg "backend/pkg/member/domain/config"
|
||
|
"backend/pkg/member/domain/usecase"
|
||
|
"backend/pkg/member/repository"
|
||
|
uc "backend/pkg/member/usecase"
|
||
|
"context"
|
||
|
"github.com/zeromicro/go-zero/core/stores/cache"
|
||
|
"github.com/zeromicro/go-zero/core/stores/mon"
|
||
|
"github.com/zeromicro/go-zero/core/stores/redis"
|
||
|
)
|
||
|
|
||
|
func NewAccountUC(c *config.Config, rds *redis.Redis) usecase.AccountUseCase {
|
||
|
// 準備Mongo Config
|
||
|
conf := &mgo.Conf{
|
||
|
Schema: c.Mongo.Schema,
|
||
|
Host: c.Mongo.Host,
|
||
|
Database: c.Mongo.Database,
|
||
|
MaxStaleness: c.Mongo.MaxStaleness,
|
||
|
MaxPoolSize: c.Mongo.MaxPoolSize,
|
||
|
MinPoolSize: c.Mongo.MinPoolSize,
|
||
|
MaxConnIdleTime: c.Mongo.MaxConnIdleTime,
|
||
|
Compressors: c.Mongo.Compressors,
|
||
|
EnableStandardReadWriteSplitMode: c.Mongo.EnableStandardReadWriteSplitMode,
|
||
|
ConnectTimeoutMs: c.Mongo.ConnectTimeoutMs,
|
||
|
}
|
||
|
if c.Mongo.User != "" {
|
||
|
conf.User = c.Mongo.User
|
||
|
conf.Password = c.Mongo.Password
|
||
|
}
|
||
|
|
||
|
// 快取選項
|
||
|
cacheOpts := []cache.Option{
|
||
|
cache.WithExpiry(c.CacheExpireTime),
|
||
|
cache.WithNotFoundExpiry(c.CacheWithNotFoundExpiry),
|
||
|
}
|
||
|
dbOpts := []mon.Option{
|
||
|
mgo.SetCustomDecimalType(),
|
||
|
mgo.InitMongoOptions(*conf),
|
||
|
}
|
||
|
|
||
|
ac := repository.NewAccountRepository(repository.AccountRepositoryParam{
|
||
|
Conf: conf,
|
||
|
CacheConf: c.Cache,
|
||
|
CacheOpts: cacheOpts,
|
||
|
DBOpts: dbOpts,
|
||
|
})
|
||
|
|
||
|
u := repository.NewUserRepository(repository.UserRepositoryParam{
|
||
|
Conf: conf,
|
||
|
CacheConf: c.Cache,
|
||
|
CacheOpts: cacheOpts,
|
||
|
DBOpts: dbOpts,
|
||
|
})
|
||
|
guid := repository.NewAutoIDRepository(repository.AutoIDRepositoryParam{
|
||
|
Conf: conf,
|
||
|
DBOpts: dbOpts,
|
||
|
})
|
||
|
auid := repository.NewAccountUIDRepository(repository.AccountUIDRepositoryParam{
|
||
|
Conf: conf,
|
||
|
CacheConf: c.Cache,
|
||
|
CacheOpts: cacheOpts,
|
||
|
DBOpts: dbOpts,
|
||
|
})
|
||
|
|
||
|
_, _ = ac.Index20241226001UP(context.Background())
|
||
|
_, _ = u.Index20241226001UP(context.Background())
|
||
|
_, _ = guid.Index20241226001UP(context.Background())
|
||
|
_, _ = auid.Index20241226001UP(context.Background())
|
||
|
|
||
|
return uc.MustMemberUseCase(uc.MemberUseCaseParam{
|
||
|
Account: ac,
|
||
|
User: u,
|
||
|
AccountUID: auid,
|
||
|
VerifyCodeModel: repository.NewVerifyCodeRepository(rds),
|
||
|
GenerateUID: guid,
|
||
|
Config: prepareCfg(c),
|
||
|
})
|
||
|
}
|
||
|
|
||
|
func prepareCfg(c *config.Config) cfg.Config {
|
||
|
return cfg.Config{
|
||
|
Bcrypt: struct{ Cost int }{Cost: c.Bcrypt.Cost},
|
||
|
GoogleAuth: struct {
|
||
|
ClientID string
|
||
|
AuthURL string
|
||
|
}{
|
||
|
ClientID: c.GoogleAuth.ClientID,
|
||
|
AuthURL: c.GoogleAuth.AuthURL,
|
||
|
},
|
||
|
|
||
|
LineAuth: struct {
|
||
|
ClientID string
|
||
|
ClientSecret string
|
||
|
RedirectURI string
|
||
|
}{
|
||
|
ClientID: c.LineAuth.ClientID,
|
||
|
ClientSecret: c.LineAuth.ClientSecret,
|
||
|
RedirectURI: c.LineAuth.RedirectURI,
|
||
|
},
|
||
|
}
|
||
|
}
|