create.go → createHandler.go 🔗
Amolith created
createHandler.go | 0
deleteHandler.go | 15 +++------------
edit.go | 6 ------
helperfuncs.go | 17 +++++++++++++++++
main.go | 6 +++---
readHandler.go | 2 +-
updateHandler.go | 2 +-
7 files changed, 25 insertions(+), 23 deletions(-)
@@ -1,15 +1,11 @@
package main
import (
- "fmt"
- "log"
"net/http"
"strings"
-
- "github.com/dgraph-io/badger/v3"
)
-func (m *model) delete(writer http.ResponseWriter, request *http.Request) {
+func (m *model) deleteHandler(writer http.ResponseWriter, request *http.Request) {
query := request.URL.Query()
token := request.Header.Get("Authorization")
@@ -25,12 +21,7 @@ func (m *model) delete(writer http.ResponseWriter, request *http.Request) {
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)
- }
+ response := m.delete(name)
- http.Error(writer, fmt.Sprint("\"", name, "\" has been deleted"), 200)
+ writer.Write([]byte(response))
}
@@ -1,6 +0,0 @@
-package main
-
-import "net/http"
-
-func (m model) edit(writer http.ResponseWriter, request *http.Request) {
-}
@@ -7,6 +7,9 @@ import (
"github.com/dgraph-io/badger/v3"
)
+// Create shortens a given URL with an optional name. If a name is provided,
+// that name will be used. Otherwise, 4-character string will be generated and
+// used instead.
func (m model) create(name string, url string) string {
err := m.database.Update(func(txn *badger.Txn) error {
return txn.Set([]byte(name), []byte(url))
@@ -18,6 +21,20 @@ func (m model) create(name string, url string) string {
return fmt.Sprint("URL mapped to ", name, "\n")
}
+// Delete removes a shortened URL from the database given its name.
+func (m model) delete(name string) string {
+ err := m.database.Update(func(txn *badger.Txn) error {
+ return txn.Delete([]byte(name))
+ })
+ if err != nil {
+ log.Println(err)
+ }
+
+ return fmt.Sprint("\"", name, "\" has been deleted")
+}
+
+// nameExists returns true if the provided name is already stored in the
+// database and false if it's not.
func (m model) nameExists(name string) bool {
err := m.database.View(func(txn *badger.Txn) error {
_, err := txn.Get([]byte(name))
@@ -56,9 +56,9 @@ func main() {
mux.HandleFunc("/login", m.login)
mux.HandleFunc("/logout", m.logout)
mux.HandleFunc("/create", m.createHandler)
- mux.HandleFunc("/delete", m.delete)
- mux.HandleFunc("/edit", m.edit)
- mux.HandleFunc("/get", m.getLinks)
+ mux.HandleFunc("/read", m.readHandler)
+ mux.HandleFunc("/delete", m.deleteHandler)
+ mux.HandleFunc("/update", m.updateHandler)
if err = httpServer.ListenAndServe(); err == http.ErrServerClosed {
log.Println("Web server closed")
@@ -9,7 +9,7 @@ import (
"github.com/dgraph-io/badger/v3"
)
-func (m model) getLinks(writer http.ResponseWriter, request *http.Request) {
+func (m model) readHandler(writer http.ResponseWriter, request *http.Request) {
token := request.Header.Get("Authorization")
token = strings.TrimPrefix(token, "Bearer ")
cookie, _ := request.Cookie("access_token")
@@ -9,7 +9,7 @@ import (
"github.com/dgraph-io/badger/v3"
)
-func (m *model) update(writer http.ResponseWriter, request *http.Request) {
+func (m *model) updateHandler(writer http.ResponseWriter, request *http.Request) {
query := request.URL.Query()
token := request.Header.Get("Authorization")