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.
207 lines
4.6 KiB
207 lines
4.6 KiB
package http |
|
|
|
import ( |
|
"fmt" |
|
"strconv" |
|
"strings" |
|
|
|
"go-common/app/interface/main/answer/model" |
|
"go-common/library/ecode" |
|
"go-common/library/log" |
|
bm "go-common/library/net/http/blademaster" |
|
"go-common/library/xstr" |
|
) |
|
|
|
func localized(c *bm.Context) string { |
|
langs := detectLocalizedWeb(c) |
|
if len(langs) == 0 { |
|
return model.LangZhCN |
|
} |
|
switch langs[0] { |
|
case model.LangZhTW: |
|
return model.LangZhTW |
|
case model.LangZhHK: |
|
return model.LangZhTW |
|
default: |
|
return model.LangZhCN |
|
} |
|
} |
|
|
|
func checkBirthDay(c *bm.Context) { |
|
var mid, _ = c.Get("mid") |
|
if ok := svc.CheckBirthday(c, mid.(int64)); !ok { |
|
c.JSON(nil, ecode.MemberBirthdayInfoIsNull) |
|
return |
|
} |
|
c.JSON(nil, nil) |
|
} |
|
|
|
// checkPro check second step answers |
|
func checkPro(c *bm.Context) { |
|
var ( |
|
err error |
|
ids []int64 |
|
params = c.Request.Form |
|
qIds = params.Get("qs_ids") |
|
mid, _ = c.Get("mid") |
|
ansHash = make(map[int64]string) |
|
) |
|
qidArr := strings.Split(qIds, ",") |
|
for _, qid := range qidArr { |
|
id, _ := strconv.ParseInt(qid, 10, 64) |
|
ansHash[id] = params.Get("ans_hash_" + qid) |
|
ids = append(ids, id) |
|
} |
|
hid, err := svc.ProCheck(c, mid.(int64), ids, ansHash, localized(c)) |
|
if err != nil { |
|
log.Error("svc.ProCheck(%d,%s,%+v) error(%+v)", mid.(int64), xstr.JoinInts(ids), ansHash, err) |
|
c.JSON(nil, err) |
|
return |
|
} |
|
c.JSON(fmt.Sprintf(model.ProPassed, hid), nil) |
|
} |
|
|
|
// checkBase check first step answers |
|
func checkBase(c *bm.Context) { |
|
var ( |
|
err error |
|
ids []int64 |
|
params = c.Request.Form |
|
qIds = params.Get("qs_ids") |
|
mid, _ = c.Get("mid") |
|
ansHash = make(map[int64]string) |
|
) |
|
qidsArr := strings.Split(qIds, ",") |
|
for _, qid := range qidsArr { |
|
id, _ := strconv.ParseInt(qid, 10, 64) |
|
ansHash[id] = params.Get("ans_hash_" + qid) |
|
ids = append(ids, id) |
|
} |
|
req, err := svc.CheckBase(c, mid.(int64), ids, ansHash, localized(c)) |
|
if err != nil { |
|
log.Error("svc.BaseCheck(%d,%s,%+v) error(%+v)", mid.(int64), xstr.JoinInts(ids), ansHash, err) |
|
c.JSON(nil, err) |
|
return |
|
} |
|
res := make(map[string]interface{}) |
|
if req != nil && len(req.QidList) > 0 { |
|
res["next"] = false |
|
res["ids"] = req.QidList |
|
c.JSON(res, nil) |
|
return |
|
} |
|
res["next"] = true |
|
c.JSON(res, nil) |
|
} |
|
|
|
// checkExtra extra question check. |
|
func checkExtra(c *bm.Context) { |
|
var ( |
|
ids []int64 |
|
params = c.Request.Form |
|
qIds = params.Get("qs_ids") |
|
mid, ok = c.Get("mid") |
|
ansHash = make(map[int64]string) |
|
ua = c.Request.Header.Get("User-Agent") |
|
refer = c.Request.Header.Get("Referer") |
|
) |
|
if !ok { |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
qidsArr := strings.Split(qIds, ",") |
|
for _, qid := range qidsArr { |
|
id, _ := strconv.ParseInt(qid, 10, 64) |
|
h := params.Get("ans_hash_" + qid) |
|
if h != "" { |
|
ansHash[id] = params.Get("ans_hash_" + qid) |
|
ids = append(ids, id) |
|
} |
|
} |
|
buvid := c.Request.Header.Get("Buvid") |
|
if buvid == "" { |
|
cookie, _ := c.Request.Cookie("buvid3") |
|
if cookie != nil { |
|
buvid = cookie.Value |
|
} |
|
} |
|
c.JSON(nil, svc.ExtraCheck(c, mid.(int64), ids, ansHash, ua, localized(c), refer, buvid)) |
|
} |
|
|
|
// getBaseQ get first step questions |
|
func baseQus(c *bm.Context) { |
|
var ( |
|
mid, ok = c.Get("mid") |
|
mobile = strings.Contains(c.Request.UserAgent(), model.MobileUserAgentFlag) |
|
) |
|
if !ok { |
|
c.JSON(nil, ecode.NoLogin) |
|
return |
|
} |
|
c.JSON(svc.BaseQ(c, mid.(int64), localized(c), mobile)) |
|
} |
|
|
|
// getProType get second step question types |
|
func proType(c *bm.Context) { |
|
mid, ok := c.Get("mid") |
|
if !ok { |
|
c.JSON(nil, ecode.NoLogin) |
|
return |
|
} |
|
c.JSON(svc.ProType(c, mid.(int64), localized(c))) |
|
} |
|
|
|
// getQstByType get second step questions |
|
func proQus(c *bm.Context) { |
|
var ( |
|
params = c.Request.Form |
|
mid, ok = c.Get("mid") |
|
tIdsStr = params.Get("type_ids") |
|
mobile = strings.Contains(c.Request.UserAgent(), model.MobileUserAgentFlag) |
|
) |
|
if !ok { |
|
c.JSON(nil, ecode.NoLogin) |
|
return |
|
} |
|
c.JSON(svc.ConvertProQues(c, mid.(int64), tIdsStr, localized(c), mobile)) |
|
} |
|
|
|
// extraQus extra question. |
|
func extraQus(c *bm.Context) { |
|
var ( |
|
mid, ok = c.Get("mid") |
|
mobile = strings.Contains(c.Request.UserAgent(), model.MobileUserAgentFlag) |
|
) |
|
if !ok { |
|
c.JSON(nil, ecode.NoLogin) |
|
return |
|
} |
|
c.JSON(svc.ConvertExtraQs(c, mid.(int64), localized(c), mobile)) |
|
} |
|
|
|
func cool(c *bm.Context) { |
|
var ( |
|
err error |
|
mid int64 |
|
hid int64 |
|
params = c.Request.Form |
|
hidStr = params.Get("id") |
|
) |
|
if midI, ok := c.Get("mid"); ok { |
|
mid = midI.(int64) |
|
} |
|
if hid, err = strconv.ParseInt(hidStr, 10, 64); err != nil { |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
c.JSON(svc.Cool(c, hid, mid)) |
|
} |
|
|
|
func extraScore(c *bm.Context) { |
|
mid, ok := c.Get("mid") |
|
if !ok { |
|
c.JSON(nil, ecode.NoLogin) |
|
return |
|
} |
|
c.JSON(svc.ExtraScore(c, mid.(int64))) |
|
}
|
|
|