🔧 Modified Comic model

This commit is contained in:
2024-04-16 22:41:33 -05:00
parent 94cb95f4bf
commit d7f3d3a7cf
2 changed files with 119 additions and 53 deletions

View File

@@ -55,29 +55,34 @@ const DirectConnectBundleSchema = mongoose.Schema({
size: String,
type: {},
});
const wantedSchema = new mongoose.Schema({
source: { type: String, default: null },
markEntireVolumeWanted: Boolean,
issues: {
type: [
{
const wantedSchema = mongoose.Schema(
{
source: { type: String, default: null },
markEntireVolumeWanted: Boolean,
issues: {
type: [
{
_id: false, // Disable automatic ObjectId creation for each issue
id: Number,
url: String,
image: { type: Array, default: [] },
},
],
default: null,
},
volume: {
type: {
_id: false, // Disable automatic ObjectId creation for volume
id: Number,
url: String,
image: { type: Array, default: [] },
name: String,
},
],
default: null, // Set default to null for issues
},
volume: {
type: {
id: Number,
url: String,
image: { type: Array, default: [] },
name: String,
default: null,
},
default: null, // Set default to null for volume
},
});
{ _id: false }
); // Disable automatic ObjectId creation for the wanted object itself
const ComicSchema = mongoose.Schema(
{
@@ -93,18 +98,12 @@ const ComicSchema = mongoose.Schema(
},
sourcedMetadata: {
comicInfo: { type: mongoose.Schema.Types.Mixed, default: {} },
comicvine: {
type: Object,
es_indexed: true,
default: {},
},
shortboxed: {},
comicvine: { type: mongoose.Schema.Types.Mixed, default: {} }, // Set as a freeform object
locg: {
type: LOCGSchema,
es_indexed: true,
default: {},
},
gcd: {},
},
rawFileDetails: {
type: RawFileDetailsSchema,

View File

@@ -248,10 +248,7 @@ export default class ImportService extends Service {
payload: {
_id?: string;
sourcedMetadata: {
comicvine?: {
volume: { api_detail_url: string };
volumeInformation: {};
};
comicvine?: any;
locg?: {};
};
inferredMetadata: {
@@ -262,7 +259,7 @@ export default class ImportService extends Service {
};
wanted: {
issues: [];
volume: {};
volume: { id: number };
source: string;
markEntireVolumeWanted: Boolean;
};
@@ -275,36 +272,106 @@ export default class ImportService extends Service {
}>
) {
try {
let volumeDetails;
const comicMetadata = ctx.params.payload;
console.log(
JSON.stringify(ctx.params.payload, null, 4)
);
const { payload } = ctx.params;
const { wanted } = payload;
console.log("Saving to Mongo...");
console.log(
`Import type: [${ctx.params.importType}]`
);
switch (ctx.params.importType) {
case "new":
console.log(comicMetadata);
return await Comic.create(comicMetadata);
case "update":
return await Comic.findOneAndUpdate(
{
"acquisition.directconnect.downloads.bundleId":
ctx.params.bundleId,
},
comicMetadata,
{
upsert: true,
new: true,
}
);
default:
return false;
let condition = {};
if (wanted.volume && wanted.volume.id) {
condition["wanted.volume.id"] =
wanted.volume.id;
}
if (Object.keys(condition).length === 0) {
console.log("No valid identifier for upsert.");
return {
success: false,
message:
"No valid volume identifier provided.",
};
}
// Check if the volume or issues already exist
const existingVolume = await Comic.findOne(
condition
);
if (existingVolume) {
// Check for existing issues
let existingIssues = [];
if (wanted.issues && wanted.issues.length > 0) {
existingIssues = wanted.issues.filter(
(issue: any) =>
existingVolume.wanted.issues.some(
(existing: any) =>
existing.id === issue.id
)
);
}
if (existingIssues.length > 0) {
return {
success: false,
message: `Issue(s) with ID(s) ${existingIssues
.map((i) => i.id)
.join(", ")} already exist.`,
};
}
return {
success: false,
message:
"Volume with this ID already exists.",
};
}
// Perform the upsert operation if no existing volume or issues were found
let update = {
$set: {
"wanted.source": payload.wanted.source,
"wanted.markEntireVolumeWanted":
payload.wanted.markEntireVolumeWanted,
"wanted.volume": payload.wanted.volume,
"sourcedMetadata.comicvine":
payload.sourcedMetadata.comicvine,
},
$addToSet: {},
};
if (wanted.issues && wanted.issues.length > 0) {
update.$addToSet["wanted.issues"] = {
$each: wanted.issues,
};
}
const updatedDocument =
await Comic.findOneAndUpdate(
condition,
update,
{
upsert: true,
new: true,
setDefaultsOnInsert: true,
overwrite: false,
}
);
console.log(
"Document upserted with new issues:",
updatedDocument
);
return {
success: true,
message: "Document updated successfully.",
data: updatedDocument,
};
} catch (error) {
console.log(error);
throw new Errors.MoleculerError(
"Import failed.",
"Operation failed.",
500
);
}