From 143cbe921fb072785165872ed81fed381bb4347a Mon Sep 17 00:00:00 2001 From: huydx Date: Fri, 10 Feb 2017 11:11:36 +0900 Subject: [PATCH] (feat) support datasource delete by name api --- pkg/api/api.go | 3 ++- pkg/api/datasources.go | 23 +++++++++++++++++++++-- pkg/models/datasource.go | 7 ++++++- pkg/services/sqlstore/datasource.go | 13 +++++++++++-- pkg/services/sqlstore/datasource_test.go | 14 +++++++++++--- 5 files changed, 51 insertions(+), 9 deletions(-) diff --git a/pkg/api/api.go b/pkg/api/api.go index 7d3a5563892..d9fee8a0187 100644 --- a/pkg/api/api.go +++ b/pkg/api/api.go @@ -198,7 +198,8 @@ func (hs *HttpServer) registerRoutes() { r.Get("/", GetDataSources) r.Post("/", quota("data_source"), bind(m.AddDataSourceCommand{}), AddDataSource) r.Put("/:id", bind(m.UpdateDataSourceCommand{}), wrap(UpdateDataSource)) - r.Delete("/:id", DeleteDataSource) + r.Delete("/:id", DeleteDataSourceById) + r.Delete("/name/:name", DeleteDataSourceByName) r.Get("/:id", wrap(GetDataSourceById)) r.Get("/name/:name", wrap(GetDataSourceByName)) }, reqOrgAdmin) diff --git a/pkg/api/datasources.go b/pkg/api/datasources.go index 43f4d308ed6..455195aacb0 100644 --- a/pkg/api/datasources.go +++ b/pkg/api/datasources.go @@ -68,7 +68,7 @@ func GetDataSourceById(c *middleware.Context) Response { return Json(200, &dtos) } -func DeleteDataSource(c *middleware.Context) { +func DeleteDataSourceById(c *middleware.Context) { id := c.ParamsInt64(":id") if id <= 0 { @@ -76,7 +76,26 @@ func DeleteDataSource(c *middleware.Context) { return } - cmd := &m.DeleteDataSourceCommand{Id: id, OrgId: c.OrgId} + cmd := &m.DeleteDataSourceByIdCommand{Id: id, OrgId: c.OrgId} + + err := bus.Dispatch(cmd) + if err != nil { + c.JsonApiErr(500, "Failed to delete datasource", err) + return + } + + c.JsonOK("Data source deleted") +} + +func DeleteDataSourceByName(c *middleware.Context) { + name := c.Params(":name") + + if name == "" { + c.JsonApiErr(400, "Missing valid datasource name", nil) + return + } + + cmd := &m.DeleteDataSourceByNameCommand{Name: name, OrgId: c.OrgId} err := bus.Dispatch(cmd) if err != nil { diff --git a/pkg/models/datasource.go b/pkg/models/datasource.go index 4a90edd9bfd..804880a5d10 100644 --- a/pkg/models/datasource.go +++ b/pkg/models/datasource.go @@ -120,11 +120,16 @@ type UpdateDataSourceCommand struct { Id int64 `json:"-"` } -type DeleteDataSourceCommand struct { +type DeleteDataSourceByIdCommand struct { Id int64 OrgId int64 } +type DeleteDataSourceByNameCommand struct { + Name string + OrgId int64 +} + // --------------------- // QUERIES diff --git a/pkg/services/sqlstore/datasource.go b/pkg/services/sqlstore/datasource.go index 57abaf35083..de838163681 100644 --- a/pkg/services/sqlstore/datasource.go +++ b/pkg/services/sqlstore/datasource.go @@ -13,7 +13,8 @@ import ( func init() { bus.AddHandler("sql", GetDataSources) bus.AddHandler("sql", AddDataSource) - bus.AddHandler("sql", DeleteDataSource) + bus.AddHandler("sql", DeleteDataSourceById) + bus.AddHandler("sql", DeleteDataSourceByName) bus.AddHandler("sql", UpdateDataSource) bus.AddHandler("sql", GetDataSourceById) bus.AddHandler("sql", GetDataSourceByName) @@ -50,7 +51,7 @@ func GetDataSources(query *m.GetDataSourcesQuery) error { return sess.Find(&query.Result) } -func DeleteDataSource(cmd *m.DeleteDataSourceCommand) error { +func DeleteDataSourceById(cmd *m.DeleteDataSourceByIdCommand) error { return inTransaction(func(sess *xorm.Session) error { var rawSql = "DELETE FROM data_source WHERE id=? and org_id=?" _, err := sess.Exec(rawSql, cmd.Id, cmd.OrgId) @@ -58,6 +59,14 @@ func DeleteDataSource(cmd *m.DeleteDataSourceCommand) error { }) } +func DeleteDataSourceByName(cmd *m.DeleteDataSourceByNameCommand) error { + return inTransaction(func(sess *xorm.Session) error { + var rawSql = "DELETE FROM data_source WHERE name=? and org_id=?" + _, err := sess.Exec(rawSql, cmd.Name, cmd.OrgId) + return err + }) +} + func AddDataSource(cmd *m.AddDataSourceCommand) error { return inTransaction(func(sess *xorm.Session) error { diff --git a/pkg/services/sqlstore/datasource_test.go b/pkg/services/sqlstore/datasource_test.go index 35752eeaafc..2749a3cc426 100644 --- a/pkg/services/sqlstore/datasource_test.go +++ b/pkg/services/sqlstore/datasource_test.go @@ -79,8 +79,16 @@ func TestDataAccess(t *testing.T) { ds := query.Result[0] - Convey("Can delete datasource", func() { - err := DeleteDataSource(&m.DeleteDataSourceCommand{Id: ds.Id, OrgId: ds.OrgId}) + Convey("Can delete datasource by id", func() { + err := DeleteDataSourceById(&m.DeleteDataSourceByIdCommand{Id: ds.Id, OrgId: ds.OrgId}) + So(err, ShouldBeNil) + + GetDataSources(&query) + So(len(query.Result), ShouldEqual, 0) + }) + + Convey("Can delete datasource by name", func() { + err := DeleteDataSourceByName(&m.DeleteDataSourceByNameCommand{Name: ds.Name, OrgId: ds.OrgId}) So(err, ShouldBeNil) GetDataSources(&query) @@ -88,7 +96,7 @@ func TestDataAccess(t *testing.T) { }) Convey("Can not delete datasource with wrong orgId", func() { - err := DeleteDataSource(&m.DeleteDataSourceCommand{Id: ds.Id, OrgId: 123123}) + err := DeleteDataSourceById(&m.DeleteDataSourceByIdCommand{Id: ds.Id, OrgId: 123123}) So(err, ShouldBeNil) GetDataSources(&query)