refactor: layout & settings

This commit is contained in:
Kirill 2023-06-22 11:26:42 +03:00
parent 0810d82411
commit ef5bbf28c0
19 changed files with 233 additions and 15 deletions

8
.dockerignore Normal file

@ -0,0 +1,8 @@
.mockery.yaml
.golangci.yaml
.gitlab-ci.yaml
.gitingore
.Makefile
.README.md
deployments
tests

72
Dockerfile Normal file

@ -0,0 +1,72 @@
# BUILD
FROM golang:1.20.3-alpine AS build
# Update depences
RUN apk update && apk add --no-cache curl
# Create build directory
RUN mkdir /app/bin -p
RUN mkdir /bin/golang-migrate -p
# Download migrate app
RUN GOLANG_MIGRATE_VERSION=v4.15.1 && \
curl -L https://github.com/golang-migrate/migrate/releases/download/${GOLANG_MIGRATE_VERSION}/migrate.linux-amd64.tar.gz |\
tar xvz migrate -C /bin/golang-migrate
# Download health check utility
RUN GRPC_HEALTH_PROBE_VERSION=v0.4.6 && \
wget -qO/bin/grpc_health_probe https://github.com/grpc-ecosystem/grpc-health-probe/releases/download/${GRPC_HEALTH_PROBE_VERSION}/grpc_health_probe-linux-amd64 && \
chmod +x /bin/grpc_health_probe
# Set home directory
WORKDIR /app
# Copy go.mod
ADD go.mod go.sum /app/
# Download go depences
RUN go mod download
# Copy all local files
ADD . /app
# Build app
RUN GOOS=linux go build -o bin ./...
# TEST
FROM alpine:latest AS test
# Install packages
RUN apk --no-cache add ca-certificates
ENV GO111MODULE=off
# Create home directory
WORKDIR /app
# Copy build file
COPY --from=build /app/bin/app ./app
# CMD
CMD [ "./app" ]
# MIGRATION
FROM alpine:latest AS migration
# Install packages
RUN apk --no-cache add ca-certificates
# Create home directory
WORKDIR /app
# Copy migration dir
COPY --from=build /app/migrations/test ./migrations
# Install migrate tool
COPY --from=build /bin/golang-migrate /usr/local/bin
# PRODUCTION
FROM alpine:latest AS production
# Install packages
RUN apk --no-cache add ca-certificates
# Create home directory
WORKDIR /app
# Copy build file
COPY --from=build /app/bin/app ./app
# Copy grpc health probe dir
COPY --from=build /bin/grpc_health_probe /bin/grpc_health_probe
# Install migrate tool
COPY --from=build /bin/golang-migrate /usr/local/bin
# CMD
CMD ["./app"]

47
Makefile Normal file

@ -0,0 +1,47 @@
help: ## show this help
@echo 'usage: make [target] ...'
@echo ''
@echo 'targets:'
@egrep '^(.+)\:\ .*##\ (.+)' ${MAKEFILE_LIST} | sed 's/:.*##/#/' | column -t -c 2 -s '#'
install: ## install all go dependencies
go get \
github.com/bufbuild/buf/cmd/buf \
github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway \
github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2 \
google.golang.org/grpc/cmd/protoc-gen-go-grpc \
google.golang.org/protobuf/cmd/protoc-gen-go
generate: ## generate grpc proto for golang
buf generate
go generate ./internal/interface/swagger
test: ## run all layers tests
@make test.unit
@make test.integration
test.unit: ## run unit tests
go test ./...
test.integration: ## run integration tests
@make test.integration.up
@make test.integration.start
@make test.integration.down
test.integration.up: ## build integration test environment
docker-compose -f deployments/test/docker-compose.yaml --env-file ./.env.test up -d
test.integration.start: ## run integration test
go test -tags integration ./tests/integration/...
test.integration.down: ## shutting down integration environment
docker-compose -f deployments/test/docker-compose.yaml --env-file ./.env.test down --volumes --rmi local
run: ## run app
go run ./cmd/app/main.go
dev.up: ## run dev environment
docker-compose -f deployments/dev/docker-compose.yaml up -d
dev.down: ## shutting down dev environment
docker-compose -f deployments/dev/docker-compose.yaml down --volumes --rmi local

@ -1,7 +1,7 @@
package main
import (
"github.com/danilsolovyov/croupierCbrf/app"
"github.com/danilsolovyov/croupierCbrf/internal/app"
"github.com/skeris/appInit"
)

@ -0,0 +1,26 @@
version: "3.3"
services:
cbrfworker-app:
hostname: cbrfworker-service
container_name: cbrfworker-service
tty: true
build:
context: ../../.
dockerfile: Dockerfile
target: test
environment:
- IS_PRODUCTION=false
- DEVELOPMENT=true
- APP_NAME=croupierWorkerQuotes
- APP_ADDR=0.0.0.0:3131
- DATABASE_URI=mongodb://test:test@mongo:27017/croupier?authSource=admin&authMechanism=SCRAM-SHA-1
- DATABASE_TABLE=croupier
- COLLECTION_NAME=quote
ports:
- 3131:3131
networks:
- dev
networks:
dev:

