// Path: src/main/java/pl/setblack/pongi/users/repo/SessionsRepo.java
// public class SessionsRepo {
//     private AtomicReference<HashMap<String, Session>> activeSesssions =
//             new AtomicReference<>(HashMap.empty());
// 
//     private final Clock clock;
// 
//     public SessionsRepo(Clock clock) {
//         this.clock = clock;
//     }
// 
// 
//     public Session startSession(String userId) {
//         final UUID uuid = UUID.randomUUID();
//         final LocalDateTime now = LocalDateTime.now(this.clock);
//         final LocalDateTime expirationTime = now.plusDays(1);
//         final Session sess = new Session(userId, uuid, expirationTime);
//         this.activeSesssions.updateAndGet(map -> map.put(uuid.toString(), sess));
//         return sess;
//     }
// 
//     public Option<Session> getSession(final String uuid) {
//         return this.activeSesssions.get().get(uuid);
//     }
// 
// }
// 
// Path: src/main/java/pl/setblack/pongi/users/repo/UsersRepoES.java
// public class UsersRepoES implements UsersRepository {
// 
// 
//     private final Persistent<UsersRepositoryInMemory> controller;
// 
// 
//     public UsersRepoES(Path where) {
//         controller = Persistent.loadOptional(
//                 where,
//                 () -> new UsersRepositoryInMemory());
//     }
// 
//     public void close() {
//         this.controller.close();
//     }
// 
//     @Override
//     public RegUserStatus addUser(String login, String pass) {
//         return controller.executeAndQuery(usersRepo -> usersRepo.addUser(login, pass));
//     }
// 
//     @Override
//     public boolean login(String login, String password) {
//         return controller.query(usersRepo -> usersRepo.login(login, password));
//     }
// }
// 
// Path: src/main/java/pl/setblack/pongi/users/repo/UsersRepository.java
// public interface UsersRepository {
// 
//     RegUserStatus addUser(final String login, final String pass);
// 
//     boolean login(final String login, final String password);
// }


import pl.setblack.pongi.users.repo.SessionsRepo;
import pl.setblack.pongi.users.repo.UsersRepoES;
import pl.setblack.pongi.users.repo.UsersRepository;
import java.nio.file.Paths;
import java.time.Clock;
package pl.setblack.pongi.users;




public class UsersModule {

    private final UsersRepository usersRepo;
    private final SessionsRepo sessionsRepo;


// Path: src/main/java/pl/setblack/pongi/users/repo/SessionsRepo.java
// public class SessionsRepo {
//     private AtomicReference<HashMap<String, Session>> activeSesssions =
//             new AtomicReference<>(HashMap.empty());
// 
//     private final Clock clock;
// 
//     public SessionsRepo(Clock clock) {
//         this.clock = clock;
//     }
// 
// 
//     public Session startSession(String userId) {
//         final UUID uuid = UUID.randomUUID();
//         final LocalDateTime now = LocalDateTime.now(this.clock);
//         final LocalDateTime expirationTime = now.plusDays(1);
//         final Session sess = new Session(userId, uuid, expirationTime);
//         this.activeSesssions.updateAndGet(map -> map.put(uuid.toString(), sess));
//         return sess;
//     }
// 
//     public Option<Session> getSession(final String uuid) {
//         return this.activeSesssions.get().get(uuid);
//     }
// 
// }
// 
// Path: src/main/java/pl/setblack/pongi/users/repo/UsersRepoES.java
// public class UsersRepoES implements UsersRepository {
// 
// 
//     private final Persistent<UsersRepositoryInMemory> controller;
// 
// 
//     public UsersRepoES(Path where) {
//         controller = Persistent.loadOptional(
//                 where,
//                 () -> new UsersRepositoryInMemory());
//     }
// 
//     public void close() {
//         this.controller.close();
//     }
// 
//     @Override
//     public RegUserStatus addUser(String login, String pass) {
//         return controller.executeAndQuery(usersRepo -> usersRepo.addUser(login, pass));
//     }
// 
//     @Override
//     public boolean login(String login, String password) {
//         return controller.query(usersRepo -> usersRepo.login(login, password));
//     }
// }
// 
// Path: src/main/java/pl/setblack/pongi/users/repo/UsersRepository.java
// public interface UsersRepository {
// 
//     RegUserStatus addUser(final String login, final String pass);
// 
//     boolean login(final String login, final String password);
// }


// Path: src/main/java/pl/setblack/pongi/users/UsersModule.java
import pl.setblack.pongi.users.repo.SessionsRepo;
import pl.setblack.pongi.users.repo.UsersRepoES;
import pl.setblack.pongi.users.repo.UsersRepository;
import java.nio.file.Paths;
import java.time.Clock;

package pl.setblack.pongi.users;




public class UsersModule {

    private final UsersRepository usersRepo;
    private final SessionsRepo sessionsRepo;


    public UsersModule(UsersRepository usersRepo, SessionsRepo sessionsRepo) {