@rsc-labs/medusa-store-analytics-v2
Version:
Get analytics data about your store
107 lines • 9.06 kB
JavaScript
;
/*
* Copyright 2024 RSC-Labs, https://rsoftcon.com/
*
* MIT License
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.MarketingAnalyticsService = void 0;
class MarketingAnalyticsService {
constructor({ __pg_connection__ }) {
this.pgConnection = __pg_connection__;
this.TOP_LIMIT = 5;
}
async getTopDiscountsByCount(orderStatuses, from, to) {
const orderStatusesAsStrings = Object.values(orderStatuses);
if (orderStatusesAsStrings.length) {
if (from && to) {
const topDiscounts = await this.pgConnection('order')
.join('order_cart', 'order.id', 'order_cart.order_id')
.join('cart', 'order_cart.cart_id', 'cart.id')
.join('cart_promotion', 'cart.id', 'cart_promotion.cart_id')
.join('promotion', 'cart_promotion.promotion_id', 'promotion.id')
.select('promotion.code AS code', 'promotion.id AS discount_id')
.count('promotion.id AS sum')
.where('order.created_at', '>=', from)
.whereIn('order.status', orderStatusesAsStrings)
.groupBy(['promotion.code', 'promotion.id'])
.orderBy('sum', 'DESC')
.limit(this.TOP_LIMIT);
return {
dateRangeFrom: from.getTime(),
dateRangeTo: to.getTime(),
dateRangeFromCompareTo: undefined,
dateRangeToCompareTo: undefined,
current: topDiscounts.map(result => ({
sum: result.sum.toString(),
discountCode: result.code.toString(),
discountId: result.discount_id.toString()
})),
previous: []
};
}
let startQueryFrom;
if (!from) {
if (from) {
startQueryFrom = from;
}
else {
const lastOrder = await this.pgConnection('order')
.select('created_at')
.whereIn('status', orderStatusesAsStrings)
.orderBy('created_at', 'ASC')
.limit(1)
.then(result => result[0]);
if (lastOrder) {
startQueryFrom = lastOrder.created_at;
}
}
}
else {
startQueryFrom = from;
}
if (startQueryFrom) {
const topDiscounts = await this.pgConnection('order')
.join('order_cart', 'order.id', 'order_cart.order_id')
.join('cart', 'order_cart.cart_id', 'cart.id')
.join('cart_promotion', 'cart.id', 'cart_promotion.cart_id')
.join('promotion', 'cart_promotion.promotion_id', 'promotion.id')
.select('promotion.code AS code', 'promotion.id AS discount_id')
.count('promotion.id AS sum')
.where('order.created_at', '>=', startQueryFrom)
.whereIn('order.status', orderStatusesAsStrings)
.groupBy(['promotion.code', 'promotion.id'])
.orderBy('sum', 'DESC')
.limit(this.TOP_LIMIT);
return {
dateRangeFrom: startQueryFrom.getTime(),
dateRangeTo: to ? to.getTime() : new Date(Date.now()).getTime(),
dateRangeFromCompareTo: undefined,
dateRangeToCompareTo: undefined,
current: topDiscounts.map(result => ({
sum: result.sum.toString(),
discountCode: result.code.toString(),
discountId: result.discount_id.toString()
})),
previous: []
};
}
}
return {
dateRangeFrom: undefined,
dateRangeTo: undefined,
dateRangeFromCompareTo: undefined,
dateRangeToCompareTo: undefined,
current: [],
previous: []
};
}
}
exports.MarketingAnalyticsService = MarketingAnalyticsService;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2V0aW5nQW5hbHl0aWNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvc3RvcmUtYW5hbHl0aWNzL3NlcnZpY2VzL21hcmtldGluZ0FuYWx5dGljcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7R0FVRzs7O0FBd0JILE1BQWEseUJBQXlCO0lBTXBDLFlBQVksRUFBRSxpQkFBaUIsRUFBd0I7UUFDckQsSUFBSSxDQUFDLFlBQVksR0FBRyxpQkFBaUIsQ0FBQTtRQUNyQyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQsS0FBSyxDQUFDLHNCQUFzQixDQUFDLGFBQTRCLEVBQUUsSUFBVyxFQUFFLEVBQVM7UUFDL0UsTUFBTSxzQkFBc0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzVELElBQUksc0JBQXNCLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbEMsSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFLENBQUM7Z0JBQ2YsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQztxQkFDbEQsSUFBSSxDQUFDLFlBQVksRUFBRSxVQUFVLEVBQUUscUJBQXFCLENBQUM7cUJBQ3JELElBQUksQ0FBQyxNQUFNLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxDQUFDO3FCQUM3QyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLHdCQUF3QixDQUFDO3FCQUMzRCxJQUFJLENBQUMsV0FBVyxFQUFFLDZCQUE2QixFQUFFLGNBQWMsQ0FBQztxQkFDaEUsTUFBTSxDQUNMLHdCQUF3QixFQUN4Qiw2QkFBNkIsQ0FDOUI7cUJBQ0EsS0FBSyxDQUFDLHFCQUFxQixDQUFDO3FCQUM1QixLQUFLLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztxQkFDckMsT0FBTyxD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