introduced ModuleRegistry to easy inter-module dependencies

This commit is contained in:
2025-08-09 13:43:10 +02:00
parent 1d569b4962
commit 5d506ac0f9
25 changed files with 347 additions and 255 deletions

View File

@@ -12,8 +12,8 @@ import de.srsoftware.configuration.Configuration;
import de.srsoftware.tools.Path;
import de.srsoftware.tools.SessionToken;
import de.srsoftware.umbrella.core.BaseHandler;
import de.srsoftware.umbrella.core.ModuleRegistry;
import de.srsoftware.umbrella.core.api.NoteService;
import de.srsoftware.umbrella.core.api.UserService;
import de.srsoftware.umbrella.core.exceptions.UmbrellaException;
import de.srsoftware.umbrella.core.model.Note;
import de.srsoftware.umbrella.core.model.Token;
@@ -26,12 +26,12 @@ import java.util.stream.Collectors;
public class NoteModule extends BaseHandler implements NoteService {
private final NotesDb notesDb;
private final UserService users;
private final ModuleRegistry registry;
public NoteModule(Configuration config, UserService userService) {
public NoteModule(ModuleRegistry registry, Configuration config) {
var dbFile = config.get(CONFIG_DATABASE).orElseThrow(() -> missingFieldException(CONFIG_DATABASE));
notesDb = new SqliteDb(connect(dbFile));
users = userService;
this.registry = registry.add(this);
}
@Override
@@ -44,7 +44,7 @@ public class NoteModule extends BaseHandler implements NoteService {
addCors(ex);
try {
Optional<Token> token = SessionToken.from(ex).map(Token::of);
var user = users.loadUser(token);
var user = registry.userService().loadUser(token);
if (user.isEmpty()) return unauthorized(ex);
var head = path.pop();
if (head == null) throw unprocessable("Module missing in path.");
@@ -71,7 +71,7 @@ public class NoteModule extends BaseHandler implements NoteService {
public boolean doGet(Path path, HttpExchange ex) throws IOException {
addCors(ex);
try {
var user = users.refreshSession(ex);
var user = registry.userService().refreshSession(ex);
if (user.isEmpty()) return unauthorized(ex);
var module = path.pop();
Map<Long,Note> notes = null;
@@ -82,7 +82,7 @@ public class NoteModule extends BaseHandler implements NoteService {
long entityId = Long.parseLong(head);
notes = getNotes(module, entityId);
}
var authors = notes.values().stream().map(Note::authorId).distinct().map(users::loadUser).collect(Collectors.toMap(UmbrellaUser::id,UmbrellaUser::toMap));
var authors = notes.values().stream().map(Note::authorId).distinct().map(registry.userService()::loadUser).collect(Collectors.toMap(UmbrellaUser::id,UmbrellaUser::toMap));
return sendContent(ex, Map.of("notes",mapValues(notes),"authors",authors));
} catch (NumberFormatException e){
return sendContent(ex,HTTP_UNPROCESSABLE,"Entity id missing in path.");
@@ -96,7 +96,7 @@ public class NoteModule extends BaseHandler implements NoteService {
addCors(ex);
try {
Optional<Token> token = SessionToken.from(ex).map(Token::of);
var user = users.loadUser(token);
var user = registry.userService().loadUser(token);
if (user.isEmpty()) return unauthorized(ex);
var head = path.pop();
long noteId = Long.parseLong(head);
@@ -119,7 +119,7 @@ public class NoteModule extends BaseHandler implements NoteService {
addCors(ex);
try {
Optional<Token> token = SessionToken.from(ex).map(Token::of);
var user = users.loadUser(token);
var user = registry.userService().loadUser(token);
if (user.isEmpty()) return unauthorized(ex);
var module = path.pop();
if (module == null) throw unprocessable("Module missing in path.");