📑 Added duplicate detection logic

This commit is contained in:
2021-09-12 01:01:42 -07:00
parent 36d1c4fe33
commit 4a39912b2f
2 changed files with 65 additions and 36 deletions

View File

@@ -3,6 +3,12 @@ import ApiGateway from "moleculer-web";
import { extractCoverFromFile } from "../utils/uncompression.utils"; import { extractCoverFromFile } from "../utils/uncompression.utils";
import { map } from "lodash"; import { map } from "lodash";
const IO = require("socket.io")(); const IO = require("socket.io")();
import Comic from "../models/comic.model";
import {
IExtractComicBookCoverErrorResponse,
IExtractedComicBookCoverFile,
} from "threetwo-ui-typings";
import { logger } from "../utils/logger.utils";
export default class ApiService extends Service { export default class ApiService extends Service {
public constructor(broker: ServiceBroker) { public constructor(broker: ServiceBroker) {
@@ -18,9 +24,7 @@ export default class ApiService extends Service {
routes: [ routes: [
{ {
path: "/api", path: "/api",
whitelist: [ whitelist: ["**"],
"**",
],
cors: { cors: {
origin: "*", origin: "*",
methods: [ methods: [
@@ -106,12 +110,20 @@ export default class ApiService extends Service {
const { extractionOptions, walkedFolders } = params; const { extractionOptions, walkedFolders } = params;
map(walkedFolders, async (folder, idx) => { map(walkedFolders, async (folder, idx) => {
let comicBookCoverMetadata = let comicExists = await Comic.exists({
await extractCoverFromFile( "rawFileDetails.name": `${folder.name}`,
});
if (!comicExists) {
let comicBookCoverMetadata:
| IExtractedComicBookCoverFile
| IExtractComicBookCoverErrorResponse
| IExtractedComicBookCoverFile[] = await extractCoverFromFile(
extractionOptions, extractionOptions,
folder folder
); );
const dbImportResult = await this.broker.call(
const dbImportResult =
await this.broker.call(
"import.rawImportToDB", "import.rawImportToDB",
{ {
importStatus: { importStatus: {
@@ -121,7 +133,8 @@ export default class ApiService extends Service {
score: "0", score: "0",
}, },
}, },
rawFileDetails: comicBookCoverMetadata, rawFileDetails:
comicBookCoverMetadata,
sourcedMetadata: { sourcedMetadata: {
comicvine: {}, comicvine: {},
}, },
@@ -133,6 +146,14 @@ export default class ApiService extends Service {
comicBookCoverMetadata, comicBookCoverMetadata,
dbImportResult, dbImportResult,
}); });
} else {
logger.info(
`Comic: \"${folder.name}\" already exists in the database`
);
client.emit("comicBookExists", {
name: folder.name,
});
}
}); });
} }
); );

View File

@@ -68,6 +68,9 @@ export default class ImportService extends Service {
volumeInformation: {}; volumeInformation: {};
}; };
}; };
rawFileDetails: {
name: string;
};
}> }>
) { ) {
let volumeDetails; let volumeDetails;
@@ -87,7 +90,7 @@ export default class ImportService extends Service {
comicMetadata.sourcedMetadata.comicvine.volumeInformation = comicMetadata.sourcedMetadata.comicvine.volumeInformation =
volumeDetails; volumeDetails;
} }
return new Promise((resolve, reject) => { return new Promise(async (resolve, reject) => {
Comic.create(ctx.params, (error, data) => { Comic.create(ctx.params, (error, data) => {
if (data) { if (data) {
resolve(data); resolve(data);
@@ -115,8 +118,8 @@ export default class ImportService extends Service {
comicObjectId: string; comicObjectId: string;
}> }>
) { ) {
// 1. find mongo object by id // 1. Find mongo object by id
// 2. import payload into sourcedMetadata.comicvine // 2. Import payload into sourcedMetadata.comicvine
const comicObjectId = new ObjectId( const comicObjectId = new ObjectId(
ctx.params.comicObjectId ctx.params.comicObjectId
); );
@@ -177,8 +180,10 @@ export default class ImportService extends Service {
"acquisition.directconnect": { "acquisition.directconnect": {
resultId: resultId:
ctx.params.resultId, ctx.params.resultId,
bundleId: ctx.params.bundleId, bundleId:
directoryIds: ctx.params.directoryIds, ctx.params.bundleId,
directoryIds:
ctx.params.directoryIds,
searchInstanceId: searchInstanceId:
ctx.params ctx.params
.searchInstanceId, .searchInstanceId,
@@ -219,12 +224,14 @@ export default class ImportService extends Service {
}, },
}, },
methods: { methods: {
getComicVineVolumeMetadata: apiDetailURL => new Promise((resolve, reject) => https getComicVineVolumeMetadata: (apiDetailURL) =>
new Promise((resolve, reject) =>
https
.get( .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`, `${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 => { (resp) => {
let data = ""; let data = "";
resp.on("data", chunk => { resp.on("data", (chunk) => {
data += chunk; data += chunk;
}); });
@@ -237,10 +244,11 @@ export default class ImportService extends Service {
}); });
} }
) )
.on("error", err => { .on("error", (err) => {
console.log("Error: " + err.message); console.log("Error: " + err.message);
reject(err); reject(err);
})), })
),
}, },
}, },
schema schema