Postgres.

This commit is contained in:
Jonathan Cremin 2016-06-19 10:14:47 -07:00
parent 695644c260
commit 806f42e3f8
25 changed files with 501 additions and 294 deletions

15
models/activation.js Normal file
View file

@ -0,0 +1,15 @@
export default function (sequelize, DataTypes) {
const Activation = sequelize.define('activation', {
id: { type: DataTypes.UUID, defaultValue: DataTypes.UUIDV4, primaryKey: true },
activated: false,
email: DataTypes.STRING,
}, {
classMethods: {
associate: (models) => {
Activation.belongsTo(models.user);
},
},
});
return Activation;
}

40
models/file.js Normal file
View file

@ -0,0 +1,40 @@
export default function (sequelize, DataTypes) {
const File = sequelize.define('file', {
id: { type: DataTypes.STRING(12), primaryKey: true }, // eslint-disable-line new-cap
name: DataTypes.TEXT,
originalName: DataTypes.TEXT,
size: DataTypes.BIGINT,
downloads: DataTypes.BIGINT,
accessedAt: DataTypes.DATE,
status: DataTypes.ENUM('active', 'uploading', 'deleted'), // eslint-disable-line new-cap
type: DataTypes.ENUM( // eslint-disable-line new-cap
'image',
'audio',
'video',
'archive',
'other'
),
width: DataTypes.INTEGER,
height: DataTypes.INTEGER,
ip: 'inet',
legacyId: DataTypes.STRING(12), // eslint-disable-line new-cap
md5: DataTypes.STRING(32), // eslint-disable-line new-cap
malwarePositives: DataTypes.INTEGER,
}, {
classMethods: {
accessed: (id) => sequelize.query(`
UPDATE files
SET "downloads" = downloads + 1, "accessedAt" = NOW()
WHERE "id" = :id`,
{
replacements: { id },
type: sequelize.QueryTypes.UPDATE,
}),
associate: (models) => {
File.belongsTo(models.user);
},
},
});
return File;
}

34
models/index.js Normal file
View file

@ -0,0 +1,34 @@
import fs from 'fs';
import path from 'path';
import Sequelize from 'sequelize';
import debugname from 'debug';
const debug = debugname('hostr:models');
const config = {
dialect: 'postgres',
protocol: 'postgres',
logging: debug,
};
const sequelize = new Sequelize(process.env.DATABASE_URL, config);
const db = {};
fs
.readdirSync(__dirname)
.filter((file) => (file.indexOf('.') !== 0) && (file !== 'index.js'))
.forEach((file) => {
const model = sequelize.import(path.join(__dirname, file));
db[model.name] = model;
});
Object.keys(db).forEach((modelName) => {
if ('associate' in db[modelName]) {
db[modelName].associate(db);
}
});
db.sequelize = sequelize;
db.Sequelize = Sequelize;
export default db;

15
models/login.js Normal file
View file

@ -0,0 +1,15 @@
export default function (sequelize, DataTypes) {
const Login = sequelize.define('login', {
id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true },
successful: { type: DataTypes.BOOLEAN },
ip: { type: 'inet' },
}, {
classMethods: {
associate: (models) => {
Login.belongsTo(models.user);
},
},
});
return Login;
}

15
models/malware.js Normal file
View file

@ -0,0 +1,15 @@
export default function (sequelize, DataTypes) {
const Malware = sequelize.define('malware', {
fileId: { type: DataTypes.STRING(12), primaryKey: true }, // eslint-disable-line new-cap
positives: DataTypes.INTEGER,
virustotal: DataTypes.JSON,
}, {
classMethods: {
associate: (models) => {
Malware.belongsTo(models.file);
},
},
});
return Malware;
}

13
models/remember.js Normal file
View file

@ -0,0 +1,13 @@
export default function (sequelize, DataTypes) {
const Remember = sequelize.define('remember', {
id: { type: DataTypes.UUID, defaultValue: DataTypes.UUIDV4, primaryKey: true },
}, {
classMethods: {
associate: (models) => {
Remember.belongsTo(models.user);
},
},
});
return Remember;
}

13
models/reset.js Normal file
View file

@ -0,0 +1,13 @@
export default function (sequelize, DataTypes) {
const Reset = sequelize.define('reset', {
id: { type: DataTypes.UUID, defaultValue: DataTypes.UUIDV4, primaryKey: true },
}, {
classMethods: {
associate: (models) => {
Reset.belongsTo(models.user);
},
},
});
return Reset;
}

17
models/transaction.js Normal file
View file

@ -0,0 +1,17 @@
export default function (sequelize, DataTypes) {
const Transaction = sequelize.define('transaction', {
uuid: { type: DataTypes.UUID, defaultValue: DataTypes.UUIDV4 },
amount: DataTypes.DECIMAL,
description: DataTypes.STRING,
type: DataTypes.ENUM('direct', 'paypal'), // eslint-disable-line new-cap
ip: 'inet',
}, {
classMethods: {
associate: (models) => {
Transaction.belongsTo(models.user);
},
},
});
return Transaction;
}

21
models/user.js Normal file
View file

@ -0,0 +1,21 @@
export default function (sequelize, DataTypes) {
const User = sequelize.define('user', {
id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true },
email: DataTypes.STRING,
password: DataTypes.STRING,
plan: DataTypes.ENUM('Free', 'Pro'), // eslint-disable-line new-cap
ip: 'inet',
activated: DataTypes.BOOLEAN,
banned: DataTypes.BOOLEAN,
deleted: DataTypes.BOOLEAN,
}, {
classMethods: {
associate: (models) => {
User.hasMany(models.file);
User.hasOne(models.activation);
},
},
});
return User;
}