diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/domain/user/UserFactory.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/domain/user/UserFactory.java new file mode 100644 index 0000000..cd94ae2 --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/domain/user/UserFactory.java @@ -0,0 +1,28 @@ +package ch.unibas.dmi.dbis.cs108.casono.server.domain.user; + +import ch.unibas.dmi.dbis.cs108.casono.server.network.sessions.SessionId; + +public class UserFactory { + private final UserRegistry registry; + + public UserFactory(UserRegistry registry) { + this.registry = registry; + } + + public User create(String desiredName, SessionId sessionId) { + var result = registry.registerIfAvailable(desiredName, sessionId); + if (result.isPresent()) { + return result.get(); + } + + int suffix = 1; + while (true) { + String candidate = desiredName + "_" + String.format("%03d", suffix); + result = registry.registerIfAvailable(candidate, sessionId); + if (result.isPresent()) { + return result.get(); + } + suffix++; + } + } +}