-
Notifications
You must be signed in to change notification settings - Fork 0
/
goceng.go
102 lines (79 loc) · 1.8 KB
/
goceng.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package goceng
import (
"context"
"github.com/ikhsan892/goceng/application/infrastructures"
"github.com/jackc/pgx/v5"
"github.com/meilisearch/meilisearch-go"
"go.uber.org/zap"
"log"
"os"
)
type App interface {
DB() *pgx.Conn
SearchEngine() *meilisearch.Client
WithDBConnection(name string) *pgx.Conn
Settings() Config
Shutdown() error
ZapLogger() *zap.Logger
}
func New() *Goceng {
g := &Goceng{}
g.Start()
return g
}
type Goceng struct {
pgConns map[string]*pgx.Conn
searchEngine *meilisearch.Client
ctx context.Context
cfg Config
logger *zap.Logger
notification chan struct{}
}
func (g *Goceng) DB() *pgx.Conn {
return g.WithDBConnection("default")
}
func (g *Goceng) WithDBConnection(name string) *pgx.Conn {
return g.pgConns[name]
}
func (g *Goceng) initPostgreSQL(cfg Config) error {
conns := make(map[string]*pgx.Conn)
var err error
conns["default"], err = infrastructures.NewPostgreSQL(g.ctx, cfg.DB.URL)
g.pgConns = conns
return err
}
func (g *Goceng) initMeilisearch(cfg Config) {
g.searchEngine = meilisearch.NewClient(meilisearch.ClientConfig{
Host: "http://127.0.0.1:7700",
APIKey: "",
Timeout: 0,
})
}
func (g *Goceng) Settings() Config {
return g.cfg
}
func (g Goceng) ZapLogger() *zap.Logger {
return g.logger
}
func (g Goceng) SearchEngine() *meilisearch.Client {
return g.searchEngine
}
// starting point of application
func (g *Goceng) Start() {
ctx := context.Background()
cfg := newConfig()
g.ctx = ctx
g.notification = make(chan struct{}, 1)
g.cfg = cfg
g.logger = NewZapLogger()
if err := g.initPostgreSQL(cfg); err != nil {
log.Fatal(err)
os.Exit(1)
}
log.Println("application started")
}
// for shutdown
func (g *Goceng) Shutdown() error {
close(g.notification)
return g.pgConns["default"].Close(g.ctx)
}