articles-api/root/i.go

143 lines
2.3 KiB
Go

package main
import (
db "./db"
e "git.xdrm.io/go/xb-api/err"
i "git.xdrm.io/go/xb-api/implement"
)
// Redirects to an url from a key
func Get(d i.Arguments, r *i.Response) i.Response {
/* (1) Init redis connection */
cli := db.Connect()
if cli == nil {
r.Err = e.Failure
return *r
}
/* (2) Extract api input */
key, ok := d["url"].(string)
if !ok {
r.Err = e.InvalidParam
r.Err.BindArgument("url")
return *r
}
/* (3) Check if match for this key */
val := cli.Get(key)
if val == nil {
r.Err = e.NoMatchFound
return *r
}
/* (4) Redirect to value */
r.Set("_REDIRECT_", string(val))
r.Err = e.Success
return *r
}
// Stores a new tinyurl/fullurl combination
func Post(d i.Arguments, r *i.Response) i.Response {
/* (1) Init redis connection */
cli := db.Connect()
if cli == nil {
r.Err = e.Failure
return *r
}
/* (2) Extract api input */
target, ok1 := d["target"].(string)
url, ok2 := d["url"].(string)
if !ok1 || !ok2 {
r.Err = e.InvalidParam
return *r
}
/* (3) Check if key already used */
if cli.Get(url) != nil {
r.Err = e.AlreadyExists
return *r
}
/* (4) Store */
if !cli.Set(url, target) {
r.Err = e.Failure
return *r
}
r.Err = e.Success
return *r
}
// Overrides a existing tinyurl with new target
func Put(d i.Arguments, r *i.Response) i.Response {
/* (1) Init redis connection */
cli := db.Connect()
if cli == nil {
r.Err = e.Failure
return *r
}
/* (2) Extract api input */
target, ok1 := d["target"].(string)
url, ok2 := d["url"].(string)
if !ok1 || !ok2 {
r.Err = e.InvalidParam
return *r
}
/* (3) Check if key already used */
if cli.Get(url) == nil {
r.Err = e.NoMatchFound
return *r
}
/* (4) Update */
if !cli.Set(url, target) {
r.Err = e.Failure
return *r
}
r.Err = e.Success
return *r
}
// Deletes an existing tinyurl
func Delete(d i.Arguments, r *i.Response) i.Response {
/* (1) Init redis connection */
cli := db.Connect()
if cli == nil {
r.Err = e.Failure
return *r
}
/* (2) Extract api input */
url, ok := d["url"].(string)
if !ok {
r.Err = e.InvalidParam
return *r
}
/* (3) Check if key already used */
if cli.Get(url) == nil {
r.Err = e.NoMatchFound
return *r
}
/* (4) Delete */
if !cli.Del(url) {
r.Err = e.Failure
return *r
}
r.Err = e.Success
return *r
}