* correctly list packs in response

Using append was adding a default pack response to the list of packs

* handle unique index for packs that exist but are deleted
This commit is contained in:
Victor Vrantchan 2017-01-18 14:13:41 -05:00 committed by GitHub
parent dd74d37033
commit d45c0103d1
2 changed files with 29 additions and 9 deletions

View file

@ -28,14 +28,34 @@ func (d *Datastore) PackByName(name string) (*kolide.Pack, bool, error) {
// NewPack creates a new Pack
func (d *Datastore) NewPack(pack *kolide.Pack) (*kolide.Pack, error) {
var (
deletedPack kolide.Pack
query string
)
err := d.db.Get(&deletedPack,
"SELECT * FROM packs WHERE name = ? AND deleted", pack.Name)
switch err {
case nil:
query = `
REPLACE INTO packs
( name, description, platform, created_by, disabled, deleted)
VALUES ( ?, ?, ?, ?, ?, ?)
`
case sql.ErrNoRows:
query = `
INSERT INTO packs
( name, description, platform, created_by, disabled, deleted)
VALUES ( ?, ?, ?, ?, ?, ?)
`
default:
return nil, errors.Wrap(err, "check for existing pack")
}
query := `
INSERT INTO packs ( name, description, platform, created_by, disabled )
VALUES ( ?, ?, ?, ?, ?)
`
result, err := d.db.Exec(query, pack.Name, pack.Description, pack.Platform, pack.CreatedBy, pack.Disabled)
if err != nil {
deleted := false
result, err := d.db.Exec(query, pack.Name, pack.Description, pack.Platform, pack.CreatedBy, pack.Disabled, deleted)
if err != nil && isDuplicate(err) {
return nil, alreadyExists("Pack", deletedPack.ID)
} else if err != nil {
return nil, errors.Wrap(err, "creating new pack")
}

View file

@ -103,12 +103,12 @@ func makeListPacksEndpoint(svc kolide.Service) endpoint.Endpoint {
}
resp := listPacksResponse{Packs: make([]packResponse, len(packs), len(packs))}
for _, pack := range packs {
for i, pack := range packs {
packResp, err := packResponseForPack(ctx, svc, *pack)
if err != nil {
return getPackResponse{Err: err}, nil
}
resp.Packs = append(resp.Packs, *packResp)
resp.Packs[i] = *packResp
}
return resp, nil
}