optz.
This commit is contained in:
@@ -2,7 +2,6 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
@@ -12,90 +11,18 @@ import (
|
|||||||
"bsm/full/all/internal/config"
|
"bsm/full/all/internal/config"
|
||||||
"bsm/full/all/internal/impl"
|
"bsm/full/all/internal/impl"
|
||||||
allserver "bsm/full/all/internal/server"
|
allserver "bsm/full/all/internal/server"
|
||||||
ads "bsm/full/module/base/ads/service"
|
"bsm/full/all/internal/service"
|
||||||
cloud "bsm/full/module/base/cloud/service"
|
|
||||||
cms "bsm/full/module/base/cms/service"
|
|
||||||
feedback "bsm/full/module/base/feedback/service"
|
|
||||||
fts "bsm/full/module/base/fts/service"
|
|
||||||
initial "bsm/full/module/base/initial/service"
|
|
||||||
logs "bsm/full/module/base/logs/service"
|
|
||||||
mgt "bsm/full/module/base/mgt/service"
|
|
||||||
passport "bsm/full/module/base/passport/service"
|
|
||||||
sender "bsm/full/module/base/sender/service"
|
|
||||||
address "bsm/full/module/ec/address/service"
|
|
||||||
mall "bsm/full/module/ec/mall/service"
|
|
||||||
market "bsm/full/module/ec/market/service"
|
|
||||||
order "bsm/full/module/ec/order/service"
|
|
||||||
wallet "bsm/full/module/finance/wallet/service"
|
|
||||||
"github.com/gin-contrib/sessions"
|
|
||||||
"github.com/gin-contrib/sessions/cookie"
|
|
||||||
"google.golang.org/grpc"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
config.New()
|
config.New()
|
||||||
impl.NewImpl()
|
impl.NewImpl()
|
||||||
|
|
||||||
srv := allserver.New()
|
srv := allserver.New()
|
||||||
srv.HTTP.Use(sessions.Sessions("mysession", cookie.NewStore([]byte(config.Spec.SecretKey+"-session"))))
|
if err := service.Expose(srv); err != nil {
|
||||||
|
panic(err)
|
||||||
exposeGRPC := func(name string, expose func(*grpc.Server) error) {
|
|
||||||
if !config.Enabled(name) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if err := expose(srv.GRPC); err != nil {
|
|
||||||
panic(fmt.Errorf("expose %s: %w", name, err))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
exposeGRPC("ads", func(g *grpc.Server) error {
|
|
||||||
return ads.Expose(ads.ExposeOptions{GRPC: g, Gateway: srv.Gateway})
|
|
||||||
})
|
|
||||||
exposeGRPC("cloud", func(g *grpc.Server) error {
|
|
||||||
return cloud.Expose(cloud.ExposeOptions{GRPC: g, Gateway: srv.Gateway})
|
|
||||||
})
|
|
||||||
exposeGRPC("cms", func(g *grpc.Server) error {
|
|
||||||
return cms.Expose(cms.ExposeOptions{GRPC: g, Gateway: srv.Gateway})
|
|
||||||
})
|
|
||||||
exposeGRPC("feedback", func(g *grpc.Server) error {
|
|
||||||
return feedback.Expose(feedback.ExposeOptions{GRPC: g, Gateway: srv.Gateway})
|
|
||||||
})
|
|
||||||
exposeGRPC("initial", func(g *grpc.Server) error {
|
|
||||||
return initial.Expose(initial.ExposeOptions{GRPC: g, Gateway: srv.Gateway})
|
|
||||||
})
|
|
||||||
exposeGRPC("passport", func(g *grpc.Server) error {
|
|
||||||
return passport.Expose(passport.ExposeOptions{GRPC: g, Gateway: srv.Gateway})
|
|
||||||
})
|
|
||||||
exposeGRPC("sender", func(g *grpc.Server) error {
|
|
||||||
return sender.Expose(sender.ExposeOptions{GRPC: g, Gateway: srv.Gateway})
|
|
||||||
})
|
|
||||||
exposeGRPC("address", func(g *grpc.Server) error {
|
|
||||||
return address.Expose(address.ExposeOptions{GRPC: g, Gateway: srv.Gateway})
|
|
||||||
})
|
|
||||||
exposeGRPC("mall", func(g *grpc.Server) error {
|
|
||||||
return mall.Expose(mall.ExposeOptions{GRPC: g, Gateway: srv.Gateway})
|
|
||||||
})
|
|
||||||
exposeGRPC("market", func(g *grpc.Server) error {
|
|
||||||
return market.Expose(market.ExposeOptions{GRPC: g, Gateway: srv.Gateway})
|
|
||||||
})
|
|
||||||
exposeGRPC("order", func(g *grpc.Server) error {
|
|
||||||
return order.Expose(order.ExposeOptions{GRPC: g, Gateway: srv.Gateway})
|
|
||||||
})
|
|
||||||
exposeGRPC("wallet", func(g *grpc.Server) error {
|
|
||||||
return wallet.Expose(wallet.ExposeOptions{GRPC: g, Gateway: srv.Gateway})
|
|
||||||
})
|
|
||||||
|
|
||||||
exposeHTTP := func(name string, expose func() error) {
|
|
||||||
if !config.Enabled(name) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if err := expose(); err != nil {
|
|
||||||
panic(fmt.Errorf("expose %s: %w", name, err))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
exposeHTTP("fts", func() error { return fts.Expose(srv.HTTP) })
|
|
||||||
exposeHTTP("logs", func() error { return logs.Expose(srv.HTTP) })
|
|
||||||
exposeHTTP("mgt", func() error { return mgt.Expose(srv.HTTP) })
|
|
||||||
|
|
||||||
stop := make(chan os.Signal, 1)
|
stop := make(chan os.Signal, 1)
|
||||||
signal.Notify(stop, syscall.SIGINT, syscall.SIGTERM)
|
signal.Notify(stop, syscall.SIGINT, syscall.SIGTERM)
|
||||||
go func() {
|
go func() {
|
||||||
@@ -104,6 +31,7 @@ func main() {
|
|||||||
defer cancel()
|
defer cancel()
|
||||||
_ = srv.Stop(ctx)
|
_ = srv.Stop(ctx)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
if err := srv.Start(config.Spec.Addr); err != nil && err != http.ErrServerClosed {
|
if err := srv.Start(config.Spec.Addr); err != nil && err != http.ErrServerClosed {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,54 +10,103 @@ Databases:
|
|||||||
Cache: redis://null:CHANGE_ME@127.0.0.1:6379/
|
Cache: redis://null:CHANGE_ME@127.0.0.1:6379/
|
||||||
SecretKey: CHANGE_ME
|
SecretKey: CHANGE_ME
|
||||||
|
|
||||||
# The shared listener serves gRPC over HTTP/2 and HTTP/Gateway routes over
|
# Enabled services. Use "all" to enable every registered service.
|
||||||
# HTTP/1.1 or h2c. Per-service values override the shared settings above.
|
|
||||||
Services:
|
Services:
|
||||||
ads:
|
- ads
|
||||||
Enable: true
|
- cloud
|
||||||
cloud:
|
- cms
|
||||||
Enable: true
|
- feedback
|
||||||
cms:
|
- fts
|
||||||
Enable: true
|
- initial
|
||||||
feedback:
|
- logs
|
||||||
Enable: true
|
- mgt
|
||||||
fts:
|
- passport
|
||||||
Enable: true
|
- sender
|
||||||
initial:
|
- address
|
||||||
Enable: true
|
- mall
|
||||||
logs:
|
- market
|
||||||
Enable: true
|
- order
|
||||||
mgt:
|
- wallet
|
||||||
Enable: true
|
|
||||||
passport:
|
# Service-specific configuration is flat at the document root. Shared
|
||||||
Enable: true
|
# database, Redis, RPC, APM and Etcd settings above are assigned automatically.
|
||||||
Token:
|
Fts:
|
||||||
Prefix: /token/
|
MinioOss:
|
||||||
Expire: 86400
|
Site: http://127.0.0.1:9000
|
||||||
Kyc:
|
Endpoint: 127.0.0.1:9000
|
||||||
Provider: jumio
|
AccessKeyId: CHANGE_ME
|
||||||
BaseUrl: CHANGE_ME
|
AccessKeySecret: CHANGE_ME
|
||||||
ApiSecret: CHANGE_ME
|
UseSSL: false
|
||||||
ApiToken: CHANGE_ME
|
Local:
|
||||||
ApiArgs: CHANGE_ME
|
Site: http://127.0.0.1:12000/files
|
||||||
WeChatConf:
|
UploadDir: ./uploader/
|
||||||
AppID: CHANGE_ME
|
FtsConfig:
|
||||||
AppSecret: CHANGE_ME
|
InputKey: file
|
||||||
sender:
|
MaxSize: 5368709120
|
||||||
Enable: true
|
Allows: [.doc, .docx, .txt, .png, .jpg, .jpeg, .gif, .pdf, .xls, .xlsx, .ppt, .pptx, .mp4, .avi, .mkv, .webp, .mov, .wmv, .mp3, .wav]
|
||||||
address:
|
|
||||||
Enable: true
|
Mgt:
|
||||||
mall:
|
InitRootUser: true
|
||||||
Enable: true
|
SecretKey: CHANGE_ME
|
||||||
market:
|
|
||||||
Enable: true
|
Passport:
|
||||||
order:
|
Token:
|
||||||
Enable: true
|
Prefix: /token/
|
||||||
wallet:
|
Expire: 86400
|
||||||
Enable: true
|
Kyc:
|
||||||
Wallet:
|
Provider: jumio
|
||||||
Name: default
|
BaseUrl: CHANGE_ME
|
||||||
URL: CHANGE_ME
|
ApiSecret: CHANGE_ME
|
||||||
AlipyIsOpen: false
|
ApiToken: CHANGE_ME
|
||||||
WalletIsOpen: false
|
ApiArgs: CHANGE_ME
|
||||||
WechatpayIsOpen: false
|
WeChatConf:
|
||||||
|
AppID: CHANGE_ME
|
||||||
|
AppSecret: CHANGE_ME
|
||||||
|
|
||||||
|
Sender:
|
||||||
|
SMTP:
|
||||||
|
default:
|
||||||
|
Endpoint: smtp.example.com
|
||||||
|
Port: 465
|
||||||
|
Username: CHANGE_ME
|
||||||
|
Password: CHANGE_ME
|
||||||
|
FromAddress: no-reply@example.com
|
||||||
|
FromName: BSM
|
||||||
|
SMS:
|
||||||
|
default:
|
||||||
|
Endpoint: CHANGE_ME
|
||||||
|
AccessKeyId: CHANGE_ME
|
||||||
|
AccessKeySecret: CHANGE_ME
|
||||||
|
Region: CHANGE_ME
|
||||||
|
Code:
|
||||||
|
Length: 6
|
||||||
|
Expire: 300
|
||||||
|
MaxSentLimit: 5
|
||||||
|
CokeyKey: code
|
||||||
|
BlackListFilter: [127.0.0.1]
|
||||||
|
|
||||||
|
Wallet:
|
||||||
|
QrCodeSavePath: ./qrcode/
|
||||||
|
WeChat:
|
||||||
|
AppID: CHANGE_ME
|
||||||
|
AppSecret: CHANGE_ME
|
||||||
|
SerialNo: CHANGE_ME
|
||||||
|
APIV3Key: CHANGE_ME
|
||||||
|
PrivateKey: CHANGE_ME
|
||||||
|
NotifyURL: CHANGE_ME
|
||||||
|
Currency: CNY
|
||||||
|
MchID: CHANGE_ME
|
||||||
|
Alipay:
|
||||||
|
AppID: CHANGE_ME
|
||||||
|
AppSecret: CHANGE_ME
|
||||||
|
PrivateKey: CHANGE_ME
|
||||||
|
IsProd: false
|
||||||
|
NotifyURL: CHANGE_ME
|
||||||
|
ReturnURL: CHANGE_ME
|
||||||
|
QuitURL: CHANGE_ME
|
||||||
|
Wallet:
|
||||||
|
Name: default
|
||||||
|
URL: CHANGE_ME
|
||||||
|
AlipyIsOpen: false
|
||||||
|
WalletIsOpen: false
|
||||||
|
WechatpayIsOpen: false
|
||||||
|
|||||||
@@ -5,18 +5,29 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
ftsService "bsm/full/module/base/fts/service"
|
||||||
|
mgtService "bsm/full/module/base/mgt/service"
|
||||||
|
passportService "bsm/full/module/base/passport/service"
|
||||||
|
senderService "bsm/full/module/base/sender/service"
|
||||||
|
walletService "bsm/full/module/finance/wallet/service"
|
||||||
"git.apinb.com/bsm-sdk/core/conf"
|
"git.apinb.com/bsm-sdk/core/conf"
|
||||||
)
|
)
|
||||||
|
|
||||||
const ServiceKey = "all"
|
const ServiceKey = "all"
|
||||||
|
|
||||||
type ServiceConfig map[string]any
|
|
||||||
|
|
||||||
type SrvConfig struct {
|
type SrvConfig struct {
|
||||||
conf.Base `yaml:",inline"`
|
conf.Base `yaml:",inline"`
|
||||||
Databases *conf.DBConf `yaml:"Databases"`
|
Databases *conf.DBConf `yaml:"Databases"`
|
||||||
Etcd *conf.EtcdConf `yaml:"Etcd"`
|
MicroService *conf.MicroServiceConf `yaml:"MicroService"`
|
||||||
Services map[string]ServiceConfig `yaml:"Services"`
|
Rpc map[string]conf.RpcConf `yaml:"Rpc"`
|
||||||
|
Apm *conf.ApmConf `yaml:"APM"`
|
||||||
|
Etcd *conf.EtcdConf `yaml:"Etcd"`
|
||||||
|
Services []string `yaml:"Services"`
|
||||||
|
Fts *ftsService.Config `yaml:"Fts"`
|
||||||
|
Mgt *mgtService.Config `yaml:"Mgt"`
|
||||||
|
Passport *passportService.Config `yaml:"Passport"`
|
||||||
|
Sender *senderService.Config `yaml:"Sender"`
|
||||||
|
Wallet *walletService.Config `yaml:"Wallet"`
|
||||||
}
|
}
|
||||||
|
|
||||||
var Spec SrvConfig
|
var Spec SrvConfig
|
||||||
@@ -27,9 +38,28 @@ func New() {
|
|||||||
Spec.BindIP = conf.CheckIP(Spec.BindIP)
|
Spec.BindIP = conf.CheckIP(Spec.BindIP)
|
||||||
Spec.Addr = net.JoinHostPort(Spec.BindIP, Spec.Port)
|
Spec.Addr = net.JoinHostPort(Spec.BindIP, Spec.Port)
|
||||||
conf.NotNil(Spec.Service, Spec.Cache)
|
conf.NotNil(Spec.Service, Spec.Cache)
|
||||||
|
assignSharedConfig()
|
||||||
conf.PrintInfo(Spec.Addr)
|
conf.PrintInfo(Spec.Addr)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func assignSharedConfig() {
|
||||||
|
if Spec.Fts != nil {
|
||||||
|
Spec.Fts.Base, Spec.Fts.Databases, Spec.Fts.Rpc, Spec.Fts.Apm, Spec.Fts.Etcd = Spec.Base, Spec.Databases, Spec.Rpc, Spec.Apm, Spec.Etcd
|
||||||
|
}
|
||||||
|
if Spec.Mgt != nil {
|
||||||
|
Spec.Mgt.Base, Spec.Mgt.Databases, Spec.Mgt.Rpc, Spec.Mgt.Apm, Spec.Mgt.Etcd = Spec.Base, Spec.Databases, Spec.Rpc, Spec.Apm, Spec.Etcd
|
||||||
|
}
|
||||||
|
if Spec.Passport != nil {
|
||||||
|
Spec.Passport.Base, Spec.Passport.Databases, Spec.Passport.MicroService, Spec.Passport.Rpc, Spec.Passport.Apm, Spec.Passport.Etcd = Spec.Base, Spec.Databases, Spec.MicroService, Spec.Rpc, Spec.Apm, Spec.Etcd
|
||||||
|
}
|
||||||
|
if Spec.Sender != nil {
|
||||||
|
Spec.Sender.Base, Spec.Sender.Databases, Spec.Sender.MicroService, Spec.Sender.Rpc, Spec.Sender.Apm, Spec.Sender.Etcd = Spec.Base, Spec.Databases, Spec.MicroService, Spec.Rpc, Spec.Apm, Spec.Etcd
|
||||||
|
}
|
||||||
|
if Spec.Wallet != nil {
|
||||||
|
Spec.Wallet.Base, Spec.Wallet.Databases, Spec.Wallet.MicroService, Spec.Wallet.Rpc, Spec.Wallet.Apm, Spec.Wallet.Etcd = Spec.Base, Spec.Databases, Spec.MicroService, Spec.Rpc, Spec.Apm, Spec.Etcd
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func Enabled(name string) bool {
|
func Enabled(name string) bool {
|
||||||
if raw := strings.TrimSpace(os.Getenv("BSM_SERVICES")); raw != "" {
|
if raw := strings.TrimSpace(os.Getenv("BSM_SERVICES")); raw != "" {
|
||||||
for _, selected := range strings.Split(raw, ",") {
|
for _, selected := range strings.Split(raw, ",") {
|
||||||
@@ -39,10 +69,10 @@ func Enabled(name string) bool {
|
|||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
service, ok := Spec.Services[name]
|
for _, service := range Spec.Services {
|
||||||
if !ok {
|
if strings.EqualFold(strings.TrimSpace(service), name) || strings.EqualFold(strings.TrimSpace(service), "all") {
|
||||||
return false
|
return true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
enabled, ok := service["Enable"].(bool)
|
return false
|
||||||
return !ok || enabled
|
|
||||||
}
|
}
|
||||||
|
|||||||
26
all/internal/config/config_test.go
Normal file
26
all/internal/config/config_test.go
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
package config
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"go.yaml.in/yaml/v3"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestAllDevConfig(t *testing.T) {
|
||||||
|
data, err := os.ReadFile(filepath.Join("..", "..", "etc", "all_dev.yaml"))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
var cfg SrvConfig
|
||||||
|
if err := yaml.Unmarshal(data, &cfg); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if len(cfg.Services) == 0 {
|
||||||
|
t.Fatal("services must not be empty")
|
||||||
|
}
|
||||||
|
if cfg.Fts == nil || cfg.Mgt == nil || cfg.Passport == nil || cfg.Sender == nil || cfg.Wallet == nil {
|
||||||
|
t.Fatal("service-specific configuration is incomplete")
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,20 +2,41 @@ package impl
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bsm/full/all/internal/config"
|
"bsm/full/all/internal/config"
|
||||||
|
|
||||||
"git.apinb.com/bsm-sdk/core/cache/redis"
|
"git.apinb.com/bsm-sdk/core/cache/redis"
|
||||||
"git.apinb.com/bsm-sdk/core/with"
|
"git.apinb.com/bsm-sdk/core/with"
|
||||||
|
"github.com/patrickmn/go-cache"
|
||||||
clientv3 "go.etcd.io/etcd/client/v3"
|
clientv3 "go.etcd.io/etcd/client/v3"
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
// RedisService Redis缓存服务客户端,用于存储临时数据和缓存热点数据
|
||||||
RedisService *redis.RedisClient
|
RedisService *redis.RedisClient
|
||||||
EtcdService *clientv3.Client
|
|
||||||
DBService *gorm.DB
|
// EtcdService Etcd客户端,用于服务发现和配置管理
|
||||||
|
EtcdService *clientv3.Client
|
||||||
|
|
||||||
|
// DBService 数据库服务连接, 用于数据持久化存储
|
||||||
|
DBService *gorm.DB
|
||||||
|
|
||||||
|
// MemoryService 内存缓存服务, 用于存储频繁访问的数据,提供最快的访问速度
|
||||||
|
MemoryService *cache.Cache
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// NewImpl 初始化实现层
|
||||||
|
// 建立与各种外部服务的连接,包括内存缓存、Redis、数据库和Etcd
|
||||||
|
// 这些连接将在整个服务生命周期中使用
|
||||||
func NewImpl() {
|
func NewImpl() {
|
||||||
|
// 初始化内存缓存服务,用于存储热点数据
|
||||||
|
MemoryService = with.Memory(nil)
|
||||||
|
|
||||||
|
// 初始化Redis缓存服务,用于分布式缓存
|
||||||
RedisService = with.RedisCache(config.Spec.Cache)
|
RedisService = with.RedisCache(config.Spec.Cache)
|
||||||
|
|
||||||
|
// 初始化数据库连接,用于数据持久化
|
||||||
DBService = with.Databases(config.Spec.Databases, nil)
|
DBService = with.Databases(config.Spec.Databases, nil)
|
||||||
|
|
||||||
|
// 初始化Etcd客户端,用于服务发现和配置管理
|
||||||
EtcdService = with.Etcd(config.Spec.Etcd)
|
EtcdService = with.Etcd(config.Spec.Etcd)
|
||||||
}
|
}
|
||||||
|
|||||||
13
all/internal/service/address.go
Normal file
13
all/internal/service/address.go
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bsm/full/all/internal/server"
|
||||||
|
moduleService "bsm/full/module/ec/address/service"
|
||||||
|
)
|
||||||
|
|
||||||
|
func exposeAddress(srv *server.Server) error {
|
||||||
|
return moduleService.Expose(moduleService.ExposeOptions{
|
||||||
|
GRPC: srv.GRPC,
|
||||||
|
Gateway: srv.Gateway,
|
||||||
|
})
|
||||||
|
}
|
||||||
13
all/internal/service/ads.go
Normal file
13
all/internal/service/ads.go
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bsm/full/all/internal/server"
|
||||||
|
moduleService "bsm/full/module/base/ads/service"
|
||||||
|
)
|
||||||
|
|
||||||
|
func exposeAds(srv *server.Server) error {
|
||||||
|
return moduleService.Expose(moduleService.ExposeOptions{
|
||||||
|
GRPC: srv.GRPC,
|
||||||
|
Gateway: srv.Gateway,
|
||||||
|
})
|
||||||
|
}
|
||||||
13
all/internal/service/cloud.go
Normal file
13
all/internal/service/cloud.go
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bsm/full/all/internal/server"
|
||||||
|
moduleService "bsm/full/module/base/cloud/service"
|
||||||
|
)
|
||||||
|
|
||||||
|
func exposeCloud(srv *server.Server) error {
|
||||||
|
return moduleService.Expose(moduleService.ExposeOptions{
|
||||||
|
GRPC: srv.GRPC,
|
||||||
|
Gateway: srv.Gateway,
|
||||||
|
})
|
||||||
|
}
|
||||||
13
all/internal/service/cms.go
Normal file
13
all/internal/service/cms.go
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bsm/full/all/internal/server"
|
||||||
|
moduleService "bsm/full/module/base/cms/service"
|
||||||
|
)
|
||||||
|
|
||||||
|
func exposeCMS(srv *server.Server) error {
|
||||||
|
return moduleService.Expose(moduleService.ExposeOptions{
|
||||||
|
GRPC: srv.GRPC,
|
||||||
|
Gateway: srv.Gateway,
|
||||||
|
})
|
||||||
|
}
|
||||||
13
all/internal/service/feedback.go
Normal file
13
all/internal/service/feedback.go
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bsm/full/all/internal/server"
|
||||||
|
moduleService "bsm/full/module/base/feedback/service"
|
||||||
|
)
|
||||||
|
|
||||||
|
func exposeFeedback(srv *server.Server) error {
|
||||||
|
return moduleService.Expose(moduleService.ExposeOptions{
|
||||||
|
GRPC: srv.GRPC,
|
||||||
|
Gateway: srv.Gateway,
|
||||||
|
})
|
||||||
|
}
|
||||||
11
all/internal/service/fts.go
Normal file
11
all/internal/service/fts.go
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bsm/full/all/internal/config"
|
||||||
|
"bsm/full/all/internal/server"
|
||||||
|
moduleService "bsm/full/module/base/fts/service"
|
||||||
|
)
|
||||||
|
|
||||||
|
func exposeFTS(srv *server.Server) error {
|
||||||
|
return moduleService.Expose(srv.HTTP, config.Spec.Fts)
|
||||||
|
}
|
||||||
13
all/internal/service/initial.go
Normal file
13
all/internal/service/initial.go
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bsm/full/all/internal/server"
|
||||||
|
moduleService "bsm/full/module/base/initial/service"
|
||||||
|
)
|
||||||
|
|
||||||
|
func exposeInitial(srv *server.Server) error {
|
||||||
|
return moduleService.Expose(moduleService.ExposeOptions{
|
||||||
|
GRPC: srv.GRPC,
|
||||||
|
Gateway: srv.Gateway,
|
||||||
|
})
|
||||||
|
}
|
||||||
10
all/internal/service/logs.go
Normal file
10
all/internal/service/logs.go
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bsm/full/all/internal/server"
|
||||||
|
moduleService "bsm/full/module/base/logs/service"
|
||||||
|
)
|
||||||
|
|
||||||
|
func exposeLogs(srv *server.Server) error {
|
||||||
|
return moduleService.Expose(srv.HTTP)
|
||||||
|
}
|
||||||
13
all/internal/service/mall.go
Normal file
13
all/internal/service/mall.go
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bsm/full/all/internal/server"
|
||||||
|
moduleService "bsm/full/module/ec/mall/service"
|
||||||
|
)
|
||||||
|
|
||||||
|
func exposeMall(srv *server.Server) error {
|
||||||
|
return moduleService.Expose(moduleService.ExposeOptions{
|
||||||
|
GRPC: srv.GRPC,
|
||||||
|
Gateway: srv.Gateway,
|
||||||
|
})
|
||||||
|
}
|
||||||
13
all/internal/service/market.go
Normal file
13
all/internal/service/market.go
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bsm/full/all/internal/server"
|
||||||
|
moduleService "bsm/full/module/ec/market/service"
|
||||||
|
)
|
||||||
|
|
||||||
|
func exposeMarket(srv *server.Server) error {
|
||||||
|
return moduleService.Expose(moduleService.ExposeOptions{
|
||||||
|
GRPC: srv.GRPC,
|
||||||
|
Gateway: srv.Gateway,
|
||||||
|
})
|
||||||
|
}
|
||||||
11
all/internal/service/mgt.go
Normal file
11
all/internal/service/mgt.go
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bsm/full/all/internal/config"
|
||||||
|
"bsm/full/all/internal/server"
|
||||||
|
moduleService "bsm/full/module/base/mgt/service"
|
||||||
|
)
|
||||||
|
|
||||||
|
func exposeMgt(srv *server.Server) error {
|
||||||
|
return moduleService.Expose(srv.HTTP, config.Spec.Mgt)
|
||||||
|
}
|
||||||
13
all/internal/service/order.go
Normal file
13
all/internal/service/order.go
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bsm/full/all/internal/server"
|
||||||
|
moduleService "bsm/full/module/ec/order/service"
|
||||||
|
)
|
||||||
|
|
||||||
|
func exposeOrder(srv *server.Server) error {
|
||||||
|
return moduleService.Expose(moduleService.ExposeOptions{
|
||||||
|
GRPC: srv.GRPC,
|
||||||
|
Gateway: srv.Gateway,
|
||||||
|
})
|
||||||
|
}
|
||||||
15
all/internal/service/passport.go
Normal file
15
all/internal/service/passport.go
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bsm/full/all/internal/config"
|
||||||
|
"bsm/full/all/internal/server"
|
||||||
|
moduleService "bsm/full/module/base/passport/service"
|
||||||
|
)
|
||||||
|
|
||||||
|
func exposePassport(srv *server.Server) error {
|
||||||
|
return moduleService.Expose(moduleService.ExposeOptions{
|
||||||
|
GRPC: srv.GRPC,
|
||||||
|
Gateway: srv.Gateway,
|
||||||
|
Config: config.Spec.Passport,
|
||||||
|
})
|
||||||
|
}
|
||||||
15
all/internal/service/sender.go
Normal file
15
all/internal/service/sender.go
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bsm/full/all/internal/config"
|
||||||
|
"bsm/full/all/internal/server"
|
||||||
|
moduleService "bsm/full/module/base/sender/service"
|
||||||
|
)
|
||||||
|
|
||||||
|
func exposeSender(srv *server.Server) error {
|
||||||
|
return moduleService.Expose(moduleService.ExposeOptions{
|
||||||
|
GRPC: srv.GRPC,
|
||||||
|
Gateway: srv.Gateway,
|
||||||
|
Config: config.Spec.Sender,
|
||||||
|
})
|
||||||
|
}
|
||||||
46
all/internal/service/service.go
Normal file
46
all/internal/service/service.go
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"bsm/full/all/internal/config"
|
||||||
|
"bsm/full/all/internal/server"
|
||||||
|
"github.com/gin-contrib/sessions"
|
||||||
|
"github.com/gin-contrib/sessions/cookie"
|
||||||
|
)
|
||||||
|
|
||||||
|
type exposeFunc func(*server.Server) error
|
||||||
|
|
||||||
|
var services = []struct {
|
||||||
|
name string
|
||||||
|
expose exposeFunc
|
||||||
|
}{
|
||||||
|
{"ads", exposeAds},
|
||||||
|
{"cloud", exposeCloud},
|
||||||
|
{"cms", exposeCMS},
|
||||||
|
{"feedback", exposeFeedback},
|
||||||
|
{"fts", exposeFTS},
|
||||||
|
{"initial", exposeInitial},
|
||||||
|
{"logs", exposeLogs},
|
||||||
|
{"mgt", exposeMgt},
|
||||||
|
{"passport", exposePassport},
|
||||||
|
{"sender", exposeSender},
|
||||||
|
{"address", exposeAddress},
|
||||||
|
{"mall", exposeMall},
|
||||||
|
{"market", exposeMarket},
|
||||||
|
{"order", exposeOrder},
|
||||||
|
{"wallet", exposeWallet},
|
||||||
|
}
|
||||||
|
|
||||||
|
func Expose(srv *server.Server) error {
|
||||||
|
srv.HTTP.Use(sessions.Sessions("mysession", cookie.NewStore([]byte(config.Spec.SecretKey+"-session"))))
|
||||||
|
for _, item := range services {
|
||||||
|
if !config.Enabled(item.name) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if err := item.expose(srv); err != nil {
|
||||||
|
return fmt.Errorf("expose %s: %w", item.name, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
15
all/internal/service/wallet.go
Normal file
15
all/internal/service/wallet.go
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bsm/full/all/internal/config"
|
||||||
|
"bsm/full/all/internal/server"
|
||||||
|
moduleService "bsm/full/module/finance/wallet/service"
|
||||||
|
)
|
||||||
|
|
||||||
|
func exposeWallet(srv *server.Server) error {
|
||||||
|
return moduleService.Expose(moduleService.ExposeOptions{
|
||||||
|
GRPC: srv.GRPC,
|
||||||
|
Gateway: srv.Gateway,
|
||||||
|
Config: config.Spec.Wallet,
|
||||||
|
})
|
||||||
|
}
|
||||||
@@ -1,11 +1,17 @@
|
|||||||
package service
|
package service
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bsm/full/module/base/fts/internal/config"
|
||||||
"bsm/full/module/base/fts/internal/routers"
|
"bsm/full/module/base/fts/internal/routers"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Expose(engine *gin.Engine) error {
|
type Config = config.SrvConfig
|
||||||
|
|
||||||
|
func Expose(engine *gin.Engine, cfg *Config) error {
|
||||||
|
if cfg != nil {
|
||||||
|
config.Spec = *cfg
|
||||||
|
}
|
||||||
routers.Register("fts", engine)
|
routers.Register("fts", engine)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,17 @@
|
|||||||
package service
|
package service
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bsm/full/module/base/mgt/internal/config"
|
||||||
"bsm/full/module/base/mgt/internal/routers"
|
"bsm/full/module/base/mgt/internal/routers"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Expose(engine *gin.Engine) error {
|
type Config = config.SrvConfig
|
||||||
|
|
||||||
|
func Expose(engine *gin.Engine, cfg *Config) error {
|
||||||
|
if cfg != nil {
|
||||||
|
config.Spec = *cfg
|
||||||
|
}
|
||||||
routers.Register("mgt", engine)
|
routers.Register("mgt", engine)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package service
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
|
"bsm/full/module/base/passport/internal/config"
|
||||||
"bsm/full/module/base/passport/internal/server"
|
"bsm/full/module/base/passport/internal/server"
|
||||||
pb "bsm/full/module/base/passport/pb"
|
pb "bsm/full/module/base/passport/pb"
|
||||||
gwRuntime "github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
|
gwRuntime "github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
|
||||||
@@ -12,9 +13,15 @@ import (
|
|||||||
type ExposeOptions struct {
|
type ExposeOptions struct {
|
||||||
GRPC *grpc.Server
|
GRPC *grpc.Server
|
||||||
Gateway *gwRuntime.ServeMux
|
Gateway *gwRuntime.ServeMux
|
||||||
|
Config *Config
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Config = config.SrvConfig
|
||||||
|
|
||||||
func Expose(options ExposeOptions) error {
|
func Expose(options ExposeOptions) error {
|
||||||
|
if options.Config != nil {
|
||||||
|
config.Spec = *options.Config
|
||||||
|
}
|
||||||
server.New(options.GRPC)
|
server.New(options.GRPC)
|
||||||
|
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package service
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
|
"bsm/full/module/base/sender/internal/config"
|
||||||
"bsm/full/module/base/sender/internal/server"
|
"bsm/full/module/base/sender/internal/server"
|
||||||
pb "bsm/full/module/base/sender/pb"
|
pb "bsm/full/module/base/sender/pb"
|
||||||
gwRuntime "github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
|
gwRuntime "github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
|
||||||
@@ -12,9 +13,15 @@ import (
|
|||||||
type ExposeOptions struct {
|
type ExposeOptions struct {
|
||||||
GRPC *grpc.Server
|
GRPC *grpc.Server
|
||||||
Gateway *gwRuntime.ServeMux
|
Gateway *gwRuntime.ServeMux
|
||||||
|
Config *Config
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Config = config.SrvConfig
|
||||||
|
|
||||||
func Expose(options ExposeOptions) error {
|
func Expose(options ExposeOptions) error {
|
||||||
|
if options.Config != nil {
|
||||||
|
config.Spec = *options.Config
|
||||||
|
}
|
||||||
server.New(options.GRPC)
|
server.New(options.GRPC)
|
||||||
|
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package service
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
|
"bsm/full/module/finance/wallet/internal/config"
|
||||||
"bsm/full/module/finance/wallet/internal/server"
|
"bsm/full/module/finance/wallet/internal/server"
|
||||||
pb "bsm/full/module/finance/wallet/pb"
|
pb "bsm/full/module/finance/wallet/pb"
|
||||||
gwRuntime "github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
|
gwRuntime "github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
|
||||||
@@ -12,9 +13,15 @@ import (
|
|||||||
type ExposeOptions struct {
|
type ExposeOptions struct {
|
||||||
GRPC *grpc.Server
|
GRPC *grpc.Server
|
||||||
Gateway *gwRuntime.ServeMux
|
Gateway *gwRuntime.ServeMux
|
||||||
|
Config *Config
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Config = config.SrvConfig
|
||||||
|
|
||||||
func Expose(options ExposeOptions) error {
|
func Expose(options ExposeOptions) error {
|
||||||
|
if options.Config != nil {
|
||||||
|
config.Spec = *options.Config
|
||||||
|
}
|
||||||
server.New(options.GRPC)
|
server.New(options.GRPC)
|
||||||
|
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
|
|||||||
Reference in New Issue
Block a user