working on task update by event

This commit is contained in:
2025-12-20 17:09:06 +01:00
parent f6813d8a75
commit 18c7965b2e
13 changed files with 67 additions and 25 deletions

View File

@@ -0,0 +1,54 @@
/* © SRSoftware 2025 */
package de.srsoftware.umbrella.messagebus.events;
import static de.srsoftware.umbrella.core.Constants.USER;
import de.srsoftware.tools.Mappable;
import de.srsoftware.umbrella.core.model.UmbrellaUser;
import java.util.Map;
import org.json.JSONObject;
public abstract class Event<Payload extends Mappable> {
public enum EventType {
CREATE,
UPDATE,
DELETE;
}
private UmbrellaUser initiator;
private String realm;
private Payload payload;
private EventType eventType;
public Event(UmbrellaUser initiator, String realm, Payload payload, EventType type){
this.initiator = initiator;
this.realm = realm;
this.payload = payload;
this.eventType = type;
}
public String eventType(){
return eventType.toString();
}
public abstract boolean isIntendedFor(UmbrellaUser user);
public String json(){
Class<?> clazz = payload.getClass();
{ // get the highest superclass that is not object
Class<?> parent = clazz.getSuperclass();
while (parent != null && parent != Object.class) {
clazz = parent;
parent = clazz.getSuperclass();
}
}
var map = Map.of(USER,initiator.toMap(),clazz.getSimpleName().toLowerCase(),payload.toMap());
return new JSONObject(map).toString();
}
public Payload payload(){
return payload;
}
}

View File

@@ -0,0 +1,24 @@
/* © SRSoftware 2025 */
package de.srsoftware.umbrella.messagebus.events;
import de.srsoftware.umbrella.core.model.Project;
import de.srsoftware.umbrella.core.model.Task;
import de.srsoftware.umbrella.core.model.UmbrellaUser;
import static de.srsoftware.umbrella.core.Constants.PROJECT;
import static de.srsoftware.umbrella.core.Constants.TASK;
public class ProjectEvent extends Event<Project>{
public ProjectEvent(UmbrellaUser initiator, Project project, EventType type){
super(initiator, PROJECT, project, type);
}
@Override
public boolean isIntendedFor(UmbrellaUser user) {
for (var member : payload().members().values()){
if (member.user().equals(user)) return true;
}
return false;
}
}

View File

@@ -0,0 +1,22 @@
/* © SRSoftware 2025 */
package de.srsoftware.umbrella.messagebus.events;
import static de.srsoftware.umbrella.core.Constants.TASK;
import de.srsoftware.umbrella.core.model.Task;
import de.srsoftware.umbrella.core.model.UmbrellaUser;
public class TaskEvent extends Event<Task>{
public TaskEvent(UmbrellaUser initiator, Task task, EventType type){
super(initiator, TASK, task, type);
}
@Override
public boolean isIntendedFor(UmbrellaUser user) {
for (var member : payload().members().values()){
if (member.user().equals(user)) return true;
}
return false;
}
}