aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/org/traccar/api/resource/NotificationResource.java46
1 files changed, 37 insertions, 9 deletions
diff --git a/src/main/java/org/traccar/api/resource/NotificationResource.java b/src/main/java/org/traccar/api/resource/NotificationResource.java
index 2a209efb6..43dc1fa98 100644
--- a/src/main/java/org/traccar/api/resource/NotificationResource.java
+++ b/src/main/java/org/traccar/api/resource/NotificationResource.java
@@ -15,6 +15,16 @@
*/
package org.traccar.api.resource;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.PathParam;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.QueryParam;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.traccar.api.ExtendedObjectResource;
@@ -23,20 +33,16 @@ import org.traccar.model.Notification;
import org.traccar.model.Typed;
import org.traccar.model.User;
import org.traccar.notification.MessageException;
+import org.traccar.notification.NotificationMessage;
import org.traccar.notification.NotificatorManager;
import org.traccar.storage.StorageException;
+import org.traccar.storage.query.Columns;
+import org.traccar.storage.query.Condition;
+import org.traccar.storage.query.Request;
-import jakarta.inject.Inject;
-import jakarta.ws.rs.Consumes;
-import jakarta.ws.rs.GET;
-import jakarta.ws.rs.POST;
-import jakarta.ws.rs.Path;
-import jakarta.ws.rs.PathParam;
-import jakarta.ws.rs.Produces;
-import jakarta.ws.rs.core.MediaType;
-import jakarta.ws.rs.core.Response;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
@@ -97,4 +103,26 @@ public class NotificationResource extends ExtendedObjectResource<Notification> {
return Response.noContent().build();
}
+ @POST
+ @Path("send/{notificator}")
+ public Response sendMessage(
+ @PathParam("notificator") String notificator, @QueryParam("userId") List<Long> userIds,
+ NotificationMessage message) throws MessageException, StorageException {
+ permissionsService.checkAdmin(getUserId());
+ List<User> users;
+ if (userIds.isEmpty()) {
+ users = storage.getObjects(User.class, new Request(new Columns.All()));
+ } else {
+ users = new ArrayList<>();
+ for (long userId : userIds) {
+ users.add(storage.getObject(
+ User.class, new Request(new Columns.All(), new Condition.Equals("id", userId))));
+ }
+ }
+ for (User user : users) {
+ notificatorManager.getNotificator(notificator).send(user, message, null, null);
+ }
+ return Response.noContent().build();
+ }
+
}