users: add 'with_mutual_guilds' argument support

This commit is contained in:
Luna 2021-08-29 16:20:05 -03:00
parent 0a429ee47e
commit 59e1056604
1 changed files with 35 additions and 30 deletions

View File

@ -17,6 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
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("/<int:peer_id>/profile", methods=["GET"])
async def get_profile(peer_id: int):
"""Get a user's profile."""
@ -369,11 +390,11 @@ 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
@ -387,32 +408,16 @@ async def get_profile(peer_id: int):
peer_id,
)
mutual_guilds = await app.user_storage.get_mutual_guilds(user_id, peer_id)
mutual_res = []
# ascending sorting
for guild_id in sorted(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(
{
result = {
"user": peer,
"connected_accounts": [],
"premium_since": peer_premium,
"mutual_guilds": mutual_res,
}
)
if request.args.get("with_mutual_guilds") in (None, True):
result["mutual_guilds"] = await map_guild_ids_to_mutual_list(mutual_guilds)
return jsonify(result)
@bp.route("/@me/mentions", methods=["GET"])