Skip to content

Commit 8f7b616

Browse files
authored
Merge pull request #23 from capcom6/feature/privacy-hash
Hashed messages
2 parents bb64fa1 + a9a2265 commit 8f7b616

File tree

8 files changed

+118
-44
lines changed

8 files changed

+118
-44
lines changed

api/swagger.json

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -390,6 +390,11 @@
390390
"maxLength": 36,
391391
"example": "PyDmBQZZXYmyxMwED8Fzy"
392392
},
393+
"isHashed": {
394+
"description": "Хэшировано",
395+
"type": "boolean",
396+
"example": false
397+
},
393398
"recipients": {
394399
"description": "Детализация состояния по получателям",
395400
"type": "array",
@@ -504,7 +509,7 @@
504509
"example": "timeout"
505510
},
506511
"phoneNumber": {
507-
"description": "Номер телефона",
512+
"description": "Номер телефона или первые 16 символов SHA256",
508513
"type": "string",
509514
"minLength": 10,
510515
"example": "79990001234"

api/swagger.yaml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,10 @@ definitions:
5858
example: PyDmBQZZXYmyxMwED8Fzy
5959
maxLength: 36
6060
type: string
61+
isHashed:
62+
description: Хэшировано
63+
example: false
64+
type: boolean
6165
recipients:
6266
description: Детализация состояния по получателям
6367
items:
@@ -144,7 +148,7 @@ definitions:
144148
example: timeout
145149
type: string
146150
phoneNumber:
147-
description: Номер телефона
151+
description: Номер телефона или первые 16 символов SHA256
148152
example: "79990001234"
149153
minLength: 10
150154
type: string

internal/infra/http/cli.go

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,33 +3,32 @@ package http
33
import (
44
"context"
55

6-
"github.com/gofiber/fiber/v2"
76
"go.uber.org/fx"
87
"go.uber.org/zap"
98
)
109

1110
type RunServerParams struct {
1211
fx.In
1312

14-
Config Config
15-
App *fiber.App
13+
Server *Server
1614
Logger *zap.Logger
1715
LC fx.Lifecycle
16+
Shut fx.Shutdowner
1817
}
1918

2019
func Run(params RunServerParams) error {
21-
go func() {
22-
params.Logger.Info("Starting server...")
23-
24-
err := params.App.Listen(params.Config.Listen)
25-
if err != nil {
26-
params.Logger.Error("Error starting server", zap.Error(err))
27-
}
28-
}()
29-
3020
params.LC.Append(fx.Hook{
21+
OnStart: func(context.Context) error {
22+
go func() {
23+
if err := params.Server.Start(); err != nil {
24+
params.Logger.Error("Error starting server", zap.Error(err))
25+
params.Shut.Shutdown()
26+
}
27+
}()
28+
return nil
29+
},
3130
OnStop: func(ctx context.Context) error {
32-
return params.App.ShutdownWithContext(ctx)
31+
return params.Server.Stop(ctx)
3332
},
3433
})
3534

internal/infra/http/module.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,8 @@ var Module = fx.Module(
1111
fx.Decorate(func(log *zap.Logger) *zap.Logger {
1212
return log.Named("http")
1313
}),
14-
fx.Provide(
15-
New,
16-
),
14+
fx.Provide(New),
15+
fx.Provide(NewServer),
1716
)
1817

1918
func init() {

internal/infra/http/server.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package http
2+
3+
import (
4+
"context"
5+
6+
"github.com/gofiber/fiber/v2"
7+
"go.uber.org/zap"
8+
)
9+
10+
type Server struct {
11+
Config Config
12+
App *fiber.App
13+
Logger *zap.Logger
14+
}
15+
16+
func NewServer(config Config, app *fiber.App, logger *zap.Logger) *Server {
17+
return &Server{
18+
Config: config,
19+
App: app,
20+
Logger: logger,
21+
}
22+
}
23+
24+
func (s *Server) Start() error {
25+
s.Logger.Info("Starting server at " + s.Config.Listen + "...")
26+
27+
return s.App.Listen(s.Config.Listen)
28+
}
29+
30+
func (s *Server) Stop(ctx context.Context) error {
31+
defer s.Logger.Info("Server stopped")
32+
return s.App.ShutdownWithContext(ctx)
33+
}

internal/sms-gateway/app.go

Lines changed: 58 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package smsgateway
22

33
import (
4+
"context"
5+
"sync"
6+
47
appconfig "github.com/capcom6/sms-gateway/internal/config"
58
"github.com/capcom6/sms-gateway/internal/infra/cli"
69
"github.com/capcom6/sms-gateway/internal/infra/db"
@@ -33,7 +36,7 @@ var Module = fx.Module(
3336
)
3437

3538
func Run() {
36-
cli.DefaultCommand = "http:run"
39+
cli.DefaultCommand = "start"
3740
fx.New(
3841
cli.GetModule(),
3942
Module,
@@ -44,3 +47,57 @@ func Run() {
4447
}),
4548
).Run()
4649
}
50+
51+
type StartParams struct {
52+
fx.In
53+
54+
LC fx.Lifecycle
55+
Logger *zap.Logger
56+
Shut fx.Shutdowner
57+
58+
Server *http.Server
59+
HashingTask *tasks.HashingTask
60+
}
61+
62+
func Start(p StartParams) error {
63+
ctx, cancel := context.WithCancel(context.Background())
64+
wg := &sync.WaitGroup{}
65+
p.LC.Append(fx.Hook{
66+
OnStart: func(_ context.Context) error {
67+
wg.Add(1)
68+
69+
go func() {
70+
defer wg.Done()
71+
p.HashingTask.Run(ctx)
72+
}()
73+
74+
wg.Add(1)
75+
go func() {
76+
defer wg.Done()
77+
if err := p.Server.Start(); err != nil {
78+
p.Logger.Error("Error starting server", zap.Error(err))
79+
_ = p.Shut.Shutdown()
80+
}
81+
}()
82+
83+
p.Logger.Info("Service started")
84+
85+
return nil
86+
},
87+
OnStop: func(_ context.Context) error {
88+
cancel()
89+
_ = p.Server.Stop(ctx)
90+
wg.Wait()
91+
92+
p.Logger.Info("Service stopped")
93+
94+
return nil
95+
},
96+
})
97+
98+
return nil
99+
}
100+
101+
func init() {
102+
cli.Register("start", Start)
103+
}
Lines changed: 1 addition & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package tasks
22

33
import (
4-
"context"
5-
64
"go.uber.org/fx"
75
"go.uber.org/zap"
86
)
@@ -12,26 +10,5 @@ var Module = fx.Module(
1210
fx.Decorate(func(log *zap.Logger) *zap.Logger {
1311
return log.Named("tasks")
1412
}),
15-
fx.Provide(
16-
NewHashingTask,
17-
fx.Private,
18-
),
19-
fx.Invoke(
20-
func(lc fx.Lifecycle, task *HashingTask) error {
21-
ctx, cancel := context.WithCancel(context.Background())
22-
23-
lc.Append(fx.Hook{
24-
OnStart: func(_ context.Context) error {
25-
go task.Run(ctx)
26-
return nil
27-
},
28-
OnStop: func(_ context.Context) error {
29-
cancel()
30-
return nil
31-
},
32-
})
33-
34-
return nil
35-
},
36-
),
13+
fx.Provide(NewHashingTask),
3714
)

pkg/smsgateway/domain.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ type Message struct {
2424
type MessageState struct {
2525
ID string `json:"id,omitempty" validate:"omitempty,max=36" example:"PyDmBQZZXYmyxMwED8Fzy"` // Идентификатор
2626
State ProcessState `json:"state" validate:"required" example:"Pending"` // Состояние
27-
IsHashed bool `json:"isHashed" validate:"required" example:"false"` // Хэшировано
27+
IsHashed bool `json:"isHashed" example:"false"` // Хэшировано
2828
Recipients []RecipientState `json:"recipients" validate:"required,min=1,dive"` // Детализация состояния по получателям
2929
}
3030

0 commit comments

Comments
 (0)