mirror of
https://github.com/miloszowi/everyone-mention-telegram-bot.git
synced 2025-05-20 17:24:06 +00:00
54 lines
1.3 KiB
Python
54 lines
1.3 KiB
Python
|
import itertools
|
||
|
import re
|
||
|
from typing import Iterable
|
||
|
|
||
|
from database.client import Client
|
||
|
from entity.group import Group
|
||
|
from entity.user import User
|
||
|
|
||
|
|
||
|
class GroupRepository():
|
||
|
client: Client
|
||
|
|
||
|
count: str = 'count'
|
||
|
|
||
|
def __init__(self) -> None:
|
||
|
self.client = Client()
|
||
|
|
||
|
def get_by_chat_id(self, chat_id: str) -> Iterable[Group]:
|
||
|
groups = self.client.aggregate(
|
||
|
User.collection,
|
||
|
[
|
||
|
{ "$unwind": f'${User.chats_index}' },
|
||
|
{
|
||
|
"$match": {
|
||
|
User.chats_index: { "$regex": re.compile(f'^{chat_id}.*$') },
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
"$group": {
|
||
|
"_id": {
|
||
|
"$last": { "$split": [f'${User.chats_index}', "~"] },
|
||
|
},
|
||
|
self.count: { "$count": {} },
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
"$sort": { '_id': 1 }
|
||
|
}
|
||
|
]
|
||
|
)
|
||
|
|
||
|
result = []
|
||
|
for group in groups:
|
||
|
group_name = group['_id']
|
||
|
|
||
|
if group_name == chat_id:
|
||
|
group_name = Group.default_name
|
||
|
|
||
|
result.append(
|
||
|
Group(chat_id, group_name, group[self.count])
|
||
|
)
|
||
|
|
||
|
return result
|