@ -0,0 +1,28 @@
version: "3.3"
services:
cbrfworker-app-staging:
hostname: cbrfworker-service-staging
container_name: cbrfworker-service-staging
image: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG.$CI_PIPELINE_ID
tty: true
environment:
- IS_PRODUCTION=false
- DEVELOPMENT=true
- APP_NAME=croupierWorkerQuotes
- APP_ADDR=0.0.0.0:3131
- DATABASE_URI=mongodb://test:test@mongo:27017/croupier?authSource=admin&authMechanism=SCRAM-SHA-1
- DATABASE_TABLE=croupier
- COLLECTION_NAME=quote
ports:
- 3131:3131
networks:
- backend_external
- default
networks:
backend_external:
driver: bridge
attachable: true
internal: true

@ -0,0 +1,35 @@
version: "3.3"
services:
cbrfworker-app:
build:
context: ../../.
dockerfile: Dockerfile
target: test
environment:
- IS_PRODUCTION=false
- DEVELOPMENT=true
- APP_NAME=croupierWorkerQuotes
- APP_ADDR=0.0.0.0:3131
- DATABASE_URI=mongodb://admin:admin@mongo:27017/admin?authSource=admin&authMechanism=SCRAM-SHA-1
- DATABASE_TABLE=croupier
- COLLECTION_NAME=quote
ports:
- 3131:3131
networks:
- integartion_test
depends_on:
- mongo
mongo:
image: 'mongo:6.0.3'
environment:
MONGO_INITDB_ROOT_USERNAME: admin
MONGO_INITDB_ROOT_PASSWORD: admin
ports:
- '27017:27017'
networks:
- integartion_test
networks:
integartion_test:

@ -5,9 +5,9 @@ import (
"errors"
"net/http"
"github.com/danilsolovyov/croupierCbrf/dal"
"github.com/danilsolovyov/croupierCbrf/handlers"
"github.com/danilsolovyov/croupierCbrf/worker"
"github.com/danilsolovyov/croupierCbrf/internal/dal"
"github.com/danilsolovyov/croupierCbrf/internal/handlers"
"github.com/danilsolovyov/croupierCbrf/internal/worker"
"github.com/gorilla/mux"
"github.com/skeris/appInit"
"github.com/themakers/hlog"

@ -2,9 +2,10 @@ package handlers
import (
"encoding/json"
"github.com/danilsolovyov/croupierCbrf/dal"
"github.com/themakers/hlog"
"net/http"
"github.com/danilsolovyov/croupierCbrf/internal/dal"
"github.com/themakers/hlog"
)
//#region ======== Handler Struct ========

@ -4,8 +4,8 @@ import (
"net/http"
"strconv"
"github.com/danilsolovyov/croupierCbrf/dal"
"github.com/danilsolovyov/croupierCbrf/utils"
"github.com/danilsolovyov/croupierCbrf/internal/dal"
"github.com/danilsolovyov/croupierCbrf/internal/utils"
)
func (h *Handler) GetQuotes(w http.ResponseWriter, r *http.Request) {

@ -3,7 +3,7 @@ package utils_test
import (
"testing"
"github.com/danilsolovyov/croupierCbrf/utils"
"github.com/danilsolovyov/croupierCbrf/internal/utils"
"github.com/stretchr/testify/assert"
)

@ -4,7 +4,7 @@ import (
"fmt"
"math"
"github.com/danilsolovyov/croupierCbrf/dal"
"github.com/danilsolovyov/croupierCbrf/internal/dal"
)
func CurrencyExchange(currencies map[string]dal.Quote, fromCurrency, toCurrency string, amount int64) (int64, error) {

@ -4,8 +4,8 @@ import (
"fmt"
"testing"
"github.com/danilsolovyov/croupierCbrf/dal"
"github.com/danilsolovyov/croupierCbrf/utils"
"github.com/danilsolovyov/croupierCbrf/internal/dal"
"github.com/danilsolovyov/croupierCbrf/internal/utils"
"github.com/stretchr/testify/assert"
)

@ -5,14 +5,15 @@ import (
"encoding/xml"
"errors"
"fmt"
"github.com/danilsolovyov/croupierCbrf/dal"
"github.com/themakers/hlog"
"golang.org/x/text/encoding/charmap"
"io"
"net/http"
"strconv"
"strings"
"time"
"github.com/danilsolovyov/croupierCbrf/internal/dal"
"github.com/themakers/hlog"
"golang.org/x/text/encoding/charmap"
)
type worker struct {