Skip to content

Commit 8b5bde2

Browse files
committed
RHINENG-22023: move system delete endpoint to admin api
1 parent 0735489 commit 8b5bde2

4 files changed

Lines changed: 80 additions & 83 deletions

File tree

manager/controllers/system_delete.go

Lines changed: 0 additions & 78 deletions
This file was deleted.

manager/routes/routes.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ func InitAPI(api *gin.RouterGroup, config docs.EndpointsConfig) { // nolint: fun
3939
systems.GET("/:inventory_id/packages", controllers.SystemPackagesHandler)
4040
systems.GET("/:inventory_id/vmaas_json", controllers.SystemVmaasJSONHandler)
4141
systems.GET("/:inventory_id/yum_updates", controllers.SystemYumUpdatesHandler)
42-
systems.DELETE("/:inventory_id", controllers.SystemDeleteHandler)
4342

4443
userAuth.GET("/tags", controllers.SystemTagListHandler)
4544

@@ -105,6 +104,7 @@ func InitAdmin(app *gin.Engine, enableTurnpikeAuth bool) {
105104
api.PUT("/refresh-packages", admin.RefreshPackagesHandler)
106105
api.PUT("/refresh-packages/:account", admin.RefreshPackagesAccountHandler)
107106
api.GET("/repack/:table_name", admin.RepackHandler)
107+
api.DELETE("/system/:inventory_id", admin.SystemDeleteHandler)
108108

109109
pprof := api.Group("/pprof")
110110
pprof.GET("/evaluator_upload/:param", admin.GetEvaluatorUploadPprof)

turnpike/controllers/admin.go

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@ package controllers
33
import (
44
"app/base/database"
55
"app/base/utils"
6+
"app/manager/middlewares"
67
"app/tasks/caches"
78
"app/tasks/cleaning"
89
"app/tasks/repack"
910
sync "app/tasks/vmaas_sync"
11+
"errors"
1012
"net/http"
1113
"regexp"
1214
"strconv"
@@ -196,3 +198,67 @@ func CleanAADHandler(c *gin.Context) {
196198

197199
c.JSON(http.StatusOK, "cleaning advisory account data")
198200
}
201+
202+
// @Summary Delete system by inventory id
203+
// @Description Delete system by inventory id
204+
// @ID deletesystem
205+
// @Security RhIdentity
206+
// @Accept json
207+
// @Produce json
208+
// @Param inventory_id path string true "Inventory ID"
209+
// @Success 200
210+
// @Failure 400 {object} string
211+
// @Failure 404 {object} string
212+
// @Failure 500 {object} string
213+
// @Router /systems/{inventory_id} [delete]
214+
func SystemDeleteHandler(c *gin.Context) {
215+
inventoryID := c.Param("inventory_id")
216+
if inventoryID == "" {
217+
c.JSON(http.StatusBadRequest, utils.ErrorResponse{Error: "inventory_id param not found"})
218+
return
219+
}
220+
221+
if !utils.IsValidUUID(inventoryID) {
222+
utils.LogAndRespBadRequest(c, errors.New("bad request"), "incorrect inventory_id format")
223+
return
224+
}
225+
226+
var systemInventoryID []string
227+
db := middlewares.DBFromContext(c)
228+
tx := db.Begin()
229+
230+
defer tx.Rollback()
231+
232+
err := tx.Set("gorm:query_option", "FOR UPDATE OF system_platform").
233+
Table("system_platform").
234+
Where("inventory_id = ?::uuid", inventoryID).
235+
Pluck("inventory_id", &systemInventoryID).Error
236+
237+
if err != nil {
238+
utils.LogAndRespError(c, err, "could not query database for system")
239+
return
240+
}
241+
242+
if len(systemInventoryID) == 0 {
243+
utils.LogAndRespNotFound(c, errors.New("no rows returned"), "system not found")
244+
return
245+
}
246+
247+
query := tx.Exec("select deleted_inventory_id from delete_system(?::uuid)", systemInventoryID[0])
248+
if err := query.Error; err != nil {
249+
utils.LogAndRespError(c, err, "Could not delete system")
250+
return
251+
}
252+
253+
if err := tx.Commit().Error; err != nil {
254+
utils.LogAndRespError(c, err, "Could not delete system")
255+
return
256+
}
257+
258+
if query.RowsAffected > 0 {
259+
c.Status(http.StatusOK)
260+
} else {
261+
utils.LogAndRespNotFound(c, errors.New("no rows returned"), "system not found")
262+
return
263+
}
264+
}
Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"app/base/database"
66
"app/base/models"
77
"app/base/utils"
8+
managerTestUtils "app/manager/controllers"
89
"net/http"
910
"testing"
1011

@@ -27,28 +28,36 @@ func TestInitDelete(t *testing.T) {
2728

2829
func TestSystemDelete(t *testing.T) {
2930
core.SetupTest(t)
30-
w := CreateRequestRouterWithParams("DELETE", "/:inventory_id", del, "", nil, "", SystemDeleteHandler, 1)
31+
w := managerTestUtils.CreateRequestRouterWithParams(
32+
"DELETE", "/systems/:inventory_id", del, "", nil, "", SystemDeleteHandler, 1,
33+
)
3134

3235
assert.Equal(t, http.StatusOK, w.Code)
3336
}
3437

3538
func TestSystemDeleteWrongAccount(t *testing.T) {
3639
core.SetupTest(t)
37-
w := CreateRequestRouterWithParams("DELETE", "/:inventory_id", del, "", nil, "", SystemDeleteHandler, 2)
40+
w := managerTestUtils.CreateRequestRouterWithParams(
41+
"DELETE", "/systems/:inventory_id", del, "", nil, "", SystemDeleteHandler, 2,
42+
)
3843

3944
assert.Equal(t, http.StatusNotFound, w.Code)
4045
}
4146

4247
func TestSystemDeleteNotFound(t *testing.T) {
4348
core.SetupTest(t)
44-
w := CreateRequestRouterWithParams("DELETE", "/:inventory_id", del, "", nil, "", SystemDeleteHandler, 1)
49+
w := managerTestUtils.CreateRequestRouterWithParams(
50+
"DELETE", "/systems/:inventory_id", del, "", nil, "", SystemDeleteHandler, 1,
51+
)
4552

4653
assert.Equal(t, http.StatusNotFound, w.Code)
4754
}
4855

4956
func TestSystemDeleteUnknown(t *testing.T) {
5057
core.SetupTest(t)
51-
w := CreateRequestRouterWithParams("DELETE", "/:inventory_id", "unknownsystem", "", nil, "", SystemDeleteHandler, 1)
58+
w := managerTestUtils.CreateRequestRouterWithParams(
59+
"DELETE", "/systems/:inventory_id", "unknownsystem", "", nil, "", SystemDeleteHandler, 1,
60+
)
5261

5362
assert.Equal(t, http.StatusBadRequest, w.Code)
5463
}

0 commit comments

Comments
 (0)