Skip to content

Commit

Permalink
saving URL to file
Browse files Browse the repository at this point in the history
Signed-off-by: viveksahu26 <vivekkumarsahu650@gmail.com>
  • Loading branch information
viveksahu26 committed Sep 14, 2022
1 parent 0425b81 commit 507580a
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 0 deletions.
15 changes: 15 additions & 0 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,23 @@ package main
import (
"fmt"
"net/http"

"github.com/viveksahu26/url_shortner/src"
)

func handleShortUrl(writer http.ResponseWriter, req *http.Request) {
// get original URL from GET method by quering
originalURL := req.URL.Query().Get("longURL")
fmt.Println("originalURL: ", originalURL)

// generate random shortURL
shortURL := src.GenerateShortURL()
fmt.Println("shortURL: ", shortURL)

// save short and long URL to file
src.SaveToFile(shortURL, originalURL)
}

func main() {
fmt.Println("URL Shorten Service")

Expand Down
47 changes: 47 additions & 0 deletions src/savetofile.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package src

import (
"errors"
"io/ioutil"
"log"
"os"
"strings"
)

func SaveToFile(shortURL string, longURL string) {
fileName := "url.properties"
prop := shortURL + "=" + longURL
if _, err := os.Stat(fileName); errors.Is(err, os.ErrNotExist) {
os.Create(fileName)
os.WriteFile(fileName, []byte(prop+"\n"), 0o644)
} else {

input, err := ioutil.ReadFile(fileName)
if err != nil {
log.Fatalln(err)
}

lines := strings.Split(string(input), "\n")

var flag bool
for i, line := range lines {
if strings.Contains(line, shortURL) {
lines[i] = prop
flag = true
}
}
if flag {
output := strings.Join(lines, "\n")
err = ioutil.WriteFile(fileName, []byte(output), 0o644)
if err != nil {
log.Fatalln(err)
}
} else {
file, err := os.OpenFile(fileName, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0o644)
if err != nil {
panic(err)
}
_, _ = file.WriteString(prop + "\n")
}
}
}

0 comments on commit 507580a

Please sign in to comment.