123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- 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)
- }
- }
|