diff --git a/litecord/blueprints/users.py b/litecord/blueprints/users.py
index 5a91735..b552d9e 100644
--- a/litecord/blueprints/users.py
+++ b/litecord/blueprints/users.py
@@ -17,6 +17,7 @@ along with this program. If not, see .
"""
+from typing import List
from asyncpg import UniqueViolationError
from quart import Blueprint, jsonify, request, current_app as app
@@ -360,6 +361,26 @@ async def get_library():
return jsonify([])
+async def map_guild_ids_to_mutual_list(mutual_guild_ids: List[int]) -> List[dict]:
+ mutual_result = []
+
+ # ascending sorting
+ for guild_id in sorted(mutual_guild_ids):
+ nick = await app.db.fetchval(
+ """
+ SELECT nickname
+ FROM members
+ WHERE guild_id = $1 AND user_id = $2
+ """,
+ guild_id,
+ peer_id,
+ )
+
+ mutual_result.append({"id": str(guild_id), "nick": nick})
+
+ return mutual_result
+
+
@bp.route("//profile", methods=["GET"])
async def get_profile(peer_id: int):
"""Get a user's profile."""
@@ -369,50 +390,34 @@ async def get_profile(peer_id: int):
if not peer:
return "", 404
- mutuals = await app.user_storage.get_mutual_guilds(user_id, peer_id)
+ mutual_guilds = await app.user_storage.get_mutual_guilds(user_id, peer_id)
friends = await app.user_storage.are_friends_with(user_id, peer_id)
# don't return a proper card if no guilds are being shared.
- if not mutuals and not friends:
+ if not mutual_guilds and not friends:
return "", 404
# actual premium status is determined by that
# column being NULL or not
peer_premium = await app.db.fetchval(
"""
- SELECT premium_since
- FROM users
- WHERE id = $1
- """,
+ SELECT premium_since
+ FROM users
+ WHERE id = $1
+ """,
peer_id,
)
- mutual_guilds = await app.user_storage.get_mutual_guilds(user_id, peer_id)
- mutual_res = []
+ result = {
+ "user": peer,
+ "connected_accounts": [],
+ "premium_since": peer_premium,
+ }
- # ascending sorting
- for guild_id in sorted(mutual_guilds):
+ if request.args.get("with_mutual_guilds") in (None, True):
+ result["mutual_guilds"] = await map_guild_ids_to_mutual_list(mutual_guilds)
- nick = await app.db.fetchval(
- """
- SELECT nickname
- FROM members
- WHERE guild_id = $1 AND user_id = $2
- """,
- guild_id,
- peer_id,
- )
-
- mutual_res.append({"id": str(guild_id), "nick": nick})
-
- return jsonify(
- {
- "user": peer,
- "connected_accounts": [],
- "premium_since": peer_premium,
- "mutual_guilds": mutual_res,
- }
- )
+ return jsonify(result)
@bp.route("/@me/mentions", methods=["GET"])