refactor: monitor add - new endpoint for checking tribe tags (#40)
Reviewed-on: #40
This commit is contained in:
parent
91d2405912
commit
661f26ecea
|
@ -76,8 +76,14 @@ func (m *Monitor) Create(ctx context.Context, groupID, serverID, tribeTag string
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// check if tribe exists
|
tribes, err := m.client.ListTribes(ctx, group.VersionCode, group.ServerKey, twhelp.ListTribesQueryParams{
|
||||||
tribe, err := m.client.GetTribeByTag(ctx, group.VersionCode, group.ServerKey, tribeTag)
|
Limit: 1,
|
||||||
|
Tags: []string{tribeTag},
|
||||||
|
Deleted: twhelp.NullBool{
|
||||||
|
Valid: true,
|
||||||
|
Bool: false,
|
||||||
|
},
|
||||||
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
var apiErr twhelp.APIError
|
var apiErr twhelp.APIError
|
||||||
if !errors.As(err, &apiErr) {
|
if !errors.As(err, &apiErr) {
|
||||||
|
@ -87,12 +93,12 @@ func (m *Monitor) Create(ctx context.Context, groupID, serverID, tribeTag string
|
||||||
Tag: tribeTag,
|
Tag: tribeTag,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if len(tribes) == 0 {
|
||||||
if !tribe.DeletedAt.IsZero() {
|
|
||||||
return domain.Monitor{}, domain.TribeDoesNotExistError{
|
return domain.Monitor{}, domain.TribeDoesNotExistError{
|
||||||
Tag: tribeTag,
|
Tag: tribeTag,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
tribe := tribes[0]
|
||||||
|
|
||||||
params, err := domain.NewCreateMonitorParams(group.ID, tribe.ID)
|
params, err := domain.NewCreateMonitorParams(group.ID, tribe.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -53,7 +53,7 @@ func TestMonitor_Create(t *testing.T) {
|
||||||
ProfileURL: "https://pl151.plemiona.pl/game.php?screen=info_player&id=150",
|
ProfileURL: "https://pl151.plemiona.pl/game.php?screen=info_player&id=150",
|
||||||
DeletedAt: time.Time{},
|
DeletedAt: time.Time{},
|
||||||
}
|
}
|
||||||
client.GetTribeByTagReturns(tribe, nil)
|
client.ListTribesReturns([]twhelp.Tribe{tribe}, nil)
|
||||||
|
|
||||||
groupID := uuid.NewString()
|
groupID := uuid.NewString()
|
||||||
|
|
||||||
|
@ -114,7 +114,26 @@ func TestMonitor_Create(t *testing.T) {
|
||||||
t.Run("ERR: tribe doesn't exist", func(t *testing.T) {
|
t.Run("ERR: tribe doesn't exist", func(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
t.Run("API error", func(t *testing.T) {
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
err error
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "err=null",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "err!=null",
|
||||||
|
err: twhelp.APIError{
|
||||||
|
Code: twhelp.ErrorCodeInternalServerError,
|
||||||
|
Message: "internal server error",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tt := range tests {
|
||||||
|
tt := tt
|
||||||
|
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
repo := &mock.FakeMonitorRepository{}
|
repo := &mock.FakeMonitorRepository{}
|
||||||
|
@ -142,10 +161,7 @@ func TestMonitor_Create(t *testing.T) {
|
||||||
})
|
})
|
||||||
|
|
||||||
client := &mock.FakeTWHelpClient{}
|
client := &mock.FakeTWHelpClient{}
|
||||||
client.GetTribeByTagReturns(twhelp.Tribe{}, twhelp.APIError{
|
client.ListTribesReturns(nil, tt.err)
|
||||||
Code: twhelp.ErrorCodeEntityNotFound,
|
|
||||||
Message: "tribe not found",
|
|
||||||
})
|
|
||||||
|
|
||||||
tag := "TAG"
|
tag := "TAG"
|
||||||
|
|
||||||
|
@ -156,43 +172,7 @@ func TestMonitor_Create(t *testing.T) {
|
||||||
})
|
})
|
||||||
assert.Zero(t, monitor)
|
assert.Zero(t, monitor)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("tribe is deleted", func(t *testing.T) {
|
|
||||||
t.Parallel()
|
|
||||||
|
|
||||||
repo := &mock.FakeMonitorRepository{}
|
|
||||||
repo.ListReturns(nil, nil)
|
|
||||||
|
|
||||||
groupSvc := &mock.FakeGroupReader{}
|
|
||||||
groupSvc.GetCalls(func(ctx context.Context, groupID, serverID string) (domain.Group, error) {
|
|
||||||
return domain.Group{
|
|
||||||
ID: groupID,
|
|
||||||
ServerID: serverID,
|
|
||||||
ChannelGains: "",
|
|
||||||
ChannelLosses: "",
|
|
||||||
ServerKey: "pl151",
|
|
||||||
VersionCode: "pl",
|
|
||||||
CreatedAt: time.Now(),
|
|
||||||
}, nil
|
|
||||||
})
|
|
||||||
|
|
||||||
client := &mock.FakeTWHelpClient{}
|
|
||||||
tribe := twhelp.Tribe{
|
|
||||||
ID: 150,
|
|
||||||
Tag: "*TAG*",
|
|
||||||
Name: uuid.NewString(),
|
|
||||||
ProfileURL: "https://pl151.plemiona.pl/game.php?screen=info_player&id=150",
|
|
||||||
DeletedAt: time.Now(),
|
|
||||||
}
|
}
|
||||||
client.GetTribeByTagReturns(tribe, nil)
|
|
||||||
|
|
||||||
monitor, err := service.NewMonitor(repo, groupSvc, client, zap.NewNop(), 10).
|
|
||||||
Create(context.Background(), uuid.NewString(), uuid.NewString(), tribe.Tag)
|
|
||||||
assert.ErrorIs(t, err, domain.TribeDoesNotExistError{
|
|
||||||
Tag: tribe.Tag,
|
|
||||||
})
|
|
||||||
assert.Zero(t, monitor)
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -11,14 +11,10 @@ import (
|
||||||
//counterfeiter:generate -o internal/mock/twhelp_client.gen.go . TWHelpClient
|
//counterfeiter:generate -o internal/mock/twhelp_client.gen.go . TWHelpClient
|
||||||
type TWHelpClient interface {
|
type TWHelpClient interface {
|
||||||
ListVersions(ctx context.Context) ([]twhelp.Version, error)
|
ListVersions(ctx context.Context) ([]twhelp.Version, error)
|
||||||
ListServers(
|
ListServers(ctx context.Context, version string, params twhelp.ListServersQueryParams) ([]twhelp.Server, error)
|
||||||
ctx context.Context,
|
|
||||||
version string,
|
|
||||||
params twhelp.ListServersQueryParams,
|
|
||||||
) ([]twhelp.Server, error)
|
|
||||||
GetServer(ctx context.Context, version, server string) (twhelp.Server, error)
|
GetServer(ctx context.Context, version, server string) (twhelp.Server, error)
|
||||||
|
ListTribes(ctx context.Context, version, server string, params twhelp.ListTribesQueryParams) ([]twhelp.Tribe, error)
|
||||||
GetTribeByID(ctx context.Context, version, server string, id int64) (twhelp.Tribe, error)
|
GetTribeByID(ctx context.Context, version, server string, id int64) (twhelp.Tribe, error)
|
||||||
GetTribeByTag(ctx context.Context, version, server, tag string) (twhelp.Tribe, error)
|
|
||||||
ListEnnoblements(
|
ListEnnoblements(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
version, server string,
|
version, server string,
|
||||||
|
|
|
@ -18,8 +18,8 @@ const (
|
||||||
endpointListVersions = "/api/v1/versions"
|
endpointListVersions = "/api/v1/versions"
|
||||||
endpointListServers = "/api/v1/versions/%s/servers"
|
endpointListServers = "/api/v1/versions/%s/servers"
|
||||||
endpointGetServer = "/api/v1/versions/%s/servers/%s"
|
endpointGetServer = "/api/v1/versions/%s/servers/%s"
|
||||||
|
endpointListTribes = "/api/v1/versions/%s/servers/%s/tribes"
|
||||||
endpointGetTribeByID = "/api/v1/versions/%s/servers/%s/tribes/%d"
|
endpointGetTribeByID = "/api/v1/versions/%s/servers/%s/tribes/%d"
|
||||||
endpointGetTribeByTag = "/api/v1/versions/%s/servers/%s/tribes/tag/%s"
|
|
||||||
endpointListEnnoblements = "/api/v1/versions/%s/servers/%s/ennoblements"
|
endpointListEnnoblements = "/api/v1/versions/%s/servers/%s/ennoblements"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -106,17 +106,49 @@ func (c *Client) GetServer(ctx context.Context, version, server string) (Server,
|
||||||
return resp.Data, nil
|
return resp.Data, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) GetTribeByID(ctx context.Context, version, server string, id int64) (Tribe, error) {
|
type ListTribesQueryParams struct {
|
||||||
var resp getTribeResp
|
Limit int32
|
||||||
if err := c.getJSON(ctx, fmt.Sprintf(endpointGetTribeByID, version, server, id), &resp); err != nil {
|
Offset int32
|
||||||
return Tribe{}, err
|
Tags []string
|
||||||
|
Deleted NullBool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Client) ListTribes(
|
||||||
|
ctx context.Context,
|
||||||
|
version, server string,
|
||||||
|
params ListTribesQueryParams,
|
||||||
|
) ([]Tribe, error) {
|
||||||
|
q := url.Values{}
|
||||||
|
|
||||||
|
if params.Limit > 0 {
|
||||||
|
q.Set("limit", strconv.Itoa(int(params.Limit)))
|
||||||
|
}
|
||||||
|
|
||||||
|
if params.Offset > 0 {
|
||||||
|
q.Set("offset", strconv.Itoa(int(params.Offset)))
|
||||||
|
}
|
||||||
|
|
||||||
|
if params.Deleted.Valid {
|
||||||
|
q.Set("deleted", strconv.FormatBool(params.Deleted.Bool))
|
||||||
|
}
|
||||||
|
|
||||||
|
if params.Tags != nil {
|
||||||
|
for _, t := range params.Tags {
|
||||||
|
q.Add("tag", t)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var resp listTribesResp
|
||||||
|
if err := c.getJSON(ctx, fmt.Sprintf(endpointListTribes, version, server)+"?"+q.Encode(), &resp); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
return resp.Data, nil
|
return resp.Data, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) GetTribeByTag(ctx context.Context, version, server, tag string) (Tribe, error) {
|
func (c *Client) GetTribeByID(ctx context.Context, version, server string, id int64) (Tribe, error) {
|
||||||
var resp getTribeResp
|
var resp getTribeResp
|
||||||
if err := c.getJSON(ctx, fmt.Sprintf(endpointGetTribeByTag, version, server, tag), &resp); err != nil {
|
if err := c.getJSON(ctx, fmt.Sprintf(endpointGetTribeByID, version, server, id), &resp); err != nil {
|
||||||
return Tribe{}, err
|
return Tribe{}, err
|
||||||
}
|
}
|
||||||
return resp.Data, nil
|
return resp.Data, nil
|
||||||
|
|
|
@ -65,6 +65,10 @@ type Tribe struct {
|
||||||
DeletedAt time.Time `json:"deletedAt"`
|
DeletedAt time.Time `json:"deletedAt"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type listTribesResp struct {
|
||||||
|
Data []Tribe `json:"data"`
|
||||||
|
}
|
||||||
|
|
||||||
type getTribeResp struct {
|
type getTribeResp struct {
|
||||||
Data Tribe `json:"data"`
|
Data Tribe `json:"data"`
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user