Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 0 additions & 8 deletions .dockerignore

This file was deleted.

10 changes: 8 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,16 @@ RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main main.go

FROM alpine:latest

RUN apk --no-cache add ca-certificates
RUN apk --no-cache add ca-certificates bash curl jq yq

WORKDIR /root/

COPY --from=builder /app/cmd/main .

CMD ["./main"]
COPY configs ./configs
COPY tools ./tools
RUN chmod +x ./tools/load_envs.sh

ENV ENV=prod

CMD ["./tools/load_envs.sh", "./main"]
69 changes: 0 additions & 69 deletions Makefile

This file was deleted.

4 changes: 2 additions & 2 deletions api/userservice/user.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion api/userservice/user_grpc.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 4 additions & 10 deletions cmd/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,30 +15,24 @@ import (
"github.com/esclient/user-service/internal/userservice/handler"
repo "github.com/esclient/user-service/internal/userservice/repository"
"github.com/esclient/user-service/internal/userservice/service"

infisical "github.com/esclient/user-service/internal/infisical"
)

func main() {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()

cfg := config.LoadConfig()

infisicalClient := infisical.NewClient(infisical.InfisicalURL, cfg.InfisicalSecretKey)

secretDBURL, err := infisicalClient.GetSecret(ctx, cfg.InfisicalProjectId, cfg.InfisicalEnv, infisical.SecretPathUserService, "DB_URL")
cfg, err := config.LoadConfig()
if err != nil {
log.Fatal(err)
}

databaseConn, err := repo.NewDatabaseConnection(ctx, secretDBURL.Value)
databaseConn, err := repo.NewDatabaseConnection(ctx, cfg.DatabaseURL)
if err != nil {
log.Fatal(err)
}

repository := repo.NewPostgresUserRepository(databaseConn)

userService := service.NewUserService(repository)
userHandler := handler.NewUserHandler(userService)

Expand All @@ -58,4 +52,4 @@ func main() {
if err := grpcServer.Serve(listener); err != nil {
log.Fatalf("failed to serve: %v", err)
}
}
}
3 changes: 3 additions & 0 deletions configs/dev.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
DATABASE_URL: "postgresql://esclient_devuser:KAFEzSGK45!8M43L@pg4.sweb.ru:5433/esclient_devuser"
HOST: "0.0.0.0"
PORT: "7001"
3 changes: 3 additions & 0 deletions configs/prod.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
DATABASE_URL: "{vault:user-service/prod#database_url}"
HOST: "{vault:user-service/prod#host}"
PORT: "{vault:user-service/prod#port}"
78 changes: 0 additions & 78 deletions internal/infisical/infisical.go

This file was deleted.

62 changes: 19 additions & 43 deletions internal/userservice/config/config.go
Original file line number Diff line number Diff line change
@@ -1,59 +1,35 @@
package config

import (
"log"
"errors"
"os"

"github.com/joho/godotenv"
"github.com/spf13/viper"
)

type Config struct {
Host string `mapstructure:"HOST"`
Port string `mapstructure:"PORT"`

InfisicalSecretKey string `mapstructure:"INFISICAL_SECRET_KEY"`
InfisicalProjectId string `mapstructure:"INFISICAL_PROJECT_ID"`
InfisicalEnv string `mapstructure:"INFISICAL_ENV"`
Host string `mapstructure:"HOST"`
Port string `mapstructure:"PORT"`
DatabaseURL string `mapstructure:"DATABASE_URL"`
}

