Skip to content

Commit a18830d

Browse files
Minor fixes and improvements (#96)
1 parent 8da869a commit a18830d

66 files changed

Lines changed: 4244 additions & 393 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitignore

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,7 @@
77
*.test
88
*.out
99

10-
# Dependency directories and files
11-
vendor/
12-
**/go.sum
13-
**/go.work.sum
14-
15-
# others
10+
# Others
1611
.env
1712
.env.*
1813
*.iml
@@ -26,3 +21,4 @@ build/
2621
**/*.generated.go
2722
**/*.generated.ts
2823
i18n/*.md
24+
coverage.out

Dockerfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ ENV NGINX_IGNITION_NGINX_BINARY_PATH="/usr/sbin/nginx" \
2828

2929
ENTRYPOINT ["/opt/nginx-ignition/nginx-ignition"]
3030
WORKDIR /opt/nginx-ignition
31+
VOLUME /opt/nginx-ignition/data
3132

3233
RUN apk update && \
3334
apk upgrade && \

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ clean:
151151
done
152152

153153
.backend-test: .backend-test-mocks .generate-i18n-files
154-
go test \
154+
go test -coverprofile=coverage.out -covermode=atomic \
155155
./api/... \
156156
./application/... \
157157
./certificate/commons/... \

api/go.mod

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ module dillmann.com.br/nginx-ignition/api
33
go 1.26
44

55
require (
6-
github.com/gin-gonic/gin v1.11.0
6+
github.com/gin-gonic/gin v1.12.0
77
github.com/golang-jwt/jwt/v5 v5.3.1
88
github.com/google/uuid v1.6.0
99
github.com/stretchr/testify v1.11.1
@@ -26,7 +26,6 @@ require (
2626
github.com/goccy/go-yaml v1.19.2 // indirect
2727
github.com/json-iterator/go v1.1.13-0.20220915233716-71ac16282d12 // indirect
2828
github.com/klauspost/cpuid/v2 v2.3.0 // indirect
29-
github.com/kr/text v0.2.0 // indirect
3029
github.com/leodido/go-urn v1.4.0 // indirect
3130
github.com/mattn/go-isatty v0.0.20 // indirect
3231
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
@@ -38,9 +37,10 @@ require (
3837
github.com/rogpeppe/go-internal v1.14.1 // indirect
3938
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
4039
github.com/ugorji/go/codec v1.3.1 // indirect
40+
go.mongodb.org/mongo-driver/v2 v2.5.0 // indirect
4141
golang.org/x/arch v0.24.0 // indirect
4242
golang.org/x/crypto v0.48.0 // indirect
43-
golang.org/x/net v0.50.0 // indirect
43+
golang.org/x/net v0.51.0 // indirect
4444
golang.org/x/sys v0.41.0 // indirect
4545
google.golang.org/protobuf v1.36.11 // indirect
4646
gopkg.in/yaml.v3 v3.0.1 // indirect

api/go.sum

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
github.com/bytedance/gopkg v0.1.3 h1:TPBSwH8RsouGCBcMBktLt1AymVo2TVsBVCY4b6TnZ/M=
2+
github.com/bytedance/sonic v1.15.0 h1:/PXeWFaR5ElNcVE84U0dOHjiMHQOwNIx3K4ymzh/uSE=
3+
github.com/bytedance/sonic/loader v0.5.0 h1:gXH3KVnatgY7loH5/TkeVyXPfESoqSBSBEiDd5VjlgE=
4+
github.com/cloudwego/base64x v0.1.6 h1:t11wG9AECkCDk5fMSoxmufanudBtJ+/HemLstXDLI2M=
5+
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
6+
github.com/gabriel-vasile/mimetype v1.4.13 h1:46nXokslUBsAJE/wMsp5gtO500a4F3Nkz9Ufpk2AcUM=
7+
github.com/gin-contrib/sse v1.1.0 h1:n0w2GMuUpWDVp7qSpvze6fAu9iRxJY4Hmj6AmBOU05w=
8+
github.com/gin-gonic/gin v1.12.0 h1:b3YAbrZtnf8N//yjKeU2+MQsh2mY5htkZidOM7O0wG8=
9+
github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=
10+
github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
11+
github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
12+
github.com/go-playground/validator/v10 v10.30.1 h1:f3zDSN/zOma+w6+1Wswgd9fLkdwy06ntQJp0BBvFG0w=
13+
github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4=
14+
github.com/goccy/go-yaml v1.19.2 h1:PmFC1S6h8ljIz6gMRBopkjP1TVT7xuwrButHID66PoM=
15+
github.com/golang-jwt/jwt/v5 v5.3.1 h1:kYf81DTWFe7t+1VvL7eS+jKFVWaUnK9cB1qbwn63YCY=
16+
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
17+
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
18+
github.com/json-iterator/go v1.1.13-0.20220915233716-71ac16282d12 h1:9Nu54bhS/H/Kgo2/7xNSUuC5G28VR8ljfrLKU2G4IjU=
19+
github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y=
20+
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
21+
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
22+
github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ=
23+
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
24+
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
25+
github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee h1:W5t00kpgFdJifH4BDsTlE89Zl93FEloxaWZfGcifgq8=
26+
github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4=
27+
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
28+
github.com/quic-go/qpack v0.6.0 h1:g7W+BMYynC1LbYLSqRt8PBg5Tgwxn214ZZR34VIOjz8=
29+
github.com/quic-go/quic-go v0.59.0 h1:OLJkp1Mlm/aS7dpKgTc6cnpynnD2Xg7C1pwL6vy/SAw=
30+
github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
31+
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
32+
github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
33+
github.com/ugorji/go/codec v1.3.1 h1:waO7eEiFDwidsBN6agj1vJQ4AG7lh2yqXyOXqhgQuyY=
34+
go.mongodb.org/mongo-driver/v2 v2.5.0 h1:yXUhImUjjAInNcpTcAlPHiT7bIXhshCTL3jVBkF3xaE=
35+
go.uber.org/mock v0.6.0 h1:hyF9dfmbgIX5EfOdasqLsWD6xqpNZlXblLB/Dbnwv3Y=
36+
golang.org/x/arch v0.24.0 h1:qlJ3M9upxvFfwRM51tTg3Yl+8CP9vCC1E7vlFpgv99Y=
37+
golang.org/x/crypto v0.48.0 h1:/VRzVqiRSggnhY7gNRxPauEQ5Drw9haKdM0jqfcCFts=
38+
golang.org/x/net v0.51.0 h1:94R/GTO7mt3/4wIKpcR5gkGmRLOuE/2hNGeWq/GBIFo=
39+
golang.org/x/sys v0.41.0 h1:Ivj+2Cp/ylzLiEU89QhWblYnOE9zerudt9Ftecq2C6k=
40+
golang.org/x/text v0.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk=
41+
google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
42+
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
43+
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=

api/i18n/artifacts_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ func newDictionary() i18n.Dictionary {
88
return i18n.En()
99
}
1010

11-
func newDictionaryDTO() dictionaryDTO {
11+
func newDictionaryDTO() dictionaryResponseDTO {
1212
baseDict := i18n.En()
13-
return dictionaryDTO{
13+
return dictionaryResponseDTO{
1414
Language: baseDict.Language().String(),
1515
Messages: baseDict.Raw(),
1616
}

api/i18n/converter.go

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,25 @@ import (
66
"dillmann.com.br/nginx-ignition/i18n"
77
)
88

9-
func toDTO(
10-
defaultLanguage language.Tag,
9+
func toDictionaryDTO(dictionary i18n.Dictionary) dictionaryResponseDTO {
10+
return dictionaryResponseDTO{
11+
Messages: dictionary.Raw(),
12+
Language: dictionary.Language().String(),
13+
}
14+
}
15+
16+
func toAvailableLanguagesDTO(
1117
dictionaries []i18n.Dictionary,
12-
) dictionariesDTO {
13-
output := make([]dictionaryDTO, len(dictionaries))
18+
defaultLanguage language.Tag,
19+
) availableLanguagesResponseDTO {
20+
languages := make([]string, len(dictionaries))
1421

1522
for index := range dictionaries {
16-
output[index] = dictionaryDTO{
17-
Language: dictionaries[index].Language().String(),
18-
Messages: dictionaries[index].Raw(),
19-
}
23+
languages[index] = dictionaries[index].Language().String()
2024
}
2125

22-
return dictionariesDTO{
26+
return availableLanguagesResponseDTO{
27+
Available: languages,
2328
DefaultLanguage: defaultLanguage.String(),
24-
Dictionaries: output,
2529
}
2630
}

api/i18n/converter_test.go

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,28 +10,39 @@ import (
1010
)
1111

1212
func Test_converter(t *testing.T) {
13-
t.Run("toDTO", func(t *testing.T) {
14-
t.Run("maps dictionaries correctly", func(t *testing.T) {
13+
t.Run("toDictionaryDTO", func(t *testing.T) {
14+
t.Run("maps dictionary correctly", func(t *testing.T) {
15+
dict := newDictionary()
16+
expected := newDictionaryDTO()
17+
18+
result := toDictionaryDTO(dict)
19+
20+
assert.Equal(t, expected, result)
21+
})
22+
})
23+
24+
t.Run("toAvailableLanguagesDTO", func(t *testing.T) {
25+
t.Run("maps available languages correctly", func(t *testing.T) {
1526
dictionaries := []i18n.Dictionary{newDictionary()}
1627
defaultLanguage := language.AmericanEnglish
17-
expected := dictionariesDTO{
28+
expected := availableLanguagesResponseDTO{
1829
DefaultLanguage: defaultLanguage.String(),
19-
Dictionaries: []dictionaryDTO{newDictionaryDTO()},
30+
Available: []string{newDictionary().Language().String()},
2031
}
2132

22-
result := toDTO(defaultLanguage, dictionaries)
33+
result := toAvailableLanguagesDTO(dictionaries, defaultLanguage)
2334

2435
assert.Equal(t, expected, result)
2536
})
2637

2738
t.Run("returns empty slice for empty input", func(t *testing.T) {
2839
defaultLanguage := language.AmericanEnglish
29-
expected := dictionariesDTO{
40+
expected := availableLanguagesResponseDTO{
3041
DefaultLanguage: defaultLanguage.String(),
31-
Dictionaries: []dictionaryDTO{},
42+
Available: []string{},
3243
}
3344

34-
result := toDTO(defaultLanguage, nil)
45+
result := toAvailableLanguagesDTO(nil, defaultLanguage)
3546

3647
assert.Equal(t, expected, result)
3748
})

api/i18n/dto.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
package i18n
22

3-
type dictionariesDTO struct {
4-
DefaultLanguage string `json:"defaultLanguage"`
5-
Dictionaries []dictionaryDTO `json:"dictionaries"`
6-
}
7-
type dictionaryDTO struct {
3+
type dictionaryResponseDTO struct {
84
Messages map[string]string `json:"messages"`
95
Language string `json:"languageTag"`
106
}
7+
8+
type availableLanguagesResponseDTO struct {
9+
DefaultLanguage string `json:"default"`
10+
Available []string `json:"available"`
11+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package i18n
2+
3+
import (
4+
"net/http"
5+
6+
"github.com/gin-gonic/gin"
7+
8+
"dillmann.com.br/nginx-ignition/core/common/i18n"
9+
)
10+
11+
type getAvailableLanguagesHandler struct {
12+
commands i18n.Commands
13+
}
14+
15+
func (h getAvailableLanguagesHandler) handle(ctx *gin.Context) {
16+
dictionaries := h.commands.GetDictionaries()
17+
defaultLanguage := h.commands.DefaultLanguage()
18+
19+
ctx.JSON(http.StatusOK, toAvailableLanguagesDTO(dictionaries, defaultLanguage))
20+
}

0 commit comments

Comments
 (0)