257 lines
6.8 KiB
JavaScript
257 lines
6.8 KiB
JavaScript
const express = require("express");
|
|
const Eta = require("eta");
|
|
const fs = require("fs");
|
|
const request = require("request");
|
|
var Config = require('config-js');
|
|
const app = express();
|
|
const PrismaClient = require('@prisma/client').PrismaClient;
|
|
const nameToImdb = require("name-to-imdb");
|
|
const imdbHelper = require("./node_modules/name-to-imdb/helpers");
|
|
const imdbLight = require("imdb-light");
|
|
const port = 4000;
|
|
const eanConvAdress = "http://127.0.0.1:9999/"
|
|
|
|
const typeIndex = { 0: "Physical", 1: "Digital - Maxdome", 2: "Digital - Amazon Prime Video", 3: "Digital - DVR" }
|
|
|
|
const prisma = new PrismaClient();
|
|
|
|
var responseBuffer = { allBufferd: [] };
|
|
const imdbBuffer = {}
|
|
|
|
responseBuffer = JSON.parse(fs.readFileSync("chache.bin", "utf8"));
|
|
|
|
var config = new Config('key.cfg');
|
|
|
|
|
|
app.use(express.static("static"));
|
|
app.use(express.static("node_modules"));
|
|
|
|
app.get("/", async function handleIndex(req, res) {
|
|
// https://imdb-api.com/de/API/Posters//[ID HERE]
|
|
const rows = await prisma.movieInfo.findMany({
|
|
orderBy: [
|
|
{
|
|
movieTitel: 'asc',
|
|
}
|
|
]
|
|
})
|
|
// console.log(rows)
|
|
const data = fs.readFileSync("template/bookshelf.html", "utf8");
|
|
res.send(Eta.render(data, { jsonRespo: JSON.stringify(rows) }));
|
|
});
|
|
|
|
app.get("/add", function (req, res) {
|
|
const data = fs.readFileSync("template/add.html", "utf8");
|
|
res.send(Eta.render(data, { isDisplay: false }));
|
|
});
|
|
|
|
app.get("/addByTitle", function (req, res) {
|
|
const data = fs.readFileSync("template/addByTitle.html", "utf8");
|
|
res.send(Eta.render(data, { isDisplay: false }));
|
|
});
|
|
|
|
app.get("/delete", function (req, res) {
|
|
console.log(req.query.id)
|
|
prisma.movieInfo.delete({
|
|
where: {
|
|
id: parseInt(req.query.id)
|
|
}
|
|
}).then(function handleFinishDelete(result) {
|
|
console.log(result)
|
|
})
|
|
console.log("Deleted entries")
|
|
res.send("Done.");
|
|
});
|
|
|
|
|
|
app.get("/returnSaveResult", function (req, res) {
|
|
const data = fs.readFileSync("template/addToShelf.html", "utf8");
|
|
responseJson = responseBuffer[req.query["reponseID"]];
|
|
console.log(responseBuffer);
|
|
res.send(
|
|
Eta.render(data, {
|
|
id: responseJson.id,
|
|
cover: responseJson.coverImage,
|
|
titleByAPI: responseJson.titleByAPI,
|
|
ean: responseJson.ean,
|
|
isDisplay: true,
|
|
responseID: req.query["reponseID"],
|
|
})
|
|
);
|
|
});
|
|
|
|
/********
|
|
* test endpoint
|
|
*/
|
|
|
|
app.get("/test", function (req, res) {
|
|
const respo = imdbLight.fetch(req.query.id, (details) => {
|
|
console.log(details)
|
|
res.send(details)
|
|
})
|
|
});
|
|
|
|
|
|
app.get("/showDetails", async function (req, res) {
|
|
const data = fs.readFileSync("template/movieDetails.html", "utf8");
|
|
const movie = await prisma.movieInfo.findFirst({
|
|
where: {
|
|
movieID: req.query["id"]
|
|
}
|
|
})
|
|
imdbLight.fetch(req.query.id, function handleImdbResp(details) {
|
|
console.log(details);
|
|
res.send(
|
|
Eta.render(data, {
|
|
internalID: movie.id,
|
|
id: movie.movieID,
|
|
cover: movie.posterUrl,
|
|
titleByAPI: details.Title,
|
|
type: typeIndex[movie.type],
|
|
extendedData: details
|
|
})
|
|
)
|
|
})
|
|
|
|
});
|
|
|
|
app.get("/editDetails", async function (req, res) {
|
|
const data = fs.readFileSync("template/editDetails.html", "utf8");
|
|
console.log(req.query["id"])
|
|
const movie = await prisma.movieInfo.findFirst({
|
|
where: {
|
|
movieID: req.query["id"]
|
|
}
|
|
})
|
|
res.send(
|
|
Eta.render(data, {
|
|
internalID: movie.id,
|
|
id: movie.movieID,
|
|
cover: movie.posterUrl,
|
|
titleByAPI: movie.movieTitel,
|
|
type: typeIndex[movie.type],
|
|
typeId: movie.type
|
|
})
|
|
)
|
|
});
|
|
|
|
app.get("/api/edit", function handleEdit(req, res) {
|
|
console.log(req.query)
|
|
prisma.movieInfo.update({
|
|
where: {
|
|
id: parseInt(req.query["id"])
|
|
},
|
|
data: {
|
|
type: parseInt(req.query["type"])
|
|
}
|
|
}).then(function handleFinishEdit(result) {
|
|
console.log(result)
|
|
})
|
|
res.send("Done.");
|
|
})
|
|
|
|
app.get("/apiCallBack", function (req, res) {
|
|
//console.log(req.query);
|
|
if (!responseBuffer.allBufferd.includes(req.query["ean"])) {
|
|
request(
|
|
eanConvAdress + "?ean=" + req.query["ean"],
|
|
function (error, response, body) {
|
|
console.log(response, error, body)
|
|
if (response.statusCode != 200) {
|
|
console.log("OH NO");
|
|
res.send({ state: "ERR_EAN_CONV_NO_200" });
|
|
} else {
|
|
var searchTerm = response.body;
|
|
searchTerm = searchTerm.replace("/", " ")
|
|
|
|
imdbLight.fetch(imdbID, function handleLightReponse(details) {
|
|
|
|
console.log(details);
|
|
jsonBody = jsonBody.results[0];
|
|
timest = new Date().valueOf();
|
|
responseJson = {
|
|
state: "OK",
|
|
id: jsonBody.id,
|
|
coverImage: details.Poster,
|
|
titleByAPI: details.Title,
|
|
ean: req.query["ean"],
|
|
reponseID: req.query["ean"],
|
|
};
|
|
responseBuffer[req.query["ean"]] = responseJson;
|
|
responseBuffer.allBufferd.push(req.query["ean"]);
|
|
try {
|
|
fs.writeFileSync("chache.bin", JSON.stringify(responseBuffer));
|
|
} catch (err) {
|
|
console.error(err);
|
|
}
|
|
res.send(responseJson);
|
|
|
|
});
|
|
}
|
|
}
|
|
);
|
|
} else {
|
|
console.log("Using chache");
|
|
responseJson = responseBuffer[req.query["ean"]];
|
|
res.send(responseJson);
|
|
}
|
|
});
|
|
|
|
|
|
|
|
app.get("/apiCallBackTitle", function (req, res) {
|
|
//console.log(req.query);
|
|
nameToImdb({ name: imdbHelper.parseSearchTerm(req.query.title) }, function handleImdbResp(err, imdbID, imdbData) {
|
|
if (err) {
|
|
res.send({ state: "ERR_BACK_FAIL" });
|
|
console.log(err.stack);
|
|
}
|
|
imdbLight.fetch(imdbID, function handleLightReponse(details) {
|
|
const randId = Math.floor(Math.random() * 100000) + "NO_EAN";
|
|
responseJson = {
|
|
state: "OK",
|
|
id: imdbID,
|
|
coverImage: details.Poster,
|
|
titleByAPI: details.Title,
|
|
ean: String(randId),
|
|
reponseID: String(randId),
|
|
};
|
|
responseBuffer[randId] = responseJson;
|
|
res.send(responseJson);
|
|
})
|
|
})
|
|
|
|
});
|
|
|
|
|
|
app.get("/save", async function handleSave(req, res) {
|
|
responseJson = responseBuffer[req.query["reponseID"]];
|
|
const type = parseInt(req.query["type"]) || 0;
|
|
|
|
const moveiTest = await prisma.movieInfo.findMany({
|
|
where: {
|
|
movieID: responseJson.id
|
|
}
|
|
})
|
|
if (moveiTest.length == 0) {
|
|
prisma.movieInfo.create({
|
|
data: {
|
|
movieID: responseJson.id,
|
|
movieTitel: responseJson.titleByAPI,
|
|
place: 0,
|
|
type: type,
|
|
posterUrl: responseJson.coverImage
|
|
}
|
|
}).then(function handleFinishCreate(result) {
|
|
console.log(result)
|
|
})
|
|
res.send({ status: "OK" });
|
|
} else {
|
|
res.send({ status: "ERR_ALREADY_EXIST" });
|
|
}
|
|
});
|
|
|
|
app.listen(port, () => {
|
|
console.log(`Movie DB app listening at http://localhost:${port}`);
|
|
});
|