func LoadConfig() *Config {
if _, err := os.Stat(".env"); err == nil {
godotenv.Load()
}

viper.AutomaticEnv()
if err := viper.BindEnv("HOST"); err != nil {
log.Fatalf("viper.BindEnv HOST error: %v", err)
}

if err := viper.BindEnv("PORT"); err != nil {
log.Fatalf("viper.BindEnv PORT error: %v", err)
func LoadConfig() (*Config, error) {
host, exists := os.LookupEnv("HOST")
if !exists {
return nil, errors.New("HOST environment variable is required")
}

if err := viper.BindEnv("INFISICAL_SECRET_KEY"); err != nil {
log.Fatalf("viper.BindEnv INFISICAL_SECRET_KEY error: %v", err)
port, exists := os.LookupEnv("PORT")
if !exists {
return nil, errors.New("PORT environment variable is required")
}

if err := viper.BindEnv("INFISICAL_PROJECT_ID"); err != nil {
log.Fatalf("viper.BindEnv INFISICAL_PROJECT_ID error: %v", err)
databaseURL, exists := os.LookupEnv("DATABASE_URL")
if !exists {
return nil, errors.New("DATABASE_URL environment variable is required")
}

if err := viper.BindEnv("INFISICAL_ENV"); err != nil {
log.Fatalf("viper.BindEnv INFISICAL_ENV error: %v", err)
}

host := viper.GetString("HOST")
port := viper.GetString("PORT")
infisicalSecretKey := viper.GetString("INFISICAL_SECRET_KEY")
infisicalProjectId := viper.GetString("INFISICAL_PROJECT_ID")
infisicalEnv := viper.GetString("INFISICAL_ENV")

return &Config{
Host: host,
Port: port,
InfisicalSecretKey: infisicalSecretKey,
InfisicalProjectId: infisicalProjectId,
InfisicalEnv: infisicalEnv,
}
}
Host: host,
Port: port,
DatabaseURL: databaseURL,
}, nil
}
28 changes: 28 additions & 0 deletions justfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
set windows-shell := ["sh", "-c"]
set dotenv-load := true

COMMON_JUST_URL := 'https://raw.githubusercontent.com/esclient/tools/refs/heads/main/go/common.just'
LOAD_ENVS_URL := 'https://raw.githubusercontent.com/esclient/tools/refs/heads/main/load_envs.sh'

PROTO_TAG := 'v0.0.11'
PROTO_NAME := 'user.proto'
TMP_DIR := '.proto'
OUT_DIR := 'api/userservice'
PROTO_MODULE := `go list -m`
GO_MODULE_GO_OPT := '--go_opt=module=' + PROTO_MODULE
GO_MODULE_GRPC_OPT := '--go-grpc_opt=module=' + PROTO_MODULE

MKDIR_TOOLS := 'mkdir -p tools'

FETCH_COMMON_JUST := 'curl -fsSL ' + COMMON_JUST_URL + ' -o tools/common.just'
FETCH_LOAD_ENVS := 'curl -fsSL ' + LOAD_ENVS_URL + ' -o tools/load_envs.sh'

import? 'tools/common.just'

default:
@just --list

fetch-tools:
{{MKDIR_TOOLS}}
{{FETCH_COMMON_JUST}}
{{FETCH_LOAD_ENVS}}
37 changes: 37 additions & 0 deletions tools/common.just
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
MKDIR := 'mkdir -p'
RM := 'rm -rf ' + TMP_DIR
DOWN := 'curl -fsSL'
DOWN_OUT := '-o'

clean:
{{RM}}

fetch-proto:
{{MKDIR}} "{{TMP_DIR}}"
{{DOWN}} "https://raw.githubusercontent.com/esclient/protos/{{PROTO_TAG}}/{{PROTO_NAME}}" {{DOWN_OUT}} "{{TMP_DIR}}/{{PROTO_NAME}}"

run:
ENV=dev ./tools/load_envs.sh go run ./cmd

gen-stubs: fetch-proto
{{MKDIR}} "{{OUT_DIR}}"
protoc \
--proto_path="{{TMP_DIR}}" \
--go_out="{{OUT_DIR}}" \
{{GO_MODULE_GO_OPT}} \
--go-grpc_out="{{OUT_DIR}}" \
{{GO_MODULE_GRPC_OPT}} \
"{{TMP_DIR}}/{{PROTO_NAME}}"

update: gen-stubs clean

format:
# placeholder

lint:
# placeholder

test:
# placeholder

prepare: format lint test
Loading
Loading