#pragma once #include #include "../services/AuthService.h" using namespace drogon; class EbookController : public HttpController { public: METHOD_LIST_BEGIN // Public endpoints ADD_METHOD_TO(EbookController::getAllEbooks, "/api/ebooks", Get); ADD_METHOD_TO(EbookController::getLatestEbooks, "/api/ebooks/latest", Get); ADD_METHOD_TO(EbookController::getEbook, "/api/ebooks/{1}", Get); ADD_METHOD_TO(EbookController::getUserEbooks, "/api/ebooks/user/{1}", Get); ADD_METHOD_TO(EbookController::getRealmEbooks, "/api/ebooks/realm/{1}", Get); ADD_METHOD_TO(EbookController::incrementReadCount, "/api/ebooks/{1}/read", Post); // Authenticated endpoints ADD_METHOD_TO(EbookController::getMyEbooks, "/api/user/ebooks", Get); ADD_METHOD_TO(EbookController::uploadEbook, "/api/user/ebooks", Post); ADD_METHOD_TO(EbookController::updateEbook, "/api/ebooks/{1}", Put); ADD_METHOD_TO(EbookController::deleteEbook, "/api/ebooks/{1}", Delete); ADD_METHOD_TO(EbookController::uploadCover, "/api/ebooks/{1}/cover", Post); ADD_METHOD_TO(EbookController::downloadEbook, "/api/ebooks/{1}/download", Get); METHOD_LIST_END // Public ebook listing void getAllEbooks(const HttpRequestPtr &req, std::function &&callback); void getLatestEbooks(const HttpRequestPtr &req, std::function &&callback); void getEbook(const HttpRequestPtr &req, std::function &&callback, const std::string &ebookId); void getUserEbooks(const HttpRequestPtr &req, std::function &&callback, const std::string &username); void getRealmEbooks(const HttpRequestPtr &req, std::function &&callback, const std::string &realmId); void incrementReadCount(const HttpRequestPtr &req, std::function &&callback, const std::string &ebookId); // Authenticated ebook management void getMyEbooks(const HttpRequestPtr &req, std::function &&callback); void uploadEbook(const HttpRequestPtr &req, std::function &&callback); void updateEbook(const HttpRequestPtr &req, std::function &&callback, const std::string &ebookId); void deleteEbook(const HttpRequestPtr &req, std::function &&callback, const std::string &ebookId); void uploadCover(const HttpRequestPtr &req, std::function &&callback, const std::string &ebookId); void downloadEbook(const HttpRequestPtr &req, std::function &&callback, const std::string &ebookId); };