UNPKG

1.76 kBJavaScriptView Raw
1"use strict";
2
3var _ = require('lodash');
4
5module.exports = function(sequelize, DataTypes) {
6 var PackagesMetrics = sequelize.define("PackagesMetrics", {
7 id: {
8 type: DataTypes.INTEGER(10),
9 allowNull: false,
10 autoIncrement: true,
11 primaryKey: true
12 },
13 package_id: DataTypes.INTEGER(10),
14 active: DataTypes.INTEGER(10),
15 downloaded: DataTypes.INTEGER(10),
16 failed: DataTypes.INTEGER(10),
17 installed: DataTypes.INTEGER(10),
18 created_at: DataTypes.DATE,
19 updated_at: DataTypes.DATE,
20 }, {
21 tableName: 'packages_metrics',
22 underscored: true,
23 paranoid: true
24 });
25
26 PackagesMetrics.addOne = function (packageId, fieldName) {
27 var self = this;
28 var sql = 'UPDATE packages_metrics SET `' + fieldName + '`=`' + fieldName + '` + 1 WHERE package_id = :package_id';
29 return sequelize.query(sql, { replacements: { package_id: packageId}})
30 .spread(function(results, metadata) {
31 if (_.eq(results.affectedRows, 0)) {
32 var params = {
33 package_id: packageId,
34 active: 0,
35 downloaded: 0,
36 failed: 0,
37 installed: 0,
38 };
39 params[fieldName] = 1;
40 return self.create(params);
41 }else {
42 return true;
43 }
44 });
45 };
46
47 PackagesMetrics.addOneOnDownloadById = function (packageId) {
48 return this.addOne(packageId, 'downloaded');
49 };
50
51 PackagesMetrics.addOneOnFailedById = function (packageId) {
52 return this.addOne(packageId, 'failed');
53 };
54
55 PackagesMetrics.addOneOnInstalledById = function (packageId) {
56 return this.addOne(packageId, 'installed');
57 };
58
59 PackagesMetrics.addOneOnActiveById = function (packageId) {
60 return this.addOne(packageId, 'active');
61 };
62
63 return PackagesMetrics;
64};