Compare commits

...

80 Commits

Author SHA1 Message Date
fb2ba22f72 Update: 2025-10-27 14:57:21 +01:00
dede386e8b Fixes 2025-10-27 13:54:11 +01:00
7fa00f323f Refactor of pgsql client 2025-10-26 20:29:09 +01:00
65105d6982 Restructured - new game changer 2025-10-26 19:20:59 +01:00
2ac68aed86 Added NoRowsInQuerySet func 2025-10-21 18:26:39 +02:00
bc1b0ff731 Added database package 2025-10-21 13:26:50 +02:00
e97a13d1e8 Updated golang version in go.mod 2025-10-21 13:24:09 +02:00
e0d270a2eb Removed useless packages 2025-10-21 13:23:58 +02:00
b829092503 Added WriteTimeout (100ms) 2025-10-12 19:20:48 +02:00
e16021ee49 Added Ping method to the logger class 2025-10-12 19:17:17 +02:00
69797a214f Added Ping method to the logger class 2025-10-12 17:53:37 +02:00
53e2d49e36 Fix .env file name 2025-10-12 16:38:46 +02:00
f2ab6a94d5 Update module names 2025-10-12 16:30:22 +02:00
1954182e1c Set .env* file names in order 2025-10-12 16:29:40 +02:00
b5852a3e61 Update dependencies 2025-10-11 20:52:27 +02:00
0456346b45 Update repo URL 2025-10-11 20:45:24 +02:00
e6b03fdd02 Removed useless tags 2025-04-26 12:36:34 +02:00
1018e24060 Updated TTL param 2025-04-26 12:05:55 +02:00
ebef6e138d Consul update 2024-12-24 18:15:48 +01:00
7bd8f754d8 Consul update 2024-12-24 18:10:41 +01:00
43574a1d1c Consul update 2024-12-24 18:04:55 +01:00
f130eaedd7 API Basket update 2024-12-24 17:59:01 +01:00
8394feaec7 Debug update 2024-12-24 17:51:02 +01:00
Piotr Biernat
68e6e3ef55 module update 2024-12-06 14:15:02 +01:00
Piotr Biernat
feff40bf55 update 2024-12-06 14:05:06 +01:00
eb1e8a9cb0 consul registration update 2024-07-21 21:11:34 +02:00
2c797164e0 consul registration update 2024-07-21 21:00:49 +02:00
7725e5dd65 debug fix 2024-07-20 20:12:29 +02:00
07c0cd6f2e debug fix 2024-07-20 19:59:12 +02:00
d29bd0810b debug fix 2024-07-20 19:55:33 +02:00
b62c0e5a8c debug fix 2024-07-20 19:03:21 +02:00
a9eb0d0732 debug fix 2024-07-20 18:19:56 +02:00
92b84685c9 routing fix 2024-07-20 17:30:37 +02:00
cd6e62e3bc debug fix 2024-07-20 16:17:13 +02:00
7cf2d91fd8 debug fix 2024-07-20 16:15:20 +02:00
936982731d debug fix 2024-07-20 16:11:06 +02:00
33759c87db debug fix 2024-07-20 15:56:59 +02:00
974f82e9be debug fix 2024-07-20 15:53:05 +02:00
d7dc75c18f debug fix 2024-07-20 15:45:49 +02:00
c62c63249c debug fix 2024-07-20 14:44:45 +02:00
6c290eb66b tls fix 2024-07-20 14:43:47 +02:00
31ce7fc48e tls fix 2024-07-20 14:42:16 +02:00
99957861dc fix ssl support 2024-07-20 14:24:38 +02:00
19d27b4ff6 add ssl support 2024-07-20 14:20:01 +02:00
7f2025ef6f add debug point 2024-07-20 14:18:08 +02:00
3afe78f9e3 fix in consul discovery 2024-07-19 17:06:39 +02:00
eb763ed49c fix in consul discovery 2024-07-19 16:52:54 +02:00
6537d79b19 fix in consul discovery 2024-07-19 16:48:08 +02:00
e55a2f42fe fix in consul discovery 2024-07-19 16:45:42 +02:00
82d68e91b8 fix in consul discovery 2024-07-19 16:41:37 +02:00
767eb5688c fix in consul discovery 2024-07-19 16:39:11 +02:00
37fa05402e fix in consul discovery 2024-07-19 16:30:04 +02:00
615281ae9a fix in consul discovery lib 2024-07-19 16:25:41 +02:00
42532b1d44 FIX Remove RetryIf plugin 2024-07-17 22:59:16 +02:00
1d4164711e FIX RetryIf plugin config 2024-07-17 22:46:28 +02:00
a50778380e Added RetryIf plugin with config 2024-07-17 22:39:49 +02:00
159bce1ff2 Added RetryIf plugin with config 2024-07-17 22:37:26 +02:00
22bc1e29a3 Fix: changed GetFullAddr() method: add debug point 2024-07-17 22:07:16 +02:00
4ce9064fbb Fix: changed GetFullAddr() method 2024-07-17 21:53:35 +02:00
75f7a75379 Fix: switch between domain or ip address for consul registering 2024-07-17 21:18:13 +02:00
398d7a2074 Fix in consul/discovery.go 2024-07-17 20:39:19 +02:00
b699008fa3 Fix for better unregistering? 2024-07-17 18:57:50 +02:00
b1f04badd5 Added healthcheck params in consul tags 2024-07-17 18:32:46 +02:00
f0b5e56e43 Added healthcheck params in consul tags 2024-07-17 18:27:21 +02:00
c644f42ea9 Fixed missing AUTH_HANDLER_URL env issue 2024-07-17 17:52:35 +02:00
941c5fdf92 Fixed missing AUTH_HANDLER_URL env issue 2024-07-17 17:48:24 +02:00
03de7082ab Try to fix consul middlewares 2024-07-17 17:15:39 +02:00
def22f26f1 Try to fix consul middlewares 2024-07-17 17:02:02 +02:00
fd37622ad6 Try to fix consul middlewares 2024-07-17 16:44:41 +02:00
96e08fce4c Try to fix consul middleware provider 2024-07-17 16:40:13 +02:00
0f8eda40ad Try to fix consul middleware provider 2024-07-17 16:32:26 +02:00
3285ee65da Try to fix consul middleware provider 2024-07-17 16:29:38 +02:00
47339bda36 Try to fix consul middleware provider 2024-07-17 16:26:31 +02:00
33269f9726 Try to fix consul middleware provider 2024-07-17 16:23:56 +02:00
5b5a8318a4 Fixed consul tags ordering 2024-07-17 16:20:02 +02:00
42b3a44364 Fixed consul tags ordering 2024-07-17 16:11:14 +02:00
20278f24b3 Fixed consul registered middlewares 2024-07-17 16:07:20 +02:00
ae49c9cdb8 Fixed consul registered middlewares 2024-07-17 16:03:46 +02:00
ea08da8d10 Fixed consul registered address 2024-07-17 15:34:55 +02:00
0aa6fc2aa3 Fixed consul registered tags 2024-07-17 15:22:30 +02:00
13 changed files with 93 additions and 370 deletions

