diff --git a/lib/models/cron.js b/lib/models/cron.js new file mode 100644 index 00000000..35cffed2 --- /dev/null +++ b/lib/models/cron.js @@ -0,0 +1,48 @@ +'use strict'; + +const mongoose = require('mongoose'); +const SchemaOptions = require('../options'); +const errors = require('storj-service-error-types'); + +const CronJob = new mongoose.Schema({ + name: { + type: String, + required: true, + unique: true, + index: true + }, + locked: { + type: Boolean, + default: false + required: true + }, + started: { + type: Date, + default: Date.now, + required: true + }, + data: { + type: String, + required: false + } +}); + +Partner.set('toObject', { + transform: function(doc, ret) { + ret.id = ret._id; + delete ret.__v; + delete ret._id; + } +}); + +Partner.set('toJSON', { + transform: function(doc, ret) { + ret.id = ret._id; + delete ret.__v; + delete ret._id; + } +}); + +module.exports = function(connection) { + return connection.model('CronJob', CronJob); +}; diff --git a/lib/models/storage-event.js b/lib/models/storage-event.js index 325252ad..e3318bec 100644 --- a/lib/models/storage-event.js +++ b/lib/models/storage-event.js @@ -3,43 +3,99 @@ const mongoose = require('mongoose'); const utils = require('../utils'); /** - * Represents the history of storage related summary + * Represents the history of storage related summary * statistics for buckets and their associated files * @constructor */ var StorageEvent = new mongoose.Schema({ - bucket: { - type: mongoose.Schema.Types.ObjectId, - ref: 'Bucket', - required: true - }, - bucketEntry: { - type: mongoose.Schema.Types.ObjectId, - ref: 'BucketEntry', - required: true + token: { + type: String, + required: false, + unique: true }, user: { - type: String, + type: String, ref: 'User', - required: true, + required: false, validate: { - validator: value => utils.isValidEmail(value), + validator: value => utils.isValidEmail(value) || !value, message: 'Invalid user email address' } }, + client: { + type: String, + required: true + }, + farmer: { + type: String, + required: true + }, timestamp: { type: Date, default: Date.now, required: true }, + farmerEnd: { + type: Date, + required: false + }, + userDeleted: { + type: Date, + required: false + }, downloadBandwidth: { type: Number, required: false }, storage: { - type: Number, + type: Number, required: false + }, + shardHash: { + type: String, + required: false + }, + clientReport: { + exchangeStart: { + type: Date, + required: false + }, + exchangeEnd: { + type: Date, + required: false + }, + exchangeResultCode: { + type: Number, + required: false + }, + exchangeResultMessage: { + type: String, + required: false + } + }, + farmerReport: { + exchangeStart: { + type: Date, + required: false + }, + exchangeEnd: { + type: Date, + required: false + }, + exchangeResultCode: { + type: Number, + required: false + }, + exchangeResultMessage: { + type: String, + required: false + } + }, + success: { + type: Boolean, + required: true, + default: false } }); diff --git a/test/storage-event.unit.js b/test/storage-event.unit.js index cc1f135c..3dda0379 100644 --- a/test/storage-event.unit.js +++ b/test/storage-event.unit.js @@ -30,22 +30,27 @@ describe('Storage/models/Storage-Event', function() { it('should create storage event with default props', function(done) { var newStorageEvent = new StorageEvent({ - bucket: mongoose.Types.ObjectId(), - bucketEntry: mongoose.Types.ObjectId(), user: 'user@gmail.com', downloadBandwidth: 0, storage: 1000000, + farmer: 'c5857d99d3ff951701093b75fba94e1c82877f9b', + client: 'user@gmail.com' }); - newStorageEvent.save(function(err, storEvent) { + newStorageEvent.save(function(err, storeEvent) { + if (err) { + return done(err); + } let ObjectIdType = mongoose.Types.ObjectId; expect(err).to.not.be.an.instanceOf(Error); - expect(storEvent.bucket).to.be.an.instanceOf(ObjectIdType); - expect(storEvent.bucketEntry).to.be.an.instanceOf(ObjectIdType); - expect(storEvent.user).to.be.a('string'); - expect(storEvent.timestamp).to.be.an.instanceOf(Date); - expect(storEvent.downloadBandwidth).to.be.a('number'); - expect(storEvent.storage).to.be.a('number'); + expect(storeEvent._id).to.be.instanceOf(ObjectIdType); + expect(storeEvent.user).to.be.a('string'); + expect(storeEvent.timestamp).to.be.an.instanceOf(Date); + expect(storeEvent.downloadBandwidth).to.be.a('number'); + expect(storeEvent.storage).to.be.a('number'); + expect(storeEvent.farmer) + .to.equal('c5857d99d3ff951701093b75fba94e1c82877f9b'); + expect(storeEvent.client).to.equal('user@gmail.com'); done(); }); });