From 51d455f8962d7304dcc4964a73e0c68993983ef8 Mon Sep 17 00:00:00 2001 From: Rishi Ghan Date: Tue, 24 Aug 2021 12:46:00 -0700 Subject: [PATCH 1/3] =?UTF-8?q?=E2=AC=87=EF=B8=8F=20Added=20endpoint=20for?= =?UTF-8?q?=20appending=20bundle=20download=20data?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- services/import.service.ts | 145 ++++++++++++++++++++++++++++--------- 1 file changed, 112 insertions(+), 33 deletions(-) diff --git a/services/import.service.ts b/services/import.service.ts index a0d2231..59f4365 100644 --- a/services/import.service.ts +++ b/services/import.service.ts @@ -14,7 +14,6 @@ import { convertXMLToJSON } from "../utils/xml.utils"; import https from "https"; const ObjectId = require("mongoose").Types.ObjectId; - export default class ProductsService extends Service { public constructor( public broker: ServiceBroker, @@ -60,15 +59,33 @@ export default class ProductsService extends Service { }, rawImportToDB: { rest: "POST /rawImportToDB", - params: { - }, - async handler(ctx: Context<{ sourcedMetadata: { comicvine: { volume: { api_detail_url: string}, volumeInformation: {}}}}>) { + params: {}, + async handler( + ctx: Context<{ + sourcedMetadata: { + comicvine: { + volume: { api_detail_url: string }; + volumeInformation: {}; + }; + }; + }> + ) { console.log("ASDASD", ctx.params); let volumeDetails; const comicMetadata = ctx.params; - if (!isNil(comicMetadata.sourcedMetadata.comicvine.volume)) { - volumeDetails = await this.getComicVineVolumeMetadata(comicMetadata.sourcedMetadata.comicvine.volume.api_detail_url); - comicMetadata.sourcedMetadata.comicvine.volumeInformation = volumeDetails; + if ( + !isNil( + comicMetadata.sourcedMetadata.comicvine + .volume + ) + ) { + volumeDetails = + await this.getComicVineVolumeMetadata( + comicMetadata.sourcedMetadata + .comicvine.volume.api_detail_url + ); + comicMetadata.sourcedMetadata.comicvine.volumeInformation = + volumeDetails; } return new Promise((resolve, reject) => { Comic.create(ctx.params, (error, data) => { @@ -89,30 +106,86 @@ export default class ProductsService extends Service { applyComicVineMetadata: { rest: "POST /applyComicVineMetadata", params: {}, - async handler(ctx: Context<{ match: { volume: { api_detail_url: string }, volumeInformation: object }, comicObjectId: string }>) { + async handler( + ctx: Context<{ + match: { + volume: { api_detail_url: string }; + volumeInformation: object; + }; + comicObjectId: string; + }> + ) { // 1. find mongo object by id // 2. import payload into sourcedMetadata.comicvine - const comicObjectId = new ObjectId(ctx.params.comicObjectId); + const comicObjectId = new ObjectId( + ctx.params.comicObjectId + ); const matchedResult = ctx.params.match; let volumeDetailsPromise; if (!isNil(matchedResult.volume)) { - volumeDetailsPromise = this.getComicVineVolumeMetadata(matchedResult.volume.api_detail_url) + volumeDetailsPromise = + this.getComicVineVolumeMetadata( + matchedResult.volume.api_detail_url + ); } return new Promise(async (resolve, reject) => { - const volumeDetails = await volumeDetailsPromise; - matchedResult.volumeInformation = volumeDetails; - Comic.findByIdAndUpdate(comicObjectId, { sourcedMetadata: { comicvine: matchedResult } }, { new: true }, (err, result) => { - if (err) { - console.log(err); + const volumeDetails = + await volumeDetailsPromise; + matchedResult.volumeInformation = + volumeDetails; + Comic.findByIdAndUpdate( + comicObjectId, + { + sourcedMetadata: { + comicvine: matchedResult, + }, + }, + { new: true }, + (err, result) => { + if (err) { + console.log(err); + reject(err); + } else { + // 3. Fetch and append volume information + resolve(result); + } + } + ); + }); + }, + }, + applyAirDCPPDownloadMetadata: { + rest: "POST /applyAirDCPPDownloadMetadata", + params: {}, + async handler( + ctx: Context<{ + comicObjectId: string; + resultId: string; + downloadResult: {}; + searchInstanceId: string; + }> + ) { + const comicObjectId = new ObjectId( + ctx.params.comicObjectId + ); + return new Promise((resolve, reject) => { + Comic.findByIdAndUpdate(comicObjectId, { + acquisition: { + directconnect: { + resultId: ctx.params.resultId, + downloadResult: ctx.params.downloadResult, + searchInstanceId: ctx.params.searchInstanceId, + } + } + }, { new: true}, (err, result) =>{ + if(err) { reject(err); } else { - // 3. Fetch and append volume information resolve(result); } }); }); }, - }, getComicBooks: { @@ -136,26 +209,32 @@ export default class ProductsService extends Service { }, }, methods: { - getComicVineVolumeMetadata: apiDetailURL => { + getComicVineVolumeMetadata: (apiDetailURL) => { return new Promise((resolve, reject) => { - return https.get(`${apiDetailURL}?api_key=a5fa0663683df8145a85d694b5da4b87e1c92c69&format=json&limit=1&offset=0&field_list=id,name,description,image,first_issue,last_issue,publisher,count_of_issues,character_credits,person_credits,aliases`, (resp) => { + return https + .get( + `${apiDetailURL}?api_key=a5fa0663683df8145a85d694b5da4b87e1c92c69&format=json&limit=1&offset=0&field_list=id,name,description,image,first_issue,last_issue,publisher,count_of_issues,character_credits,person_credits,aliases`, + (resp) => { + let data = ""; + resp.on("data", (chunk) => { + data += chunk; + }); - let data = ''; - resp.on('data', (chunk) => { - data += chunk; + resp.on("end", () => { + const volumeInformation = + JSON.parse(data); + resolve( + volumeInformation.results + ); + }); + } + ) + .on("error", (err) => { + console.log("Error: " + err.message); + reject(err); }); - - resp.on('end', () => { - const volumeInformation = JSON.parse(data); - resolve(volumeInformation.results); - }); - - }).on("error", (err) => { - console.log("Error: " + err.message); - reject(err); - }); }); - } + }, }, }, schema From f122515d6a4f00106368bb12d14f5e24ffa01ae2 Mon Sep 17 00:00:00 2001 From: Rishi Ghan Date: Tue, 24 Aug 2021 21:59:30 -0700 Subject: [PATCH 2/3] =?UTF-8?q?=F0=9F=94=A7=20Fixed=20a=20bug=20with=20raw?= =?UTF-8?q?=20import=20into=20mongo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- services/api.service.ts | 5 ++++- services/import.service.ts | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/services/api.service.ts b/services/api.service.ts index bac4c24..b03b37c 100644 --- a/services/api.service.ts +++ b/services/api.service.ts @@ -108,7 +108,7 @@ export default class ApiService extends Service { let comicBookCoverMetadata = await extractCoverFromFile( extractionOptions, - folder + folder ); const dbImportResult = await this.broker.call( "import.rawImportToDB", @@ -121,6 +121,9 @@ export default class ApiService extends Service { }, }, rawFileDetails: comicBookCoverMetadata, + sourcedMetadata: { + comicvine: {}, + }, }, {} ); diff --git a/services/import.service.ts b/services/import.service.ts index 59f4365..3a8e5e0 100644 --- a/services/import.service.ts +++ b/services/import.service.ts @@ -73,7 +73,7 @@ export default class ProductsService extends Service { console.log("ASDASD", ctx.params); let volumeDetails; const comicMetadata = ctx.params; - if ( + if (comicMetadata.sourcedMetadata.comicvine && !isNil( comicMetadata.sourcedMetadata.comicvine .volume From bf701d8838c089d9c43f4c458b79eea7de8dab21 Mon Sep 17 00:00:00 2001 From: Rishi Ghan Date: Wed, 25 Aug 2021 23:07:40 -0700 Subject: [PATCH 3/3] =?UTF-8?q?=E2=AC=87=EF=B8=8F=20Support=20for=20multip?= =?UTF-8?q?le=20bundles=20in=20comic=20model?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- models/comic.model.ts | 2 +- services/import.service.ts | 42 +++++++++++++++++++++++--------------- 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/models/comic.model.ts b/models/comic.model.ts index 4a1fa49..a3d317b 100644 --- a/models/comic.model.ts +++ b/models/comic.model.ts @@ -46,7 +46,7 @@ const ComicSchema = mongoose.Schema({ acquisition: { wanted: Boolean, release: {}, - directconnect: {}, + directconnect: Array, torrent: { sourceApplication: String, magnet: String, diff --git a/services/import.service.ts b/services/import.service.ts index 3a8e5e0..5486438 100644 --- a/services/import.service.ts +++ b/services/import.service.ts @@ -70,10 +70,10 @@ export default class ProductsService extends Service { }; }> ) { - console.log("ASDASD", ctx.params); let volumeDetails; const comicMetadata = ctx.params; - if (comicMetadata.sourcedMetadata.comicvine && + if ( + comicMetadata.sourcedMetadata.comicvine && !isNil( comicMetadata.sourcedMetadata.comicvine .volume @@ -161,7 +161,8 @@ export default class ProductsService extends Service { ctx: Context<{ comicObjectId: string; resultId: string; - downloadResult: {}; + bundleId: string; + directoryIds: []; searchInstanceId: string; }> ) { @@ -169,21 +170,30 @@ export default class ProductsService extends Service { ctx.params.comicObjectId ); return new Promise((resolve, reject) => { - Comic.findByIdAndUpdate(comicObjectId, { - acquisition: { - directconnect: { - resultId: ctx.params.resultId, - downloadResult: ctx.params.downloadResult, - searchInstanceId: ctx.params.searchInstanceId, + Comic.findByIdAndUpdate( + comicObjectId, + { + $push: { + "acquisition.directconnect": { + resultId: + ctx.params.resultId, + bundleId: ctx.params.bundleId, + directoryIds: ctx.params.directoryIds, + searchInstanceId: + ctx.params + .searchInstanceId, + }, + }, + }, + { new: true, safe: true, upsert: true }, + (err, result) => { + if (err) { + reject(err); + } else { + resolve(result); } } - }, { new: true}, (err, result) =>{ - if(err) { - reject(err); - } else { - resolve(result); - } - }); + ); }); }, },