Files
threetwo-core-service/services/import.service.ts
2021-06-02 09:02:32 -07:00

78 lines
1.9 KiB
TypeScript

"use strict";
import { Context, Service, ServiceBroker, ServiceSchema } from "moleculer";
import { DbMixin } from "../mixins/db.mixin";
import Comic from "../models/comic.model";
import { walkFolder } from "../utils/uncompression.utils";
import { convertXMLToJSON } from "../utils/xml.utils";
export default class ProductsService extends Service {
// @ts-ignore
public constructor(
public broker: ServiceBroker,
schema: ServiceSchema<{}> = { name: "import" }
) {
super(broker);
this.parseServiceSchema(
Service.mergeSchemas(
{
name: "import",
mixins: [DbMixin("comics", Comic)],
settings: {
// Available fields in the responses
fields: ["_id", "name", "quantity", "price"],
// Validator for the `create` & `insert` actions.
entityValidator: {
name: "string|min:3",
price: "number|positive",
},
},
hooks: {},
actions: {
walkFolders: {
rest: "POST /walkFolders",
params: {
basePathToWalk: "string",
},
async handler(
ctx: Context<{ basePathToWalk: string }>
) {
return await walkFolder(
ctx.params.basePathToWalk
);
},
},
convertXMLToJSON: {
rest: "POST /convertXmlToJson",
params: {},
async handler(ctx: Context<{}>) {
return convertXMLToJSON("lagos");
},
},
rawImportToDB: {
rest: "POST /rawImportToDB",
params: { payload: "object" },
async handler(ctx: Context<{ payload: object }>) {
return new Promise((resolve, reject) => {
Comic.create(
ctx.params.payload,
(error, data) => {
if (data) {
resolve(data);
} else if (error) {
reject(new Error(error));
}
}
);
});
},
},
},
methods: {},
},
schema
)
);
}
}