Jucundus/backend/services/agent.js

132 lines
3.8 KiB
JavaScript

const fetch = require('node-fetch');
const { LotDb } = require("./lotDb");
const lotDb = new LotDb();
const { SaleDb } = require("./saleDb");
const saleDb = new SaleDb();
const moment = require('moment-timezone');
const { config } = require("../config.js");
const Agent = class
{
constructor()
{
this.ApiAgentURL = config.agent.ApiAgentURL;
this.token = config.agent.token;
}
async request(url, method){
return new Promise((resolve, reject) => {
fetch(url,{
method: method,
headers: {
'authorization': this.token
}
})
.then(response => response.json())
.then(data => {
resolve(data);
})
.catch(error => {
reject(error);
});
});
}
async getSaleInfos(url)
{
return new Promise((resolve, reject) => {
url = encodeURIComponent(url);
this.request(this.ApiAgentURL+'/sale/getSaleInfos/'+url, 'GET')
.then(data => {
resolve(data);
})
.catch(error => {
reject(error);
});
});
}
async prepareSale(id)
{
return new Promise(async (resolve, reject) => {
let Sale = await saleDb.get(id);
const DateSale = moment.tz(Sale.date, "Europe/Paris");
const NowParis = moment.tz(new Date(),"Europe/Paris")
if (NowParis.isBefore(DateSale)){
let url = Sale.url
url = encodeURIComponent(url);
this.request(this.ApiAgentURL+'/sale/getLotList/'+url, 'GET')
.then( async data => {
for (let lot of data) {
lot.sale_id = Sale._id
await lotDb.post(lot);
}
resolve(data);
})
.catch(error => {
reject(error);
});
}else{
console.log("Sale started or finished");
resolve([]);
}
});
}
async followSale(id)
{
return new Promise(async (resolve, reject) => {
let Sale = await saleDb.get(id);
let url = Sale.url
url = encodeURIComponent(url);
this.request(this.ApiAgentURL+'/sale/followSale/'+url, 'GET')
.then(async data => {
// set the Sale status to following
Sale.status = "following";
Sale = await saleDb.put(id, Sale);
resolve(data);
})
.catch(error => {
reject(error);
});
});
}
async getLotInfos(url){
return new Promise((resolve, reject) => {
url = encodeURIComponent(url);
this.request(this.ApiAgentURL+'/lot/getInfos/'+url, 'GET')
.then(data => {
resolve(data);
})
.catch(error => {
reject(error);
});
});
}
async getPictures(url){
return new Promise((resolve, reject) => {
url = encodeURIComponent(url);
this.request(this.ApiAgentURL+'/lot/getPictures/'+url, 'GET')
.then(data => {
resolve(data);
})
.catch(error => {
reject(error);
});
});
}
}
module.exports = {Agent};