Skip to content
Snippets Groups Projects
Commit 8ea236f0 authored by Rafael László's avatar Rafael László :speech_balloon:
Browse files

file/card middleware refactor and documentation

parent 5ae7318e
No related branches found
No related tags found
2 merge requests!27refresh dev branch,!26Feature/refactor
import multer from "multer"; import multer from "multer";
import path from "path";
export const cardImageStorage = multer.diskStorage({ export const cardImageStorage = multer.diskStorage({
destination: function (req, file, callback) { destination: function (req, file, callback) {
......
import { NextFunction, Request, Response } from "express"; import { NextFunction, Request, Response } from "express";
import CardImage from "../../../models/CardImageSchema"; import CardImage from "../../../models/CardImageSchema";
import File from "../../../models/FileSchema";
import Profile from "../../../models/ProfileSchema";
import fs from "fs";
/**
* Get the Entry card background image
* and set res.data.cardImage
*
* @param {Request} req
* @param {Response} res
* @param {NextFunction} next
*/
const getCardImage = () => async ( const getCardImage = () => async (
req: Request, req: Request,
res: Response, res: Response,
next: NextFunction next: NextFunction
) => { ) => {
CardImage.findOne({}, async (error, cardImage) => { res.data.cardImage = await CardImage.findOne().lean().exec();
if (error) {
console.warn(error);
res.status(400);
} else {
if (!!cardImage) {
const file = await File.findById(cardImage!.imageId).exec();
res.status(200);
res.data.cardImage = cardImage;
}
next(); next();
}
});
}; };
export default getCardImage; export default getCardImage;
...@@ -2,39 +2,48 @@ import { NextFunction, Request, Response } from "express"; ...@@ -2,39 +2,48 @@ import { NextFunction, Request, Response } from "express";
import Card from "../../../models/CardSchema"; import Card from "../../../models/CardSchema";
import File from "../../../models/FileSchema"; import File from "../../../models/FileSchema";
import Profile from "../../../models/ProfileSchema";
import fs from "fs"; import fs from "fs";
const getUserCard = () => async ( /**
* Generate Entry card svg from Users data and card
*
* @param {Request} req
* @param {Response} res
* @param {NextFunction} next
* @return {*} Generated svg file
*/
const getUserCard = (): any => async (
req: Request, req: Request,
res: Response, res: Response,
next: NextFunction next: NextFunction
) => { ) => {
Card.findOne({ userId: res.data.profile?.id }, async (error, card) => { const userCard = await Card.findOne({ userId: res.data.profile?.id })
if (error) { .lean()
console.warn(error); .exec();
res.status(400); if (!userCard)
} else { return res.status(404).json({ message: "The user doesn't have any card!" });
if (!card) return res.status(404).send("The user doesn't have any card!");
let profilePicture = "data:image/png;base64,"; let profilePicture = "data:image/png;base64,";
if (!!res.data.profile!.pictureId) { if (!res.data.profile!.pictureId) {
const file = await File.findById(res.data.profile!.pictureId).exec();
profilePicture += fs.readFileSync(file!.path, "base64");
} else
profilePicture += fs.readFileSync( profilePicture += fs.readFileSync(
"src/utils/card/profile_picture.png", "src/utils/card/profile_picture.png",
"base64" "base64"
); );
} else {
const profilePicFile = await File.findById(res.data.profile!.pictureId)
.lean()
.exec();
profilePicture += fs.readFileSync(profilePicFile!.path, "base64");
}
let bgPicture; let bgPicture = "data:image/png;base64,";
if (!res.data.cardImage) if (!res.data.cardImage)
bgPicture = bgPicture += fs.readFileSync("src/utils/card/background.png", "base64");
"data:image/png;base64," +
fs.readFileSync("src/utils/card/background.png", "base64");
else { else {
const bgFile = await File.findById(res.data.cardImage.imageId).exec(); const bgFile = await File.findById(res.data.cardImage.imageId)
bgPicture = .lean()
"data:image/png;base64," + fs.readFileSync(bgFile!.path, "base64"); .exec();
bgPicture += fs.readFileSync(bgFile!.path, "base64");
} }
const svg = fs.readFileSync("src/utils/card/template.svg", "utf8"); const svg = fs.readFileSync("src/utils/card/template.svg", "utf8");
...@@ -42,18 +51,15 @@ const getUserCard = () => async ( ...@@ -42,18 +51,15 @@ const getUserCard = () => async (
const result = svg const result = svg
.replace(/{{profile_picture}}/g, profilePicture) .replace(/{{profile_picture}}/g, profilePicture)
.replace(/{{background_image}}/g, bgPicture) .replace(/{{background_image}}/g, bgPicture)
.replace(/{{full_name}}/g, String(card?.fullName)) .replace(/{{full_name}}/g, String(userCard?.fullName))
.replace(/{{room_number}}/g, String(card?.roomNumber)) .replace(/{{room_number}}/g, String(userCard?.roomNumber))
.replace(/{{card_number}}/g, String(card?.cardId)) .replace(/{{card_number}}/g, String(userCard?.cardId))
.replace( .replace(
/{{expiration_date}}/g, /{{expiration_date}}/g,
String(card?.expirationDate.toISOString().split("T")[0]) String(userCard?.expirationDate.toISOString().split("T")[0])
); );
res.type("svg"); return res.type("svg").send(result);
return res.send(result);
}
});
}; };
export default getUserCard; export default getUserCard;
import { NextFunction, Request, Response, response } from "express"; import { Request, Response } from "express";
import File from "../../../models/FileSchema"; import File from "../../../models/FileSchema";
const responseCardImage = () => async (req: Request, res: Response) => { /**
if (!res.data.cardImage) { * Return the Entry card background Image
res.status(404).json({ message: "Card Image not found" }); *
} else { * @param {Request} req
const cardImage = await File.findById(res.data.cardImage.imageId).exec(); * @param {Response} res
* @return {*} The Found CardImage or the default
*/
const responseCardImage = (): any => async (req: Request, res: Response) => {
if (!res.data.cardImage)
return res.sendFile("src/utils/card/background.png", { root: "." });
const cardImage = await File.findById(res.data.cardImage.imageId)
.lean()
.exec();
return res.sendFile(cardImage!.path, { root: "." }); return res.sendFile(cardImage!.path, { root: "." });
}
}; };
export default responseCardImage; export default responseCardImage;
...@@ -2,61 +2,54 @@ import { NextFunction, Request, Response } from "express"; ...@@ -2,61 +2,54 @@ import { NextFunction, Request, Response } from "express";
import CardImage from "../../../models/CardImageSchema"; import CardImage from "../../../models/CardImageSchema";
import File from "../../../models/FileSchema"; import File from "../../../models/FileSchema";
import Profile from "../../../models/ProfileSchema";
import { fileFilter } from "../fileFilter";
import fs from "fs"; import fs from "fs";
/**
* Upload a new Card background Image
*
* @param {Request} req
* @param {Response} res
* @param {NextFunction} next
* @return {*} 200 Status code if uploaded
*/
const uploadCardImage = () => async ( const uploadCardImage = () => async (
req: Request, req: Request,
res: Response, res: Response,
next: NextFunction next: NextFunction
) => { ) => {
const uploadedFile = req.file; const oldCardImage = await CardImage.findOne().lean().exec();
CardImage.findOne({}, async (error, cardImage) => {
if (error) { if (oldCardImage) {
console.warn(error); const oldFile = await File.findByIdAndRemove(oldCardImage.imageId)
res.status(400); .lean()
} else { .exec();
if (!!cardImage) {
const oldFile = await File.findById(cardImage.imageId).exec();
fs.unlink(oldFile!.path, (err) => { fs.unlink(oldFile!.path, (err) => {
if (err) { throw err;
console.error(err);
}
}); });
await File.deleteOne({ _id: oldFile?.id }).exec();
} }
const newFile = new File();
newFile.originalName = uploadedFile.originalname; const newFile = new File();
newFile.originalName = req.file.originalname;
newFile.uploadDate = new Date(); newFile.uploadDate = new Date();
newFile.path = uploadedFile.path; newFile.path = req.file.path;
newFile.mimeType = uploadedFile.mimetype; newFile.mimeType = req.file.mimetype;
await newFile.save((err) => {
if (err) {
return res.status(400);
}
});
if (!cardImage) { await newFile.save();
const cardImage = new CardImage();
cardImage.imageId = newFile.id;
await cardImage.save((err) => { if (oldCardImage) {
if (err) return res.status(400);
});
} else {
await CardImage.updateOne( await CardImage.updateOne(
{ _id: cardImage?.id }, { _id: oldCardImage?.id },
{ imageId: newFile.id } { imageId: String(newFile.id) }
).exec(); ).exec();
} } else {
const cardImage = new CardImage();
cardImage.imageId = String(newFile.id);
return res.status(200).send(true); await cardImage.save();
} }
});
return res.status(200).send();
}; };
export default uploadCardImage; export default uploadCardImage;
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment