Files
openMovieBookshelf/index.js
2022-04-11 20:34:02 +02:00

226 lines
6.3 KiB
JavaScript

const express = require("express");
const Eta = require("eta");
const fs = require("fs");
const request = require("request");
const imdb = require("imdb-api");
const requestSync = require("sync-request");
var Config = require('config-js');
const app = express();
const PrismaClient = require('@prisma/client').PrismaClient;
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: [] };
responseBuffer = JSON.parse(fs.readFileSync("chache.bin", "utf8"));
var config = new Config('key.cfg');
app.use(express.static("static"));
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("/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"],
})
);
});
app.get("/showDetails", async function (req, res) {
const data = fs.readFileSync("template/movieDetails.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],
})
)
});
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("/", " ")
var reqString =
"https://imdb-api.com/en/API/SearchTitle/" + config.get('keys.imdb') + "/" +
searchTerm;
request(reqString, function (error, response2, body) {
jsonBody = JSON.parse(response2.body);
console.log(jsonBody.length);
if (jsonBody.errorMessage.includes("Maximum usage")) {
res.send({ state: "ERR_IMDB_LIMIT_REACHED" });
} else {
jsonBody = jsonBody.results[0];
//const data = fs.readFileSync("template/addToShelf.html.html", "utf8");
timest = new Date().valueOf();
responseJson = {
state: "OK",
id: jsonBody.id,
coverImage: jsonBody.image,
titleByAPI: response.body,
ean: req.query["ean"],
reponseID: req.query["ean"],
};
responseBuffer[req.query["ean"]] = responseJson;
responseBuffer.allBufferd.push(req.query["ean"]);
// ToDo: Rewrite chache (and all pages!!!) to use ean instead of timeid
try {
fs.writeFileSync("chache.bin", JSON.stringify(responseBuffer));
} catch (err) {
console.error(err);
}
res.send(responseJson);
/* res.send(
Eta.render(data, {
id: jsonBody.id,
cover: jsonBody.image,
titleByAPI: response.body,
ean: req.query["ean"],
isDisplay: true,
})
);*/
}
});
}
}
);
} else {
console.log("Using chache");
responseJson = responseBuffer[req.query["ean"]];
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}`);
});