88 lu "github.com/syndtr/goleveldb/leveldb/util"
99
1010 "github.com/dearcode/candy/meta"
11+ "github.com/dearcode/candy/util/log"
1112)
1213
1314type friendRelation struct {
@@ -24,20 +25,40 @@ func newFriendDB(db *userDB) *friendDB {
2425 return & friendDB {userDB : db }
2526}
2627
27- // 添加好友,返回当前状态,state 0:没关系, 1:我要添加对方为好友, 2:对方请求添加我为好友, 3:当前我们都已确认成为好友了
28+ // 修改好友关系
2829func (f * friendDB ) set (uid , fid int64 , state meta.Relation , msg string ) error {
2930 key := UserFriendKey (uid , fid )
31+
32+ r := friendRelation {ID : fid , State : state , Msg : msg }
33+ buf , err := json .Marshal (& r )
34+ if err != nil {
35+ return errors .Trace (err )
36+ }
37+
38+ if err = f .db .Put (key , buf , nil ); err != nil {
39+ return errors .Trace (err )
40+ }
41+
42+ return nil
43+ }
44+
45+ func (f * friendDB ) confirm (uid , fid int64 ) error {
46+ key := UserFriendKey (uid , fid )
3047 v , err := f .db .Get (key , nil )
31- if err != nil && err != leveldb . ErrNotFound {
48+ if err != nil {
3249 return errors .Trace (err )
3350 }
34- r := friendRelation {ID : fid , State : state , Msg : msg }
35- if len (v ) > 0 {
36- if err = json .Unmarshal (v , & r ); err != nil {
37- return errors .Trace (err )
38- }
51+ var r friendRelation
52+ if err = json .Unmarshal (v , & r ); err != nil {
53+ return errors .Trace (err )
3954 }
40- r .State |= state
55+
56+ if r .State != meta .Relation_ADD {
57+ log .Infof ("%d friend:%d state:%v" , uid , fid , r .State )
58+ return nil
59+ }
60+
61+ r .State = meta .Relation_CONFIRM
4162
4263 buf , err := json .Marshal (& r )
4364 if err != nil {
0 commit comments