Unify the way alerts and users are handled on the DB side
This commit is contained in:
parent
50f65abced
commit
9a36bb3f47
@ -25,16 +25,19 @@ class AlertsController:
|
|||||||
return Alert.from_str(alert)
|
return Alert.from_str(alert)
|
||||||
return alert
|
return alert
|
||||||
|
|
||||||
async def add_user(self, user: int | User, alert: str | Alert) -> None:
|
async def get_users(self, alert: str | Alert) -> List[User]:
|
||||||
user = self._user_to_obj(user)
|
|
||||||
alert = self._alert_to_obj(alert)
|
alert = self._alert_to_obj(alert)
|
||||||
|
await alert.get(self.table, consistent=True)
|
||||||
|
return alert.users
|
||||||
|
|
||||||
|
async def add_user(self, alert: str | Alert, user: int | User):
|
||||||
|
alert = self._alert_to_obj(alert)
|
||||||
|
user = self._user_to_obj(user)
|
||||||
await alert.add_user(self.table, user)
|
await alert.add_user(self.table, user)
|
||||||
|
|
||||||
async def delete_user(self, user: int | User, alert: str | Alert):
|
async def remove_user(self, alert: str | Alert, user: int | User):
|
||||||
user = self._user_to_obj(user)
|
|
||||||
alert = self._alert_to_obj(alert)
|
alert = self._alert_to_obj(alert)
|
||||||
|
user = self._user_to_obj(user)
|
||||||
await alert.remove_user(self.table, user)
|
await alert.remove_user(self.table, user)
|
||||||
|
|
||||||
async def get_users(self, alert: str | Alert, consistent: bool = False) -> List[User]:
|
|
||||||
alert = self._alert_to_obj(alert)
|
|
||||||
return await alert.get_users(self.table, consistent=consistent )
|
|
||||||
|
@ -60,3 +60,11 @@ class UsersController:
|
|||||||
await user.get(self.table)
|
await user.get(self.table)
|
||||||
user.subscribed_alerts.append(alert)
|
user.subscribed_alerts.append(alert)
|
||||||
await user.put(self.table)
|
await user.put(self.table)
|
||||||
|
|
||||||
|
async def remove_alert(self, user: int | User, alert: str | Alert) -> None:
|
||||||
|
user = self._user_to_obj(user)
|
||||||
|
alert = self._alert_to_obj(alert)
|
||||||
|
await user.get(self.table)
|
||||||
|
user.subscribed_alerts.remove(alert)
|
||||||
|
await user.put(self.table)
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ class Alert:
|
|||||||
self.region: Region = region
|
self.region: Region = region
|
||||||
self.price: int = price
|
self.price: int = price
|
||||||
self._loaded: bool = False
|
self._loaded: bool = False
|
||||||
self._users: List[pdb.User] = []
|
self.users: List[pdb.User] = []
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_item(cls, primary_key: int, sort_key: str, users: List[int]) -> 'Alert':
|
def from_item(cls, primary_key: int, sort_key: str, users: List[int]) -> 'Alert':
|
||||||
@ -82,18 +82,15 @@ class Alert:
|
|||||||
await self.get(table, consistent=consistent)
|
await self.get(table, consistent=consistent)
|
||||||
|
|
||||||
async def _append_user(self, table: Table, user: pdb.User) -> None:
|
async def _append_user(self, table: Table, user: pdb.User) -> None:
|
||||||
self._users.append(user)
|
self.users.append(user)
|
||||||
await self.put(table)
|
await self.put(table)
|
||||||
|
|
||||||
async def _remove_user(self, table: Table, user: pdb.User) -> None:
|
async def _remove_user(self, table: Table, user: pdb.User) -> None:
|
||||||
update_expression = F("users").delete({user.user_id})
|
self.users.remove(user)
|
||||||
await table.update_item(
|
await self.put(table)
|
||||||
key=self.key,
|
|
||||||
update_expression=update_expression
|
|
||||||
)
|
|
||||||
|
|
||||||
async def put(self, table: Table) -> None:
|
async def put(self, table: Table) -> None:
|
||||||
user_ids = [str(user.user_id) for user in self._users]
|
user_ids = [str(user.user_id) for user in self.users]
|
||||||
await table.put_item(
|
await table.put_item(
|
||||||
item={
|
item={
|
||||||
self.primary_key_name: self.primary_key,
|
self.primary_key_name: self.primary_key,
|
||||||
@ -110,23 +107,23 @@ class Alert:
|
|||||||
)
|
)
|
||||||
except ItemNotFound:
|
except ItemNotFound:
|
||||||
return False
|
return False
|
||||||
self._users = [pdb.User(int(user_id)) for user_id in response['users']]
|
self.users = [pdb.User(int(user_id)) for user_id in response['users']]
|
||||||
self._loaded = True
|
self._loaded = True
|
||||||
return True
|
return True
|
||||||
|
|
||||||
async def get_users(self, table: Table, consistent: bool = False) -> List[pdb.User]:
|
async def get_users(self, table: Table, consistent: bool = False) -> List[pdb.User]:
|
||||||
await self._lazy_load(table, consistent=consistent)
|
await self._lazy_load(table, consistent=consistent)
|
||||||
|
|
||||||
return self._users
|
return self.users
|
||||||
|
|
||||||
async def add_user(self, table: Table, user: pdb.User, consistent: bool = False) -> None:
|
async def add_user(self, table: Table, user: pdb.User, consistent: bool = False) -> None:
|
||||||
await self._lazy_load(table, consistent=consistent)
|
await self._lazy_load(table, consistent=consistent)
|
||||||
|
|
||||||
if user not in self._users:
|
if user not in self.users:
|
||||||
await self._append_user(table=table, user=user)
|
await self._append_user(table=table, user=user)
|
||||||
|
|
||||||
async def remove_user(self, table: Table, user: pdb.User, consistent: bool = True) -> None:
|
async def remove_user(self, table: Table, user: pdb.User, consistent: bool = True) -> None:
|
||||||
await self._lazy_load(table, consistent=consistent)
|
await self._lazy_load(table, consistent=consistent)
|
||||||
|
|
||||||
if user in self._users:
|
if user in self.users:
|
||||||
await self._remove_user(table=table, user=user)
|
await self._remove_user(table=table, user=user)
|
||||||
|
@ -59,9 +59,6 @@ class User:
|
|||||||
async def delete(self, table: Table) -> None:
|
async def delete(self, table: Table) -> None:
|
||||||
if not self._loaded:
|
if not self._loaded:
|
||||||
await self._lazy_load(table, consistent=True)
|
await self._lazy_load(table, consistent=True)
|
||||||
if self.subscribed_alerts:
|
|
||||||
for alert in self.subscribed_alerts:
|
|
||||||
await alert.remove_user(table, self)
|
|
||||||
await table.delete_item(
|
await table.delete_item(
|
||||||
key={self.primary_key_name: self.primary_key},
|
key={self.primary_key_name: self.primary_key},
|
||||||
)
|
)
|
||||||
@ -80,3 +77,15 @@ class User:
|
|||||||
self.subscribed_alerts.append(pdb.Alert.from_str(string_trinity))
|
self.subscribed_alerts.append(pdb.Alert.from_str(string_trinity))
|
||||||
self.region = Region(response['region'])
|
self.region = Region(response['region'])
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
async def add_alert(self, table: Table, alert: 'pdb.Alert', consistent: bool = False) -> None:
|
||||||
|
await self._lazy_load(table, consistent=consistent)
|
||||||
|
if alert not in self.subscribed_alerts:
|
||||||
|
self.subscribed_alerts.append(alert)
|
||||||
|
await self.put(table)
|
||||||
|
|
||||||
|
async def remove_alert(self, table: Table, alert: 'pdb.Alert', consistent: bool = True) -> None:
|
||||||
|
await self._lazy_load(table, consistent=consistent)
|
||||||
|
if alert in self.subscribed_alerts:
|
||||||
|
self.subscribed_alerts.remove(alert)
|
||||||
|
await self.put(table)
|
||||||
|
Loading…
Reference in New Issue
Block a user