Add simple key value service

Change-Id: Ic04ddbd26b3111ff95d78f3046ace7fc69916219
diff --git a/service.go b/service.go
new file mode 100644
index 0000000..ba009b8
--- /dev/null
+++ b/service.go
@@ -0,0 +1,80 @@
+package main
+
+import (
+	"log"
+	"net/http"
+
+	badger "github.com/dgraph-io/badger/v3"
+	"github.com/gin-gonic/gin"
+)
+
+var db *badger.DB
+
+func CheckSaleUrl(c *gin.Context) {
+
+	corpusID := c.Param("corpus_id")
+	docID := c.Param("doc_id")
+	textID := c.Param("text_id")
+
+	err := db.View(func(txn *badger.Txn) error {
+
+		item, err := txn.Get([]byte(corpusID + "/" + docID + "/" + textID))
+
+		if err != nil {
+			c.String(http.StatusNotFound, "No entry found")
+		}
+
+		err = item.Value(func(v []byte) error {
+			c.String(http.StatusOK, string(v))
+			return nil
+		})
+
+		if err != nil {
+			c.String(http.StatusNotFound, err.Error())
+		}
+
+		return nil
+	})
+
+	if err != nil {
+		c.String(http.StatusNotFound, err.Error())
+	}
+
+	c.String(http.StatusExpectationFailed, err.Error())
+}
+
+func add(corpusID, docID, textID string, url string) error {
+	err := db.Update(func(txn *badger.Txn) error {
+		err := txn.Set([]byte(corpusID+"/"+docID+"/"+textID), []byte(url))
+		return err
+	})
+	return err
+}
+
+func initDB(dir string) {
+	if db != nil {
+		return
+	}
+	var err error
+	db, err = badger.Open(badger.DefaultOptions(dir))
+	if err != nil {
+		log.Fatal(err)
+	}
+}
+
+func closeDB() {
+	db.Close()
+}
+
+func setupRouter() *gin.Engine {
+	r := gin.Default()
+	r.GET("/:corpus_id/:doc_id/:text_id", CheckSaleUrl)
+	return r
+}
+
+func main() {
+	initDB("db")
+	r := setupRouter()
+	r.Run(":8080")
+	defer closeDB()
+}