filters server + filter client

This commit is contained in:
2024-06-19 18:26:17 +05:00
parent 960e502db2
commit 9630f42a08
44 changed files with 817 additions and 126 deletions
+7 -3
View File
@@ -4,15 +4,19 @@ const clientId = "1000.6ZV07WFOC7PQOY3X109UN55Q9BMBBY";
const clientSecret = "595f5262886a6e81475b533350a81e46fecda57fb5";
const grantType = "refresh_token";
const updateAccessTokenApi = `https://accounts.zoho.com/oauth/v2/token`;
const updateAccessTokenApi = `https://accounts.zoho.com/oauth/v2/token?refresh_token=${refreshToken}&client_id=${clientId}&client_secret=${clientSecret}&grant_type=${grantType}`;
const aparmentsApi =
"https://www.zohoapis.com/crm/v2/Apartments?fields=Floor,Property_Status,Project_Name,Balcony_Area_Sqft,Unit_Type,Suite_Area_Sqft,No_Of_Bedrooms,Total_Area_Sqft,No_of_Bathrooms,Property_Name,Unit_View,Balcony_Area_Sqft,Unit_No,Suite_Area_Sqft";
"https://www.zohoapis.com/crm/v6/Apartments?fields=Floor,Property_Status,Project_Name,Balcony_Area_Sqft,Unit_Type,Suite_Area_Sqft,No_Of_Bedrooms,Total_Area_Sqft,No_of_Bathrooms,Property_Name,Unit_View,Balcony_Area_Sqft,Unit_No,Suite_Area_Sqft";
const searchApartmentApi =
"https://www.zohoapis.com/crm/v6/Apartments/search?fields=Floor,Property_Status,Project_Name,Balcony_Area_Sqft,Unit_Type,Suite_Area_Sqft,No_Of_Bedrooms,Total_Area_Sqft,No_of_Bathrooms,Property_Name,Unit_View,Balcony_Area_Sqft,Unit_No,Suite_Area_Sqft";
export {
aparmentsApi,
updateAccessTokenApi,
aparmentsApi,
refreshToken,
clientId,
clientSecret,
grantType,
searchApartmentApi,
};
+5 -3
View File
@@ -5,8 +5,8 @@ import fs from "fs";
import path from "path";
import { fileURLToPath } from "url";
import morgan from "morgan";
import apartmentsRoute from "./routes/aparments.js";
import accessTokenMiddleware from "./middlewares/accessTokenMiddleware.js";
import apartmentsRoute from "./routes/apartments.js";
import updateAccessToken from "./routes/zohoAccessToken.js";
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
@@ -23,7 +23,9 @@ app.use(cors());
app.use(json());
app.use(morgan("combined", { stream: accessLogStream }));
app.use("/aparments", accessTokenMiddleware, apartmentsRoute);
app.use("/apartments", apartmentsRoute);
app.use("/updateAccessToken", updateAccessToken);
app.listen(port, () => {
console.log(`Server is listening on port ${port}`);
@@ -1,47 +0,0 @@
import { Request, Response, NextFunction } from "express";
import { aparmentsApi } from "../consts.js";
import { logger } from "../utils/logger.js";
var checkAccessToken = async function (
req: Request,
res: Response,
next: NextFunction
) {
const accessToken = req.headers.authorization;
if (!accessToken)
return res.status(401).json({ error: "Not found access token" });
try {
const respose = await fetch(aparmentsApi, {
headers: {
Authorization: accessToken,
},
});
if (respose.status === 401) {
try {
const response2 = await fetch(
`https://accounts.zoho.com/oauth/v2/token?refresh_token=1000.da3146d49fa8a399f0c635e74954ff9c.e010dbb1bb605d7e1aa5bf7fc0521f8b&client_id=1000.6ZV07WFOC7PQOY3X109UN55Q9BMBBY&client_secret=595f5262886a6e81475b533350a81e46fecda57fb5&grant_type=refresh_token`,
{
method: "post",
}
);
const { access_token } = await response2.json();
return res.json({ accessToken: access_token });
} catch (error) {
console.log("error", (error as Error).message);
logger.error(error);
return res.json({ error: (error as Error).message });
}
}
next();
} catch (error) {
console.log("error", (error as Error).message);
logger.error(error);
return res.json({ error: (error as Error).message });
}
};
export default checkAccessToken;
-26
View File
@@ -1,26 +0,0 @@
import { Router } from "express";
import { aparmentsApi } from "../consts.js";
const router = Router();
router.get("/", async (req, res) => {
const accessToken = req.headers.authorization;
if (!accessToken) return;
console.log("accessToken", `[${accessToken}]`);
const apartments = await fetch(aparmentsApi, {
headers: {
Authorization: accessToken,
},
});
const result = await apartments.json();
res.json({ ok: 1, apartments: result });
});
const apartmentsRoute = router;
export default apartmentsRoute;
+139
View File
@@ -0,0 +1,139 @@
import { Router } from "express";
import { aparmentsApi, searchApartmentApi } from "../consts.js";
import { logger } from "../utils/logger.js";
const router = Router();
async function getAllApartments(
page: number,
accessToken: string,
apartments: any[]
) {
const response = await fetch(`${aparmentsApi}&page=${page}&per_page=200`, {
headers: {
Authorization: accessToken,
},
});
const result = await response.json();
if (result?.code && result?.code === "INVALID_TOKEN") {
throw new Error("INVALID_TOKEN");
}
const updatedApartment = apartments.concat([...result.data]);
const isMoreRecords = result.info.more_records;
if (!isMoreRecords) {
return updatedApartment;
}
return await getAllApartments(page + 1, accessToken, updatedApartment);
}
router.get("/", async (req, res) => {
const accessToken = req?.headers?.authorization;
const {
per_page: perPage = 20,
page = 10,
rove_home = "",
apartment_type = "",
cost_between = "",
total_area_between = "",
floor_between = "",
views = "",
} = req.query;
let api = aparmentsApi;
if (!accessToken)
return res
.status(401)
.json({ message: "Отсутсвует access token", code: 401 });
try {
const allApartments = await getAllApartments(1, accessToken, []);
const filteredApartments = allApartments.slice(
page as number,
perPage as number
);
res.status(200).json({
message: "ok",
apartments: filteredApartments,
code: 200,
});
return;
} catch (error) {
if (
(error as Error).message === "invalid oauth token" ||
(error as Error).message === "INVALID_TOKEN"
) {
console.log("error", error);
logger.error(error);
return res
.status(401)
.json({ message: "Неправильный токен или токен устарел", code: 401 });
}
console.log("error", error);
logger.error(error);
return res.status(500).json({ message: "Server Error", code: 500 });
}
});
// router.get("/", async (req, res) => {
// const accessToken = req.headers.authorization;
// const { perPage, criteria } = req.query;
// let api = perPage || criteria ? searchApartmentApi : aparmentsApi;
// if (criteria) {
// api = `${api}&criteria=${criteria}`;
// }
// console.log("api", api);
// if (!accessToken)
// return res
// .status(401)
// .json({ message: "Отсутсвует access token", code: 401 });
// try {
// const apartments = await fetch(api, {
// headers: {
// Authorization: accessToken,
// },
// });
// const result = await apartments.json();
// if (result?.code && result?.code === "INVALID_TOKEN") {
// return res.status(401).json({ code: 401, message: "INVALID_TOKEN" });
// }
// res.status(200).json({ message: "ok", apartments: result, code: 200 });
// return;
// } catch (error) {
// if ((error as Error).message === "invalid oauth token") {
// console.log("error", error);
// logger.error(error);
// return res
// .status(401)
// .json({ message: "Неправильный токен или токен устарел", code: 401 });
// }
// console.log("error", error);
// logger.error(error);
// return res.status(500).json({ message: "Server Error", code: 500 });
// }
// });
const apartmentsRoute = router;
export default apartmentsRoute;
+21
View File
@@ -0,0 +1,21 @@
import { Request, Response, NextFunction } from "express";
import { aparmentsApi, updateAccessTokenApi } from "../consts.js";
import { logger } from "../utils/logger.js";
var updateAccessToken = async function (req: Request, res: Response) {
try {
const response = await fetch(updateAccessTokenApi, {
method: "post",
});
const { access_token } = await response.json();
return res.json({ accessToken: access_token });
} catch (error) {
console.log("error", (error as Error).message);
logger.error(error);
return res.json({ error: (error as Error).message });
}
};
export default updateAccessToken;