对于我所在的项目,要求是用户能够发送彼此的朋友请求并接受或拒绝他们。
旁注:该项目是在Laravel上构建的。
首先,我对这些友谊的数据模型是这样的(在这个例子中省略了时间戳等):
pivot_friend_request
====================
sender_id
receiver_id
status
当然sender_id
和receiver_id
对用户表的id
有外键约束。
这里我遇到了这个案例问题:
CASE:
用户foo
邀请bar
(表格行:foo-bar-pending)
同时,用户bar
从未阅读过他的通知,但会搜索用户foo
用户bar
邀请用户foo
(表格行:bar-foo-pending)
现在我有两个表行,这两个用户已经向对方发送了两个待处理的朋友请求。
在插入bar-foo之前检查foo-bar是否已经存在的最佳方法是什么(无论请求状态如何)?
然后我问我的项目经理做了什么,导致他问我为什么这样做。为了有一个更加面向对象的方法,他告诉我为请求和实际的友谊提供单独的表格,因为请求是请求而友谊是友谊。
我认为他在那里提出了一个很好的观点,但它让我更加困惑。因为:
现在我必须两次处理上述案例,但我仍然没有解决方法。
另外,它让我思考如何处理请求表。是否应在接受请求后将其删除,或者是否仍有请求状态?
这样可以更有效率,因为我现在看到这样:
bar
foo
- bar
pending
至accepted
,则使用pending
创建新的LOG.info("received notification");
String resourceId=req.getHeader("X-Goog-Resource-Id");
String channelId=req.getHeader("X-Goog-Channel-Id");
LOG.info("channel id::"+channelId);
LOG.info("resource id::"+resourceId);
if(null == req.getHeader("X-Goog-Resource-State") || req.getHeader("X-Goog-Resource-State").equals("not_exists")){
LOG.severe("invalid resource_statestate::"+req.getHeader("X-Goog-Resource-State"));
resp.setStatus(resp.SC_OK);
return;
}
StringBuffer buf=new StringBuffer();
String line=null;
BufferedReader read=req.getReader();
while((line=read.readLine()) != null){
buf.append(line);
}
JSONObject jsonObject =new JSONObject(buf.toString());
if(!jsonObject.has("name") || !jsonObject.has("bucket")){
LOG.severe("File or bucket name is not available:"+jsonObject.get("bucket")+"/"+jsonObject.get("name"));
resp.setStatus(resp.SC_OK);
return;
}
//required logics
resp.setStatus(resp.SC_OK);
。 (如果已经接受退货'已经是朋友留言')另外......如果友谊被删除怎么办?我知道有两个表我应该更新该状态?请求和实际的友谊表?
我真的需要一些指针。
答案 0 :(得分:1)
如果删除友谊,则必须同时更新请求和友谊表。例如,
bar
邀请foo
。然后在request
表中,您可以将status
设置为待处理foo
接受好友请求,就会向friends
表添加行。 foo
取消了bar
的朋友。然后朋友表会更新。bar
想再次邀请foo
。但是bar
无法向foo
发送新的好友请求,因为request
表中已有记录。所以你必须在第3步或第2步更新request
表。然而,这整个场景取决于您的要求。