phuochungus commited on
Commit
299424a
1 Parent(s): f6e7a1e
app/routers/__init__.py DELETED
File without changes
app/routers/friend_request.py CHANGED
@@ -1,9 +1,11 @@
1
  import datetime
 
2
  import cv2
 
3
  import qrcode
4
  from fastapi import APIRouter, Depends, HTTPException, Response
5
  from app.dependencies import get_current_user
6
- from app import db
7
  from enum import Enum
8
  from app.graphdb.main import insert2PersonAndSetFriend
9
 
@@ -23,41 +25,42 @@ EXPIRE_MINUTES = 15
23
 
24
  @router.get("")
25
  def getFriendRequest(user=Depends(get_current_user)):
26
- if user.uid is None:
27
  raise HTTPException(status_code=400, detail="User not found")
28
  friend_requests = (
29
- db.collection(COLLECTION_NAME).where("inviter", "==", user.uid).stream()
30
  )
31
  return {"friend_requests": [Request.to_dict() for Request in friend_requests]}
32
 
33
 
34
  @router.post("")
35
  def createRequest(user=Depends(get_current_user)):
36
- if user.uid is None:
37
  raise HTTPException(status_code=400, detail="User not found")
38
  _, fr_ref = db.collection(COLLECTION_NAME).add(
39
  {
40
- "invitor": user.uid,
41
  "status": RequestStatus.WAITING_INVITEE.value,
42
- "expire_at": datetime.now() + datetime.timedelta(minutes=EXPIRE_MINUTES),
 
43
  }
44
  )
45
- qr = qrcode.make(fr_ref.id)
46
 
47
- ret, png = cv2.imencode(".jpg", qr)
48
-
49
- if not ret:
 
 
 
 
 
50
  fr_ref.delete()
51
  return Response(content="Failed to encode image", status_code=500)
52
 
53
- png_bytes = png.tobytes()
54
-
55
- return Response(content=png_bytes, media_type="image/png")
56
-
57
 
58
  @router.patch("/{RequestId}")
59
  def acceptRequest(RequestId: str, user=Depends(get_current_user)):
60
- if user.uid is None:
61
  raise HTTPException(status_code=400, detail="User not found")
62
 
63
  fr_ref = db.collection(COLLECTION_NAME).document(RequestId)
@@ -79,7 +82,7 @@ def acceptRequest(RequestId: str, user=Depends(get_current_user)):
79
 
80
  if isInviteeEmpty(fr) and not isInviter(user, fr):
81
  fr_ref.update(
82
- {"invitee": user.uid, "status": RequestStatus.WAITING_INVITER.value}
83
  )
84
  sendNotificationToInviter(fr.inviter, user)
85
  return {"status": "OK"}
@@ -95,7 +98,7 @@ async def makeFriend(inviteeId: str, inviterId: str):
95
 
96
  @router.delete("/{RequestId}")
97
  def deleteRequest(RequestId: str, user=Depends(get_current_user)):
98
- if user.uid is None:
99
  raise HTTPException(status_code=400, detail="User not found")
100
 
101
  Request_ref = db.collection(COLLECTION_NAME).document(RequestId)
@@ -116,7 +119,7 @@ def isRequestExpired(request):
116
 
117
 
118
  def isInviter(user, Request):
119
- return Request.inviter == user.uid
120
 
121
 
122
  def isRequestDone(Request):
 
1
  import datetime
2
+ import io
3
  import cv2
4
+ from fastapi.responses import StreamingResponse
5
  import qrcode
6
  from fastapi import APIRouter, Depends, HTTPException, Response
7
  from app.dependencies import get_current_user
8
+ from app import db, logger
9
  from enum import Enum
10
  from app.graphdb.main import insert2PersonAndSetFriend
11
 
 
25
 
26
  @router.get("")
27
  def getFriendRequest(user=Depends(get_current_user)):
28
+ if user["sub"] is None:
29
  raise HTTPException(status_code=400, detail="User not found")
30
  friend_requests = (
31
+ db.collection(COLLECTION_NAME).where("inviter", "==", user["sub"]).stream()
32
  )
33
  return {"friend_requests": [Request.to_dict() for Request in friend_requests]}
34
 
35
 
36
  @router.post("")
37
  def createRequest(user=Depends(get_current_user)):
38
+ if user["sub"] is None:
39
  raise HTTPException(status_code=400, detail="User not found")
40
  _, fr_ref = db.collection(COLLECTION_NAME).add(
41
  {
42
+ "invitor": user["sub"],
43
  "status": RequestStatus.WAITING_INVITEE.value,
44
+ "expire_at": datetime.datetime.now()
45
+ + datetime.timedelta(minutes=EXPIRE_MINUTES),
46
  }
47
  )
 
48
 
49
+ try:
50
+ qr = qrcode.make(fr_ref.id)
51
+ buf = io.BytesIO()
52
+ qr.save(buf)
53
+ buf.seek(0)
54
+ return StreamingResponse(buf, media_type="image/png")
55
+ except Exception as e:
56
+ logger.error(e)
57
  fr_ref.delete()
58
  return Response(content="Failed to encode image", status_code=500)
59
 
 
 
 
 
60
 
61
  @router.patch("/{RequestId}")
62
  def acceptRequest(RequestId: str, user=Depends(get_current_user)):
63
+ if user["sub"] is None:
64
  raise HTTPException(status_code=400, detail="User not found")
65
 
66
  fr_ref = db.collection(COLLECTION_NAME).document(RequestId)
 
82
 
83
  if isInviteeEmpty(fr) and not isInviter(user, fr):
84
  fr_ref.update(
85
+ {"invitee": user["sub"], "status": RequestStatus.WAITING_INVITER.value}
86
  )
87
  sendNotificationToInviter(fr.inviter, user)
88
  return {"status": "OK"}
 
98
 
99
  @router.delete("/{RequestId}")
100
  def deleteRequest(RequestId: str, user=Depends(get_current_user)):
101
+ if user["sub"] is None:
102
  raise HTTPException(status_code=400, detail="User not found")
103
 
104
  Request_ref = db.collection(COLLECTION_NAME).document(RequestId)
 
119
 
120
 
121
  def isInviter(user, Request):
122
+ return Request.inviter == user["sub"]
123
 
124
 
125
  def isRequestDone(Request):