package de.fd.fh; import de.fd.fh.server.access.AccessContextEventListener; import de.fd.fh.server.access.AccessRepository; import de.fd.fh.server.access.AccessService; import de.fd.fh.server.access.web.AccessController; import de.fd.fh.server.game.GameRepository; import de.fd.fh.server.game.GameService; import de.fd.fh.server.game.web.GameController; import de.fd.fh.server.user.UserContextEventListener; import de.fd.fh.server.user.web.UserController; import de.fd.fh.server.user.UserRepository; import de.fd.fh.server.user.UserService; import java.util.HashSet; import java.util.Observable; import java.util.Observer; import java.util.Set; import static spark.Spark.*; public class ServerApp { private static AccessRepository accessRepository; private static UserRepository userRepository; private static GameRepository gameRepository; private static AccessController accessController; private static UserController userController; private static GameController gameController; private static final Set listeners = new HashSet<>(); public static void main(String[] args) { initListeners(); if (accessController == null && userController == null) { initRepositories(); accessController = new AccessController((AccessService) addListeners(new AccessService(accessRepository))); userController = new UserController((UserService) addListeners(new UserService(userRepository))); gameController = new GameController(new GameService(gameRepository)); } before("/*", (req, res) -> accessController.before(req)); post("/accounts/registrate", accessController::registrate); post("/accounts/login", accessController::login); post("/accounts/logout", accessController::logout); delete("/accounts/:player_id", accessController::deletePlayer); post("/users", userController::updateUser); get("/users", userController::getCompleteUser); get("/users/:user_id", userController::getUser); post("/games", gameController::createGame); get("/games/:game_id", gameController::findGameById); get("/games/findByUser/:user_id", gameController::findRunningGamesOfUser); get("/hello", (req, res) -> "Hello World"); } public static void initController( final AccessController accessController, final UserController userController, final GameController gameController ) { ServerApp.userController = userController; ServerApp.accessController = accessController; ServerApp.gameController = gameController; } private static Object addListeners(Observable service) { listeners.forEach(service::addObserver); return service; } private static void initListeners() { listeners.add(new AccessContextEventListener(accessRepository)); listeners.add(new UserContextEventListener(userRepository)); } private static void initRepositories() { accessRepository = new AccessRepository(); userRepository = new UserRepository(); gameRepository = new GameRepository(); } }