@grouparoo/core
Version:
The Grouparoo Core
152 lines (151 loc) • 5.8 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ExportRetryById = exports.ExportsRetryFailed = exports.ExportView = exports.ExportsTotals = exports.ExportsList = void 0;
const sequelize_1 = require("sequelize");
const authenticatedAction_1 = require("../classes/actions/authenticatedAction");
const Export_1 = require("../models/Export");
const export_1 = require("../modules/ops/export");
const Destination_1 = require("../models/Destination");
const GrouparooRecord_1 = require("../models/GrouparooRecord");
const apiData_1 = require("../modules/apiData");
class ExportsList extends authenticatedAction_1.AuthenticatedAction {
constructor() {
super(...arguments);
this.name = "exports:list";
this.description = "list exports";
this.outputExample = {};
this.permission = { topic: "export", mode: "read" };
this.inputs = {
recordId: { required: false },
destinationId: { required: false },
exportProcessorId: { required: false },
limit: { required: true, default: 100, formatter: apiData_1.APIData.ensureNumber },
offset: { required: true, default: 0, formatter: apiData_1.APIData.ensureNumber },
state: { required: false },
order: {
required: false,
formatter: apiData_1.APIData.ensureArray,
default: [["createdAt", "desc"]],
},
};
}
async runWithinTransaction({ params }) {
const where = {};
if (params.recordId) {
where["recordId"] = params.recordId;
}
if (params.destinationId) {
where["destinationId"] = params.destinationId;
}
if (params.exportProcessorId) {
where["exportProcessorId"] = params.exportProcessorId;
}
if (params.state) {
where["state"] = params.state;
}
const { rows: _exports, count: total } = await Export_1.Export.findAndCountAll({
where,
include: [
{
model: Destination_1.Destination,
where: { state: { [sequelize_1.Op.ne]: "draft" } },
required: false,
},
{
model: GrouparooRecord_1.GrouparooRecord,
attributes: ["modelId"],
},
],
limit: params.limit,
offset: params.offset,
order: params.order,
});
return {
total,
exports: await Promise.all(_exports.map((exp) => exp.apiData())),
};
}
}
exports.ExportsList = ExportsList;
class ExportsTotals extends authenticatedAction_1.AuthenticatedAction {
constructor() {
super(...arguments);
this.name = "exports:totals";
this.description = "count exports by state";
this.outputExample = {};
this.permission = { topic: "export", mode: "read" };
this.inputs = {
recordId: { required: false },
destinationId: { required: false },
};
}
async runWithinTransaction({ params, }) {
const where = {};
if (params.recordId) {
where["recordId"] = params.recordId;
}
if (params.destinationId) {
where["destinationId"] = params.destinationId;
}
return { totals: await export_1.ExportOps.totals(where) };
}
}
exports.ExportsTotals = ExportsTotals;
class ExportView extends authenticatedAction_1.AuthenticatedAction {
constructor() {
super(...arguments);
this.name = "export:view";
this.description = "view an export";
this.outputExample = {};
this.permission = { topic: "export", mode: "read" };
this.inputs = {
id: { required: true },
};
}
async runWithinTransaction({ params }) {
const _export = await Export_1.Export.findById(params.id);
return { export: await _export.apiData() };
}
}
exports.ExportView = ExportView;
class ExportsRetryFailed extends authenticatedAction_1.AuthenticatedAction {
constructor() {
super(...arguments);
this.name = "exports:retryFailures";
this.description = "retry failed exports within a timeframe";
this.permission = { topic: "destination", mode: "write" };
this.inputs = {
destinationId: { required: false },
startTimestamp: { required: true, formatter: apiData_1.APIData.ensureNumber },
endTimestamp: { required: true, formatter: apiData_1.APIData.ensureNumber },
preview: {
required: false,
default: false,
formatter: apiData_1.APIData.ensureBoolean,
},
};
}
async runWithinTransaction({ params, }) {
const count = await Export_1.Export.retryFailed(new Date(params.startTimestamp), new Date(params.endTimestamp), params.destinationId
? await Destination_1.Destination.findById(params.destinationId)
: null, !params.preview);
return { count };
}
}
exports.ExportsRetryFailed = ExportsRetryFailed;
class ExportRetryById extends authenticatedAction_1.AuthenticatedAction {
constructor() {
super(...arguments);
this.name = "export:retry";
this.description = "Retry failed or canceled export by id";
this.permission = { topic: "destination", mode: "write" };
this.inputs = {
exportId: { required: true },
};
}
async runWithinTransaction({ params, }) {
const count = await Export_1.Export.retryById(params.exportId);
return { count };
}
}
exports.ExportRetryById = ExportRetryById;