#include "apiserver.h" ApiServer::ApiServer() { server.route("/api/devices", QHttpServerRequest::Method::Get, [this](const QHttpServerRequest &request) { return handleGetFilteredDevices(request); }); server.route("/api/departments", QHttpServerRequest::Method::Get, [this](const QHttpServerRequest &request) { return handleGetAllDepartments(request); }); server.route("/api/devicemodels", QHttpServerRequest::Method::Get, [this](const QHttpServerRequest &request) { return handleGetAllDeviceModels(request); }); server.route("/api/devicetypes", QHttpServerRequest::Method::Get, [this](const QHttpServerRequest &request) { return handleGetAllDeviceTypes(request); }); server.route("/api/locations", QHttpServerRequest::Method::Get, [this](const QHttpServerRequest &request) { return handleGetAllLocations(request); }); server.route("/api/manufacturers", QHttpServerRequest::Method::Get, [this](const QHttpServerRequest &request) { return handleGetAllManufacturers(request); }); server.route("/api/devices/", QHttpServerRequest::Method::Put, [this](int id, const QHttpServerRequest &request) { return handleUpdateDevice(id, request); }); } void ApiServer::start(ServiceLoadDB *serviceDB) { server.listen(QHostAddress::LocalHost, 8080); deviceLogic = new DeviceLogic(serviceDB); departmentLogic = new DepartmentLogic(serviceDB); deviceModelLogic = new DeviceModelLogic(serviceDB); locationLogic = new LocationLogic(serviceDB); manufacturerLogic = new ManufacturerLogic(serviceDB); deviceTypeLogic = new DeviceTypeLogic(serviceDB); } QHttpServerResponse ApiServer::handleGetFilteredDevices(const QHttpServerRequest &request) { QUrlQuery query = request.query(); bool isWorking = query.queryItemValue("isWorking") == "true"; bool priceFromOk; double priceFrom = query.queryItemValue("priceFrom").toDouble(&priceFromOk); if (!priceFromOk) { return QHttpServerResponse("Invalid priceFrom value", QHttpServerResponse::StatusCode::BadRequest); } bool priceToOk; double priceTo = query.queryItemValue("priceTo").toDouble(&priceToOk); if (!priceToOk) { return QHttpServerResponse("Invalid priceTo value", QHttpServerResponse::StatusCode::BadRequest); } bool applyFilters = query.queryItemValue("applyFilters") == "true"; bool disregardState = query.queryItemValue("disregardState") == "true"; bool entityIdOk; int entityId = query.queryItemValue("entityId").toInt(&entityIdOk); if (!entityIdOk) { return QHttpServerResponse("Invalid entityId value", QHttpServerResponse::StatusCode::BadRequest); } bool currentEntityOk; int currentEntity = query.queryItemValue("currentEntity").toInt(¤tEntityOk); if (!currentEntityOk) { return QHttpServerResponse("Invalid currentEntity value", QHttpServerResponse::StatusCode::BadRequest); } QString searchText = query.queryItemValue("searchText"); QStringList validSortOrders = {"Сначала новые", "Сначала старые", "Сначала дешевые", "Сначала дорогие", "Сначала с лайком"}; QString sortOrder = query.queryItemValue("sortOrder"); if (!validSortOrders.contains(sortOrder)) { return QHttpServerResponse("Invalid sortOrder value", QHttpServerResponse::StatusCode::BadRequest); } FilterParams filterParams; filterParams.setIsWorking(isWorking); filterParams.setPriceFrom(priceFrom); filterParams.setPriceTo(priceTo); filterParams.setApllyFilters(applyFilters); filterParams.setDisregardState(disregardState); QList filteredDevices = deviceLogic->getAllByParameters( entityId, currentEntity, searchText, filterParams, sortOrder ); QJsonArray deviceArray; for (const Device &device : filteredDevices) { deviceArray.append(device.toJson()); } QJsonObject responseObject; responseObject["devices"] = deviceArray; return QHttpServerResponse(QJsonDocument(responseObject).toJson(), QHttpServerResponse::StatusCode::Ok); } QHttpServerResponse ApiServer::handleGetAllDepartments(const QHttpServerRequest &request) { QMap departments = departmentLogic->getAll(); if (departments.isEmpty()) { return QHttpServerResponse("Failed to retrieve departments", QHttpServerResponse::StatusCode::InternalServerError); } QJsonArray departmentArray = createJsonArray(departments); QJsonObject responseObject; responseObject["departments"] = departmentArray; return QHttpServerResponse(QJsonDocument(responseObject).toJson(), QHttpServerResponse::StatusCode::Ok); } QHttpServerResponse ApiServer::handleGetAllDeviceModels(const QHttpServerRequest &request) { QMap deviceModels = deviceModelLogic->getAll(); if (deviceModels.isEmpty()) { return QHttpServerResponse("Failed to retrieve device models", QHttpServerResponse::StatusCode::InternalServerError); } QJsonArray deviceModelArray = createJsonArray(deviceModels); QJsonObject responseObject; responseObject["deviceModels"] = deviceModelArray; return QHttpServerResponse(QJsonDocument(responseObject).toJson(), QHttpServerResponse::StatusCode::Ok); } QHttpServerResponse ApiServer::handleGetAllDeviceTypes(const QHttpServerRequest &request) { QMap deviceTypes = deviceTypeLogic->getAll(); if (deviceTypes.isEmpty()) { return QHttpServerResponse("Failed to retrieve device types", QHttpServerResponse::StatusCode::InternalServerError); } QJsonArray deviceTypeArray = createJsonArray(deviceTypes); QJsonObject responseObject; responseObject["deviceTypes"] = deviceTypeArray; return QHttpServerResponse(QJsonDocument(responseObject).toJson(), QHttpServerResponse::StatusCode::Ok); } QHttpServerResponse ApiServer::handleGetAllLocations(const QHttpServerRequest &request) { QMap locations = locationLogic->getAll(); if (locations.isEmpty()) { return QHttpServerResponse("Failed to retrieve locations", QHttpServerResponse::StatusCode::InternalServerError); } QJsonArray locationArray = createJsonArray(locations); QJsonObject responseObject; responseObject["locations"] = locationArray; return QHttpServerResponse(QJsonDocument(responseObject).toJson(), QHttpServerResponse::StatusCode::Ok); } QHttpServerResponse ApiServer::handleGetAllManufacturers(const QHttpServerRequest &request) { QMap manufacturers = manufacturerLogic->getAll(); if (manufacturers.isEmpty()) { return QHttpServerResponse("Failed to retrieve manufacturers", QHttpServerResponse::StatusCode::InternalServerError); } QJsonArray manufacturerArray = createJsonArray(manufacturers); QJsonObject responseObject; responseObject["manufacturers"] = manufacturerArray; return QHttpServerResponse(QJsonDocument(responseObject).toJson(), QHttpServerResponse::StatusCode::Ok); } QHttpServerResponse ApiServer::handleUpdateDevice(int id, const QHttpServerRequest &request) { QByteArray body = request.body(); QJsonDocument doc = QJsonDocument::fromJson(body); if (!doc.isObject()) { return QHttpServerResponse("Invalid JSON", QHttpServerResponse::StatusCode::BadRequest); } QJsonObject jsonObject = doc.object(); Device device; device.fromJson(jsonObject); device.setId(id); if (!deviceLogic->updateDevice(device)) { return QHttpServerResponse("Failed to update device", QHttpServerResponse::StatusCode::InternalServerError); } return QHttpServerResponse("Device updated successfully", QHttpServerResponse::StatusCode::Ok); } template QJsonArray ApiServer::createJsonArray(const QMap &items) { QJsonArray itemArray; for (const T &item : items) { itemArray.append(item.toJson()); } return itemArray; }