From d45c0103d1d460404d85cb2125d1aa569ea83793 Mon Sep 17 00:00:00 2001 From: Victor Vrantchan Date: Wed, 18 Jan 2017 14:13:41 -0500 Subject: [PATCH] Pack bugs (#1016) * 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 --- server/datastore/mysql/packs.go | 34 +++++++++++++++++++++++++------- server/service/endpoint_packs.go | 4 ++-- 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/server/datastore/mysql/packs.go b/server/datastore/mysql/packs.go index 2c5cc35d0e..3a7caa8ceb 100644 --- a/server/datastore/mysql/packs.go +++ b/server/datastore/mysql/packs.go @@ -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") } diff --git a/server/service/endpoint_packs.go b/server/service/endpoint_packs.go index a2c225a494..b00e371b88 100644 --- a/server/service/endpoint_packs.go +++ b/server/service/endpoint_packs.go @@ -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 }