import fs from 'fs/promises'; import _ from 'lodash'; import Bunyan from 'bunyan'; import { PrismaClient } from '@prisma/client' import * as Bluebird from "bluebird"; import discogsService from './src/discogs'; import pgService from './src/pg'; import { logAxiosError } from './src/utils'; import createLog from './src/log'; async function start(log) { const prisma = new PrismaClient(); const pg = pgService(log, prisma); const discogs = discogsService(log, pg); async function getBundles() { const bundles = await pg.bundleCandidates(); bundles.forEach(b => { const data = b.map(l => l.data) as any[]; const wants = b.map(l => l.wantId); const total = data.reduce((acc, l) => acc + l.price.value, 0); const items = data.map(l => ({ id: l.id, description: l.release.description, price: l.price.value, condition: l.condition, })); const username = data[0]?.seller.username const seller = data[0]?.seller.id const shipsFrom = data[0]?.ships_from; const currency = data[0]?.price.currency; const shipping = data[0]?.seller.shipping; const mentionsAustralia = shipping.toLowerCase().includes('australia'); const mentionsWorldwide = shipping.toLowerCase().includes('world'); log.info({ count: b.length, currency, total, items, username, seller, shipsFrom, mentionsAustralia, mentionsWorldwide }); }); // return bundles; } return getBundles(); // const usernames = [ // 'vanderbabe', // 'margh', // 'jmcdermid1', // ]; // async function populateUserListings(user) { // log.info(user); // const wants = await discogs.wantlist(user); // // const latest = await discogs.wantlistLatest(user); // // if (wants.length !== latest.length) // log.info({ username: user.discogs, wantCount: wants.length }); // return Promise.mapSeries(wants, async want => { // const listings = await discogs.listings(want); // const populated = listings.filter(l => l); // log.info({ id: want.id, release: want.release, populated: populated.length, total: listings.length }); // return populated; // }); // } // return Promise.mapSeries(usernames, async u => { // const user = await discogs.user(u) // return populateUserListings(user); // }); } async function run() { const log = createLog(); process.on('SIGTERM', () => { log.debug('SIGTERM received, exiting'); process.exit(0); }); try { const r = await start(log) // log.info('done syncing', { totalListings: r.flat().length }); log.info(r); setTimeout(run, 60 * 1000); } catch (e) { if (e.message === 'rate limited') { log.info('rate limited, trying again in 60s'); return setTimeout(run, 60 * 1000); } log.error(e); process.exit(1); } } run();