This commit is contained in:
2024-06-18 18:24:48 +05:00
parent 352b6d86c5
commit 960e502db2
28 changed files with 2747 additions and 689 deletions
+18
View File
@@ -0,0 +1,18 @@
const refreshToken =
"1000.da3146d49fa8a399f0c635e74954ff9c.e010dbb1bb605d7e1aa5bf7fc0521f8b";
const clientId = "1000.6ZV07WFOC7PQOY3X109UN55Q9BMBBY";
const clientSecret = "595f5262886a6e81475b533350a81e46fecda57fb5";
const grantType = "refresh_token";
const updateAccessTokenApi = `https://accounts.zoho.com/oauth/v2/token`;
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";
export {
aparmentsApi,
updateAccessTokenApi,
refreshToken,
clientId,
clientSecret,
grantType,
};
+30
View File
@@ -0,0 +1,30 @@
import "dotenv/config";
import express, { json } from "express";
import cors from "cors";
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";
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const app = express();
const port = process.env.PORT || 3000;
const accessLogStream = fs.createWriteStream(
path.join(__dirname, "../logs/access.log"),
{ flags: "a" }
);
app.use(cors());
app.use(json());
app.use(morgan("combined", { stream: accessLogStream }));
app.use("/aparments", accessTokenMiddleware, apartmentsRoute);
app.listen(port, () => {
console.log(`Server is listening on port ${port}`);
});
@@ -0,0 +1,47 @@
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
@@ -0,0 +1,26 @@
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;
+27
View File
@@ -0,0 +1,27 @@
import * as winston from "winston";
const { combine, timestamp, json } = winston.format;
export const logger = winston.createLogger({
level: "info",
format: combine(
timestamp({
format: "YYYY-MM-DD hh:mm:ss.SSS A",
}),
json()
),
transports: [
//
// - Write to all logs with level `debug` and below to `all.log`
// - Write all logs error (and below) to `error.log`.
//
new winston.transports.File({
filename: "logs/error.log",
level: "error",
}),
new winston.transports.File({
filename: "logs/all.log",
level: "debug",
}),
],
});