Move to sqlite
This commit is contained in:
@@ -1,7 +1,14 @@
|
||||
import { type Request, type Response } from "express";
|
||||
import UserModel, { values } from '../models/userModel';
|
||||
import MediaModel, { Table } from '../models/mediaModel';
|
||||
import MediaModel, { Table, Media } from '../models/mediaModel';
|
||||
|
||||
interface omdbRes{
|
||||
Title: string,
|
||||
Released: string,
|
||||
Response: string,
|
||||
Poster: string,
|
||||
Type: string
|
||||
}
|
||||
|
||||
function fromStringToTable(value: string): (Table | undefined) {
|
||||
if (value.localeCompare("games") == 0) return Table.games;
|
||||
@@ -10,10 +17,31 @@ function fromStringToTable(value: string): (Table | undefined) {
|
||||
return;
|
||||
}
|
||||
|
||||
async function downloadImage(mData: Media, type: Table) {
|
||||
// Specify the path where you want to save the image
|
||||
const outputPath = '/poster/' + type + '/' + mData.code + '.jpg';
|
||||
|
||||
// Use Bun's built-in fetch to download the image
|
||||
const response = await fetch(mData.webImg);
|
||||
|
||||
// Check if the request was successful
|
||||
if (!response.ok) {
|
||||
console.log("fetch image error");
|
||||
return
|
||||
}
|
||||
|
||||
// Convert the response to a blob
|
||||
const imageBlob = await response.blob();
|
||||
// Use Bun's write to save the image to a file
|
||||
await Bun.write('./public/' + outputPath, await imageBlob.arrayBuffer());
|
||||
MediaModel.updateWebImg(type, mData.code, outputPath);
|
||||
|
||||
}
|
||||
|
||||
async function createMed(req: Request, res: Response) {
|
||||
const mediaCode: string = req.body.code;
|
||||
|
||||
const omdb_key = await UserModel.getValue(values.omdb_key);
|
||||
const omdb_key = UserModel.getValue(values.omdb_key);
|
||||
|
||||
if (!omdb_key) {
|
||||
return res.status(500).json({ message: 'Error when creating media' });
|
||||
@@ -27,39 +55,44 @@ async function createMed(req: Request, res: Response) {
|
||||
|
||||
const uri = `http://www.omdbapi.com/?i=${mediaCode}&apikey=${omdb_key}`;
|
||||
const mJson = await fetch(uri);
|
||||
const mData = await mJson.json();
|
||||
const mData: omdbRes = await mJson.json();
|
||||
|
||||
if (mData.Response == 'False') {
|
||||
return res.status(404).json({ message: 'wrong code' });
|
||||
}
|
||||
|
||||
const seriesFound = await MediaModel.findOne(Table.series, cleanCode);
|
||||
if (seriesFound.length != 0) {
|
||||
await MediaModel.updateWebImg(Table.series, cleanCode, mData.Poster);
|
||||
return res.status(409).json({ message: 'Media already exists' });
|
||||
}
|
||||
|
||||
const moviesFound = await MediaModel.findOne(Table.movies, cleanCode);
|
||||
if (moviesFound.length != 0) {
|
||||
await MediaModel.updateWebImg(Table.movies, cleanCode, mData.Poster);
|
||||
return res.status(409).json({ message: 'Media already exists' });
|
||||
}
|
||||
|
||||
if (mData.Type.localeCompare("movie") == 0) {
|
||||
const savedMedia = await MediaModel.save(Table.movies, cleanCode, mData.Title, mData.Released, mData.Poster);
|
||||
}
|
||||
else if (mData.Type.localeCompare("series") == 0) {
|
||||
const savedMedia = await MediaModel.save(Table.series, cleanCode, mData.Title, mData.Released, mData.Poster);
|
||||
}
|
||||
|
||||
const media = {
|
||||
code: mediaCode,
|
||||
const media: Media = {
|
||||
id:0,
|
||||
code: cleanCode,
|
||||
title: mData.Title,
|
||||
released: mData.Released,
|
||||
webImg: mData.Poster,
|
||||
};
|
||||
|
||||
return res.status(201).json(media);
|
||||
const seriesFound = MediaModel.findOne(Table.series, cleanCode);
|
||||
if (seriesFound.length != 0) {
|
||||
res.status(409).json({ message: 'Media already exists' });
|
||||
await downloadImage(media, Table.series);
|
||||
return;
|
||||
}
|
||||
|
||||
const moviesFound = MediaModel.findOne(Table.movies, cleanCode);
|
||||
if (moviesFound.length != 0) {
|
||||
res.status(409).json({ message: 'Media already exists' });
|
||||
await downloadImage(media, Table.movies);
|
||||
return;
|
||||
}
|
||||
|
||||
if (mData.Type.localeCompare("movie") == 0) {
|
||||
const savedMedia = MediaModel.save(Table.movies, cleanCode, mData.Title, mData.Released, mData.Poster);
|
||||
await downloadImage(media, Table.movies);
|
||||
}
|
||||
else if (mData.Type.localeCompare("series") == 0) {
|
||||
const savedMedia = MediaModel.save(Table.series, cleanCode, mData.Title, mData.Released, mData.Poster);
|
||||
await downloadImage(media, Table.series);
|
||||
}
|
||||
|
||||
res.status(201).json(media);
|
||||
} catch (err) {
|
||||
return res.status(500).json({ message: 'Error when creating media' });
|
||||
}
|
||||
@@ -68,15 +101,15 @@ async function createMed(req: Request, res: Response) {
|
||||
async function createGame(req: Request, res: Response) {
|
||||
var gameCode = req.body.code;
|
||||
|
||||
const twitch_client_id = await UserModel.getValue(values.twitch_client_id);
|
||||
const twitch_client_secret = await UserModel.getValue(values.twitch_client_secret);
|
||||
const twitch_client_id = UserModel.getValue(values.twitch_client_id);
|
||||
const twitch_client_secret = UserModel.getValue(values.twitch_client_secret);
|
||||
|
||||
if (!twitch_client_id || !twitch_client_secret) {
|
||||
return res.status(500).json({ message: 'Error when creating game' });
|
||||
}
|
||||
|
||||
try {
|
||||
const gameFound = await MediaModel.findOne(Table.games, gameCode);
|
||||
const gameFound = MediaModel.findOne(Table.games, gameCode);
|
||||
if (gameFound) {
|
||||
return res.status(409).json({ message: 'Game already exists' });
|
||||
}
|
||||
@@ -121,14 +154,15 @@ async function createGame(req: Request, res: Response) {
|
||||
)
|
||||
const coverData = await response.json()
|
||||
|
||||
const game = {
|
||||
const game: Media = {
|
||||
id: 0,
|
||||
code: gameCode,
|
||||
title: gameData[0].name,
|
||||
released: dateStr,
|
||||
webImg: `https://images.igdb.com/igdb/image/upload/t_cover_big/${coverData[0].image_id}.jpg`,
|
||||
};
|
||||
|
||||
const savedGame = await MediaModel.save(Table.games, game.code, game.title, game.released, game.webImg);
|
||||
const savedGame = MediaModel.save(Table.games, game.code, game.title, game.released, game.webImg);
|
||||
return res.status(201).json(game);
|
||||
|
||||
} catch (error) {
|
||||
@@ -150,16 +184,8 @@ export default {
|
||||
});
|
||||
}
|
||||
|
||||
MediaModel.find(mediaTable)
|
||||
.then(media => {
|
||||
return res.json(media);
|
||||
})
|
||||
.catch(err => {
|
||||
return res.status(500).json({
|
||||
message: 'Error when getting media.',
|
||||
error: err
|
||||
});
|
||||
});
|
||||
const media = MediaModel.find(mediaTable);
|
||||
return res.json(media);
|
||||
},
|
||||
|
||||
create: async function (req: Request, res: Response) {
|
||||
@@ -174,7 +200,7 @@ export default {
|
||||
/**
|
||||
* mediaController.delete()
|
||||
*/
|
||||
remove: async function (req: Request, res: Response) {
|
||||
remove: function (req: Request, res: Response) {
|
||||
const mediaTable = fromStringToTable(req.params.mediaType);
|
||||
if (!mediaTable) {
|
||||
return res.status(500).json({
|
||||
@@ -186,7 +212,7 @@ export default {
|
||||
|
||||
try {
|
||||
const mediaTable = req.baseUrl.includes('movies') ? Table.movies : Table.series;
|
||||
const media = await MediaModel.findOneAndDelete(mediaTable, code);
|
||||
const media = MediaModel.findOneAndDelete(mediaTable, code);
|
||||
if (!media) {
|
||||
return res.status(404).json({ message: 'No such media' });
|
||||
}
|
||||
|
@@ -3,20 +3,20 @@ import UserModel, { values } from '../models/userModel';
|
||||
|
||||
export default {
|
||||
|
||||
render: async function (req: Request, res: Response) {
|
||||
render: function (req: Request, res: Response) {
|
||||
res.render('user', { keys: UserModel.namesOfValues });
|
||||
},
|
||||
|
||||
create: async function (req: Request, res: Response) {
|
||||
create: function (req: Request, res: Response) {
|
||||
|
||||
const reqPassword: string = req.body.reqPassword;
|
||||
if (!reqPassword) return res.render('user', { keys: UserModel.namesOfValues });
|
||||
|
||||
const password = await UserModel.getValue(values.pass);
|
||||
|
||||
const password = UserModel.getValue(values.pass);
|
||||
|
||||
// if no password in db save reqPassword
|
||||
if (!password) {
|
||||
const affectedRows = await UserModel.updateValue("pass", reqPassword);
|
||||
const affectedRows = UserModel.updateValue("pass", reqPassword);
|
||||
if (affectedRows > 0) {
|
||||
return res.redirect('/list');
|
||||
}
|
||||
@@ -35,7 +35,7 @@ export default {
|
||||
return res.render('user', { keys: UserModel.namesOfValues });
|
||||
}
|
||||
|
||||
const affectedRows = await UserModel.updateValue(name, value);
|
||||
const affectedRows = UserModel.updateValue(name, value);
|
||||
if (affectedRows == 0) {
|
||||
return res.render('user', { keys: UserModel.namesOfValues });
|
||||
}
|
||||
@@ -43,8 +43,8 @@ export default {
|
||||
return res.redirect('/list');
|
||||
},
|
||||
|
||||
get: async function (req: Request, res: Response) {
|
||||
const usersFound = await UserModel.getAll();
|
||||
get: function (req: Request, res: Response) {
|
||||
const usersFound = UserModel.getAll();
|
||||
return res.status(200).json(usersFound);
|
||||
},
|
||||
};
|
Reference in New Issue
Block a user