Improve name collision handling

Amolith created

Change summary

create.go | 13 ++++++-------
1 file changed, 6 insertions(+), 7 deletions(-)

Detailed changes

create.go 🔗

@@ -30,27 +30,26 @@ func (m *model) create(writer http.ResponseWriter, request *http.Request) {
 
 	name := query.Get("name")
 	if len(name) == 0 {
-		for {
+		name = uniuri.NewLen(4)
+		for !m.nameExists(name) {
 			name = uniuri.NewLen(4)
-			if !m.nameExists(name) {
-				break
-			}
+			log.Println("Generated new name:", name)
 		}
-	} else if m.nameExists(name) {
+	} else if !m.nameExists(name) {
 		http.Error(writer, "406 Not Acceptable: A shortened URL with this name already exists", 406)
 		return
 	}
 
 	log.Println("Saving \"" + url + "\" mapped to \"" + name + "\"")
 
-	err := m.database.Update(func(txn *badger.Txn) error {
+	err = m.database.Update(func(txn *badger.Txn) error {
 		return txn.Set([]byte(name), []byte(url))
 	})
 	if err != nil {
 		log.Fatal(err)
 	}
 
-	http.Error(writer, fmt.Sprint("URL mapped to "+name), 200)
+	writer.Write([]byte(fmt.Sprint("URL mapped to ", name, "\n")))
 }
 
 func (m model) nameExists(name string) bool {