You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
163 lines
3.6 KiB
163 lines
3.6 KiB
package http |
|
|
|
import ( |
|
"context" |
|
"net/http" |
|
"strconv" |
|
"strings" |
|
"time" |
|
|
|
"go-common/app/interface/main/shorturl/conf" |
|
"go-common/app/interface/main/shorturl/model" |
|
"go-common/library/ecode" |
|
"go-common/library/log" |
|
bm "go-common/library/net/http/blademaster" |
|
) |
|
|
|
// add short url from long url. |
|
func add(c *bm.Context) { |
|
param := &model.Param{} |
|
if err := c.Bind(param); err != nil { |
|
return |
|
} |
|
// check args |
|
uri := strings.TrimSpace(param.Uri) |
|
if uri == "" { |
|
log.Error("add short url args empty long(%s)", uri) |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
short, err := suSvr.Add(c, param.Mid, uri) |
|
if err != nil { |
|
log.Error("suSvr.Add error(%v)", err) |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
data := map[string]string{ |
|
"url": conf.Conf.Host.Default + short, |
|
} |
|
c.JSON(data, nil) |
|
} |
|
|
|
// jump redirect short url to long url. |
|
func jump(c *bm.Context) { |
|
// check path |
|
if len(c.Request.URL.Path) == 0 || c.Request.URL.Path == "/" || c.Request.URL.Path == "/favicon.ico" || strings.HasPrefix(c.Request.URL.Path, "/x/") { |
|
c.JSON(nil, ecode.NothingFound) |
|
return |
|
} |
|
su, err := suSvr.ShortCache(c, c.Request.URL.Path[1:]) |
|
if err != nil { |
|
log.Error("suSvr.Get url(%v) error(%v)", c.Request.URL.Path[1:], err) |
|
c.JSON(nil, err) |
|
return |
|
} |
|
if su == nil || su.Long == "" || su.State == model.StateDelted { |
|
c.JSON(nil, ecode.NothingFound) |
|
return |
|
} |
|
if !strings.HasPrefix(su.Long, "http://") && !strings.HasPrefix(su.Long, "https://") { |
|
su.Long = "http://" + su.Long |
|
return |
|
} |
|
// redirect |
|
http.Redirect(c.Writer, c.Request, su.Long, http.StatusFound) |
|
} |
|
|
|
// shortAll get shorturl list |
|
func shortAll(c *bm.Context) { |
|
param := &model.Param{} |
|
if err := c.Bind(param); err != nil { |
|
return |
|
} |
|
pn, err := strconv.Atoi(param.Pn) |
|
if err != nil || pn < 1 { |
|
pn = 1 |
|
} |
|
ps, err := strconv.Atoi(param.Ps) |
|
if err != nil || ps > 20 || ps <= 0 { |
|
ps = 20 |
|
} |
|
long := strings.TrimSpace(param.Uri) |
|
data, err := suSvr.ShortLimit(c, pn, ps, param.Mid, long) |
|
if err != nil { |
|
log.Error("suSvr.ShortLimit error(%v)", err) |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
for _, su := range data { |
|
su.Short = conf.Conf.Host.Default + su.Short |
|
} |
|
c.JSONMap(map[string]interface{}{ |
|
"data": data, |
|
"size": 2233, |
|
}, nil) |
|
} |
|
|
|
// shortState set state |
|
func shortUpdate(c *bm.Context) { |
|
param := &model.Param{} |
|
if err := c.Bind(param); err != nil { |
|
return |
|
} |
|
uri := strings.TrimSpace(param.Uri) |
|
if uri == "" { |
|
log.Error("add short url args empty long(%s)", param.Uri) |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
if param.Mid <= 0 { |
|
log.Error("mid less than 0 error(%v)", param.Mid) |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
err := suSvr.ShortUpdate(context.TODO(), param.ID, param.Mid, uri) |
|
if err != nil { |
|
log.Error("suSvr.ShortUpdate error(%v)", err) |
|
c.JSON(nil, err) |
|
return |
|
} |
|
c.JSON(nil, nil) |
|
} |
|
|
|
// shortState set state |
|
func shortDel(c *bm.Context) { |
|
param := &model.Param{} |
|
if err := c.Bind(param); err != nil { |
|
return |
|
} |
|
if param.Mid <= 0 { |
|
log.Error("mid less than 0 error(%v)", param.Mid) |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
err := suSvr.ShortDel(c, param.ID, param.Mid, time.Now()) |
|
if err != nil { |
|
log.Error("suSvr.ShortState error(%v)", err) |
|
c.JSON(nil, err) |
|
return |
|
} |
|
c.JSON(nil, nil) |
|
} |
|
|
|
// shortById by id |
|
func shortByID(c *bm.Context) { |
|
param := &model.Param{} |
|
if err := c.Bind(param); err != nil { |
|
return |
|
} |
|
data, err := suSvr.ShortByID(c, param.ID) |
|
if err != nil { |
|
log.Error("suSvr.ShortState error(%v)", err) |
|
c.JSON(nil, err) |
|
return |
|
} |
|
c.JSON(data, nil) |
|
} |
|
|
|
func ping(c *bm.Context) { |
|
if err := suSvr.Ping(c); err != nil { |
|
c.AbortWithStatus(http.StatusServiceUnavailable) |
|
log.Error("shorturl service ping error(%v)", err) |
|
} |
|
}
|
|
|