Jucundus/backend/controllers/lot.js

265 lines
6.7 KiB
JavaScript

const asyncHandler = require("express-async-handler");
const fetch = require('node-fetch');
const { LotDb } = require("../services/lotDb");
const lotDb = new LotDb();
const { SaleDb } = require("../services/saleDb");
const saleDb = new SaleDb();
const {Agent} = require('../services/agent');
const agent = new Agent();
// scrapping
// exports.getInfos = asyncHandler(async (req, res, next) => {
// let url = req.params.url
// url = encodeURIComponent(url);
// fetch(ApiURL+'/lot/getInfos/'+url)
// .then(response => response.json())
// .then(data => {
// res.json(data);
// })
// .catch(error => {
// console.error(error);
// res.json({error: error});
// });
// });
exports.getInfos = asyncHandler(async (req, res, next) => {
let url = req.params.url
url = encodeURIComponent(url);
agent.getLotInfos(url)
.then(data => {
return res.status(200).json(data);
})
.catch(error => {
console.error(error);
return res.status(500).json({error: error});
});
});
// exports.getPictures = asyncHandler(async (req, res, next) => {
// let url = req.params.url
// url = encodeURIComponent(url);
// fetch(ApiURL+'/lot/getPictures/'+url)
// .then(response => response.json())
// .then(data => {
// res.json(data);
// })
// .catch(error => {
// console.error(error);
// res.json({error: error});
// });
// });
exports.getPictures = asyncHandler(async (req, res, next) => {
let url = req.params.url
url = encodeURIComponent(url);
agent.getPictures(url)
.then(data => {
return res.status(200).json(data);
})
.catch(error => {
console.error(error);
return res.status(500).json({error: error});
});
});
exports.getLotsBySale = asyncHandler(async (req, res, next) => {
let id = req.params.id
const Sale = await saleDb.get(id);
if(!Sale){
console.error("Sale not found");
return res.status(404).json({error: "Sale not found"});
}
Lots = await lotDb.getBySaleId(Sale._id.toString(),Sale.platform);
res.json(Lots);
});
// Follow Sale
exports.NextItem = asyncHandler(async (req, res, next) => {
try{
Sale = await saleDb.getByIDPlatform(req.body.idSalePlatform, req.body.platform);
if(!Sale){
console.error("Sale not found");
return res.status(404).json({error: "Sale not found"});
}
let Lot = await lotDb.getByIDPlatform(req.body.idPlatform, req.body.platform);
if(Lot == null){
console.log("Creating new Lot");
Lot = {
idPlatform: String(req.body.idPlatform),
platform: req.body.platform,
timestamp: req.body.timestamp,
lotNumber: String(req.body.lotNumber),
title: req.body.title,
description: req.body.description,
EstimateLow: req.body.EstimateLow,
EstimateHigh: req.body.EstimateHigh,
RawData: req.body.RawData,
sale_id: Sale._id,
}
await lotDb.post(Lot);
}else{
console.log("Updating Lot");
Lot.timestamp = req.body.timestamp;
Lot.lotNumber = String(req.body.lotNumber);
Lot.title = req.body.title;
Lot.description = req.body.description;
Lot.EstimateLow = req.body.EstimateLow;
Lot.EstimateHigh = req.body.EstimateHigh;
Lot.RawData = req.body.RawData;
await lotDb.put(Lot._id, Lot);
}
res.status(204).json({message: "Lot updated"});
}catch(err){
console.log(err);
return res.status(500).json({error: err});
}
});
exports.Bid = asyncHandler(async (req, res, next) => {
try{
let Lot = await lotDb.getByIDPlatform(req.body.idPlatform, req.body.platform);
if(Lot){
console.log("Update Lot Bid");
BidInfo = {
timestamp: req.body.timestamp,
amount: req.body.amount,
auctioned_type: req.body.auctioned_type,
}
// If Lot.BidInfo doesn't exist, initialize it as an empty array
if (!Lot.Bids) {
Lot.Bids = [];
}
// Add BidInfo to the array
Lot.Bids.push(BidInfo);
await lotDb.put(Lot._id, Lot);
}else{
console.error("Lot not found");
return res.status(404).json({error: "Lot not found"});
}
res.status(204).json({message: "Lot updated"});
}catch(err){
console.log(err);
return res.status(500).json({error: err});
}
});
exports.AuctionedItem = asyncHandler(async (req, res, next) => {
try{
let Lot = await lotDb.getByIDPlatform(req.body.idPlatform, req.body.platform);
if(Lot){
console.log("Update Lot AuctionedItem");
Lot.auctioned = {
timestamp: req.body.timestamp,
amount: req.body.amount,
auctioned_type: req.body.auctioned_type,
sold: req.body.sold,
}
await lotDb.put(Lot._id, Lot);
//update stats
await saleDb.processStats(Lot.sale_id);
}else{
console.error("Lot not found");
return res.status(404).json({error: "Lot not found"});
}
res.status(204).json({message: "Lot updated"});
}catch(err){
console.log(err);
return res.status(500).json({error: err});
}
});
// DB
exports.get = asyncHandler(async (req, res, next) => {
try{
const id = req.params.id;
let result = await lotDb.get(id);
res.status(200).json(result);
}catch(err){
console.log(err);
return res.status(500).json({error: err});
}
});
exports.post = asyncHandler(async (req, res, next) => {
try{
// check if double
let Lot = await lotDb.getByIDPlatform(req.body.idPlatform, req.body.platform);
if(Sale){
return res.status(500).json({ error: "Lot already exists"});
}
let createLot = await lotDb.post(req.body);
res.status(204).json({message: "Lot created"});
}catch(err){
console.log(err);
return res.status(500).json({error: err});
}
});
exports.put = asyncHandler(async (req, res, next) => {
try{
const id = req.params.id;
let updatedDocument = { ...req.body };
delete updatedDocument._id;
console.log(updatedDocument);
let result = await lotDb.put(id, updatedDocument);
console.log(result);
res.status(200).json(result);
}catch(err){
console.log(err);
return res.status(500).json({error: err});
}
});
exports.delete = asyncHandler(async (req, res, next) => {
try{
const id = req.params.id;
// Remove the lot
await lotDb.remove(id);
res.status(200).json({"message": "Lots deleted"});
}catch(err){
console.log(err);
return res.status(500).json({error: err});
}
});