1 | "use strict";
|
2 |
|
3 | var _ = require('lodash');
|
4 |
|
5 | module.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 | };
|