diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 23f9009..48faa39 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -12,7 +12,7 @@ lint: - go install github.com/vektra/mockery/v2@v2.26.0 - go install github.com/deepmap/oapi-codegen/cmd/oapi-codegen@v1.12.4 script: - - go generate ./... + - go generate ./internal/... - golangci-lint version - golangci-lint run ./internal/... diff --git a/Makefile b/Makefile index 79e99b7..02d812b 100644 --- a/Makefile +++ b/Makefile @@ -14,7 +14,7 @@ install: ## install all go dependencies generate: ## generate grpc proto for golang buf generate - go generate ./internal/swagger + go generate ./internal/interface/swagger test: ## run all layers tests @make test.unit diff --git a/cmd/app/main.go b/cmd/app/main.go index 7dde951..13a61ca 100644 --- a/cmd/app/main.go +++ b/cmd/app/main.go @@ -1,13 +1,9 @@ package main import ( - "context" "encoding/json" - "errors" "fmt" "log" - "os/signal" - "syscall" "go.uber.org/zap" "penahub.gitlab.yandexcloud.net/pena-services/customer/internal/app" @@ -15,21 +11,11 @@ import ( ) func main() { - ctx, cancel := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM) logger, err := zap.NewProduction(zap.AddStacktrace(zap.DPanicLevel)) if err != nil { log.Fatalf("failed to init zap logger: %v", err) } - defer cancel() - defer func() { - if syncErr := logger.Sync(); syncErr != nil { - if !errors.Is(syncErr, syscall.EBADF) && !errors.Is(syncErr, syscall.ENOTTY) { - log.Fatalf("failed to sync zap logger: %v", syncErr) - } - } - }() - config, err := initialize.Configuration(".env.test") if err != nil { logger.Fatal("failed to init config: %v", zap.Error(err)) @@ -42,7 +28,7 @@ func main() { fmt.Println("env configuration: \n", string(configJSON)) - if err := app.Run(ctx, config, logger); err != nil { + if err := app.Run(config, logger); err != nil { logger.Fatal("failed to run app: %v", zap.Error(err)) } } diff --git a/deployments/staging/docker-compose.yaml b/deployments/staging/docker-compose.yaml index ab3c3a5..209aba3 100644 --- a/deployments/staging/docker-compose.yaml +++ b/deployments/staging/docker-compose.yaml @@ -1,31 +1,42 @@ version: "3.3" services: - pena-social-auth-service: - container_name: pena-social-auth-service - restart: unless-stopped - tty: true + customer-app-staging: + hostname: customer-service-staging + container_name: customer-service-staging image: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG.$CI_PIPELINE_ID + tty: true environment: - - ENVIRONMENT=staging - - HTTP_HOST=0.0.0.0 - - HTTP_PORT=8000 + - HTTP_PORT=8065 + + - GRPC_HOST=0.0.0.0 + - GRPC_PORT=9085 + - GRPC_DOMEN=http://customer-service:9085 - MONGO_HOST=10.6.0.11 - MONGO_PORT=27017 - MONGO_USER=$MONGO_USER - MONGO_PASSWORD=$MONGO_PASSWORD - - MONGO_DB_NAME=socialAuth - - MONGO_AUTH=socialAuth + - MONGO_DB_NAME=customer + - MONGO_AUTH=customer + + - AUTH_MICROSERVICE_USER_URL=https://admin.pena.digital/user + - HUBADMIN_MICROSERVICE_TARIFF_URL=https://admin.pena.digital/strator/tariff + - CURRENCY_MICROSERVICE_TRANSLATE_URL=http://10.6.0.11:3131/change + - DISCOUNT_MICROSERVICE_GRPC_HOST=10.6.0.11:9001 + - PAYMENT_MICROSERVICE_GRPC_HOST=10.6.0.11:9085 - JWT_PUBLIC_KEY=$JWT_PUBLIC_KEY - JWT_ISSUER=pena-auth-service - JWT_AUDIENCE=pena - expose: - - 8000 + ports: + - 8065:8065 + - 9065:9065 networks: - marketplace_penahub_frontend + - default + networks: marketplace_penahub_frontend: - external: true + external: true \ No newline at end of file diff --git a/internal/app/app.go b/internal/app/app.go index 52bf371..8d63084 100644 --- a/internal/app/app.go +++ b/internal/app/app.go @@ -2,14 +2,17 @@ package app import ( "context" + "errors" "fmt" + "os/signal" + "syscall" "time" "go.uber.org/zap" "penahub.gitlab.yandexcloud.net/pena-services/customer/internal/initialize" + "penahub.gitlab.yandexcloud.net/pena-services/customer/internal/interface/swagger" "penahub.gitlab.yandexcloud.net/pena-services/customer/internal/models" "penahub.gitlab.yandexcloud.net/pena-services/customer/internal/server" - "penahub.gitlab.yandexcloud.net/pena-services/customer/internal/swagger" "penahub.gitlab.yandexcloud.net/pena-services/customer/internal/utils" "penahub.gitlab.yandexcloud.net/pena-services/customer/pkg/closer" "penahub.gitlab.yandexcloud.net/pena-services/customer/pkg/mongo" @@ -19,7 +22,17 @@ const ( shutdownTimeout = 5 * time.Second ) -func Run(ctx context.Context, config *models.Config, logger *zap.Logger) error { +func Run(config *models.Config, logger *zap.Logger) (appErr error) { + defer func() { + if recovered := recover(); recovered != nil { + appErr = errors.New("recovered panic on application run") + logger.Error("recovered panic on application run", zap.Any("recovered", recovered)) + } + }() + + ctx, cancel := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM) + defer cancel() + closer := closer.New() mongoDB, err := mongo.Connect(ctx, &mongo.ConnectDeps{ diff --git a/internal/initialize/api.go b/internal/initialize/api.go index 2ee4e08..514ee01 100644 --- a/internal/initialize/api.go +++ b/internal/initialize/api.go @@ -1,7 +1,7 @@ package initialize import ( - "penahub.gitlab.yandexcloud.net/pena-services/customer/internal/swagger" + "penahub.gitlab.yandexcloud.net/pena-services/customer/internal/interface/swagger" ) func NewAPI(controllers Controllers) *swagger.API { diff --git a/internal/interface/controller/rest/account/account.go b/internal/interface/controller/rest/account/account.go index 4e8b8fa..9492b7f 100644 --- a/internal/interface/controller/rest/account/account.go +++ b/internal/interface/controller/rest/account/account.go @@ -9,10 +9,10 @@ import ( "github.com/labstack/echo/v4" "go.uber.org/zap" "penahub.gitlab.yandexcloud.net/pena-services/customer/internal/errors" + "penahub.gitlab.yandexcloud.net/pena-services/customer/internal/interface/swagger" "penahub.gitlab.yandexcloud.net/pena-services/customer/internal/models" - "penahub.gitlab.yandexcloud.net/pena-services/customer/internal/swagger" "penahub.gitlab.yandexcloud.net/pena-services/customer/internal/utils" - "penahub.gitlab.yandexcloud.net/pena-services/customer/internal/utils/echotools" + "penahub.gitlab.yandexcloud.net/pena-services/customer/pkg/echotools" ) type accountService interface { diff --git a/internal/interface/controller/rest/cart/cart.go b/internal/interface/controller/rest/cart/cart.go index 6ca3b6e..23e1d33 100644 --- a/internal/interface/controller/rest/cart/cart.go +++ b/internal/interface/controller/rest/cart/cart.go @@ -9,8 +9,8 @@ import ( "github.com/labstack/echo/v4" "go.uber.org/zap" "penahub.gitlab.yandexcloud.net/pena-services/customer/internal/errors" + "penahub.gitlab.yandexcloud.net/pena-services/customer/internal/interface/swagger" "penahub.gitlab.yandexcloud.net/pena-services/customer/internal/models" - "penahub.gitlab.yandexcloud.net/pena-services/customer/internal/swagger" "penahub.gitlab.yandexcloud.net/pena-services/customer/pkg/validate" ) diff --git a/internal/interface/controller/rest/currency/currency.go b/internal/interface/controller/rest/currency/currency.go index 4314094..110abb6 100644 --- a/internal/interface/controller/rest/currency/currency.go +++ b/internal/interface/controller/rest/currency/currency.go @@ -9,7 +9,7 @@ import ( "github.com/labstack/echo/v4" "go.uber.org/zap" "penahub.gitlab.yandexcloud.net/pena-services/customer/internal/errors" - "penahub.gitlab.yandexcloud.net/pena-services/customer/internal/utils/echotools" + "penahub.gitlab.yandexcloud.net/pena-services/customer/pkg/echotools" ) type currencyService interface { diff --git a/internal/interface/controller/rest/history/history.go b/internal/interface/controller/rest/history/history.go index 31c44eb..6396a99 100644 --- a/internal/interface/controller/rest/history/history.go +++ b/internal/interface/controller/rest/history/history.go @@ -8,8 +8,8 @@ import ( "github.com/labstack/echo/v4" "go.uber.org/zap" "penahub.gitlab.yandexcloud.net/pena-services/customer/internal/errors" + "penahub.gitlab.yandexcloud.net/pena-services/customer/internal/interface/swagger" "penahub.gitlab.yandexcloud.net/pena-services/customer/internal/models" - "penahub.gitlab.yandexcloud.net/pena-services/customer/internal/swagger" ) type historyService interface { diff --git a/internal/interface/controller/rest/wallet/wallet.go b/internal/interface/controller/rest/wallet/wallet.go index 12cd719..e2d5841 100644 --- a/internal/interface/controller/rest/wallet/wallet.go +++ b/internal/interface/controller/rest/wallet/wallet.go @@ -11,7 +11,7 @@ import ( "penahub.gitlab.yandexcloud.net/pena-services/customer/internal/errors" "penahub.gitlab.yandexcloud.net/pena-services/customer/internal/models" "penahub.gitlab.yandexcloud.net/pena-services/customer/internal/utils" - "penahub.gitlab.yandexcloud.net/pena-services/customer/internal/utils/echotools" + "penahub.gitlab.yandexcloud.net/pena-services/customer/pkg/echotools" "penahub.gitlab.yandexcloud.net/pena-services/customer/pkg/validate" ) diff --git a/internal/swagger/api.gen.go b/internal/interface/swagger/api.gen.go similarity index 100% rename from internal/swagger/api.gen.go rename to internal/interface/swagger/api.gen.go diff --git a/internal/swagger/api.go b/internal/interface/swagger/api.go similarity index 96% rename from internal/swagger/api.go rename to internal/interface/swagger/api.go index c33eb9d..822a219 100644 --- a/internal/swagger/api.go +++ b/internal/interface/swagger/api.go @@ -6,8 +6,8 @@ import ( "github.com/labstack/echo/v4" ) -//go:generate oapi-codegen --config api.yaml ../../openapi.yaml -//go:generate oapi-codegen --config models.yaml ../../openapi.yaml +//go:generate oapi-codegen --config api.yaml ../../../openapi.yaml +//go:generate oapi-codegen --config models.yaml ../../../openapi.yaml type accountController interface { RemoveAccount(ctx echo.Context) error diff --git a/internal/swagger/api.yaml b/internal/interface/swagger/api.yaml similarity index 100% rename from internal/swagger/api.yaml rename to internal/interface/swagger/api.yaml diff --git a/internal/swagger/middleware.go b/internal/interface/swagger/middleware.go similarity index 100% rename from internal/swagger/middleware.go rename to internal/interface/swagger/middleware.go diff --git a/internal/swagger/models.gen.go b/internal/interface/swagger/models.gen.go similarity index 100% rename from internal/swagger/models.gen.go rename to internal/interface/swagger/models.gen.go diff --git a/internal/swagger/models.yaml b/internal/interface/swagger/models.yaml similarity index 100% rename from internal/swagger/models.yaml rename to internal/interface/swagger/models.yaml diff --git a/internal/server/http.go b/internal/server/http.go index 87db45a..1ad7b5d 100644 --- a/internal/server/http.go +++ b/internal/server/http.go @@ -12,8 +12,8 @@ import ( "github.com/labstack/echo/v4/middleware" "go.uber.org/zap" "penahub.gitlab.yandexcloud.net/pena-services/customer/internal/errors" + "penahub.gitlab.yandexcloud.net/pena-services/customer/internal/interface/swagger" "penahub.gitlab.yandexcloud.net/pena-services/customer/internal/models" - "penahub.gitlab.yandexcloud.net/pena-services/customer/internal/swagger" ) type DepsHTTP struct { diff --git a/internal/utils/echotools/bind.go b/pkg/echotools/bind.go similarity index 100% rename from internal/utils/echotools/bind.go rename to pkg/echotools/bind.go diff --git a/pkg/mongo/connection.go b/pkg/mongo/connection.go index c921b21..241b446 100644 --- a/pkg/mongo/connection.go +++ b/pkg/mongo/connection.go @@ -50,6 +50,8 @@ func Connect(ctx context.Context, deps *ConnectDeps) (*mongo.Database, error) { }). SetMonitor(cmdMonitor) + fmt.Println(connectionOptions.GetURI()) + ticker := time.NewTicker(1 * time.Second) timeoutExceeded := time.After(deps.Timeout) @@ -65,10 +67,9 @@ func Connect(ctx context.Context, deps *ConnectDeps) (*mongo.Database, error) { log.Printf("failed to connect to db <%s>: %s", mongoURI.String(), err.Error()) case <-timeoutExceeded: - return nil, fmt.Errorf("db connection <%s> failed after %d timeout", mongoURI, deps.Timeout) + return nil, fmt.Errorf("db connection <%s> failed after %d timeout", mongoURI.String(), deps.Timeout) default: + time.Sleep(1 * time.Second) } - - time.Sleep(1 * time.Second) } }