Pārlūkot izejas kodu

初始化资源完成

duyong mac 5 mēneši atpakaļ
vecāks
revīzija
3d6f2eee02

+ 7 - 1
go.mod

@@ -6,7 +6,7 @@ require (
 	github.com/gin-contrib/pprof v1.4.0
 	github.com/gin-gonic/gin v1.9.1
 	github.com/zsais/go-gin-prometheus v0.1.0
-	gogs.tyduyong.com/duyong/dy-pkg v0.1.1
+	gogs.tyduyong.com/duyong/dy-pkg v0.1.2
 	google.golang.org/grpc v1.63.2
 	gorm.io/gorm v1.25.9
 )
@@ -26,11 +26,15 @@ require (
 	github.com/go-playground/locales v0.14.1 // indirect
 	github.com/go-playground/universal-translator v0.18.1 // indirect
 	github.com/go-playground/validator/v10 v10.19.0 // indirect
+	github.com/go-sql-driver/mysql v1.7.0 // indirect
 	github.com/goccy/go-json v0.10.2 // indirect
 	github.com/google/uuid v1.6.0 // indirect
 	github.com/gosuri/uitable v0.0.4 // indirect
 	github.com/hashicorp/hcl v1.0.0 // indirect
 	github.com/inconshreveable/mousetrap v1.1.0 // indirect
+	github.com/jackc/pgpassfile v1.0.0 // indirect
+	github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect
+	github.com/jackc/pgx/v5 v5.4.3 // indirect
 	github.com/jinzhu/inflection v1.0.0 // indirect
 	github.com/jinzhu/now v1.1.5 // indirect
 	github.com/json-iterator/go v1.1.12 // indirect
@@ -77,4 +81,6 @@ require (
 	google.golang.org/protobuf v1.33.0 // indirect
 	gopkg.in/ini.v1 v1.67.0 // indirect
 	gopkg.in/yaml.v3 v3.0.1 // indirect
+	gorm.io/driver/mysql v1.5.6 // indirect
+	gorm.io/driver/postgres v1.5.7 // indirect
 )

+ 15 - 2
go.sum

@@ -58,6 +58,8 @@ github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn
 github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos=
 github.com/go-playground/validator/v10 v10.19.0 h1:ol+5Fu+cSq9JD7SoSqe04GMI92cbn0+wvQ3bZ8b/AU4=
 github.com/go-playground/validator/v10 v10.19.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM=
+github.com/go-sql-driver/mysql v1.7.0 h1:ueSltNNllEqE3qcWBTD0iQd3IpL/6U+mJxLkazJ7YPc=
+github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
 github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
 github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
 github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
@@ -75,6 +77,12 @@ github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
 github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
 github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
 github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
+github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
+github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
+github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk=
+github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM=
+github.com/jackc/pgx/v5 v5.4.3 h1:cxFyXhxlvAifxnkKKdlxv8XqUf59tDlYjnV5YYfsJJY=
+github.com/jackc/pgx/v5 v5.4.3/go.mod h1:Ig06C2Vu0t5qXC60W8sqIthScaEnFvojjj9dSljmHRA=
 github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
 github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
 github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
@@ -198,8 +206,8 @@ go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ=
 go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
 go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
 go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
-gogs.tyduyong.com/duyong/dy-pkg v0.1.1 h1:yUwovzu/iTP0jXXsql1hRNkhxdedv9CPwK7CgIBPQYE=
-gogs.tyduyong.com/duyong/dy-pkg v0.1.1/go.mod h1:aWbrgzGXIDF3R6DsWrVt4GwXLZXZdVYjuaorGOCdARA=
+gogs.tyduyong.com/duyong/dy-pkg v0.1.2 h1:BeI2acx9J2jV3k7uQeW7IgJv7ZV/R4A3QKfZYyfpoa0=
+gogs.tyduyong.com/duyong/dy-pkg v0.1.2/go.mod h1:VOHQsasMEzikpanO3jvQZYcHfq2Xw8EPuz/tvCJbt2Q=
 golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
 golang.org/x/arch v0.7.0 h1:pskyeJh/3AmoQ8CPE95vxHLqp1G1GfGNXTmcl9NEKTc=
 golang.org/x/arch v0.7.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys=
@@ -261,6 +269,11 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C
 gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gorm.io/driver/mysql v1.5.6 h1:Ld4mkIickM+EliaQZQx3uOJDJHtrd70MxAUqWqlx3Y8=
+gorm.io/driver/mysql v1.5.6/go.mod h1:sEtPWMiqiN1N1cMXoXmBbd8C6/l+TESwriotuRRpkDM=
+gorm.io/driver/postgres v1.5.7 h1:8ptbNJTDbEmhdr62uReG5BGkdQyeasu/FZHxI0IMGnM=
+gorm.io/driver/postgres v1.5.7/go.mod h1:3e019WlBaYI5o5LIdNV+LyxCMNtLOQETBXL2h4chKpA=
+gorm.io/gorm v1.25.7/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
 gorm.io/gorm v1.25.9 h1:wct0gxZIELDk8+ZqF/MVnHLkA1rvYlBWUMv2EdsK1g8=
 gorm.io/gorm v1.25.9/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
 nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50=

+ 30 - 0
internal/iam/gs/gs.go

@@ -0,0 +1,30 @@
+package gs
+
+import (
+	"gogs.tyduyong.com/duyong/dy-admin/internal/iam/config"
+	"gorm.io/gorm"
+	"sync"
+)
+
+// GlobalSource 服务依赖的外部通用资源
+type GlobalSource struct {
+	PGSqlDB *gorm.DB
+	MYSqlDB *gorm.DB
+}
+
+var (
+	GS   *GlobalSource
+	once = sync.Once{}
+)
+
+func InitGS(config *config.Config) {
+	// 初始化
+	once.Do(func() {
+		gs := &GlobalSource{}
+		// pgsql
+		pgDB := InitPGSqlDB(config.PGSQLOptions)
+		gs.PGSqlDB = pgDB
+
+		GS = gs
+	})
+}

+ 1 - 0
internal/iam/gs/mysql.go

@@ -0,0 +1 @@
+package gs

+ 45 - 0
internal/iam/gs/pgsql.go

@@ -0,0 +1,45 @@
+package gs
+
+import (
+	v1 "gogs.tyduyong.com/duyong/dy-admin/internal/iam/models/v1"
+	"gogs.tyduyong.com/duyong/dy-pkg/app/infrastructure"
+	"gogs.tyduyong.com/duyong/dy-pkg/app/options"
+	"gogs.tyduyong.com/duyong/dy-pkg/errors"
+	"gogs.tyduyong.com/duyong/dy-pkg/logs"
+	"gorm.io/gorm"
+)
+
+const (
+	iamSchema = "iam"
+)
+
+func InitPGSqlDB(pgConfig *options.PGSQLOptions) *gorm.DB {
+	pgDB, err := infrastructure.InitPGSql(pgConfig)
+	if err != nil {
+		logs.Fatal("init pgsql failed", logs.Err(err))
+	}
+
+	// 创建schema
+	if err = pgDB.Exec("CREATE SCHEMA IF NOT EXISTS " + iamSchema).Error; err != nil {
+		logs.Fatal("failed to create schema", logs.Err(err))
+	}
+
+	// 设置默认
+	if err = pgDB.Exec("SET search_path TO " + iamSchema).Error; err != nil {
+		logs.Fatal("failed to set default schema", logs.Err(err))
+	}
+
+	// 创建表
+	if err = migrateTables(pgDB); err != nil {
+		logs.Fatal("failed to migrate tables", logs.Err(err))
+	}
+
+	return pgDB
+}
+
+func migrateTables(db *gorm.DB) error {
+	if err := db.AutoMigrate(&v1.User{}); err != nil {
+		return errors.Wrap(err, "migrate user model failed")
+	}
+	return nil
+}

+ 7 - 3
internal/iam/models/user.go → internal/iam/models/v1/user.go

@@ -1,9 +1,9 @@
-package models
+package v1
 
 import "gogs.tyduyong.com/duyong/dy-admin/internal/pkg/models"
 
-type SysUser struct {
-	UserID    int    `gorm:"primaryKey;autoIncrement;comment:编码"  json:"userId"`
+type User struct {
+	UserID    int    `json:"userId" gorm:"primaryKey;autoIncrement;comment:编码"`
 	Username  string `json:"username" gorm:"size:64;comment:用户名"`
 	Password  string `json:"-" gorm:"size:128;comment:密码"`
 	NickName  string `json:"nickName" gorm:"size:128;comment:昵称"`
@@ -17,3 +17,7 @@ type SysUser struct {
 	models.ControlBy
 	models.ModelTime
 }
+
+func (*User) TableName() string {
+	return "user"
+}

+ 5 - 2
internal/iam/servers/servers.go

@@ -2,6 +2,7 @@ package servers
 
 import (
 	"gogs.tyduyong.com/duyong/dy-admin/internal/iam/config"
+	"gogs.tyduyong.com/duyong/dy-admin/internal/iam/gs"
 	"os"
 	"os/signal"
 	"syscall"
@@ -19,6 +20,9 @@ type PreparedAPIServer struct {
 }
 
 func CreateAPIServer(cfg *config.Config) (*APIServer, error) {
+	// 初始化外部依赖通用资源
+	gs.InitGS(cfg)
+
 	return &APIServer{
 		gRPCAPIServer: newRpcServer(cfg),
 		httpAPIServer: newHttpServer(cfg),
@@ -26,8 +30,7 @@ func CreateAPIServer(cfg *config.Config) (*APIServer, error) {
 }
 
 func (s *APIServer) PrepareRun() *PreparedAPIServer {
-
-	// 服务运行前操作
+	// 服务运行前初始化和服务业务相关的操作
 
 	return &PreparedAPIServer{s}
 }