Postgres.
This commit is contained in:
parent
695644c260
commit
806f42e3f8
25 changed files with 501 additions and 294 deletions
15
models/activation.js
Normal file
15
models/activation.js
Normal 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
40
models/file.js
Normal 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
34
models/index.js
Normal 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
15
models/login.js
Normal 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
15
models/malware.js
Normal 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
13
models/remember.js
Normal 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
13
models/reset.js
Normal 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
17
models/transaction.js
Normal 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
21
models/user.js
Normal 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;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue