This commit is contained in:
Nikola Petrov 2025-07-12 20:43:16 +02:00
parent 8ef6a653d8
commit cdfb501952
2 changed files with 26 additions and 31 deletions

View File

@ -1,6 +1,6 @@
import { type Request, type Response } from "express"; import { type Request, type Response } from "express";
import UserModel, { values } from '../models/userModel'; import UserModel, { values } from '../models/userModel';
import MediaModel, { Table } from '../models/mediaModel'; import MediaModel, { Table, Media } from '../models/mediaModel';
interface omdbRes{ interface omdbRes{
Title: string, Title: string,
@ -17,31 +17,24 @@ function fromStringToTable(value: string): (Table | undefined) {
return; return;
} }
async function downloadImage(mData: omdbRes, cleanCode: number) { async function downloadImage(mData: Media, type: Table) {
// Specify the path where you want to save the image // Specify the path where you want to save the image
const outputPath = '/poster/' + mData.Type + '/' + cleanCode + '.jpg'; const outputPath = '/poster/' + type + '/' + mData.code + '.jpg';
// Use Bun's built-in fetch to download the image // Use Bun's built-in fetch to download the image
const response = await fetch(mData.Poster); const response = await fetch(mData.webImg);
// Check if the request was successful // Check if the request was successful
if (!response.ok) { if (!response.ok) {
console.log("fetch image error");
return return
} }
// Convert the response to a blob // Convert the response to a blob
const imageBlob = await response.blob(); const imageBlob = await response.blob();
// Use Bun's write to save the image to a file // Use Bun's write to save the image to a file
await Bun.write('./public/' + outputPath, await imageBlob.arrayBuffer()); await Bun.write('./public/' + outputPath, await imageBlob.arrayBuffer());
MediaModel.updateWebImg(type, mData.code, outputPath);
if (mData.Type.localeCompare("movie") == 0) {
MediaModel.updateWebImg(Table.movies, cleanCode, outputPath);
}
else if (mData.Type.localeCompare("series") == 0) {
MediaModel.updateWebImg(Table.series, cleanCode, outputPath);
}
} }
@ -68,37 +61,38 @@ async function createMed(req: Request, res: Response) {
return res.status(404).json({ message: 'wrong code' }); return res.status(404).json({ message: 'wrong code' });
} }
const media: Media = {
id:0,
code: cleanCode,
title: mData.Title,
released: mData.Released,
webImg: mData.Poster,
};
const seriesFound = MediaModel.findOne(Table.series, cleanCode); const seriesFound = MediaModel.findOne(Table.series, cleanCode);
if (seriesFound.length != 0) { if (seriesFound.length != 0) {
res.status(409).json({ message: 'Media already exists' }); res.status(409).json({ message: 'Media already exists' });
await downloadImage(mData, cleanCode); await downloadImage(media, Table.series);
return; return;
} }
const moviesFound = MediaModel.findOne(Table.movies, cleanCode); const moviesFound = MediaModel.findOne(Table.movies, cleanCode);
if (moviesFound.length != 0) { if (moviesFound.length != 0) {
res.status(409).json({ message: 'Media already exists' }); res.status(409).json({ message: 'Media already exists' });
await downloadImage(mData, cleanCode); await downloadImage(media, Table.movies);
return; return;
} }
if (mData.Type.localeCompare("movie") == 0) { if (mData.Type.localeCompare("movie") == 0) {
const savedMedia = MediaModel.save(Table.movies, cleanCode, mData.Title, mData.Released, mData.Poster); 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) { else if (mData.Type.localeCompare("series") == 0) {
const savedMedia = MediaModel.save(Table.series, cleanCode, mData.Title, mData.Released, mData.Poster); const savedMedia = MediaModel.save(Table.series, cleanCode, mData.Title, mData.Released, mData.Poster);
await downloadImage(media, Table.series);
} }
const media = {
code: mediaCode,
title: mData.Title,
released: mData.Released,
webImg: mData.Poster,
};
res.status(201).json(media); res.status(201).json(media);
await downloadImage(mData, cleanCode);
} catch (err) { } catch (err) {
return res.status(500).json({ message: 'Error when creating media' }); return res.status(500).json({ message: 'Error when creating media' });
} }
@ -160,7 +154,8 @@ async function createGame(req: Request, res: Response) {
) )
const coverData = await response.json() const coverData = await response.json()
const game = { const game: Media = {
id: 0,
code: gameCode, code: gameCode,
title: gameData[0].name, title: gameData[0].name,
released: dateStr, released: dateStr,

View File

@ -1,12 +1,12 @@
import pool from 'miscellaneous/db' import pool from 'miscellaneous/db'
class Media { export class Media {
id?: number; id!: number;
code?: number; code!: number;
title?: string; title!: string;
released?: string; released!: string;
webImg?: string; webImg!: string;
} }
export enum Table { export enum Table {