Skip to content

Commit

Permalink
Add API to send messages
Browse files Browse the repository at this point in the history
  • Loading branch information
tananaev committed Feb 25, 2024
1 parent b37c5aa commit 9e0c4c5
Showing 1 changed file with 37 additions and 9 deletions.
46 changes: 37 additions & 9 deletions src/main/java/org/traccar/api/resource/NotificationResource.java
Expand Up @@ -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;
Expand All @@ -23,20 +33,16 @@
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;
Expand Down Expand Up @@ -97,4 +103,26 @@ public Response testMessage(@PathParam("notificator") String notificator)
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();
}

}

0 comments on commit 9e0c4c5

Please sign in to comment.