Implement delete function

Amolith created

Change summary

delete.go | 34 ++++++++++++++++++++++++++++++++--
1 file changed, 32 insertions(+), 2 deletions(-)

Detailed changes

delete.go 🔗

@@ -1,6 +1,36 @@
 package main
 
-import "net/http"
+import (
+	"fmt"
+	"log"
+	"net/http"
+	"strings"
 
-func (m model) delete(writer http.ResponseWriter, request *http.Request) {
+	"github.com/dgraph-io/badger/v3"
+)
+
+func (m *model) delete(writer http.ResponseWriter, request *http.Request) {
+	query := request.URL.Query()
+
+	token := request.Header.Get("Authorization")
+	token = strings.TrimPrefix(token, "Bearer ")
+
+	if token != m.AccessToken {
+		http.Error(writer, "401 Unauthorized: You do not have permission to delete shortlinks", 403)
+		return
+	}
+
+	name := query.Get("name")
+	if len(name) == 0 {
+		http.Error(writer, "400 Bad Request: name parameter is required", 400)
+	}
+
+	err := m.database.Update(func(txn *badger.Txn) error {
+		return txn.Delete([]byte(name))
+	})
+	if err != nil {
+		log.Println(err)
+	}
+
+	http.Error(writer, fmt.Sprint("\"", name, "\" has been deleted"), 200)
 }