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 UserModel, { values } from '../models/userModel';
import MediaModel, { Table } from '../models/mediaModel';
import MediaModel, { Table, Media } from '../models/mediaModel';
interface omdbRes{
Title: string,
@ -17,31 +17,24 @@ function fromStringToTable(value: string): (Table | undefined) {
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
const outputPath = '/poster/' + mData.Type + '/' + cleanCode + '.jpg';
const outputPath = '/poster/' + type + '/' + mData.code + '.jpg';
// 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
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());
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);
}
MediaModel.updateWebImg(type, mData.code, outputPath);
}
@ -68,37 +61,38 @@ async function createMed(req: Request, res: Response) {
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);
if (seriesFound.length != 0) {
res.status(409).json({ message: 'Media already exists' });
await downloadImage(mData, cleanCode);
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(mData, cleanCode);
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);
}
const media = {
code: mediaCode,
title: mData.Title,
released: mData.Released,
webImg: mData.Poster,
};
res.status(201).json(media);
await downloadImage(mData, cleanCode);
} catch (err) {
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 game = {
const game: Media = {
id: 0,
code: gameCode,
title: gameData[0].name,
released: dateStr,

View File

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