👔 Added redirects support in server use case

This commit is contained in:
Maxim Lebedev 2023-12-09 12:43:36 +06:00
parent 8db047603d
commit 421a45afcb
Signed by: toby3d
GPG Key ID: 1F14E25B7C119FC5
3 changed files with 66 additions and 11 deletions

View File

@ -12,7 +12,8 @@ type UseCase interface {
}
var (
ErrParams error = errors.New("site not contains any params")
ErrServer error = errors.New("site not contains 'server' param")
ErrServerHeader error = errors.New("'server' param in site not contains 'header' param")
ErrParams error = errors.New("site not contains any params")
ErrServer error = errors.New("site not contains 'server' param")
ErrServerHeaders error = errors.New("'server' param in site not contains 'headers' param")
ErrServerRedirects error = errors.New("'server' param in site not contains 'redirects' param")
)

View File

@ -23,12 +23,18 @@ func (serverUseCase) Do(ctx context.Context, site domain.Site) (*domain.Server,
return nil, server.ErrServer
}
serverHeadersValues, ok := serverMap["headers"].([]any)
if !ok {
return nil, server.ErrServerHeader
}
out := domain.NewServer()
parseHeaders(out, serverMap)
parseRedirects(out, serverMap)
return out, nil
}
func parseHeaders(dst *domain.Server, params map[string]any) error {
serverHeadersValues, ok := params["headers"].([]any)
if !ok {
return server.ErrServerHeaders
}
for i := range serverHeadersValues {
headerMap, ok := serverHeadersValues[i].(map[string]any)
@ -59,8 +65,46 @@ func (serverUseCase) Do(ctx context.Context, site domain.Site) (*domain.Server,
header.Headers[name] = v
}
out.Headers = append(out.Headers, header)
dst.Headers = append(dst.Headers, header)
}
return out, nil
return nil
}
func parseRedirects(dst *domain.Server, params map[string]any) error {
serverRedirectsValues, ok := params["redirects"].([]any)
if !ok {
return server.ErrServerRedirects
}
for i := range serverRedirectsValues {
redirectMap, ok := serverRedirectsValues[i].(map[string]any)
if !ok {
continue
}
redirect := domain.Redirect{
From: "",
To: "",
Status: 0,
Force: false,
}
redirect.Force, _ = redirectMap["force"].(bool)
if redirect.From, ok = redirectMap["from"].(string); !ok {
continue
}
if redirect.To, ok = redirectMap["to"].(string); !ok {
continue
}
if redirect.Status, ok = redirectMap["status"].(int); !ok {
continue
}
dst.Redirects = append(dst.Redirects, redirect)
}
return nil
}

View File

@ -34,7 +34,17 @@ func TestDo(t *testing.T) {
"X-Testing": `sample-text`,
},
}},
Redirects: make([]domain.Redirect, 0),
Redirects: []domain.Redirect{{
From: "/foo/bar",
To: "/bar/foo",
Status: 302,
Force: false,
}, {
From: "/foo",
To: "https://example.com/",
Status: 301,
Force: true,
}},
}
if diff := cmp.Diff(actual, expect); diff != "" {
t.Error(diff)