1#include "games_controller.h"
2#include <boost/filesystem/operations.hpp>
5cavoke::server::controllers::GamesController::GamesController(
6 std::shared_ptr<model::GamesStorage> games_storage)
7 : m_games_storage(std::move(games_storage)) {
10void cavoke::server::controllers::GamesController::games_list(
11 const drogon::HttpRequestPtr &req,
12 std::function<
void(
const drogon::HttpResponsePtr &)> &&callback) {
13 std::vector<model::Game> games = m_games_storage->list_games();
14 std::vector<model::GameConfig> configs;
15 std::transform(games.begin(), games.end(), std::back_inserter(configs),
16 [](
const model::Game &g) { return g.config; });
18 auto resp = newNlohmannJsonResponse(configs);
22void cavoke::server::controllers::GamesController::game_config(
23 const drogon::HttpRequestPtr &req,
24 std::function<
void(
const drogon::HttpResponsePtr &)> &&callback,
25 const std::string &game_id) {
26 auto game = m_games_storage->get_game_by_id(game_id);
27 if (!game.has_value()) {
28 auto resp = drogon::HttpResponse::newNotFoundResponse();
33 auto resp = newNlohmannJsonResponse(game->config);
37void cavoke::server::controllers::GamesController::game_client_file(
38 const drogon::HttpRequestPtr &req,
39 std::function<
void(
const drogon::HttpResponsePtr &)> &&callback,
40 const std::string &game_id) {
41 auto game = m_games_storage->get_game_by_id(game_id);
42 if (!game.has_value()) {
43 auto resp = drogon::HttpResponse::newNotFoundResponse();
48 auto resp = drogon::HttpResponse::newFileResponse(
49 boost::filesystem::canonical(game->client_file).string(),
50 game->config.id +
".zip");