11#include " game.h"
22
3- #include < string>
43#include < service/database/project_database.h>
5- #include < service/system/lang.h>
64#include < service/storage/ingestor/recipe/recipe_parser.h>
5+ #include < service/system/lang.h>
6+ #include < string>
77
88using namespace std ;
99using namespace drogon ;
@@ -20,26 +20,18 @@ namespace api::v1 {
2020 requireNonVirtual (resolved);
2121
2222 const auto contents = co_await resolved->getProjectContents ();
23- if (!contents) {
24- throw ApiException (contents.error (), " Contents directory not found" );
25- }
23+ assertFound (contents);
2624
2725 callback (jsonResponse (*contents));
2826 }
2927
3028 Task<> GameController::contentItem (const HttpRequestPtr req, std::function<void (const HttpResponsePtr &)> callback,
3129 const std::string project, const std::string id) const {
32- if (id.empty ()) {
33- throw ApiException (Error::ErrBadRequest, " Insufficient parameters" );
34- }
35-
3630 const auto resolved = co_await BaseProjectController::getProjectWithParams (req, project);
3731 requireNonVirtual (resolved);
3832
3933 const auto page = co_await resolved->readContentPage (id);
40- if (!page) {
41- throw ApiException (Error::ErrNotFound, " Content ID not found" );
42- }
34+ assertFound (page, " Content ID not found" );
4335
4436 Json::Value root;
4537 root[" project" ] = co_await resolved->toJson ();
@@ -54,9 +46,7 @@ namespace api::v1 {
5446
5547 Task<> GameController::contentItemRecipe (const HttpRequestPtr req, const std::function<void (const HttpResponsePtr &)> callback,
5648 const std::string project, const std::string item) const {
57- if (item.empty ()) {
58- throw ApiException (Error::ErrBadRequest, " Insufficient parameters" );
59- }
49+ assertNonEmptyParam (item);
6050
6151 const auto resolved = co_await BaseProjectController::getProjectWithParams (req, project);
6252 requireNonVirtual (resolved);
@@ -70,6 +60,7 @@ namespace api::v1 {
7060 logger.error (" Missing recipe {} for item {} / {}" , id, project, item);
7161 }
7262 }
63+
7364 callback (jsonResponse (root));
7465 }
7566
@@ -81,87 +72,70 @@ namespace api::v1 {
8172 logger.error (" Missing project for item {}:{}:{}" , id, loc, project);
8273 continue ;
8374 }
84- const auto name = co_await (*resolved)->getItemName (loc);
75+ const auto itemName = co_await (*resolved)->getItemName (loc);
8576
8677 nlohmann::json itemJson;
8778 itemJson[" project" ] = project.empty () ? nlohmann::json (nullptr ) : nlohmann::json (project);
8879 itemJson[" id" ] = loc;
89- if (!name. name . empty () ) {
90- itemJson[" name" ] = name. name ;
80+ if (itemName ) {
81+ itemJson[" name" ] = itemName-> name ;
9182 }
9283 itemJson[" has_page" ] = !path.empty ();
9384 root.push_back (itemJson);
9485 }
9586 co_return root;
9687 }
9788
98- // TODO Remove unused param
9989 Task<> GameController::contentItemUsage (const HttpRequestPtr req, const std::function<void (const HttpResponsePtr &)> callback,
10090 const std::string project, const std::string item) const {
101- if (item.empty ()) {
102- throw ApiException (Error::ErrBadRequest, " Insufficient parameters" );
103- }
91+ assertNonEmptyParam (item);
10492
105- const auto obtainable = co_await global::database->getObtainableItemsBy (item);
93+ const auto resolved = co_await BaseProjectController::getProjectWithParamsCached (req, project);
94+ const auto obtainable = co_await resolved->getProjectDatabase ().getObtainableItemsBy (item);
10695
10796 const auto json = co_await resolveContentUsage (obtainable);
10897 callback (jsonResponse (json));
10998 }
11099
111100 Task<> GameController::contentItemName (const HttpRequestPtr req, std::function<void (const HttpResponsePtr &)> callback,
112101 const std::string project, const std::string id) const {
113- if (id.empty ()) {
114- throw ApiException (Error::ErrBadRequest, " Insufficient parameters" );
115- }
102+ assertNonEmptyParam (id);
116103
117104 const auto resolved = co_await BaseProjectController::getProjectWithParamsCached (req, project);
118- const auto [name, path] = co_await resolved->getItemName (id);
119- if (name.empty ()) {
120- throw ApiException (Error::ErrNotFound, " not_found" );
121- }
105+ const auto itemName = co_await resolved->getItemName (id);
106+ assertFound (itemName);
122107
123108 Json::Value root;
124109 root[" source" ] = resolved->getId ();
125110 root[" id" ] = id;
126- root[" name" ] = name;
111+ root[" name" ] = itemName-> name ;
127112
128113 callback (HttpResponse::newHttpJsonResponse (root));
129114 }
130115
131116 Task<> GameController::recipe (const HttpRequestPtr req, const std::function<void (const HttpResponsePtr &)> callback,
132117 const std::string project, const std::string recipe) const {
133- if (recipe.empty ()) {
134- throw ApiException (Error::ErrBadRequest, " Insufficient parameters" );
135- }
118+ assertNonEmptyParam (recipe);
136119
137120 const auto resolved = co_await BaseProjectController::getProjectWithParamsCached (req, project);
138121 requireNonVirtual (resolved);
139122
140123 const auto resolvedResult = co_await resolved->getRecipe (recipe);
141- if (!resolvedResult) {
142- throw ApiException (Error::ErrNotFound, " not_found" );
143- }
124+ assertFound (resolvedResult);
144125
145126 callback (jsonResponse (*resolvedResult));
146127 }
147128
148129 Task<> GameController::recipeType (const HttpRequestPtr req, const std::function<void (const HttpResponsePtr &)> callback,
149130 const std::string project, const std::string type) const {
150- if (type.empty ()) {
151- throw ApiException (Error::ErrBadRequest, " Insufficient parameters" );
152- }
131+ assertNonEmptyParam (type);
153132
154- // TODO Use cached + move type getter to project
155- const auto resolved = co_await BaseProjectController::getProjectWithParams (req, project);
133+ const auto resolved = co_await BaseProjectController::getProjectWithParamsCached (req, project);
156134 const auto recipeType = co_await resolved->getProjectDatabase ().getRecipeType (type);
157- if (!recipeType) {
158- throw ApiException (Error::ErrNotFound, " not_found" ); // TODO Shorthand
159- }
135+ assertFound (recipeType);
160136
161137 const auto layout = co_await content::getRecipeType (resolved, unwrap (ResourceLocation::parse (type)));
162- if (!layout) {
163- throw ApiException (Error::ErrNotFound, " not_found" );
164- }
138+ assertFound (layout);
165139
166140 const auto workbenches = co_await global::database->getRecipeTypeWorkbenches (recipeType->getValueOfId ());
167141 const auto workbenchItems = co_await resolveContentUsage (workbenches);
0 commit comments