/
pubsub.go
77 lines (67 loc) · 1.96 KB
/
pubsub.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
package main
import (
"context"
"fmt"
"log"
"cloud.google.com/go/pubsub"
"github.com/ditointernet/tradulab-service/adapters"
"github.com/ditointernet/tradulab-service/internal/core/services"
"github.com/ditointernet/tradulab-service/internal/repository"
"github.com/ditointernet/tradulab-service/internal/storage"
"github.com/ditointernet/tradulab-service/internal/subscriber"
"google.golang.org/api/option"
)
func main() {
env, err := adapters.GoDotEnvVariable()
if err != nil {
fmt.Println("Error during environment variables build", err.Error())
return
}
db := adapters.NewDatabase(&adapters.Config{
User: env.User,
Host: env.Host,
Password: env.Password,
DbName: env.DbName,
Port: env.Port,
})
sql, err := db.DB()
if err != nil {
panic(err)
}
fRepository := repository.MustNewFile(sql)
storage := storage.MustNewStorage(
context.Background(),
env.ProjectID,
env.BucketName,
env.ExpirationTime,
env.AllowedType,
)
fService := services.MustNewFile(fRepository, storage)
pRepository := repository.MustNewPhrase(sql)
pService := services.MustNewPhrase(pRepository, storage)
cred := &adapters.Config{
Credentials: env.Credentials,
ProjectID: env.ProjectID,
Subscription: env.Subscription,
}
ctx := context.Background()
client, err := pubsub.NewClient(ctx, cred.ProjectID, option.WithCredentialsFile(cred.Credentials))
if err != nil {
panic(err)
}
log.Println("Listening to subscription")
sub := client.Subscription(cred.Subscription)
sub.ReceiveSettings.Synchronous = true
sub.ReceiveSettings.MaxOutstandingMessages = 1
handler := subscriber.MustNewHandlerJSON(*pService)
message := subscriber.MustNewSubscriber(*fService, storage, *handler)
err = sub.Receive(ctx, func(c context.Context, m *pubsub.Message) {
err := message.HandleMessage(c, m)
if err != nil {
fmt.Println("Couldn't handle message", err.Error())
}
})
if err != nil {
fmt.Println("Error receiving message", err.Error())
}
}