Forráskód Böngészése

add delete tag api

abhishek9686 11 hónapja
szülő
commit
3d392ee9b1
2 módosított fájl, 44 hozzáadás és 2 törlés
  1. 24 0
      controllers/tags.go
  2. 20 2
      logic/tags.go

+ 24 - 0
controllers/tags.go

@@ -2,7 +2,9 @@ package controller
 
 import (
 	"encoding/json"
+	"errors"
 	"net/http"
+	"net/url"
 	"time"
 
 	"github.com/gorilla/mux"
@@ -18,6 +20,8 @@ func tagHandlers(r *mux.Router) {
 		Methods(http.MethodPost)
 	r.HandleFunc("/api/v1/tags", logic.SecurityCheck(true, http.HandlerFunc(updateTag))).
 		Methods(http.MethodPut)
+	r.HandleFunc("/api/v1/tags", logic.SecurityCheck(true, http.HandlerFunc(deleteTag))).
+		Methods(http.MethodDelete)
 
 }
 
@@ -108,3 +112,23 @@ func updateTag(w http.ResponseWriter, r *http.Request) {
 	go logic.UpdateTag(updateTag)
 	logic.ReturnSuccessResponse(w, r, "updating tags")
 }
+
+// @Summary     Delete Tag
+// @Router      /api/v1/tags [delete]
+// @Tags        TAG
+// @Accept      json
+// @Success     200 {array} models.SuccessResponse
+// @Failure     500 {object} models.ErrorResponse
+func deleteTag(w http.ResponseWriter, r *http.Request) {
+	tagID, _ := url.QueryUnescape(r.URL.Query().Get("tag_id"))
+	if tagID == "" {
+		logic.ReturnErrorResponse(w, r, logic.FormatError(errors.New("role is required"), "badrequest"))
+		return
+	}
+	err := logic.DeleteTag(models.TagID(tagID))
+	if err != nil {
+		logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
+		return
+	}
+	logic.ReturnSuccessResponse(w, r, "deleted tag "+tagID)
+}

+ 20 - 2
logic/tags.go

@@ -12,6 +12,7 @@ import (
 
 var tagMutex = &sync.RWMutex{}
 
+// GetTag - fetches tag info
 func GetTag(tagID models.TagID) (models.Tag, error) {
 	data, err := database.FetchRecord(database.TAG_TABLE_NAME, tagID.String())
 	if err != nil && !database.IsEmptyRecord(err) {
@@ -25,6 +26,7 @@ func GetTag(tagID models.TagID) (models.Tag, error) {
 	return tag, nil
 }
 
+// InsertTag - creates new tag
 func InsertTag(tag models.Tag) error {
 	_, err := database.FetchRecord(database.TAG_TABLE_NAME, tag.ID.String())
 	if err == nil {
@@ -37,10 +39,24 @@ func InsertTag(tag models.Tag) error {
 	return database.Insert(tag.ID.String(), string(d), database.TAG_TABLE_NAME)
 }
 
-func DeleteTag(tagID string) error {
-	return database.DeleteRecord(database.TAG_TABLE_NAME, tagID)
+// DeleteTag - delete tag, will also untag hosts
+func DeleteTag(tagID models.TagID) error {
+	// cleanUp tags on hosts
+	hosts, err := GetAllHosts()
+	if err != nil {
+		return err
+	}
+	for _, hostI := range hosts {
+		hostI := hostI
+		if _, ok := hostI.Tags[tagID]; ok {
+			delete(hostI.Tags, tagID)
+			UpsertHost(&hostI)
+		}
+	}
+	return database.DeleteRecord(database.TAG_TABLE_NAME, tagID.String())
 }
 
+// ListTagsWithHosts - lists all tags with tagged hosts
 func ListTagsWithHosts() ([]models.TagListResp, error) {
 	tagMutex.RLock()
 	defer tagMutex.RUnlock()
@@ -61,6 +77,7 @@ func ListTagsWithHosts() ([]models.TagListResp, error) {
 	return resp, nil
 }
 
+// ListTags - lists all tags from DB
 func ListTags() ([]models.Tag, error) {
 
 	data, err := database.FetchRecords(database.TAG_TABLE_NAME)
@@ -79,6 +96,7 @@ func ListTags() ([]models.Tag, error) {
 	return tags, nil
 }
 
+// UpdateTag - updates and syncs hosts with tag update
 func UpdateTag(req models.UpdateTagReq) {
 	tagMutex.Lock()
 	defer tagMutex.Unlock()