mirror of
https://github.com/traccar/traccar.git
synced 2026-05-19 06:02:22 -04:00
Use model instead of attributes to store Notification options
This commit is contained in:
37
schema/changelog-3.9.xml
Normal file
37
schema/changelog-3.9.xml
Normal file
@@ -0,0 +1,37 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<databaseChangeLog
|
||||
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
|
||||
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd"
|
||||
logicalFilePath="changelog-3.9">
|
||||
|
||||
<changeSet author="author" id="changelog-3.9">
|
||||
|
||||
<addColumn tableName="notifications">
|
||||
<column name="web" type="BOOLEAN" defaultValueBoolean="false" />
|
||||
<column name="mail" type="BOOLEAN" defaultValueBoolean="false" />
|
||||
</addColumn>
|
||||
|
||||
<update tableName="notifications">
|
||||
<column name="web" valueBoolean="true" />
|
||||
<where>attributes = '{"web":"true"}'</where>
|
||||
</update>
|
||||
|
||||
<update tableName="notifications">
|
||||
<column name="mail" valueBoolean="true" />
|
||||
<where>attributes = '{"mail":"true"}'</where>
|
||||
</update>
|
||||
|
||||
<update tableName="notifications">
|
||||
<column name="web" valueBoolean="true" />
|
||||
<column name="mail" valueBoolean="true" />
|
||||
<where>attributes = '{"web":"true","mail":"true"}'</where>
|
||||
</update>
|
||||
|
||||
<update tableName="notifications">
|
||||
<column name="attributes" value="{}" />
|
||||
</update>
|
||||
|
||||
</changeSet>
|
||||
</databaseChangeLog>
|
||||
@@ -10,4 +10,5 @@
|
||||
<include file="changelog-3.6.xml" relativeToChangelogFile="true" />
|
||||
<include file="changelog-3.7.xml" relativeToChangelogFile="true" />
|
||||
<include file="changelog-3.8.xml" relativeToChangelogFile="true" />
|
||||
<include file="changelog-3.9.xml" relativeToChangelogFile="true" />
|
||||
</databaseChangeLog>
|
||||
|
||||
@@ -264,14 +264,16 @@
|
||||
</entry>
|
||||
|
||||
<entry key='database.insertNotification'>
|
||||
INSERT INTO notifications (userId, type, attributes)
|
||||
VALUES (:userId, :type, :attributes)
|
||||
INSERT INTO notifications (userId, type, web, mail, attributes)
|
||||
VALUES (:userId, :type, :web, :mail, :attributes)
|
||||
</entry>
|
||||
|
||||
<entry key='database.updateNotification'>
|
||||
UPDATE notifications SET
|
||||
userId = :userId,
|
||||
type = :type,
|
||||
web = :web,
|
||||
mail = :mail,
|
||||
attributes = :attributes
|
||||
WHERE id = :id
|
||||
</entry>
|
||||
|
||||
@@ -49,7 +49,7 @@ public class NotificationResource extends BaseResource {
|
||||
userId = getUserId();
|
||||
}
|
||||
Context.getPermissionsManager().checkUser(getUserId(), userId);
|
||||
return Context.getNotificationManager().getUserNotifications(userId);
|
||||
return Context.getNotificationManager().getAllUserNotifications(userId);
|
||||
}
|
||||
|
||||
@POST
|
||||
|
||||
@@ -59,10 +59,10 @@ public class NotificationManager {
|
||||
&& Context.getGeofenceManager().checkGeofence(userId, event.getGeofenceId())) {
|
||||
Notification notification = getUserNotificationByType(userId, event.getType());
|
||||
if (notification != null) {
|
||||
if (notification.getAttributes().containsKey("web")) {
|
||||
if (notification.getWeb()) {
|
||||
Context.getConnectionManager().updateEvent(userId, event, position);
|
||||
}
|
||||
if (notification.getAttributes().containsKey("mail")) {
|
||||
if (notification.getMail()) {
|
||||
NotificationMail.sendMailAsync(userId, event, position);
|
||||
}
|
||||
}
|
||||
@@ -130,8 +130,11 @@ public class NotificationManager {
|
||||
public void updateNotification(Notification notification) {
|
||||
Notification cachedNotification = getUserNotificationByType(notification.getUserId(), notification.getType());
|
||||
if (cachedNotification != null) {
|
||||
if (!cachedNotification.getAttributes().equals(notification.getAttributes())) {
|
||||
if (notification.getAttributes().isEmpty()) {
|
||||
if (cachedNotification.getWeb() != notification.getWeb()
|
||||
|| cachedNotification.getMail() != notification.getMail()
|
||||
|| !cachedNotification.getAttributes().equals(notification.getAttributes())) {
|
||||
if (!notification.getWeb() && !notification.getMail()
|
||||
&& notification.getAttributes().isEmpty()) {
|
||||
try {
|
||||
dataManager.removeNotification(cachedNotification);
|
||||
} catch (SQLException error) {
|
||||
@@ -146,6 +149,8 @@ public class NotificationManager {
|
||||
} else {
|
||||
notificationsLock.writeLock().lock();
|
||||
try {
|
||||
cachedNotification.setWeb(notification.getWeb());
|
||||
cachedNotification.setMail(notification.getMail());
|
||||
cachedNotification.setAttributes(notification.getAttributes());
|
||||
} finally {
|
||||
notificationsLock.writeLock().unlock();
|
||||
@@ -159,7 +164,7 @@ public class NotificationManager {
|
||||
} else {
|
||||
notification.setId(cachedNotification.getId());
|
||||
}
|
||||
} else if (!notification.getAttributes().isEmpty()) {
|
||||
} else if (notification.getWeb() || notification.getMail() || !notification.getAttributes().isEmpty()) {
|
||||
try {
|
||||
dataManager.addNotification(notification);
|
||||
} catch (SQLException error) {
|
||||
@@ -193,4 +198,16 @@ public class NotificationManager {
|
||||
return notifications;
|
||||
}
|
||||
|
||||
public Collection<Notification> getAllUserNotifications(long userId) {
|
||||
Map<String, Notification> notifications = new HashMap<>();
|
||||
for (Notification notification : getAllNotifications()) {
|
||||
notification.setUserId(userId);
|
||||
notifications.put(notification.getType(), notification);
|
||||
}
|
||||
for (Notification notification : getUserNotifications(userId)) {
|
||||
notifications.put(notification.getType(), notification);
|
||||
}
|
||||
return notifications.values();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -37,4 +37,25 @@ public class Notification extends Extensible {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
private boolean web;
|
||||
|
||||
public boolean getWeb() {
|
||||
return web;
|
||||
}
|
||||
|
||||
public void setWeb(boolean web) {
|
||||
this.web = web;
|
||||
}
|
||||
|
||||
private boolean mail;
|
||||
|
||||
public boolean getMail() {
|
||||
return mail;
|
||||
}
|
||||
|
||||
public void setMail(boolean mail) {
|
||||
this.mail = mail;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user