Commit c3089ea82f2281d6e2765bd70a96e499078bc633

Authored by 陆恒
1 parent 39e6bdb4
Exists in master

提交好友相关接口

src/HttpServer/logic/constdef.go 0 → 100644
... ... @@ -0,0 +1,8 @@
  1 +package logic
  2 +
  3 +
  4 +const (
  5 + FRIEND_MAX_NUM = 50 //好友人数上限
  6 + FRIEND_APPLY_LIMIT = 50 //好友申请当日上限
  7 + FRIEND_APPROVE_LIMIT = 50 //好友批准当日上限
  8 +)
0 9 \ No newline at end of file
... ...
src/HttpServer/logic/datadef.go
... ... @@ -393,12 +393,78 @@ type SearchTeamReq struct{
393 393 Page int `json:"page"`
394 394 }
395 395  
  396 +type SearchTeamResp struct {
  397 + Status string `json:"status"`
  398 + Result GetTeamListResult `json:"result"`
  399 +}
396 400  
  401 +type FriendInfo struct {
  402 + Uuid int `json:"uuid"`
  403 + Status int `json:"status"`
  404 +}
397 405  
  406 +type FriendList struct {
  407 + Friends []FriendInfo `json:"friends"`
  408 +}
398 409  
399   -type SearchTeamResp struct {
  410 +type ApplyInfo struct {
  411 + Uuid int `json:"uuid"`
  412 + Apply_time int `json:"apply_time"`
  413 +}
  414 +type ApplyList struct {
  415 + Apply_info []ApplyInfo `json:"apply_info"`
  416 +}
  417 +
  418 +type ApproveList struct {
  419 + Approve_info []ApplyInfo `json:"approve_info"`
  420 +}
  421 +
  422 +type SetFriendReq struct{
  423 + Token string `json:"token"`
  424 + User_id int `json:"user_id"`
  425 +}
  426 +
  427 +
  428 +type SetFriendResp struct {
400 429 Status string `json:"status"`
401   - Result GetTeamListResult `json:"result"`
  430 + Result CommonResult `json:"result"`
  431 +}
  432 +
  433 +type GetFriendListReq struct{
  434 + Token string `json:"token"`
  435 +}
  436 +
  437 +type GetFriendListDesc struct {
  438 + Friend_list []FriendInfo `json:"friend_list"`
  439 +}
  440 +
  441 +type GetFriendListResult struct {
  442 + Code int `json:"code"`
  443 + Data GetFriendListDesc `json:"data"`
  444 +}
  445 +
  446 +type GetFriendListResp struct {
  447 + Status string `json:"status"`
  448 + Result GetFriendListResult `json:"result"`
  449 +}
  450 +
  451 +
  452 +type GetAuditListReq struct{
  453 + Token string `json:"token"`
  454 +}
  455 +
  456 +type GetAuditListDesc struct {
  457 + Approve_list []ApplyInfo `json:"approve_list"`
  458 +}
  459 +
  460 +type GetAuditListResult struct {
  461 + Code int `json:"code"`
  462 + Data GetAuditListDesc `json:"data"`
  463 +}
  464 +
  465 +type GetAuditListResp struct {
  466 + Status string `json:"status"`
  467 + Result GetAuditListResult `json:"result"`
402 468 }
403 469  
404 470  
... ...
src/HttpServer/logic/errordef.go
... ... @@ -20,4 +20,13 @@ const (
20 20 ERROR_TEAMNOTINTEAM = 15 //不在在队伍中无法再推出
21 21 ERROR_GETUSERINFOBYIDFAILED = 16 //通过uid查询玩家数据失败
22 22 ERROR_GETTEAMLISTFAILED = 17 //查询队伍列表失败
  23 + ERROR_GETFRIENDLISTAILED = 18 //获取好友列表失败
  24 + ERROR_INLISTAILED = 19 //已经在好友列表无法再添加
  25 + ERROR_FRIENDISMAX = 20 //好友人数已经达到上限无法继续添加
  26 + ERROR_FRIENDGETAPPLISTFAILED = 21 //获取申请好友列表失败
  27 + ERROR_FRIENDAPPLYLIMIT = 22 //当日申请已达上限
  28 + ERROR_FRIENDALREDAYINAPPLYLIST = 23 //已经在申请列表
  29 + RROR_FRIENDGETAPPROVELISTFAILED = 24 //获取申请好友列表失败
  30 + RROR_FRIENDINAPPROVELISTFAILED = 25 //已经在等待批准列表
  31 + ERROR_FRIENDAPPROVELIMIT = 26 //当日批准已达上限
23 32 )
24 33 \ No newline at end of file
... ...
src/HttpServer/logic/function.go
... ... @@ -381,4 +381,155 @@ func GetTeamListByNameCond(shopnum int,page int, name string) (TeamSlice,error,i
381 381  
382 382 return rtslice[begin:end],nil,sumlen
383 383  
  384 +}
  385 +
  386 +func (alist *ApproveList) InApproveList(uuid int) bool {
  387 + for _,val := range alist.Approve_info {
  388 + if val.Uuid == uuid {
  389 + return true
  390 + }
  391 + }
  392 + return false
  393 +}
  394 +
  395 +//待批准列表
  396 +func GetUserApproveList(uuid int) (*ApproveList,error) {
  397 + rt := new(ApproveList)
  398 + //存储为hset key为 固定key+uuid ,field为被添加者的uuid,fieldW为FriendInfo
  399 + userkey := redis.FRIEND_APPROVELIST_KEY + ":" + strconv.Itoa(uuid)
  400 + vv,err := redishandler.GetRedisClient().HGetAllValues(userkey)
  401 + if err != nil {
  402 + logger.Error("GetUserApproveList err")
  403 + return nil,err
  404 + }
  405 +
  406 + nowtime:= int(time.Now().Unix())
  407 + for _,val := range vv {
  408 + one := new(ApplyInfo)
  409 + bytestr := val.([]byte)
  410 + err = json.Unmarshal(bytestr, one)
  411 + if err!= nil {
  412 + //需要剔除超过时间的
  413 + if nowtime <= one.Apply_time + 3*86400 {
  414 + rt.Approve_info = append(rt.Approve_info,*one)
  415 + }else {
  416 + //已经超时,需要删除
  417 + redishandler.GetRedisClient().HDel(userkey,strconv.Itoa(one.Uuid))
  418 + }
  419 +
  420 + }
  421 +
  422 + }
  423 + return rt,nil
  424 +}
  425 +
  426 +func SaveUserApproveList(uuid int,adduuid int) error {
  427 + userkey := redis.FRIEND_APPROVELIST_KEY + ":" + strconv.Itoa(uuid)
  428 + var finfo ApplyInfo
  429 + finfo.Uuid = adduuid
  430 + finfo.Apply_time = int(time.Now().Unix())
  431 + str,err := json.Marshal(&finfo)
  432 + if err != nil {
  433 + logger.Error("SaveUserApproveList failed,err=%v",err)
  434 + }
  435 + err = redishandler.GetRedisClient().HSet(userkey,strconv.Itoa(adduuid),string(str))
  436 + return err
  437 +}
  438 +
  439 +func (alist *ApplyList) InApplyList(uuid int) bool {
  440 + for _,val := range alist.Apply_info {
  441 + if val.Uuid == uuid {
  442 + return true
  443 + }
  444 + }
  445 + return false
  446 +}
  447 +
  448 +func GetUserApplyList(uuid int) (*ApplyList,error) {
  449 + rt := new(ApplyList)
  450 + //存储为hset key为 固定key+uuid ,field为被添加者的uuid,fieldW为FriendInfo
  451 + userkey := redis.FRIEND_APPLYLIST_KEY + ":" + strconv.Itoa(uuid)
  452 + vv,err := redishandler.GetRedisClient().HGetAllValues(userkey)
  453 + if err != nil {
  454 + logger.Error("GetUserApplyList err")
  455 + return nil,err
  456 + }
  457 +
  458 + nowtime:= int(time.Now().Unix())
  459 + for _,val := range vv {
  460 + one := new(ApplyInfo)
  461 + bytestr := val.([]byte)
  462 + err = json.Unmarshal(bytestr, one)
  463 + if err!= nil {
  464 + //需要剔除超过时间的
  465 + if nowtime <= one.Apply_time + 86400 {
  466 + rt.Apply_info = append(rt.Apply_info,*one)
  467 + }else {
  468 + //已经超时,需要删除
  469 + redishandler.GetRedisClient().HDel(userkey,strconv.Itoa(one.Uuid))
  470 + }
  471 +
  472 + }
  473 +
  474 + }
  475 + return rt,nil
  476 +}
  477 +
  478 +func SaveUserApplyList(uuid int,adduuid int) error {
  479 + userkey := redis.FRIEND_APPLYLIST_KEY + ":" + strconv.Itoa(uuid)
  480 + var finfo ApplyInfo
  481 + finfo.Uuid = adduuid
  482 + finfo.Apply_time = int(time.Now().Unix())
  483 + str,err := json.Marshal(&finfo)
  484 + if err != nil {
  485 + logger.Error("SaveUserApplyList failed,err=%v",err)
  486 + }
  487 + err = redishandler.GetRedisClient().HSet(userkey,strconv.Itoa(adduuid),string(str))
  488 + return err
  489 +}
  490 +
  491 +func GetUserFriendList(uuid int) (*FriendList,error) {
  492 + //todo
  493 + rt := new(FriendList)
  494 + //存储为hset key为 固定key+uuid ,field为被添加者的uuid,fieldW为FriendInfo
  495 + userkey := redis.FRIEND_LIST_KEY + ":" + strconv.Itoa(uuid)
  496 + vv,err := redishandler.GetRedisClient().HGetAllValues(userkey)
  497 + if err != nil {
  498 + logger.Error("GetUserFriendList err")
  499 + return nil,err
  500 + }
  501 +
  502 + for _,val := range vv {
  503 + one := new(FriendInfo)
  504 + bytestr := val.([]byte)
  505 + err = json.Unmarshal(bytestr, one)
  506 + if err!= nil {
  507 + rt.Friends = append(rt.Friends,*one)
  508 + }
  509 +
  510 + }
  511 + return rt,nil
  512 +}
  513 +
  514 +func SaveUserFriendList(uuid int,adduuid int) error {
  515 + userkey := redis.FRIEND_LIST_KEY + ":" + strconv.Itoa(uuid)
  516 + var finfo FriendInfo
  517 + finfo.Uuid = adduuid
  518 + finfo.Status = 0
  519 + str,err := json.Marshal(&finfo)
  520 + if err != nil {
  521 + logger.Error("SaveUserFriendList failed,err=%v",err)
  522 + }
  523 + err = redishandler.GetRedisClient().HSet(userkey,strconv.Itoa(adduuid),string(str))
  524 + return err
  525 +}
  526 +
  527 +//判断是否已经是好友
  528 +func (flist *FriendList) IsInFreiendList(uuid int) bool {
  529 + for _,val := range flist.Friends {
  530 + if val.Uuid == uuid && val.Status == 0 {
  531 + return true
  532 + }
  533 + }
  534 + return false
384 535 }
385 536 \ No newline at end of file
... ...
src/HttpServer/logic/httpserver.go
... ... @@ -46,12 +46,49 @@ func startServerHttpServe() {
46 46 http.HandleFunc("/catcafe/team/getDataByUserId", GetDataByUserId) //获取队伍成员的详细数据
47 47 http.HandleFunc("/catcafe/team/getTeamList", GetTeamList) //查询队伍列表
48 48 http.HandleFunc("/catcafe/team/searchTeam", SearchTeam) //根据名称搜索队伍
  49 + http.HandleFunc("/catcafe/friend/setFriendRequest", SetFriendRequest) //申请添加好友
  50 + http.HandleFunc("/catcafe/friend/getList", GetFriendList) //获取好友列表
  51 + http.HandleFunc("/catcafe/friend/getAuditList", GetAuditList) //获取待审核好友列表
49 52  
50 53  
51 54 err := http.ListenAndServe(conf.GetServerHttpAddrConf(), nil)
52 55 CheckErr(err)
53 56 }
54 57  
  58 +func GetAuditList(w http.ResponseWriter, r *http.Request) {
  59 +
  60 + result, _ := ioutil.ReadAll(r.Body)
  61 + r.Body.Close()
  62 +
  63 + s := string(result)
  64 + logger.Info("GetAuditList , body:%v,uuid=%v", s)
  65 +
  66 + HandleGetAuditList(w,s)
  67 +}
  68 +
  69 +
  70 +func GetFriendList(w http.ResponseWriter, r *http.Request) {
  71 +
  72 + result, _ := ioutil.ReadAll(r.Body)
  73 + r.Body.Close()
  74 +
  75 + s := string(result)
  76 + logger.Info("GetFriendList , body:%v,uuid=%v", s)
  77 +
  78 + HandleGetFriendList(w,s)
  79 +}
  80 +
  81 +func SetFriendRequest(w http.ResponseWriter, r *http.Request) {
  82 +
  83 + result, _ := ioutil.ReadAll(r.Body)
  84 + r.Body.Close()
  85 +
  86 + s := string(result)
  87 + logger.Info("SetFriendRequest , body:%v,uuid=%v", s)
  88 +
  89 + HandleSetFriendRequest(w,s)
  90 +}
  91 +
55 92 func SearchTeam(w http.ResponseWriter, r *http.Request) {
56 93  
57 94 result, _ := ioutil.ReadAll(r.Body)
... ...
src/HttpServer/logic/logic.go
... ... @@ -1141,4 +1141,190 @@ func HandleSearchTeam(w http.ResponseWriter, data string) {
1141 1141 //回包
1142 1142 respstr, _ := json.Marshal(&resp)
1143 1143 fmt.Fprint(w, string(respstr))
1144   -}
1145 1144 \ No newline at end of file
  1145 +}
  1146 +
  1147 +
  1148 +func HandleSetFriendRequest(w http.ResponseWriter, data string) {
  1149 + SetHeader(w)
  1150 + var resp SetFriendResp
  1151 + resp.Status = "true"
  1152 + resp.Result.Code = ERROR_OK
  1153 + var rdata SetFriendReq
  1154 + err := json.Unmarshal([]byte(data), &rdata)
  1155 + for {
  1156 + if err != nil {
  1157 + logger.Error("HandleSetFriendRequest json unmarshal failed=%v", err)
  1158 + resp.Result.Code = ERROR_JSONUNMASHFAILED
  1159 + break
  1160 + }
  1161 +
  1162 + uuid,err := GetTouristUid(rdata.Token)
  1163 + if err != nil || uuid==0{
  1164 + logger.Error("HandleSetFriendRequest GetTouristUid failed=%v", err)
  1165 + resp.Result.Code = ERROR_GETUSERIDFAILED
  1166 + break
  1167 + }
  1168 +
  1169 + //先判断是否是好友关系
  1170 + list,err := GetUserFriendList(rdata.User_id)
  1171 + if err != nil {
  1172 + logger.Error("HandleSetFriendRequest GetFriendList failed=%v", err)
  1173 + resp.Result.Code = ERROR_GETFRIENDLISTAILED
  1174 + break
  1175 + }
  1176 + inlist := list.IsInFreiendList(uuid)
  1177 + if inlist {
  1178 + logger.Error("HandleSetFriendRequest InFriendList failed=%v", err)
  1179 + resp.Result.Code = ERROR_INLISTAILED
  1180 + break
  1181 + }
  1182 +
  1183 + //判断自己的好友人数是否已经达到上限
  1184 + ownlist,err := GetUserFriendList(uuid)
  1185 + if err != nil {
  1186 + logger.Error("HandleSetFriendRequest GetFriendList failed=%v", err)
  1187 + resp.Result.Code = ERROR_GETFRIENDLISTAILED
  1188 + break
  1189 + }
  1190 + //判断好友人数上限
  1191 + if len(list.Friends) >= FRIEND_MAX_NUM || len(ownlist.Friends) >= FRIEND_MAX_NUM {
  1192 + logger.Error("HandleSetFriendRequest FRIENDMAX failed=%v", err)
  1193 + resp.Result.Code = ERROR_FRIENDISMAX
  1194 + break
  1195 + }
  1196 +
  1197 + //判断申请列表是否已经有对该玩家的申请 24小时,此处需要判断24小时内的申请次数上限,需要先提出超过24小时的申请
  1198 + applylist,err := GetUserApplyList(uuid)
  1199 + if err != nil {
  1200 + logger.Error("HandleSetFriendRequest GetApplyListFailed failed=%v", err)
  1201 + resp.Result.Code = ERROR_FRIENDGETAPPLISTFAILED
  1202 + break
  1203 + }
  1204 +
  1205 + if applylist.InApplyList(rdata.User_id) {
  1206 + logger.Error("HandleSetFriendRequest ALREDAYINAPPLYLIST failed=%v", err)
  1207 + resp.Result.Code = ERROR_FRIENDALREDAYINAPPLYLIST
  1208 + break
  1209 + }
  1210 +
  1211 + if len(applylist.Apply_info) >=FRIEND_APPLY_LIMIT {
  1212 + logger.Error("HandleSetFriendRequest Apply limit failed=%v", err)
  1213 + resp.Result.Code = ERROR_FRIENDAPPLYLIMIT
  1214 + break
  1215 + }
  1216 +
  1217 + //加入对方列表,如果已经在对方待批准列表则返回错误
  1218 + approvelist,err := GetUserApproveList(rdata.User_id)
  1219 + if err != nil {
  1220 + logger.Error("HandleSetFriendRequest GetApproveListFailed failed=%v", err)
  1221 + resp.Result.Code = RROR_FRIENDGETAPPROVELISTFAILED
  1222 + break
  1223 + }
  1224 +
  1225 + if approvelist.InApproveList(uuid) {
  1226 + logger.Error("HandleSetFriendRequest inApprovelist failed=%v", err)
  1227 + resp.Result.Code = RROR_FRIENDINAPPROVELISTFAILED
  1228 + break
  1229 + }
  1230 +
  1231 + if len(approvelist.Approve_info) >=FRIEND_APPROVE_LIMIT {
  1232 + logger.Error("HandleSetFriendRequest Apply limit failed=%v", err)
  1233 + resp.Result.Code = ERROR_FRIENDAPPROVELIMIT
  1234 + break
  1235 + }
  1236 +
  1237 + //添加到对方的待批准记录
  1238 + SaveUserApplyList(uuid,rdata.User_id)
  1239 +
  1240 + //添加到自己的申请记录
  1241 + SaveUserApproveList(rdata.User_id,uuid)
  1242 +
  1243 + //清空好友推荐缓存
  1244 + //TODO
  1245 +
  1246 + resp.Result.Code = ERROR_OK
  1247 + break
  1248 + }
  1249 +
  1250 + //回包
  1251 + respstr, _ := json.Marshal(&resp)
  1252 + fmt.Fprint(w, string(respstr))
  1253 +}
  1254 +
  1255 +func HandleGetFriendList(w http.ResponseWriter, data string) {
  1256 + SetHeader(w)
  1257 + var resp GetFriendListResp
  1258 + resp.Status = "true"
  1259 + resp.Result.Code = ERROR_OK
  1260 + var rdata GetFriendListReq
  1261 + err := json.Unmarshal([]byte(data), &rdata)
  1262 + for {
  1263 + if err != nil {
  1264 + logger.Error("HandleGetFriendList json unmarshal failed=%v", err)
  1265 + resp.Result.Code = ERROR_JSONUNMASHFAILED
  1266 + break
  1267 + }
  1268 +
  1269 + uuid,err := GetTouristUid(rdata.Token)
  1270 + if err != nil || uuid==0{
  1271 + logger.Error("HandleGetFriendList GetTouristUid failed=%v", err)
  1272 + resp.Result.Code = ERROR_GETUSERIDFAILED
  1273 + break
  1274 + }
  1275 +
  1276 + friendlist,err := GetUserFriendList(uuid)
  1277 + if err != nil {
  1278 + logger.Error("HandleSetFriendRequest GetFriendList failed=%v", err)
  1279 + resp.Result.Code = ERROR_GETFRIENDLISTAILED
  1280 + break
  1281 + }
  1282 + resp.Result.Data.Friend_list = append(resp.Result.Data.Friend_list,friendlist.Friends...)
  1283 +
  1284 + resp.Result.Code = ERROR_OK
  1285 + break
  1286 + }
  1287 +
  1288 + //回包
  1289 + respstr, _ := json.Marshal(&resp)
  1290 + fmt.Fprint(w, string(respstr))
  1291 +}
  1292 +
  1293 +
  1294 +func HandleGetAuditList(w http.ResponseWriter, data string) {
  1295 + SetHeader(w)
  1296 + var resp GetAuditListResp
  1297 + resp.Status = "true"
  1298 + resp.Result.Code = ERROR_OK
  1299 + var rdata GetAuditListReq
  1300 + err := json.Unmarshal([]byte(data), &rdata)
  1301 + for {
  1302 + if err != nil {
  1303 + logger.Error("HandleGetAuditList json unmarshal failed=%v", err)
  1304 + resp.Result.Code = ERROR_JSONUNMASHFAILED
  1305 + break
  1306 + }
  1307 +
  1308 + uuid,err := GetTouristUid(rdata.Token)
  1309 + if err != nil || uuid==0{
  1310 + logger.Error("HandleGetAuditList GetTouristUid failed=%v", err)
  1311 + resp.Result.Code = ERROR_GETUSERIDFAILED
  1312 + break
  1313 + }
  1314 +
  1315 + approvelist,err := GetUserApproveList(uuid)
  1316 + if err != nil {
  1317 + logger.Error("HandleGetAuditList Getapprovelistfailedt failed=%v", err)
  1318 + resp.Result.Code = RROR_FRIENDGETAPPROVELISTFAILED
  1319 + break
  1320 + }
  1321 + resp.Result.Data.Approve_list = append(resp.Result.Data.Approve_list,approvelist.Approve_info...)
  1322 +
  1323 + resp.Result.Code = ERROR_OK
  1324 + break
  1325 + }
  1326 +
  1327 + //回包
  1328 + respstr, _ := json.Marshal(&resp)
  1329 + fmt.Fprint(w, string(respstr))
  1330 +}
  1331 +
... ...
src/common/redis/def.go
... ... @@ -11,4 +11,7 @@ const (
11 11 TEAM_INFO = "CATCAFE_TEAM_INFO" //存储了玩家队伍信息
12 12 TEAM_MAX_UUID = "CATCAFE_TEAM_MAX_UUID" //记录当前最大的teamid,新增自增即可
13 13 TEAM_TEAMID_TOUUID = "CATCAFE_TEAM_TEAMID_TOUUID" //记录teamid与uuid的关系
  14 + FRIEND_LIST_KEY = "CATCAFE_FRIEND_LIST_KEY" //玩家的好友列表的key,需要在末尾加死":uuid"
  15 + FRIEND_APPLYLIST_KEY = "CATCAFE_FRIEND_APPLYLIST_KEY" //玩家申请好友列表,需要在末尾加死":uuid"
  16 + FRIEND_APPROVELIST_KEY = "CATCAFE_FRIEND_APPROVELIST_KEY" //待批准好友列表,需要在末尾加死":uuid"
14 17 )
... ...