Mise à jour des models mysql
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
const { DataTypes, Model } = require("sequelize");
|
||||
const sequelize = require("../../config/sequelize");
|
||||
const slug = require("slug");
|
||||
|
||||
class Article extends Model { }
|
||||
|
||||
const ArticleModel = () => {
|
||||
Article.init(
|
||||
{
|
||||
id: {
|
||||
autoIncrement: true,
|
||||
type: DataTypes.INTEGER,
|
||||
allowNull: false,
|
||||
primaryKey: true
|
||||
},
|
||||
slug: {
|
||||
type: DataTypes.STRING(255),
|
||||
allowNull: false
|
||||
},
|
||||
title: {
|
||||
type: DataTypes.STRING(255),
|
||||
allowNull: false
|
||||
},
|
||||
description: {
|
||||
type: DataTypes.TEXT,
|
||||
allowNull: true
|
||||
},
|
||||
body: {
|
||||
type: DataTypes.TEXT,
|
||||
allowNull: false
|
||||
},
|
||||
authorId: {
|
||||
type: DataTypes.STRING(24),
|
||||
allowNull: true,
|
||||
references: {
|
||||
model: 'user',
|
||||
key: 'id'
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
sequelize,
|
||||
tableName: 'article',
|
||||
timestamps: true,
|
||||
indexes: [
|
||||
{
|
||||
name: "PRIMARY",
|
||||
unique: true,
|
||||
using: "BTREE",
|
||||
fields: [
|
||||
{ name: "id" },
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "authorId",
|
||||
using: "BTREE",
|
||||
fields: [
|
||||
{ name: "authorId" },
|
||||
]
|
||||
},
|
||||
]
|
||||
}
|
||||
);
|
||||
|
||||
Article.beforeValidate((article) => {
|
||||
article.slug = slug(`${article.title}`) + '-' + (Math.random() * Math.pow(36, 6) | 0).toString(36);
|
||||
});
|
||||
|
||||
Article.prototype.toJSONFor = function () {
|
||||
return {
|
||||
id: this.id,
|
||||
slug: this.slug,
|
||||
title: this.title,
|
||||
description: this.description,
|
||||
body: this.body
|
||||
};
|
||||
};
|
||||
|
||||
return Article;
|
||||
};
|
||||
|
||||
module.exports = ArticleModel;
|
||||
@@ -0,0 +1,63 @@
|
||||
const { DataTypes, Model } = require("sequelize");
|
||||
const sequelize = require("../../config/sequelize");
|
||||
|
||||
class ArticleTag extends Model { }
|
||||
|
||||
const ArticleTagModel = () => {
|
||||
ArticleTag.init(
|
||||
{
|
||||
tagName: {
|
||||
type: DataTypes.STRING(255),
|
||||
allowNull: false,
|
||||
primaryKey: true,
|
||||
references: {
|
||||
model: 'tag',
|
||||
key: 'name'
|
||||
}
|
||||
},
|
||||
articleId: {
|
||||
type: DataTypes.INTEGER,
|
||||
allowNull: false,
|
||||
primaryKey: true,
|
||||
references: {
|
||||
model: 'article',
|
||||
key: 'id'
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
sequelize,
|
||||
tableName: 'articleTag',
|
||||
timestamps: false,
|
||||
indexes: [
|
||||
{
|
||||
name: "PRIMARY",
|
||||
unique: true,
|
||||
using: "BTREE",
|
||||
fields: [
|
||||
{ name: "tagName" },
|
||||
{ name: "articleId" },
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "articleId",
|
||||
using: "BTREE",
|
||||
fields: [
|
||||
{ name: "articleId" },
|
||||
]
|
||||
},
|
||||
]
|
||||
}
|
||||
);
|
||||
|
||||
ArticleTag.prototype.toJSONFor = function () {
|
||||
return {
|
||||
tagName: this.tagName,
|
||||
articleId: this.articleId
|
||||
};
|
||||
};
|
||||
|
||||
return ArticleTag;
|
||||
};
|
||||
|
||||
module.exports = ArticleTagModel;
|
||||
@@ -0,0 +1,77 @@
|
||||
const { DataTypes, Model } = require("sequelize");
|
||||
const sequelize = require("../../config/sequelize");
|
||||
|
||||
class Comment extends Model { }
|
||||
|
||||
const CommentModel = () => {
|
||||
Comment.init(
|
||||
{
|
||||
id: {
|
||||
autoIncrement: true,
|
||||
type: DataTypes.INTEGER,
|
||||
allowNull: false,
|
||||
primaryKey: true
|
||||
},
|
||||
body: {
|
||||
type: DataTypes.TEXT,
|
||||
allowNull: false
|
||||
},
|
||||
authorId: {
|
||||
type: DataTypes.STRING(24),
|
||||
allowNull: true,
|
||||
references: {
|
||||
model: 'user',
|
||||
key: 'id'
|
||||
}
|
||||
},
|
||||
articleId: {
|
||||
type: DataTypes.INTEGER,
|
||||
allowNull: true,
|
||||
references: {
|
||||
model: 'article',
|
||||
key: 'id'
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
sequelize,
|
||||
tableName: 'comment',
|
||||
timestamps: true,
|
||||
indexes: [
|
||||
{
|
||||
name: "PRIMARY",
|
||||
unique: true,
|
||||
using: "BTREE",
|
||||
fields: [
|
||||
{ name: "id" },
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "authorId",
|
||||
using: "BTREE",
|
||||
fields: [
|
||||
{ name: "authorId" },
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "articleId",
|
||||
using: "BTREE",
|
||||
fields: [
|
||||
{ name: "articleId" },
|
||||
]
|
||||
},
|
||||
]
|
||||
}
|
||||
);
|
||||
|
||||
Comment.prototype.toJSONFor = function () {
|
||||
return {
|
||||
id: this.id,
|
||||
body: this.body
|
||||
};
|
||||
};
|
||||
|
||||
return Comment;
|
||||
};
|
||||
|
||||
module.exports = CommentModel;
|
||||
@@ -0,0 +1,63 @@
|
||||
const { DataTypes, Model } = require("sequelize");
|
||||
const sequelize = require("../../config/sequelize");
|
||||
|
||||
class Favorite extends Model { }
|
||||
|
||||
const FavoriteModel = () => {
|
||||
Favorite.init(
|
||||
{
|
||||
userId: {
|
||||
type: DataTypes.STRING(24),
|
||||
allowNull: false,
|
||||
primaryKey: true,
|
||||
references: {
|
||||
model: 'user',
|
||||
key: 'id'
|
||||
}
|
||||
},
|
||||
articleId: {
|
||||
type: DataTypes.INTEGER,
|
||||
allowNull: false,
|
||||
primaryKey: true,
|
||||
references: {
|
||||
model: 'article',
|
||||
key: 'id'
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
sequelize,
|
||||
tableName: 'favorite',
|
||||
timestamps: false,
|
||||
indexes: [
|
||||
{
|
||||
name: "PRIMARY",
|
||||
unique: true,
|
||||
using: "BTREE",
|
||||
fields: [
|
||||
{ name: "userId" },
|
||||
{ name: "articleId" },
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "articleId",
|
||||
using: "BTREE",
|
||||
fields: [
|
||||
{ name: "articleId" },
|
||||
]
|
||||
},
|
||||
]
|
||||
}
|
||||
);
|
||||
|
||||
Favorite.prototype.toJSONFor = function () {
|
||||
return {
|
||||
userId: this.userId,
|
||||
articleId: this.articleId
|
||||
};
|
||||
};
|
||||
|
||||
return Favorite;
|
||||
};
|
||||
|
||||
module.exports = FavoriteModel;
|
||||
@@ -0,0 +1,63 @@
|
||||
const { DataTypes, Model } = require("sequelize");
|
||||
const sequelize = require("../../config/sequelize");
|
||||
|
||||
class Follower extends Model { }
|
||||
|
||||
const FollowerModel = () => {
|
||||
Follower.init(
|
||||
{
|
||||
userId: {
|
||||
type: DataTypes.STRING(24),
|
||||
allowNull: false,
|
||||
primaryKey: true,
|
||||
references: {
|
||||
model: 'user',
|
||||
key: 'id'
|
||||
}
|
||||
},
|
||||
followerId: {
|
||||
type: DataTypes.STRING(24),
|
||||
allowNull: false,
|
||||
primaryKey: true,
|
||||
references: {
|
||||
model: 'user',
|
||||
key: 'id'
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
sequelize,
|
||||
tableName: 'follower',
|
||||
timestamps: false,
|
||||
indexes: [
|
||||
{
|
||||
name: "PRIMARY",
|
||||
unique: true,
|
||||
using: "BTREE",
|
||||
fields: [
|
||||
{ name: "userId" },
|
||||
{ name: "followerId" },
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "followerId",
|
||||
using: "BTREE",
|
||||
fields: [
|
||||
{ name: "followerId" },
|
||||
]
|
||||
},
|
||||
]
|
||||
}
|
||||
);
|
||||
|
||||
Follower.prototype.toJSONFor = function () {
|
||||
return {
|
||||
userId: this.userId,
|
||||
followerId: this.followerId
|
||||
};
|
||||
};
|
||||
|
||||
return Follower;
|
||||
};
|
||||
|
||||
module.exports = FollowerModel;
|
||||
@@ -0,0 +1,41 @@
|
||||
const { DataTypes, Model } = require("sequelize");
|
||||
const sequelize = require("../../config/sequelize");
|
||||
|
||||
class Tag extends Model { }
|
||||
|
||||
const TagModel = () => {
|
||||
Tag.init(
|
||||
{
|
||||
name: {
|
||||
type: DataTypes.STRING(255),
|
||||
allowNull: false,
|
||||
primaryKey: true
|
||||
}
|
||||
},
|
||||
{
|
||||
sequelize,
|
||||
tableName: 'tag',
|
||||
timestamps: true,
|
||||
indexes: [
|
||||
{
|
||||
name: "PRIMARY",
|
||||
unique: true,
|
||||
using: "BTREE",
|
||||
fields: [
|
||||
{ name: "name" },
|
||||
]
|
||||
},
|
||||
]
|
||||
}
|
||||
);
|
||||
|
||||
Tag.prototype.toJSONFor = function () {
|
||||
return {
|
||||
name: this.name
|
||||
};
|
||||
};
|
||||
|
||||
return Tag;
|
||||
};
|
||||
|
||||
module.exports = TagModel;
|
||||
@@ -0,0 +1,63 @@
|
||||
const { DataTypes, Model } = require("sequelize");
|
||||
const sequelize = require("../../config/sequelize");
|
||||
|
||||
class TagList extends Model { }
|
||||
|
||||
const TagListModel = () => {
|
||||
TagList.init(
|
||||
{
|
||||
articleId: {
|
||||
type: DataTypes.INTEGER,
|
||||
allowNull: false,
|
||||
primaryKey: true,
|
||||
references: {
|
||||
model: 'article',
|
||||
key: 'id'
|
||||
}
|
||||
},
|
||||
tagName: {
|
||||
type: DataTypes.STRING(255),
|
||||
allowNull: false,
|
||||
primaryKey: true,
|
||||
references: {
|
||||
model: 'tag',
|
||||
key: 'name'
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
sequelize,
|
||||
tableName: 'tagList',
|
||||
timestamps: false,
|
||||
indexes: [
|
||||
{
|
||||
name: "PRIMARY",
|
||||
unique: true,
|
||||
using: "BTREE",
|
||||
fields: [
|
||||
{ name: "articleId" },
|
||||
{ name: "tagName" },
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "tagName",
|
||||
using: "BTREE",
|
||||
fields: [
|
||||
{ name: "tagName" },
|
||||
]
|
||||
},
|
||||
]
|
||||
}
|
||||
);
|
||||
|
||||
TagList.prototype.toJSONFor = function () {
|
||||
return {
|
||||
articleId: this.articleId,
|
||||
tagName: this.tagName
|
||||
};
|
||||
};
|
||||
|
||||
return TagList;
|
||||
};
|
||||
|
||||
module.exports = TagListModel;
|
||||
@@ -0,0 +1,160 @@
|
||||
const { DataTypes, Model } = require("sequelize");
|
||||
var crypto = require('crypto');
|
||||
var jwt = require('jsonwebtoken'),
|
||||
secret = require('../../../../config').secret,
|
||||
session_lifetime = require('../../../../config').session_lifetime;
|
||||
|
||||
const sequelize = require("../../config/sequelize");
|
||||
|
||||
class User extends Model { }
|
||||
|
||||
const UserModel = () => {
|
||||
User.init(
|
||||
{
|
||||
id: {
|
||||
type: DataTypes.STRING(24),
|
||||
allowNull: false,
|
||||
primaryKey: true
|
||||
},
|
||||
email: {
|
||||
type: DataTypes.STRING(255),
|
||||
allowNull: false,
|
||||
unique: "email"
|
||||
},
|
||||
username: {
|
||||
type: DataTypes.STRING(255),
|
||||
allowNull: false,
|
||||
unique: "username"
|
||||
},
|
||||
firstname: {
|
||||
type: DataTypes.STRING(255),
|
||||
allowNull: true
|
||||
},
|
||||
lastname: {
|
||||
type: DataTypes.STRING(255),
|
||||
allowNull: true
|
||||
},
|
||||
bio: {
|
||||
type: DataTypes.TEXT,
|
||||
allowNull: true
|
||||
},
|
||||
image: {
|
||||
type: DataTypes.TEXT,
|
||||
allowNull: true
|
||||
},
|
||||
role: {
|
||||
type: DataTypes.STRING(255),
|
||||
allowNull: true
|
||||
},
|
||||
salt: {
|
||||
type: DataTypes.STRING(255),
|
||||
allowNull: false
|
||||
},
|
||||
hash: {
|
||||
type: DataTypes.TEXT,
|
||||
allowNull: false
|
||||
}
|
||||
},
|
||||
{
|
||||
sequelize,
|
||||
tableName: 'user',
|
||||
timestamps: true,
|
||||
indexes: [
|
||||
{
|
||||
name: "PRIMARY",
|
||||
unique: true,
|
||||
using: "BTREE",
|
||||
fields: [
|
||||
{ name: "id" },
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "email",
|
||||
unique: true,
|
||||
using: "BTREE",
|
||||
fields: [
|
||||
{ name: "email" },
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "username",
|
||||
unique: true,
|
||||
using: "BTREE",
|
||||
fields: [
|
||||
{ name: "username" },
|
||||
]
|
||||
},
|
||||
]
|
||||
}
|
||||
);
|
||||
|
||||
User.prototype.validPassword = function (password) {
|
||||
let hash = crypto.pbkdf2Sync(password, this.salt, 10000, 512, 'sha512').toString('hex');
|
||||
return this.hash === hash;
|
||||
};
|
||||
|
||||
User.prototype.setPassword = function (password) {
|
||||
this.salt = crypto.randomBytes(16).toString('hex');
|
||||
this.hash = crypto.pbkdf2Sync(password, this.salt, 10000, 512, 'sha512').toString('hex');
|
||||
};
|
||||
|
||||
User.prototype.generateJWT = function () {
|
||||
var today = new Date();
|
||||
var exp = new Date(today.getTime() + (session_lifetime * 1000));
|
||||
|
||||
return jwt.sign({
|
||||
id: this.id,
|
||||
username: this.username,
|
||||
exp: parseInt(exp.getTime() / 1000)
|
||||
}, secret, { algorithm: 'HS256' });
|
||||
};
|
||||
|
||||
User.prototype.toAuthJSON = function () {
|
||||
return {
|
||||
id: this.id,
|
||||
email: this.email,
|
||||
role: this.role,
|
||||
token: this.generateJWT(),
|
||||
firstname: this.firstname,
|
||||
lastname: this.lastname,
|
||||
/*phone: this.phone,
|
||||
licence: this.licence,
|
||||
poids: this.poids,*/
|
||||
username: this.username,
|
||||
image: this.image || '/assets/images/users/user.jpg',
|
||||
bg_image: this.bg_image || '/assets/images/users/bg_user.jpg'
|
||||
};
|
||||
};
|
||||
|
||||
User.prototype.toJSONFor = function () {
|
||||
return {
|
||||
id: this.id,
|
||||
email: this.email,
|
||||
username: this.username,
|
||||
firstname: this.firstname,
|
||||
lastname: this.lastname,
|
||||
bio: this.bio,
|
||||
image: this.image,
|
||||
role: this.role
|
||||
};
|
||||
};
|
||||
|
||||
User.prototype.toProfileJSONFor = function (user) {
|
||||
return {
|
||||
email: this.email,
|
||||
firstname: this.firstname,
|
||||
lastname: this.lastname,
|
||||
phone: this.phone,
|
||||
licence: this.licence,
|
||||
poids: this.poids,
|
||||
username: this.username,
|
||||
image: this.image || '/assets/images/users/user.jpg',
|
||||
bg_image: this.bg_image || '/assets/images/users/bg_user.jpg',
|
||||
following: user ? user.isFollowing(this.id) : false
|
||||
};
|
||||
};
|
||||
|
||||
return User;
|
||||
};
|
||||
|
||||
module.exports = UserModel;
|
||||
@@ -0,0 +1,65 @@
|
||||
var DataTypes = require("sequelize").DataTypes;
|
||||
var _Article = require("./Article");
|
||||
var _ArticleTag = require("./ArticleTag");
|
||||
var _Comment = require("./Comment");
|
||||
var _Favorite = require("./Favorite");
|
||||
var _Follower = require("./Follower");
|
||||
var _Tag = require("./Tag");
|
||||
var _TagList = require("./TagList");
|
||||
var _User = require("./User");
|
||||
|
||||
function initModels(sequelize) {
|
||||
var Article = _Article(sequelize, DataTypes);
|
||||
var ArticleTag = _ArticleTag(sequelize, DataTypes);
|
||||
var Comment = _Comment(sequelize, DataTypes);
|
||||
var Favorite = _Favorite(sequelize, DataTypes);
|
||||
var Follower = _Follower(sequelize, DataTypes);
|
||||
var Tag = _Tag(sequelize, DataTypes);
|
||||
var TagList = _TagList(sequelize, DataTypes);
|
||||
var User = _User(sequelize, DataTypes);
|
||||
|
||||
Article.belongsToMany(Tag, { as: 'tagNameTags', through: ArticleTag, foreignKey: "articleId", otherKey: "tagName" });
|
||||
Article.belongsToMany(Tag, { as: 'tagNameTagTagLists', through: TagList, foreignKey: "articleId", otherKey: "tagName" });
|
||||
Article.belongsToMany(User, { as: 'userIdUsers', through: Favorite, foreignKey: "articleId", otherKey: "userId" });
|
||||
Tag.belongsToMany(Article, { as: 'articleIdArticles', through: ArticleTag, foreignKey: "tagName", otherKey: "articleId" });
|
||||
Tag.belongsToMany(Article, { as: 'articleIdArticleTagLists', through: TagList, foreignKey: "tagName", otherKey: "articleId" });
|
||||
User.belongsToMany(Article, { as: 'articleIdArticleFavorites', through: Favorite, foreignKey: "userId", otherKey: "articleId" });
|
||||
User.belongsToMany(User, { as: 'followerIdUsers', through: Follower, foreignKey: "userId", otherKey: "followerId" });
|
||||
User.belongsToMany(User, { as: 'userIdUserFollowers', through: Follower, foreignKey: "followerId", otherKey: "userId" });
|
||||
ArticleTag.belongsTo(Article, { as: "article", foreignKey: "articleId"});
|
||||
Article.hasMany(ArticleTag, { as: "articleTags", foreignKey: "articleId"});
|
||||
Comment.belongsTo(Article, { as: "article", foreignKey: "articleId"});
|
||||
Article.hasMany(Comment, { as: "comments", foreignKey: "articleId"});
|
||||
Favorite.belongsTo(Article, { as: "article", foreignKey: "articleId"});
|
||||
Article.hasMany(Favorite, { as: "favorites", foreignKey: "articleId"});
|
||||
TagList.belongsTo(Article, { as: "article", foreignKey: "articleId"});
|
||||
Article.hasMany(TagList, { as: "tagLists", foreignKey: "articleId"});
|
||||
ArticleTag.belongsTo(Tag, { as: "tagNameTag", foreignKey: "tagName"});
|
||||
Tag.hasMany(ArticleTag, { as: "articleTags", foreignKey: "tagName"});
|
||||
TagList.belongsTo(Tag, { as: "tagNameTag", foreignKey: "tagName"});
|
||||
Tag.hasMany(TagList, { as: "tagLists", foreignKey: "tagName"});
|
||||
Article.belongsTo(User, { as: "author", foreignKey: "authorId"});
|
||||
User.hasMany(Article, { as: "articles", foreignKey: "authorId"});
|
||||
Comment.belongsTo(User, { as: "author", foreignKey: "authorId"});
|
||||
User.hasMany(Comment, { as: "comments", foreignKey: "authorId"});
|
||||
Favorite.belongsTo(User, { as: "user", foreignKey: "userId"});
|
||||
User.hasMany(Favorite, { as: "favorites", foreignKey: "userId"});
|
||||
Follower.belongsTo(User, { as: "user", foreignKey: "userId"});
|
||||
User.hasMany(Follower, { as: "followers", foreignKey: "userId"});
|
||||
Follower.belongsTo(User, { as: "follower", foreignKey: "followerId"});
|
||||
User.hasMany(Follower, { as: "followerFollowers", foreignKey: "followerId"});
|
||||
|
||||
return {
|
||||
Article,
|
||||
ArticleTag,
|
||||
Comment,
|
||||
Favorite,
|
||||
Follower,
|
||||
Tag,
|
||||
TagList,
|
||||
User,
|
||||
};
|
||||
}
|
||||
module.exports = initModels;
|
||||
module.exports.initModels = initModels;
|
||||
module.exports.default = initModels;
|
||||
Reference in New Issue
Block a user