View File

@@ -3,7 +3,8 @@ package api
import ( import (
"fmt" "fmt"
def "git.pbiernat.io/egommerce/api-entities/http" "git.ego.freeddns.org/egommerce/api-entities/basket"
basket "git.ego.freeddns.org/egommerce/api-entities/basket/dto"
"github.com/go-redis/redis/v8" "github.com/go-redis/redis/v8"
) )
@@ -15,9 +16,9 @@ type BasketAPI struct {
httpClient *HttpClient httpClient *HttpClient
} }
func (a *BasketAPI) GetBasket(basketID string) (*def.GetBasketResponse, error) { func (a *BasketAPI) GetBasket(basketID string) (*basket.GetBasketResponseDTO, error) {
req := &def.GetBasketRequest{BasketID: basketID} req := &basket.GetBasketRequestDTO{BasketID: basketID}
res := new(def.GetBasketResponse) res := new(basket.GetBasketResponse)
if err := a.httpClient.SendGet("basket-svc", "/api/v1/basket", req, res); err != nil { if err := a.httpClient.SendGet("basket-svc", "/api/v1/basket", req, res); err != nil {
return nil, err return nil, err
} }
@@ -25,9 +26,9 @@ func (a *BasketAPI) GetBasket(basketID string) (*def.GetBasketResponse, error) {
return res, nil return res, nil
} }
func (a *BasketAPI) GetBasketItems(basketID string) ([]*def.GetBasketItemsResponse, error) { func (a *BasketAPI) GetBasketItems(basketID string) ([]*basket.GetBasketItemsResponseDTO, error) {
url := fmt.Sprintf("/api/v1/basket/%s/items", basketID) url := fmt.Sprintf("/api/v1/basket/%s/items", basketID)
var res []*def.GetBasketItemsResponse var res []*basket.GetBasketItemsResponseDTO
if err := a.httpClient.SendGet("basket-svc", url, nil, &res); err != nil { if err := a.httpClient.SendGet("basket-svc", url, nil, &res); err != nil {
return nil, err return nil, err
} }

View File

@@ -2,21 +2,16 @@ package api
import ( import (
"bytes" "bytes"
"context"
"encoding/json" "encoding/json"
"math/rand"
"net/http" "net/http"
"github.com/go-redis/redis/v8"
) )
type HttpClient struct { type HttpClient struct {
ua string userAgent string
redis *redis.Client
} }
func NewHttpClient(ua string, redis *redis.Client) *HttpClient { func NewHttpClient() *HttpClient {
return &HttpClient{ua, redis} return &HttpClient{userAgent: "internal-http-client"}
} }
func (c *HttpClient) SendGet(api, url string, data, out any) error { func (c *HttpClient) SendGet(api, url string, data, out any) error {
@@ -50,7 +45,7 @@ func (c *HttpClient) SendPost(api, url string, data, out any) (any, error) {
} }
func (c *HttpClient) sendRequest(api, url, method string, data any) (*http.Response, error) { func (c *HttpClient) sendRequest(api, url, method string, data any) (*http.Response, error) {
apiUrl := c.getApiUrl(api) + url apiUrl := api + url // FIXME
client := &http.Client{} client := &http.Client{}
json, err := json.Marshal(&data) json, err := json.Marshal(&data)
@@ -73,23 +68,3 @@ func (c *HttpClient) sendRequest(api, url, method string, data any) (*http.Respo
return res, nil return res, nil
} }
func (c *HttpClient) getApiUrl(api string) string {
ctx, key, apiAddr := context.Background(), "internal__"+api+"__ips", api
// FIXME: key name ^^
cmd := c.redis.LLen(ctx, key)
if cmd.Err() == nil {
len := int(cmd.Val())
if len == 0 {
apiAddr = c.redis.LIndex(ctx, key, 0).Val()
} else {
apiAddr = c.redis.LIndex(ctx, key, int64(rand.Intn(len-0)+0)).Val()
}
}
if apiAddr == "" {
apiAddr = api // default api run on 80 int port
}
return "https://" + apiAddr
}

View File

@@ -0,0 +1,28 @@
package postgresql
// Jackc/pgx helper
import (
"errors"
"github.com/jackc/pgx/v5"
"github.com/jackc/pgx/v5/pgconn"
)
func IsDuplicatedRow(err error) error {
var pgErr *pgconn.PgError
if errors.As(err, &pgErr) && pgErr.Code == "23505" {
return errors.New("duplicated row found")
}
return nil
}
func NoRowsInQuerySet(err error) error {
if err == pgx.ErrNoRows {
return errors.New("no rows found")
}
return nil
}

View File

@@ -1,5 +1,7 @@
package rabbitmq package rabbitmq
// rabbitmq/amqp091-go helper
import ( import (
"bytes" "bytes"
"encoding/json" "encoding/json"
@@ -11,6 +13,25 @@ import (
type Message map[string]interface{} type Message map[string]interface{}
func Connect(url string) (*amqp.Connection, *amqp.Channel, error) {
conn, err := amqp.Dial(url)
if err != nil {
return nil, nil, err
}
ch, err := conn.Channel()
if err != nil {
log.Printf("Failed to open a channel: %v\n", err)
return nil, nil, err
}
return conn, ch, nil
}
func Close(conn *amqp.Connection) error {
return conn.Close()
}
func Serialize(msg any) (string, error) { // FIXME move to separate service func Serialize(msg any) (string, error) { // FIXME move to separate service
var b bytes.Buffer var b bytes.Buffer
encoder := json.NewEncoder(&b) encoder := json.NewEncoder(&b)

View File

@@ -3,7 +3,6 @@ package config
import ( import (
"os" "os"
"github.com/gofiber/fiber/v2/log"
"github.com/joho/godotenv" "github.com/joho/godotenv"
) )
@@ -16,7 +15,7 @@ func init() {
func GetEnv(name string, defVal string) string { func GetEnv(name string, defVal string) string {
env := os.Getenv(name) env := os.Getenv(name)
if env == "" { if env == "" {
log.Panicf("Missing %s env variable", name) return defVal
} }
return env return env

View File

@@ -1,202 +0,0 @@
package consul
import (
"fmt"
"net/http"
"strconv"
"time"
"git.pbiernat.io/egommerce/go-api-pkg/config"
consul "github.com/hashicorp/consul/api"
"github.com/hashicorp/consul/connect"
)
type Service struct {
Name string
Address string
appID string
domain string
pathPrefix string
port int
ttl time.Duration
client *consul.Client
agent *consul.Agent
connect *connect.Service
kv *consul.KV
}
var ErrServiceUnavailable = fmt.Errorf("Service is unavailable")
func NewService(servAddr, id, name, hostname, domain, pathPrefix string, appPort int) (*Service, error) {
s := new(Service)
s.Name = name
s.Address = hostname
s.appID = id
s.domain = domain
s.pathPrefix = pathPrefix
s.port = appPort
s.ttl = time.Second * 10
client, err := consul.NewClient(newClientConfig(servAddr))
if err != nil {
return nil, err
}
s.client = client
s.agent = client.Agent()
s.kv = client.KV()
return s, nil
}
func newClientConfig(serverAddr string) *consul.Config {
conf := consul.DefaultConfig()
conf.Address = serverAddr
return conf
}
func (s *Service) GetID() string {
return fmt.Sprintf("%s:%s", s.Name, s.appID)
}
func (s *Service) GetFullAddr() string {
isTLS := s.port == 443
proto := "http"
if isTLS {
proto = "https"
}
return fmt.Sprintf("%s://%s:%d/", proto, s.domain, s.port)
}
func (s *Service) Register() error {
def := &consul.AgentServiceRegistration{
ID: s.GetID(),
// Kind: consul.ServiceKindConnectProxy,
Name: s.Name,
Address: s.domain,
Port: s.port,
Tags: s.getTags(),
// Connect: &consul.AgentServiceConnect{Native: true},
// Proxy: &consul.AgentServiceConnectProxyConfig{
// DestinationServiceName: s.Name,
// },
Check: &consul.AgentServiceCheck{
TTL: s.ttl.String(),
Status: "passing",
DeregisterCriticalServiceAfter: "10s",
},
}
if err := s.agent.ServiceRegister(def); err != nil {
return err
}
return nil
}
func (s *Service) Unregister() error {
return s.agent.ServiceDeregister(s.GetID())
}
func (s *Service) RegisterHealthChecks() {
go func() { // startup register
ticker := time.NewTicker(time.Second * 1)
for range ticker.C {
if ok, _ := s.healthCheck(); ok {
ticker.Stop()
}
}
}()
go func() { // TTL
interval := s.ttl - (time.Second * 2) // 2 seconds overhead
ticker := time.NewTicker(interval)
for range ticker.C {
if _, err := s.healthCheck(); err != nil {
fmt.Printf("HealthCheck endpoint not available #: %v\n", err)
}
}
}()
}
func (s *Service) Connect() (*connect.Service, error) {
// l := hclog.New(&hclog.LoggerOptions{
// Name: "consul-registry",
// Level: hclog.Trace,
// })
svc, err := connect.NewService(s.Name, s.client)
s.connect = svc
cnf := svc.ServerTLSConfig()
fmt.Printf("CONNECT SERVER:: %s CONFIG:: %v\n", s.Name, cnf)
for k, c := range cnf.Certificates {
fmt.Printf("CONNECT CERT %d: %v", k, c)
}
return svc, err
}
func (s *Service) KV() *consul.KV {
return s.kv
}
func (s *Service) healthCheck() (bool, error) {
alive := func() bool {
client := &http.Client{}
healthUrl := fmt.Sprintf("%s%s?name=%s", s.GetFullAddr(), "health", s.Name)
req, err := http.NewRequest(http.MethodGet, healthUrl, nil)
if err != nil {
return false
}
req.Header.Set("User-Agent", "service/internal")
resp, err := client.Do(req)
if err != nil {
return false
}
defer resp.Body.Close()
var body []byte
resp.Body.Read(body)
return resp.StatusCode == http.StatusOK
}()
if alive {
if err := s.agent.PassTTL("service:"+s.GetID(), "OK"); err != nil {
fmt.Printf("Failed to pass TTL: %v", err)
return false, err
}
return true, nil
}
if err := s.agent.FailTTL("service:"+s.GetID(), ErrServiceUnavailable.Error()); err != nil {
return false, err
}
return false, ErrServiceUnavailable
}
func (s *Service) getTags() []string {
tags := []string{
"traefik.enable=true",
"traefik.http.routers." + s.Name + ".rule=PathPrefix(`" + s.pathPrefix + "`)",
// "traefik.http.routers." + s.Name + ".rule=Host(`" + s.domain + "`)",
"traefik.http.routers." + s.Name + ".entryPoints=https",
// "traefik.http.routers." + s.Name + ".tls=true",
"traefik.http.routers." + s.Name + ".service=" + s.Name,
"traefik.http.routers." + s.Name + ".middlewares=stripprefix_" + s.Name,
// "traefik.http.routers." + s.Name + ".middlewares=auth_" + s.Name + ",requestid_" + s.Name + ",stripprefix_" + s.Name,
"traefik.http.services." + s.Name + ".loadbalancer.server.scheme=http",
"traefik.http.services." + s.Name + ".loadbalancer.server.port=" + strconv.Itoa(s.port),
"traefik.http.services." + s.Name + ".loadbalancer.passhostheader=false",
"traefik.http.middlewares.auth_" + s.Name + ".plugin.auth.handlerURL=" + config.GetEnv("AUTH_HANDLER_URL", ""),
// "traefik.http.middlewares.auth_" + s.Name + ".forwardauth.authRequestHeaders=Cookie",
// "traefik.http.middlewares.auth_" + s.Name + ".forwardauth.authResponseHeaders=Set-Cookie, Server",
// "traefik.http.middlewares.auth_" + s.Name + ".forwardauth.trustForwardHeader=true",
// "traefik.http.middlewares.requestid_" + s.Name + ".plugin.requestid.headerName=X-Request-ID",
"traefik.http.middlewares.stripprefix_" + s.Name + ".stripprefix.prefixes=" + s.pathPrefix,
"traefik.tls.certificates.certfile=/certs/client.cert",
"traefik.tls.certificates.keyfile=/certs/client.key",
}
return tags
}

View File

@@ -1,17 +0,0 @@
package fluentd
import (
"strconv"
"strings"
)
func ParseAddr(addr string) (string, int, error) {
p := strings.Split(addr, ":")
fHost := p[0]
fPort, err := strconv.Atoi(p[1])
if err != nil {
return "", 0, err
}
return fHost, fPort, nil
}

View File

@@ -1,41 +0,0 @@
package fluentd
import (
"fmt"
"log"
"github.com/fluent/fluent-logger-golang/fluent"
)
type Logger struct {
fluent *fluent.Fluent
appName string
}
func NewLogger(appName, fHost string, fPort int) (*Logger, error) {
config := fluent.Config{
FluentHost: fHost,
FluentPort: fPort,
// WriteTimeout: -1,
}
fluent, err := fluent.New(config)
if err != nil {
return nil, err
}
return &Logger{fluent, appName}, nil
}
func (l *Logger) Log(format string, v ...any) {
mapData := map[string]string{
"message": fmt.Sprintf(format, v...),
}
err := l.fluent.Post(l.appName, mapData)
if err != nil {
log.Println("Error sending log: ", err)
}
}
func (l *Logger) Close() error {
return l.fluent.Close()
}

22
go.mod
View File

@@ -1,9 +1,8 @@
module git.pbiernat.io/egommerce/go-api-pkg module git.ego.freeddns.org/egommerce/go-api-pkg
go 1.18 go 1.24
require ( require (
git.pbiernat.io/egommerce/api-entities v0.2.3
github.com/fluent/fluent-logger-golang v1.9.0 github.com/fluent/fluent-logger-golang v1.9.0
github.com/go-redis/redis/v8 v8.11.5 github.com/go-redis/redis/v8 v8.11.5
github.com/hashicorp/consul v1.16.0 github.com/hashicorp/consul v1.16.0
@@ -12,6 +11,12 @@ require (
) )
require ( require (
github.com/jackc/pgpassfile v1.0.0 // indirect
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect
)
require (
git.ego.freeddns.org/egommerce/api-entities v0.3.0 // indirect
github.com/DataDog/datadog-go v3.2.0+incompatible // indirect github.com/DataDog/datadog-go v3.2.0+incompatible // indirect
github.com/armon/go-metrics v0.4.1 // indirect github.com/armon/go-metrics v0.4.1 // indirect
github.com/armon/go-radix v1.0.0 // indirect github.com/armon/go-radix v1.0.0 // indirect
@@ -53,6 +58,7 @@ require (
github.com/hashicorp/raft-autopilot v0.1.6 // indirect github.com/hashicorp/raft-autopilot v0.1.6 // indirect
github.com/hashicorp/serf v0.10.1 // indirect github.com/hashicorp/serf v0.10.1 // indirect
github.com/hashicorp/yamux v0.0.0-20211028200310-0bc27b27de87 // indirect github.com/hashicorp/yamux v0.0.0-20211028200310-0bc27b27de87 // indirect
github.com/jackc/pgx/v5 v5.7.6
github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.17 // indirect github.com/mattn/go-isatty v0.0.17 // indirect
github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
@@ -76,12 +82,12 @@ require (
github.com/stretchr/testify v1.8.3 // indirect github.com/stretchr/testify v1.8.3 // indirect
github.com/tinylib/msgp v1.1.6 // indirect github.com/tinylib/msgp v1.1.6 // indirect
github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926 // indirect github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926 // indirect
golang.org/x/crypto v0.1.0 // indirect golang.org/x/crypto v0.37.0 // indirect
golang.org/x/exp v0.0.0-20230321023759-10a507213a29 // indirect golang.org/x/exp v0.0.0-20230321023759-10a507213a29 // indirect
golang.org/x/net v0.10.0 // indirect golang.org/x/net v0.21.0 // indirect
golang.org/x/sync v0.2.0 // indirect golang.org/x/sync v0.13.0 // indirect
golang.org/x/sys v0.8.0 // indirect golang.org/x/sys v0.32.0 // indirect
golang.org/x/text v0.9.0 // indirect golang.org/x/text v0.24.0 // indirect
golang.org/x/time v0.3.0 // indirect golang.org/x/time v0.3.0 // indirect
google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect
google.golang.org/protobuf v1.30.0 // indirect google.golang.org/protobuf v1.30.0 // indirect

19
go.sum
View File

@@ -35,7 +35,10 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
git.pbiernat.io/egommerce/api-entities v0.2.3/go.mod h1:INXAG5x4+i+vNwg1NpfPHiDW8nY1kn1K7pgLOtX+/I0= git.ego.freeddns.org/egommerce/api-entities v0.2.5 h1:A7KQNXLB3l0ck7/R6MzyU33H490feZOlEodnU6bC+DA=
git.ego.freeddns.org/egommerce/api-entities v0.2.5/go.mod h1:xr9mW9DKq+oNO4cMqtqY3VCAVCn6iImw4MqNj51dTFc=
git.ego.freeddns.org/egommerce/api-entities v0.3.0 h1:IhJNOfze8/D8Hgy8Mr9hoFEwrg45xeFSnVRUnUrC5xc=
git.ego.freeddns.org/egommerce/api-entities v0.3.0/go.mod h1:IqynARw+06GOm4eZGZuepmbi7bUxWBnOB4jd5cI7jf8=
github.com/Azure/azure-sdk-for-go v44.0.0+incompatible h1:e82Yv2HNpS0kuyeCrV29OPKvEiqfs2/uJHic3/3iKdg= github.com/Azure/azure-sdk-for-go v44.0.0+incompatible h1:e82Yv2HNpS0kuyeCrV29OPKvEiqfs2/uJHic3/3iKdg=
github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs=
github.com/Azure/go-autorest/autorest v0.11.18 h1:90Y4srNYrwOtAgVo3ndrQkTYn6kf1Eg/AjTFJ8Is2aM= github.com/Azure/go-autorest/autorest v0.11.18 h1:90Y4srNYrwOtAgVo3ndrQkTYn6kf1Eg/AjTFJ8Is2aM=
@@ -329,6 +332,12 @@ github.com/hashicorp/yamux v0.0.0-20211028200310-0bc27b27de87 h1:xixZ2bWeofWV68J
github.com/hashicorp/yamux v0.0.0-20211028200310-0bc27b27de87/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ= github.com/hashicorp/yamux v0.0.0-20211028200310-0bc27b27de87/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/imdario/mergo v0.3.15 h1:M8XP7IuFNsqUx6VPK2P9OSmsYsI/YFaGil0uD21V3dM= github.com/imdario/mergo v0.3.15 h1:M8XP7IuFNsqUx6VPK2P9OSmsYsI/YFaGil0uD21V3dM=
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-20240606120523-5a60cdf6a761 h1:iCEnooe7UlwOQYpKFhBabPMi4aNAfoODPEFNiAnClxo=
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM=
github.com/jackc/pgx/v5 v5.7.6 h1:rWQc5FwZSPX58r1OQmkuaNicxdmExaEz5A2DO2hUuTk=
github.com/jackc/pgx/v5 v5.7.6/go.mod h1:aruU7o91Tc2q2cFp5h4uP3f6ztExVpyVv88Xl/8Vl8M=
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
@@ -497,6 +506,7 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
@@ -542,6 +552,8 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.1.0 h1:MDRAIl0xIo9Io2xV565hzXHw3zVseKrJKodhohM5CjU= golang.org/x/crypto v0.1.0 h1:MDRAIl0xIo9Io2xV565hzXHw3zVseKrJKodhohM5CjU=
golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw=
golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE=
golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@@ -615,6 +627,7 @@ golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su
golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M=
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -636,6 +649,7 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI= golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI=
golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -692,6 +706,7 @@ golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU=
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols= golang.org/x/term v0.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols=
@@ -704,6 +719,8 @@ golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE=
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0=
golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=

View File

@@ -1,26 +0,0 @@
package rabbitmq
import (
"log"
amqp "github.com/rabbitmq/amqp091-go"
)
func Open(url string) (*amqp.Connection, *amqp.Channel, error) {
conn, err := amqp.Dial(url)
if err != nil {
return nil, nil, err
}
ch, err := conn.Channel()
if err != nil {
log.Printf("Failed to open a channel: %v\n", err)
return nil, nil, err
}
return conn, ch, nil
}
func Close(conn *amqp.Connection) error {
return conn.Close()
}

View File

@@ -1,38 +0,0 @@
package redis
// import (
// "context"
// "strconv"
// "time"
// "github.com/go-redis/redis/v8"
// )
// func NewCache(host string, port int, password string) *redis.Client {
// redis := redis.NewClient(&redis.Options{
// Addr: host + ":" + strconv.Itoa(port),
// Password: password,
// DB: 0,
// })
// defer redis.Close()
// return redis
// }
// func Get(ctx context.Context, key string) (float64, error) {
// // ctx := context.Background() // FIXME
// price, err := s.cache.Get(ctx, key).Float64()
// if err != nil {
// s.log.Log("cache read error(key not exists): %#v", err)
// return 0, err
// }
// return price, nil
// }
// func Set(ctx context.Context, key string, value any, exp time.Duration) error {
// // ctx := context.Background() // FIXME
// s.cache.Set(ctx, key, value, exp)
// return nil
// }