diff --git a/backend/.fun.yaml b/backend/.fun.yaml new file mode 100644 index 0000000..68c53ad --- /dev/null +++ b/backend/.fun.yaml @@ -0,0 +1,10 @@ +gen: + model: + dsn: __DSN + source: postgres + schema: public + path: ./database + ignores: [] # ignore tables + types: + kube_pods: # table name + labels: backend/pkg/pg.JsonMap # column type diff --git a/backend/common/jwt.go b/backend/common/jwt/jwt.go similarity index 69% rename from backend/common/jwt.go rename to backend/common/jwt/jwt.go index 82a9af4..acdd3c6 100755 --- a/backend/common/jwt.go +++ b/backend/common/jwt/jwt.go @@ -1,11 +1,12 @@ -package common +package jwt import ( - "github.com/atom-providers/jwt" - "github.com/gofiber/fiber/v2" + "backend/providers/jwt" + + "github.com/gofiber/fiber/v3" ) -func GetJwtToken(ctx *fiber.Ctx) (string, error) { +func GetJwtToken(ctx fiber.Ctx) (string, error) { headers, ok := ctx.GetReqHeaders()[jwt.HttpHeader] if !ok { return "", ctx.SendStatus(fiber.StatusUnauthorized) diff --git a/backend/common/service/http/http.go b/backend/common/service/http/http.go new file mode 100644 index 0000000..86722c6 --- /dev/null +++ b/backend/common/service/http/http.go @@ -0,0 +1,42 @@ +package http + +import ( + "backend/providers/app" + "backend/providers/http/fiber" + + "git.ipao.vip/rogeecn/atom" + "git.ipao.vip/rogeecn/atom/container" + "git.ipao.vip/rogeecn/atom/contracts" + "github.com/spf13/cobra" + "go.uber.org/dig" +) + +func Default(providers ...container.ProviderContainer) container.Providers { + return append(container.Providers{ + app.DefaultProvider(), + fiber.DefaultProvider(), + }, providers...) +} + +func Command() atom.Option { + return atom.Command( + atom.Name("serve"), + atom.Short("run http server"), + atom.RunE(Serve), + atom.Providers(Default()), + ) +} + +type Http struct { + dig.In + + Service contracts.HttpService + Initials []contracts.Initial `group:"initials"` + Routes []contracts.HttpRoute `group:"routes"` +} + +func Serve(cmd *cobra.Command, args []string) error { + return container.Container.Invoke(func(http Http) error { + return http.Service.Serve() + }) +} diff --git a/backend/common/service/migrate/migrate.go b/backend/common/service/migrate/migrate.go new file mode 100644 index 0000000..70e247c --- /dev/null +++ b/backend/common/service/migrate/migrate.go @@ -0,0 +1,52 @@ +package migrate + +import ( + "context" + "database/sql" + + "backend/database" + "backend/providers/postgres" + + "git.ipao.vip/rogeecn/atom" + "git.ipao.vip/rogeecn/atom/container" + "github.com/pressly/goose/v3" + log "github.com/sirupsen/logrus" + "github.com/spf13/cobra" + "go.uber.org/dig" +) + +func Default(providers ...container.ProviderContainer) container.Providers { + return append(container.Providers{ + postgres.DefaultProvider(), + }, providers...) +} + +func Command() atom.Option { + return atom.Command( + atom.Name("migrate"), + atom.Short("run migrations"), + atom.RunE(Serve), + atom.Providers(Default()), + ) +} + +type Migrate struct { + dig.In + DB *sql.DB +} + +func Serve(cmd *cobra.Command, args []string) error { + return container.Container.Invoke(func(migrate Migrate) error { + if len(args) == 0 { + args = append(args, "up") + } + + action, args := args[0], args[1:] + log.Infof("migration action: %s args: %+v", action, args) + + goose.SetBaseFS(database.MigrationFS) + goose.SetTableName("migrations") + + return goose.RunContext(context.Background(), action, migrate.DB, "migrations", args...) + }) +} diff --git a/backend/config.toml b/backend/config.toml index 0e6fd8b..8ad02b8 100755 --- a/backend/config.toml +++ b/backend/config.toml @@ -1,23 +1,24 @@ -[Http] -Port = 9800 - [App] Mode = "development" -[SQLite] -File = "sqlite.db" - - -[MySQL] -Host = "localhost" -Port = 3306 -Database = "test" -Username = "root" -Password = "admin" +[Http] +Port = 9800 [Swagger] BaseRoute = "doc" Title = "Api" Description = "Api Docs" -BasePath= "/v1" -Version = "1.0.0" \ No newline at end of file +BasePath = "/v1" +Version = "1.0.0" + + +[Database] +Host = "10.1.1.3" +Database = "qvyun" +Password = "xixi0202" + +[Wechat] +AppId = "wx45745a8c51091ae0" +AppSecret = "2ab33bc79d9b47efa4abef19d66e1977" +Token = "W8Xhw5TivYBgY" +AesKey = "F6AqCxAV4W1eCrY6llJ2zapphKK49CQN3RgtPDrjhnI" diff --git a/backend/database/database.go b/backend/database/database.go new file mode 100644 index 0000000..77c3404 --- /dev/null +++ b/backend/database/database.go @@ -0,0 +1,8 @@ +package database + +import ( + "embed" +) + +//go:embed migrations/* +var MigrationFS embed.FS diff --git a/backend/database/migrations/20241128075611_init.sql b/backend/database/migrations/20241128075611_init.sql new file mode 100644 index 0000000..583a260 --- /dev/null +++ b/backend/database/migrations/20241128075611_init.sql @@ -0,0 +1,122 @@ +-- +goose Up +-- +goose StatementBegin +-- table users +CREATE TABLE + users ( + id SERIAL8 PRIMARY KEY, + open_id VARCHAR(128) NOT NULL, + union_id VARCHAR(128), + oauth jsonb , + expire_in timestamp NOT NULL, + created_at timestamp NOT NULL, + updated_at timestamp NOT NULL + ); + +CREATE INDEX idx_users_open_id ON users (open_id); + +CREATE INDEX idx_users_union_id ON users (union_id); + +-- table tenants +CREATE TABLE + tenants ( + id SERIAL8 PRIMARY KEY, + name VARCHAR(128) NOT NULL, + slug VARCHAR(128) NOT NULL, + description VARCHAR(128), + expire_at timestamp NOT NULL, + created_at timestamp NOT NULL, + updated_at timestamp NOT NULL + ); + +-- table users_tenants +CREATE TABLE + users_tenants ( + id SERIAL8 PRIMARY KEY, + user_id INT8 NOT NULL, + tenant_id INT8 NOT NULL, + created_at timestamp NOT NULL + ); + +CREATE INDEX idx_users_tenants_user_id ON users_tenants (user_id); +CREATE INDEX idx_users_tenants_tenant_id ON users_tenants (tenant_id); + +CREATE TABLE tenant_user_balances ( + id SERIAL8 PRIMARY KEY, + user_id INT8 NOT NULL, + tenant_id INT8 NOT NULL, + balance INT8 NOT NULL +); + +CREATE INDEX idx_tenant_user_balance_user_id ON tenant_user_balances (user_id); +CREATE INDEX idx_tenant_user_balance_tenant_id ON tenant_user_balances (tenant_id); + +-- table user_balance_history +CREATE TABLE user_balance_histories ( + id SERIAL8 PRIMARY KEY, + user_id INT8 NOT NULL, + tenant_id INT8 NOT NULL, + balance INT8 NOT NULL, + target jsonb , + type VARCHAR(128) NOT NULL, -- charge, consume, refund + created_at timestamp NOT NULL +); +CREATE INDEX idx_user_balance_histories_user_id ON user_balance_histories (user_id); +CREATE INDEX idx_user_balance_histories_tenant_id ON user_balance_histories (tenant_id); + +-- medias +CREATE TABLE + medias ( + id SERIAL8 PRIMARY KEY, + tenant_id INT8 NOT NULL, + title VARCHAR(198) NOT NULL, + description VARCHAR(198) NOT NULL, + price INT8 NOT NULL, + discount INT8 NOT NULL, + publish BOOL NOT NULL, + created_at timestamp NOT NULL, + updated_at timestamp NOT NULL + ); + +CREATE INDEX idx_medias_tenant_id ON medias (tenant_id); + +CREATE INDEX idx_medias_title ON medias (title); + +CREATE TABLE + media_resources ( + id SERIAL8 PRIMARY KEY, + media_id INT8 NOT NULL, + type VARCHAR(128) NOT NULL, + source jsonb , + size INT8 NOT NULL, + publish BOOL NOT NULL, + created_at timestamp NOT NULL, + updated_at timestamp NOT NULL + ); + +CREATE INDEX idx_media_resources_media_id ON media_resources (media_id); + +CREATE TABLE user_medias ( + id SERIAL8 PRIMARY KEY, + user_id INT8 NOT NULL, + tenant_id INT8 NOT NULL, + media_id INT8 NOT NULL, + price INT8 NOT NULL, + created_at timestamp NOT NULL +); + +CREATE INDEX idx_user_medias_user_id ON user_medias (user_id); +CREATE INDEX idx_user_medias_tenant_id ON user_medias (tenant_id); + +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +DROP TABLE users; +DROP TABLE tenants; +DROP TABLE users_tenants; +DROP TABLE tenant_user_balances; +DROP TABLE user_balance_histories; +DROP TABLE medias; +DROP TABLE media_resources; +DROP TABLE user_medias; +-- +goose StatementEnd diff --git a/backend/go.mod b/backend/go.mod index ae061f8..9830483 100755 --- a/backend/go.mod +++ b/backend/go.mod @@ -2,20 +2,18 @@ module backend go 1.22.0 -toolchain go1.23.2 - require ( git.ipao.vip/rogeecn/atom v1.0.10 - github.com/atom-providers/jwt v0.0.0-20230918101532-295b1f12266d - github.com/atom-providers/service-http v0.0.0-20231010033241-9b92f2b1d09d github.com/evanphx/json-patch v0.5.2 github.com/gofiber/fiber/v2 v2.52.5 + github.com/gofiber/fiber/v3 v3.0.0-beta.3 github.com/gofrs/uuid v4.4.0+incompatible github.com/golang-jwt/jwt/v4 v4.5.1 github.com/imroc/req/v3 v3.48.0 github.com/juju/go4 v0.0.0-20160222163258-40d72ab9641a github.com/lib/pq v1.10.9 github.com/pkg/errors v0.9.1 + github.com/pressly/goose/v3 v3.23.0 github.com/samber/lo v1.47.0 github.com/sirupsen/logrus v1.9.3 github.com/speps/go-hashids/v2 v2.0.1 @@ -32,11 +30,7 @@ require ( github.com/KyleBanks/depth v1.2.1 // indirect github.com/PuerkitoBio/purell v1.1.1 // indirect github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect - github.com/andybalholm/brotli v1.1.0 // indirect - github.com/atom-providers/app v0.0.0-20231010030409-e0ad5c7fde0d // indirect - github.com/atom-providers/http-fiber v0.0.0-20230821072811-d895416ff5d1 // indirect - github.com/atom-providers/log v0.0.0-20230805054420-343ad809890e // indirect - github.com/brianvoe/gofakeit/v6 v6.23.2 // indirect + github.com/andybalholm/brotli v1.1.1 // indirect github.com/cloudflare/circl v1.4.0 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/go-openapi/jsonpointer v0.19.5 // indirect @@ -44,14 +38,13 @@ require ( github.com/go-openapi/spec v0.20.4 // indirect github.com/go-openapi/swag v0.19.15 // indirect github.com/go-task/slim-sprig/v3 v3.0.0 // indirect + github.com/gofiber/utils/v2 v2.0.0-beta.4 // indirect github.com/google/pprof v0.0.0-20240910150728-a0b0bb1d4134 // indirect - github.com/google/uuid v1.5.0 // indirect + github.com/google/uuid v1.6.0 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect - github.com/jinzhu/inflection v1.0.0 // indirect - github.com/jinzhu/now v1.1.5 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/klauspost/compress v1.17.9 // indirect github.com/magiconair/properties v1.8.7 // indirect @@ -59,6 +52,7 @@ require ( github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-runewidth v0.0.15 // indirect + github.com/mfridman/interpolate v0.0.2 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/onsi/ginkgo/v2 v2.20.2 // indirect github.com/pelletier/go-toml/v2 v2.2.2 // indirect @@ -67,8 +61,10 @@ require ( github.com/refraction-networking/utls v1.6.7 // indirect github.com/rivo/uniseg v0.4.4 // indirect github.com/rogeecn/atom v1.0.8 // indirect + github.com/rogpeppe/go-internal v1.10.0 // indirect github.com/sagikazarmark/locafero v0.3.0 // indirect github.com/sagikazarmark/slog-shim v0.1.0 // indirect + github.com/sethvargo/go-retry v0.3.0 // indirect github.com/sourcegraph/conc v0.3.0 // indirect github.com/spf13/afero v1.10.0 // indirect github.com/spf13/cast v1.5.1 // indirect @@ -77,19 +73,18 @@ require ( github.com/subosito/gotenv v1.6.0 // indirect github.com/swaggo/files v0.0.0-20220610200504-28940afbdbfe // indirect github.com/valyala/bytebufferpool v1.0.0 // indirect - github.com/valyala/fasthttp v1.51.0 // indirect + github.com/valyala/fasthttp v1.55.0 // indirect github.com/valyala/tcplisten v1.0.0 // indirect go.uber.org/mock v0.4.0 // indirect go.uber.org/multierr v1.11.0 // indirect - go.uber.org/zap v1.26.0 // indirect golang.org/x/crypto v0.29.0 // indirect golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 // indirect golang.org/x/mod v0.21.0 // indirect golang.org/x/sys v0.27.0 // indirect golang.org/x/text v0.20.0 // indirect golang.org/x/tools v0.25.0 // indirect + gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - gorm.io/gorm v1.25.12 // indirect ) diff --git a/backend/go.sum b/backend/go.sum index ca6c672..97555c3 100644 --- a/backend/go.sum +++ b/backend/go.sum @@ -48,20 +48,8 @@ github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/agiledragon/gomonkey/v2 v2.3.1/go.mod h1:ap1AmDzcVOAz1YpeJ3TCzIgstoaWLA6jbbgxfB4w2iY= github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= -github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M= -github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY= -github.com/atom-providers/app v0.0.0-20231010030409-e0ad5c7fde0d h1:fAbUsTPpZ1yt86T5NHIs0FeMPcvbrF7dJHXp6AbXzl0= -github.com/atom-providers/app v0.0.0-20231010030409-e0ad5c7fde0d/go.mod h1:VbBY0TL1PFxivQjDV6V7tZwRrGJruzKGvd6iq2jMVjk= -github.com/atom-providers/http-fiber v0.0.0-20230821072811-d895416ff5d1 h1:hmnny7/1T1OoHuuQt7vCMGdwFSQpC+ajh1mGHCx/yfE= -github.com/atom-providers/http-fiber v0.0.0-20230821072811-d895416ff5d1/go.mod h1:ej1AAwq5cNNd5o4c9HkA9y2dzY/X90Z+/XJpPw845/I= -github.com/atom-providers/jwt v0.0.0-20230918101532-295b1f12266d h1:tRhwHhjLB9OftKBsSZAzDB7QD+VLWDUkXuWSJ/QdCUo= -github.com/atom-providers/jwt v0.0.0-20230918101532-295b1f12266d/go.mod h1:IuCBQRszBkl5xwUxAbFAVdgQ1pr1F9jx0AHFfIKsn60= -github.com/atom-providers/log v0.0.0-20230805054420-343ad809890e h1:iMGwef/Y2P6mUHZqoFDDxstV5YXhRs8Qwf8IKfHDFZE= -github.com/atom-providers/log v0.0.0-20230805054420-343ad809890e/go.mod h1:u65RtavNWB462yx5hlFVPG7Bs5C6zCBLMPsW6rgRoSM= -github.com/atom-providers/service-http v0.0.0-20231010033241-9b92f2b1d09d h1:X9WQqH7ckxhs/Xk0ZEEfn/XHmtVuPfEwHYZnC8cytoM= -github.com/atom-providers/service-http v0.0.0-20231010033241-9b92f2b1d09d/go.mod h1:1T0rkZIXUBxxWrhwyOnOrAuqEresdsUIkCamyLuvIFU= -github.com/brianvoe/gofakeit/v6 v6.23.2 h1:lVde18uhad5wII/f5RMVFLtdQNE0HaGFuBUXmYKk8i8= -github.com/brianvoe/gofakeit/v6 v6.23.2/go.mod h1:Ow6qC71xtwm79anlwKRlWZW6zVq9D2XHE4QSSMP/rU8= +github.com/andybalholm/brotli v1.1.1 h1:PR2pgnyFznKEugtsUo0xLdDop5SKXd5Qf5ysW+7XdTA= +github.com/andybalholm/brotli v1.1.1/go.mod h1:05ib4cKhjx3OQYUY22hTVd34Bc8upXjOLL2rKwwZBoA= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= @@ -79,6 +67,8 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= +github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= @@ -113,6 +103,10 @@ github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZ github.com/gofiber/fiber/v2 v2.32.0/go.mod h1:CMy5ZLiXkn6qwthrl03YMyW1NLfj0rhxz2LKl4t7ZTY= github.com/gofiber/fiber/v2 v2.52.5 h1:tWoP1MJQjGEe4GB5TUGOi7P2E0ZMMRx5ZTG4rT+yGMo= github.com/gofiber/fiber/v2 v2.52.5/go.mod h1:KEOE+cXMhXG0zHc9d8+E38hoX+ZN7bhOtgeF2oT6jrQ= +github.com/gofiber/fiber/v3 v3.0.0-beta.3 h1:7Q2I+HsIqnIEEDB+9oe7Gadpakh6ZLhXpTYz/L20vrg= +github.com/gofiber/fiber/v3 v3.0.0-beta.3/go.mod h1:kcMur0Dxqk91R7p4vxEpJfDWZ9u5IfvrtQc8Bvv/JmY= +github.com/gofiber/utils/v2 v2.0.0-beta.4 h1:1gjbVFFwVwUb9arPcqiB6iEjHBwo7cHsyS41NeIW3co= +github.com/gofiber/utils/v2 v2.0.0-beta.4/go.mod h1:sdRsPU1FXX6YiDGGxd+q2aPJRMzpsxdzCXo9dz+xtOY= github.com/gofrs/uuid v4.4.0+incompatible h1:3qXRTX8/NbyulANqlc0lchS1gqAVxRgsuW1YrTJupqA= github.com/gofrs/uuid v4.4.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/golang-jwt/jwt/v4 v4.5.1 h1:JdqV9zKUdtaa9gdPlywC3aeoEsR681PlKC+4F5gQgeo= @@ -173,8 +167,8 @@ github.com/google/pprof v0.0.0-20240910150728-a0b0bb1d4134 h1:c5FlPPgxOn7kJz3VoP github.com/google/pprof v0.0.0-20240910150728-a0b0bb1d4134/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.5.0 h1:1p67kYwdtXjb0gL0BPiP1Av9wiZPo5A8z2cWkTZ+eyU= -github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= @@ -186,6 +180,9 @@ github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+l github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= 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/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= @@ -195,10 +192,6 @@ github.com/imroc/req/v3 v3.48.0/go.mod h1:weam9gmyb00QnOtu6HXSnk44dNFkIUQb5QdMx1 github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -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= -github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= @@ -212,6 +205,7 @@ github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2 github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= @@ -233,8 +227,12 @@ github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWE github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mfridman/interpolate v0.0.2 h1:pnuTK7MQIxxFz1Gr+rjSIx9u7qVjf5VOoM/u6BbAxPY= +github.com/mfridman/interpolate v0.0.2/go.mod h1:p+7uk6oE07mpE/Ik1b8EckO0O4ZXiGAfshKBWLUM9Xg= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4= +github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/onsi/ginkgo/v2 v2.20.2 h1:7NVCeyIWROIAheY21RLS+3j2bb52W0W82tkberYytp4= github.com/onsi/ginkgo/v2 v2.20.2/go.mod h1:K9gyxPIlb+aIvnZ8bd9Ak+YP18w3APlR+5coaZoE2ag= @@ -253,6 +251,8 @@ github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qR github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pressly/goose/v3 v3.23.0 h1:57hqKos8izGek4v6D5+OXBa+Y4Rq8MU//+MmnevdpVA= +github.com/pressly/goose/v3 v3.23.0/go.mod h1:rpx+D9GX/+stXmzKa+uh1DkjPnNVMdiOCV9iLdle4N8= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/quic-go/qpack v0.5.1 h1:giqksBPnT/HDtZ6VhtFKgoLOWmlyo9Ei6u9PqzIMbhI= github.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg= @@ -260,6 +260,8 @@ github.com/quic-go/quic-go v0.47.0 h1:yXs3v7r2bm1wmPTYNLKAAJTHMYkPEsfYJmTazXrCZ7 github.com/quic-go/quic-go v0.47.0/go.mod h1:3bCapYsJvXGZcipOHuu7plYtaV6tnF+z7wIFsU0WK9E= github.com/refraction-networking/utls v1.6.7 h1:zVJ7sP1dJx/WtVuITug3qYUq034cDq9B2MR1K67ULZM= github.com/refraction-networking/utls v1.6.7/go.mod h1:BC3O4vQzye5hqpmDTWUqi4P5DDhzJfkV1tdqtawQIH0= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= @@ -278,6 +280,8 @@ github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6g github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= github.com/samber/lo v1.47.0 h1:z7RynLwP5nbyRscyvcD043DWYoOcYRv3mV8lBeqOCLc= github.com/samber/lo v1.47.0/go.mod h1:RmDH9Ct32Qy3gduHQuKJ3gW1fMHAnE/fAzQuf6He5cU= +github.com/sethvargo/go-retry v0.3.0 h1:EEt31A35QhrcRZtrYFDTBg91cqZVnFL2navjDrah2SE= +github.com/sethvargo/go-retry v0.3.0/go.mod h1:mNX17F0C/HguQMyMyJxcnU471gOZGxCLyYaFyAZraas= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= @@ -325,10 +329,12 @@ github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6Kllzaw github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasthttp v1.35.0/go.mod h1:t/G+3rLek+CyY9bnIE+YlMRddxVAAGjhxndDB4i4C0I= github.com/valyala/fasthttp v1.36.0/go.mod h1:t/G+3rLek+CyY9bnIE+YlMRddxVAAGjhxndDB4i4C0I= -github.com/valyala/fasthttp v1.51.0 h1:8b30A5JlZ6C7AS81RsWjYMQmrZG6feChmgAolCl1SqA= -github.com/valyala/fasthttp v1.51.0/go.mod h1:oI2XroL+lI7vdXyYoQk03bXBThfFl2cVdIA3Xl7cH8g= +github.com/valyala/fasthttp v1.55.0 h1:Zkefzgt6a7+bVKHnu/YaYSOPfNYNisSVBo/unVCf8k8= +github.com/valyala/fasthttp v1.55.0/go.mod h1:NkY9JtkrpPKmgwV3HTaS2HWaJss9RSIsRVfcxxoHiOM= github.com/valyala/tcplisten v1.0.0 h1:rBHj/Xf+E1tRGZyWIWwJDiRY0zc1Js+CV5DqwacVSA8= github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= +github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU= +github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -342,14 +348,10 @@ go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.uber.org/dig v1.18.0 h1:imUL1UiY0Mg4bqbFfsRQO5G4CGRBec/ZujWTvSVp3pw= go.uber.org/dig v1.18.0/go.mod h1:Us0rSJiThwCv2GteUN0Q7OKvU7n5J4dxZ9JKUXozFdE= -go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= -go.uber.org/goleak v1.2.0/go.mod h1:XJYK+MuIchqpmGmUSAzotztawfKvYLUIgg7guXrwVUo= go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= -go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -682,8 +684,6 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/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/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8= -gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -691,6 +691,20 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +modernc.org/gc/v3 v3.0.0-20240107210532-573471604cb6 h1:5D53IMaUuA5InSeMu9eJtlQXS2NxAhyWQvkKEgXZhHI= +modernc.org/gc/v3 v3.0.0-20240107210532-573471604cb6/go.mod h1:Qz0X07sNOR1jWYCrJMEnbW/X55x206Q7Vt4mz6/wHp4= +modernc.org/libc v1.55.3 h1:AzcW1mhlPNrRtjS5sS+eW2ISCgSOLLNyFzRh/V3Qj/U= +modernc.org/libc v1.55.3/go.mod h1:qFXepLhz+JjFThQ4kzwzOjA/y/artDeg+pcYnY+Q83w= +modernc.org/mathutil v1.6.0 h1:fRe9+AmYlaej+64JsEEhoWuAYBkOtQiMEU7n/XgfYi4= +modernc.org/mathutil v1.6.0/go.mod h1:Ui5Q9q1TR2gFm0AQRqQUaBWFLAhQpCwNcuhBOSedWPo= +modernc.org/memory v1.8.0 h1:IqGTL6eFMaDZZhEWwcREgeMXYwmW83LYW8cROZYkg+E= +modernc.org/memory v1.8.0/go.mod h1:XPZ936zp5OMKGWPqbD3JShgd/ZoQ7899TUuQqxY+peU= +modernc.org/sqlite v1.34.1 h1:u3Yi6M0N8t9yKRDwhXcyp1eS5/ErhPTBggxWFuR6Hfk= +modernc.org/sqlite v1.34.1/go.mod h1:pXV2xHxhzXZsgT/RtTFAPY6JJDEvOTcTdwADQCCWD4k= +modernc.org/strutil v1.2.0 h1:agBi9dp1I+eOnxXeiZawM8F4LawKv4NzGWSaLfyeNZA= +modernc.org/strutil v1.2.0/go.mod h1:/mdcBmfOibveCTBxUl5B5l6W+TTH1FXPLHZE6bTosX0= +modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= +modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/backend/main.go b/backend/main.go index 0864943..6718832 100755 --- a/backend/main.go +++ b/backend/main.go @@ -4,26 +4,21 @@ package main import ( - "log" - - serviceHttp "backend/services" + "backend/common/service/http" + "backend/common/service/migrate" "git.ipao.vip/rogeecn/atom" - - "github.com/spf13/cobra" + log "github.com/sirupsen/logrus" ) func main() { - providers := serviceHttp.Default() - opts := []atom.Option{ - atom.Name("backend"), - atom.RunE(func(cmd *cobra.Command, args []string) error { - return serviceHttp.Serve() - }), + atom.Name("qvyun"), + http.Command(), + migrate.Command(), } - if err := atom.Serve(providers, opts...); err != nil { + if err := atom.Serve(opts...); err != nil { log.Fatal(err) } } diff --git a/backend/modules/frontend/users/provider.go b/backend/modules/frontend/users/provider.go new file mode 100644 index 0000000..82abcb9 --- /dev/null +++ b/backend/modules/frontend/users/provider.go @@ -0,0 +1 @@ +package users diff --git a/backend/providers/http/fiber/engine.go b/backend/providers/http/fiber/engine.go index 13847fd..6800980 100644 --- a/backend/providers/http/fiber/engine.go +++ b/backend/providers/http/fiber/engine.go @@ -1,6 +1,7 @@ package fiber import ( + "errors" "time" "backend/providers/http" @@ -9,9 +10,9 @@ import ( "git.ipao.vip/rogeecn/atom/utils/opt" log "github.com/sirupsen/logrus" - "github.com/gofiber/fiber/v2" - "github.com/gofiber/fiber/v2/middleware/logger" - "github.com/gofiber/fiber/v2/middleware/recover" + "github.com/gofiber/fiber/v3" + "github.com/gofiber/fiber/v3/middleware/logger" + "github.com/gofiber/fiber/v3/middleware/recover" ) func DefaultProvider() container.ProviderContainer { @@ -37,14 +38,32 @@ func (e *Service) GetEngine() interface{} { } func (e *Service) Close() { - e.Engine.Shutdown() + if err := e.Engine.Shutdown(); err != nil { + log.Error("http server shutdown error: ", err) + } } func (e *Service) Serve() error { - if e.conf.Tls != nil { - return e.Engine.ListenTLS(e.conf.PortString(), e.conf.Tls.Cert, e.conf.Tls.Key) + listenConfig := fiber.ListenConfig{ + EnablePrintRoutes: true, + OnShutdownSuccess: func() { + log.Info("http server shutdown success") + }, + OnShutdownError: func(err error) { + log.Error("http server shutdown error: ", err) + }, + DisableStartupMessage: true, } - return e.Engine.Listen(e.conf.PortString()) + + if e.conf.Tls != nil { + if e.conf.Tls.Cert == "" || e.conf.Tls.Key == "" { + return errors.New("tls cert or key is empty") + } + listenConfig.CertFile = e.conf.Tls.Cert + listenConfig.CertKeyFile = e.conf.Tls.Key + } + + return e.Engine.Listen(e.conf.PortString(), listenConfig) } func Provide(opts ...opt.Option) error { @@ -56,8 +75,7 @@ func Provide(opts ...opt.Option) error { return container.Container.Provide(func(l *log.Logger) (http.Service, error) { engine := fiber.New(fiber.Config{ - EnablePrintRoutes: true, - StrictRouting: true, + StrictRouting: true, }) engine.Use(recover.New()) diff --git a/backend/providers/jwt/jwt.go b/backend/providers/jwt/jwt.go index 3d814c9..0b425d7 100644 --- a/backend/providers/jwt/jwt.go +++ b/backend/providers/jwt/jwt.go @@ -28,7 +28,7 @@ type Claims struct { jwt.RegisteredClaims } -const TOKEN_PREFIX = "Bearer " +const TokenPrefix = "Bearer " type JWT struct { singleflight *singleflight.Group @@ -86,7 +86,7 @@ func (j *JWT) CreateTokenByOldToken(oldToken string, claims *Claims) (string, er // 解析 token func (j *JWT) ParseToken(tokenString string) (*Claims, error) { - tokenString = strings.TrimPrefix(tokenString, TOKEN_PREFIX) + tokenString = strings.TrimPrefix(tokenString, TokenPrefix) token, err := jwt.ParseWithClaims(tokenString, &Claims{}, func(token *jwt.Token) (i interface{}, e error) { return j.SigningKey, nil }) diff --git a/backend/providers/database/config.go b/backend/providers/postgres/config.go similarity index 83% rename from backend/providers/database/config.go rename to backend/providers/postgres/config.go index 1a48dd7..538c5e7 100755 --- a/backend/providers/database/config.go +++ b/backend/providers/postgres/config.go @@ -1,4 +1,4 @@ -package database +package postgres import ( "fmt" @@ -32,8 +32,19 @@ type Config struct { MaxOpenConns int // 打开到数据库的最大连接数 } -func (m *Config) EmptyDsn() string { - dsnTpl := "host=%s user=%s password=%s port=%d dbname=%s sslmode=%s TimeZone=%s" +func (m *Config) checkDefault() { + if m.MaxIdleConns == 0 { + m.MaxIdleConns = 10 + } + + if m.MaxOpenConns == 0 { + m.MaxOpenConns = 100 + } + + if m.Username == "" { + m.Username = "postgres" + } + if m.SslMode == "" { m.SslMode = "disable" } @@ -42,6 +53,15 @@ func (m *Config) EmptyDsn() string { m.TimeZone = "Asia/Shanghai" } + if m.Port == 0 { + m.Port = 5432 + } +} + +func (m *Config) EmptyDsn() string { + dsnTpl := "host=%s user=%s password=%s port=%d dbname=%s sslmode=%s TimeZone=%s" + m.checkDefault() + return fmt.Sprintf(dsnTpl, m.Host, m.Username, m.Password, m.Port, m.Database, m.SslMode, m.TimeZone) } @@ -49,12 +69,5 @@ func (m *Config) EmptyDsn() string { func (m *Config) DSN() string { dsnTpl := "host=%s user=%s password=%s dbname=%s port=%d sslmode=%s TimeZone=%s" - if m.SslMode == "" { - m.SslMode = "disable" - } - - if m.TimeZone == "" { - m.TimeZone = "Asia/Shanghai" - } return fmt.Sprintf(dsnTpl, m.Host, m.Username, m.Password, m.Database, m.Port, m.SslMode, m.TimeZone) } diff --git a/backend/providers/database/postgres.go b/backend/providers/postgres/postgres.go similarity index 97% rename from backend/providers/database/postgres.go rename to backend/providers/postgres/postgres.go index c1c8af0..2a6351a 100644 --- a/backend/providers/database/postgres.go +++ b/backend/providers/postgres/postgres.go @@ -1,4 +1,4 @@ -package database +package postgres import ( "database/sql" diff --git a/backend/services/default.go b/backend/services/default.go deleted file mode 100644 index e77b2dc..0000000 --- a/backend/services/default.go +++ /dev/null @@ -1,13 +0,0 @@ -package services - -import ( - "backend/providers/http/fiber" - - "git.ipao.vip/rogeecn/atom/container" -) - -func Default(providers ...container.ProviderContainer) container.Providers { - return append(container.Providers{ - fiber.DefaultProvider(), - }, providers...) -} diff --git a/backend/services/http.go b/backend/services/http.go deleted file mode 100644 index cb99cc9..0000000 --- a/backend/services/http.go +++ /dev/null @@ -1,23 +0,0 @@ -package services - -import ( - "backend/providers/http" - - "git.ipao.vip/rogeecn/atom/container" - "git.ipao.vip/rogeecn/atom/contracts" - "go.uber.org/dig" -) - -type Http struct { - dig.In - - Service http.Service - Initials []contracts.Initial `group:"initials"` - Routes []http.Route `group:"routes"` -} - -func Serve() error { - return container.Container.Invoke(func(http Http) error { - return http.Service.Serve() - }) -}