@@ -4,13 +4,13 @@ import (
4
4
"context"
5
5
"github.com/cockroachdb/errors"
6
6
"github.com/neatplex/nightell-core/internal/config"
7
+ "github.com/neatplex/nightell-core/internal/container"
7
8
"github.com/neatplex/nightell-core/internal/database"
8
9
"github.com/neatplex/nightell-core/internal/gc"
9
10
httpServer "github.com/neatplex/nightell-core/internal/http/server"
10
11
"github.com/neatplex/nightell-core/internal/logger"
11
12
"github.com/neatplex/nightell-core/internal/mailer"
12
13
"github.com/neatplex/nightell-core/internal/s3"
13
- "github.com/neatplex/nightell-core/internal/services/container"
14
14
"go.uber.org/zap"
15
15
"os"
16
16
"os/signal"
@@ -20,50 +20,51 @@ import (
20
20
// App integrates the modules to serve.
21
21
type App struct {
22
22
context context.Context
23
- Config * config.Config
24
- Logger * logger.Logger
25
- S3 * s3.S3
26
23
HttpServer * httpServer.Server
27
- MySQL * database.Database
28
24
Container * container.Container
29
- Mailer * mailer.Mailer
30
- Gc * gc.Gc
31
25
}
32
26
33
27
// New creates an app from the given configuration file.
34
28
func New () (a * App , err error ) {
35
29
a = & App {}
36
30
37
- a . Config = config .New ()
38
- if err = a . Config .Init (); err != nil {
39
- return nil , errors .WithStack (err )
31
+ c : = config .New ()
32
+ if err = c .Init (); err != nil {
33
+ return a , errors .WithStack (err )
40
34
}
41
- a .Logger = logger .New (a .Config .Logger .Level , a .Config .Logger .Format , a .Config .Development )
42
- if err = a .Logger .Init (); err != nil {
43
- return nil , errors .WithStack (err )
35
+
36
+ l := logger .New (c .Logger .Level , c .Logger .Format , c .Development )
37
+ if err = l .Init (); err != nil {
38
+ return a , errors .WithStack (err )
39
+ }
40
+
41
+ db := database .New (c , l )
42
+ if err = db .Init (); err != nil {
43
+ return a , errors .WithStack (err )
44
44
}
45
- a .Logger .Debug ("app: Config & LoggerProxy initialized" )
46
-
47
- a .Mailer = mailer .New (a .Config , a .Logger )
48
- a .MySQL = database .New (a .Config , a .Logger )
49
- a .S3 = s3 .New (a .Config , a .Logger )
50
- a .Container = container .New (a .MySQL , a .S3 , a .Mailer )
51
- a .Gc = gc .New (a .MySQL , a .S3 , a .Logger )
52
- a .HttpServer = httpServer .New (a .Config , a .Logger , a .Container , a .Mailer )
53
- a .Logger .Debug ("app: application modules initialized" )
45
+
46
+ awsS3 := s3 .New (c , l )
47
+ if err = awsS3 .Init (); err != nil {
48
+ return a , errors .WithStack (err )
49
+ }
50
+
51
+ s3gc := gc .New (db , awsS3 , l )
52
+ s3gc .Init ()
53
+
54
+ m := mailer .New (c , l )
55
+
56
+ a .Container = container .New (c , l , awsS3 , db , m , s3gc )
57
+ a .HttpServer = httpServer .New (a .Container )
58
+
54
59
a .setupSignalListener ()
55
60
61
+ l .Debug ("app: modules initialized" )
62
+
56
63
return a , nil
57
64
}
58
65
59
66
func (a * App ) Init () error {
60
- if err := a .MySQL .Init (); err != nil {
61
- return errors .WithStack (err )
62
- }
63
- if err := a .S3 .Init (); err != nil {
64
- return errors .WithStack (err )
65
- }
66
- a .Gc .Init ()
67
+
67
68
return nil
68
69
}
69
70
@@ -77,7 +78,7 @@ func (a *App) setupSignalListener() {
77
78
78
79
go func () {
79
80
s := <- signalChannel
80
- a .Logger .Info ("app: system call" , zap .String ("signal" , s .String ()))
81
+ a .Container . Logger .Info ("app: system call" , zap .String ("signal" , s .String ()))
81
82
cancel ()
82
83
}()
83
84
}
@@ -86,11 +87,11 @@ func (a *App) Close() {
86
87
if a .HttpServer != nil {
87
88
a .HttpServer .Close ()
88
89
}
89
- if a .MySQL != nil {
90
- a .MySQL .Close ()
90
+ if a .Container . DB != nil {
91
+ a .Container . DB .Close ()
91
92
}
92
- if a .Logger != nil {
93
- a .Logger .Close ()
93
+ if a .Container . Logger != nil {
94
+ a .Container . Logger .Close ()
94
95
}
95
96
}
96
97
0 commit comments