-
Notifications
You must be signed in to change notification settings - Fork 0
/
notification_manager.py
80 lines (72 loc) · 2.43 KB
/
notification_manager.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
from datetime import datetime, timedelta
from app import db
from models import Notification, User
class Notification_manager:
def __init__(self):
...
@staticmethod
def get_notifications(current_user):
"""
Get all notifications of the user
"""
notifications = Notification.query.filter_by(user_id=current_user.id).order_by(Notification.date.desc()).all()
# Create a dict object for each notification to be able to use it in the template
notifications = [
{
'message': notification.message,
'icon': notification.icon,
'date': notification.date
}
for notification in notifications
]
return notifications
@staticmethod
def add_notification(user_id, message, icon):
"""
Add a notification to the database
Icon options:
- users
- user
- warning
- shopping-cart
"""
# Check if the user turn off the notifications
user = User.query.filter_by(id=user_id).first()
if user.notifications_active is False:
return
new_notification = Notification(
user_id=user_id,
message=message,
icon=icon,
date=datetime.utcnow()
)
db.session.add(new_notification)
db.session.commit()
@staticmethod
def delete_all_notifications(current_user):
"""
Delete all notifications from the database
"""
notifications = Notification.query.filter_by(user_id=current_user.id).all()
for notification in notifications:
db.session.delete(notification)
db.session.commit()
@staticmethod
def delete_old_notifications(current_user):
"""
Delete notifications older than 1 week
"""
notifications = Notification.query.filter_by(user_id=current_user.id).all()
for notification in notifications:
if notification.date < datetime.utcnow() - timedelta(days=7):
db.session.delete(notification)
db.session.commit()
@staticmethod
def send_notification_to_all_users(message, icon):
"""
Send a notification to all users
"""
users = User.query.all()
for user in users:
Notification_manager.add_notification(user.id, message, icon)
db.session.commit()