424 lines
12 KiB
JavaScript
424 lines
12 KiB
JavaScript
const db = require("./model.js"),
|
|
expressLogging = require("express-logging"),
|
|
logger = require("logops")
|
|
Entities = require('html-entities').XmlEntities,
|
|
emojiRegex = require('emoji-regex');
|
|
|
|
const express = require("express");
|
|
const bodyParser = require("body-parser");
|
|
|
|
var app = express();
|
|
const entities = new Entities();
|
|
const emoRegex = emojiRegex();
|
|
|
|
app.use(expressLogging(logger));
|
|
app.use(
|
|
bodyParser.urlencoded({
|
|
extended: true
|
|
})
|
|
);
|
|
app.use(bodyParser.json());
|
|
app.listen(30300, '127.0.0.1', () => {
|
|
console.log("Server running on port 30300");
|
|
});
|
|
|
|
app.post("/v1/apptype", (req, res, next) => {
|
|
db.AppType.create({
|
|
name: req.body.name,
|
|
description: req.body.description,
|
|
dateCreated: new Date()
|
|
}).then(row => {
|
|
res.json({ code: 200, data: row });
|
|
});
|
|
});
|
|
|
|
app.get("/v1/apptype", (req, res, next) => {
|
|
var clause = { where: { dateDeleted: null } }
|
|
if (req.body.keyword) {
|
|
clause.where.name = { [db.Sequelize.Op.like]: '%' + req.body.keyword + '%' }
|
|
}
|
|
db.AppType.findAll(clause).then(rows => {
|
|
res.json({ code: 200, data: rows });
|
|
});
|
|
});
|
|
|
|
app.delete("/v1/apptype", (req, res, next) => {
|
|
db.AppType.update({ dateDeleted: new Date() }, { where: { id: { [db.Sequelize.Op.in]: req.body.types } } }).then(rows => {
|
|
res.json({ code: 200, data: rows });
|
|
});
|
|
});
|
|
|
|
app.put("/v1/apptype", (req, res, next) => {
|
|
console.log(req.body)
|
|
db.AppType.update({
|
|
name: req.body.name,
|
|
description: req.body.description,
|
|
dateUpdated: new Date()
|
|
}, {
|
|
where: { id: req.body.id }
|
|
}).then(rows => {
|
|
res.json({ code: 200, data: rows });
|
|
});
|
|
});
|
|
|
|
app.get("/v1/app", (req, res, next) => {
|
|
var clause = { where: { dateDeleted: null } }
|
|
if (req.body.typeId) {
|
|
clause.where.appType = req.body.typeId
|
|
}
|
|
if (req.body.keyword) {
|
|
clause.where.name = { [db.Sequelize.Op.like]: '%' + req.body.keyword + '%' }
|
|
}
|
|
db.App.findAll(clause).then(apps => {
|
|
res.json({ code: 200, data: apps });
|
|
});
|
|
});
|
|
|
|
app.post("/v1/app", (req, res, next) => {
|
|
db.App.create({
|
|
name: req.body.name,
|
|
appType: req.body.appType,
|
|
status: req.body.status,
|
|
developer: req.body.developer,
|
|
description: req.body.description,
|
|
dateCreated: new Date()
|
|
}).then(row => {
|
|
res.json({ code: 200, data: row });
|
|
});
|
|
});
|
|
|
|
app.put("/v1/app", (req, res, next) => {
|
|
db.App.update({
|
|
name: req.body.name,
|
|
appType: req.body.appType,
|
|
status: req.body.status,
|
|
developer: req.body.developer,
|
|
description: req.body.description,
|
|
dateUpdated: new Date()
|
|
}, {
|
|
where: { id: req.body.id }
|
|
}).then(rows => {
|
|
res.json({ code: 200, data: rows });
|
|
});
|
|
});
|
|
|
|
app.delete("/v1/app", (req, res, next) => {
|
|
db.App.update({ dateDeleted: new Date() }, { where: { id: { [db.Sequelize.Op.in]: req.body.apps } } }).then(rows => {
|
|
res.json({ code: 200, data: rows });
|
|
});
|
|
});
|
|
|
|
app.get("/v1/category", (req, res, next) => {
|
|
var clause = {}
|
|
if (req.body.id) {
|
|
clause.where = { id: { [db.Sequelize.Op.in]: req.body.id } }
|
|
} else {
|
|
clause.where = { dateDeleted: null, parent: 0 }
|
|
if (req.body.appId) {
|
|
clause.where.app = req.body.appId
|
|
}
|
|
if (req.body.parentId) {
|
|
clause.where.parent = req.body.parentId
|
|
}
|
|
if (req.body.type) {
|
|
clause.where.type = req.body.type
|
|
}
|
|
if (req.body.keyword) {
|
|
clause.where.name = { [db.Sequelize.Op.like]: '%' + req.body.keyword + '%' }
|
|
}
|
|
|
|
if (req.body.noparent) {
|
|
delete clause.where.parent;
|
|
}
|
|
}
|
|
db.Category.findAll(clause).then(categories => {
|
|
res.json({ code: 200, data: categories });
|
|
});
|
|
});
|
|
|
|
app.post("/v1/category", (req, res, next) => {
|
|
db.Category.create({
|
|
name: req.body.name,
|
|
app: req.body.app,
|
|
appType: req.body.appType,
|
|
type: req.body.type,
|
|
parent: req.body.parent,
|
|
image: req.body.image,
|
|
subCount: req.body.subCount,
|
|
videoCount: req.body.videoCount,
|
|
dateCreated: new Date()
|
|
}).then(row => {
|
|
db.Category.findOne({ where: { id: req.body.parent } }).then(row => {
|
|
row.subCount++;
|
|
row.save();
|
|
});
|
|
res.json({ code: 200, data: row });
|
|
});
|
|
});
|
|
|
|
app.delete("/v1/category", (req, res, next) => {
|
|
console.log(req.body)
|
|
db.Category.update({ dateDeleted: new Date() }, { where: { id: { [db.Sequelize.Op.in]: req.body.categories } } }).then(rows => {
|
|
res.json({ code: 200, data: rows });
|
|
});
|
|
});
|
|
|
|
app.put("/v1/category", (req, res, next) => {
|
|
console.log(req.body)
|
|
db.Category.update({
|
|
name: req.body.name,
|
|
app: req.body.app,
|
|
appType: req.body.appType,
|
|
type: req.body.type,
|
|
parent: req.body.parent,
|
|
image: req.body.image,
|
|
subCount: req.body.subCount,
|
|
videoCount: req.body.videoCount,
|
|
dateUpdated: new Date()
|
|
}, {
|
|
where: { id: req.body.id }
|
|
}).then(rows => {
|
|
res.json({ code: 200, data: rows });
|
|
});
|
|
});
|
|
|
|
app.get("/v1/developer", (req, res, next) => {
|
|
var clause = { where: { dateDeleted: null } }
|
|
if (req.body.keyword) {
|
|
clause.where.name = { [db.Sequelize.Op.like]: '%' + req.body.keyword + '%' }
|
|
}
|
|
db.Developer.findAll(clause).then(developers => {
|
|
res.json({ code: 200, data: developers });
|
|
});
|
|
});
|
|
|
|
app.post("/v1/developer", (req, res, next) => {
|
|
db.Developer.create({
|
|
name: req.body.name,
|
|
description: req.body.description,
|
|
dateCreated: new Date()
|
|
}).then(row => {
|
|
res.json({ code: 200, data: row });
|
|
});
|
|
});
|
|
|
|
app.delete("/v1/developer", (req, res, next) => {
|
|
console.log(req.body)
|
|
db.Developer.update({ dateDeleted: new Date() }, { where: { id: { [db.Sequelize.Op.in]: req.body.developers } } }).then(rows => {
|
|
res.json({ code: 200, data: rows });
|
|
});
|
|
});
|
|
|
|
app.put("/v1/developer", (req, res, next) => {
|
|
console.log(req.body)
|
|
db.Developer.update({
|
|
name: req.body.name,
|
|
description: req.body.description,
|
|
dateUpdated: new Date()
|
|
}, {
|
|
where: { id: req.body.id }
|
|
}).then(rows => {
|
|
res.json({ code: 200, data: rows });
|
|
});
|
|
});
|
|
|
|
app.post("/v1/video", (req, res, next) => {
|
|
console.log(req.body.videos);
|
|
rows = [];
|
|
req.body.videos.map((video, index) => {
|
|
rows.push({
|
|
code: video.id,
|
|
title: video.title,
|
|
description: video.description,
|
|
duration: video.duration,
|
|
dateCreated: new Date(),
|
|
viewCount: video.viewCount,
|
|
likeCount: video.likeCount,
|
|
commentCount: video.commentCount,
|
|
app: video.app,
|
|
category: video.category,
|
|
artist: video.artist
|
|
});
|
|
});
|
|
|
|
db.Video.bulkCreate(rows)
|
|
.then(row => {
|
|
|
|
})
|
|
.catch(() => {
|
|
|
|
});
|
|
|
|
db.VideoCategory.bulkCreate(rows, { ignoreDuplicates: true })
|
|
.then(row => {
|
|
res.json({ code: 200, data: row.length });
|
|
})
|
|
.catch(() => {
|
|
res.json({ code: 500 });
|
|
});
|
|
});
|
|
|
|
app.get("/v1/video", (req, res, next) => {
|
|
Object.assign(req.body, req.query)
|
|
console.log(req.body)
|
|
var clause;
|
|
if (req.body.videos) {
|
|
clause = { where: { code: { [db.Sequelize.Op.in]: req.body.videos } } }
|
|
db.Video.findAll(clause).then(
|
|
videos => {
|
|
res.json({ code: 200, data: videos });
|
|
}
|
|
);
|
|
} else {
|
|
clause = {
|
|
attributes: ['app', 'category', 'id', ['dateCreated', 'vcDateCreated']],
|
|
where: {},
|
|
include: [
|
|
{
|
|
model: db.Video,
|
|
as: 'v',
|
|
where: {}
|
|
},
|
|
{
|
|
model: db.Category,
|
|
as: 'c',
|
|
attributes: ['name']
|
|
},
|
|
{
|
|
model: db.App,
|
|
as: 'a',
|
|
attributes: ['name']
|
|
}
|
|
]
|
|
}
|
|
if (req.body.appid) {
|
|
clause.where.app = req.body.appid
|
|
}
|
|
if (req.body.category) {
|
|
clause.where.category = req.body.category
|
|
}
|
|
if (req.body.keyword) {
|
|
clause.include[0].where.title = { [db.Sequelize.Op.like]: '%' + req.body.keyword.replace(/[\n\r]+/g, '').replace(' ', '%') + '%' }
|
|
}
|
|
if (req.body.videoCategory) {
|
|
clause.where.id = { [db.Sequelize.Op.in]: req.body.videoCategory }
|
|
}
|
|
|
|
if (req.body.sort) {
|
|
if (req.body.sort == 'categoryName') {
|
|
clause.order = db.Sequelize.literal('c.name ' + req.body.order)
|
|
} else if (req.body.sort == 'appname') {
|
|
clause.order = db.Sequelize.literal('a.name ' + req.body.order)
|
|
} else if (req.body.sort == 'title') {
|
|
clause.order = db.Sequelize.literal('v.title ' + req.body.order)
|
|
} else if (req.body.sort == 'code') {
|
|
clause.order = db.Sequelize.literal('v.code ' + req.body.order)
|
|
} else if (req.body.sort == 'duration') {
|
|
clause.order = db.Sequelize.literal('v.duration ' + req.body.order)
|
|
} else if (req.body.sort == 'viewCount') {
|
|
clause.order = db.Sequelize.literal('v.viewCount ' + req.body.order)
|
|
} else if (req.body.sort == 'likeCount') {
|
|
clause.order = db.Sequelize.literal('v.likeCount ' + req.body.order)
|
|
} else if (req.body.sort == 'commentCount') {
|
|
clause.order = db.Sequelize.literal('v.commentCount ' + req.body.order)
|
|
} else if (req.body.sort == 'vcDateCreated') {
|
|
clause.order = db.Sequelize.literal('video_category.dateCreated ' + req.body.order)
|
|
}
|
|
}
|
|
|
|
|
|
var totalCount = 1;
|
|
clause.attributes.push([db.Sequelize.fn('COUNT', db.Sequelize.col('video_category.id')), 'num'])
|
|
db.VideoCategory.findAll(clause).then(rows => {
|
|
totalCount = JSON.parse(JSON.stringify(rows))[0].num;
|
|
clause.attributes.pop()
|
|
if (req.body.limit) {
|
|
clause.offset = parseInt(req.body.offset)
|
|
clause.limit = parseInt(req.body.limit)
|
|
}
|
|
db.VideoCategory.findAll(clause).then(
|
|
videos => {
|
|
videos.map((video, i) => {
|
|
videos[i].v.title = entities.decode(videos[i].v.title);
|
|
videos[i].v.title = videos[i].v.title.replace(/(\\\u[\{0-9a-f\}]{4,6})+/g, function (match, contents, offset, input_string) {
|
|
var emoji = ''
|
|
var matchSplit = match.split('')
|
|
var i = 0
|
|
while (i < matchSplit.length) {
|
|
emoji = emoji + String.fromCharCode('0x' + matchSplit.slice(i, i + 6).join('').slice(2))
|
|
i = i + 6;
|
|
}
|
|
return emoji;
|
|
}
|
|
)
|
|
})
|
|
res.json({ code: 200, data: videos, total: totalCount });
|
|
}
|
|
);
|
|
})
|
|
}
|
|
});
|
|
|
|
app.delete("/v1/video", (req, res, next) => {
|
|
console.log(req.body)
|
|
db.VideoCategory.destroy({ where: { id: { [db.Sequelize.Op.in]: req.body.videos } } }).then(rows => {
|
|
res.json({ code: 200, data: rows });
|
|
});
|
|
});
|
|
|
|
app.put("/v1/video", (req, res, next) => {
|
|
var video = req.body;
|
|
db.Video.update({
|
|
title: video.title,
|
|
description: video.description,
|
|
duration: video.duration,
|
|
dateUpdated: new Date(),
|
|
viewCount: video.viewCount,
|
|
likeCount: video.likeCount,
|
|
commentCount: video.commentCount,
|
|
app: video.app,
|
|
category: video.category
|
|
}, {
|
|
where: { id: req.body.id }
|
|
}).then(rows => {
|
|
res.json({ code: 200, data: rows });
|
|
});
|
|
});
|
|
|
|
app.post("/v1/video/category", (req, res, next) => {
|
|
var insertRows = []
|
|
req.body.videos.map((video, index) => {
|
|
db.VideoCategory.findAll({ where: { code: video.id, category: video.category } }).then(rows => {
|
|
if (!rows.length) {
|
|
db.VideoCategory.create({
|
|
code: video.id,
|
|
dateCreated: new Date(),
|
|
app: video.app,
|
|
category: video.category
|
|
}).then(row => {
|
|
insertRows.push(row);
|
|
});
|
|
}
|
|
});
|
|
});
|
|
res.json({ code: 200, data: insertRows.length });
|
|
});
|
|
|
|
|
|
app.get("/v1/video/category", (req, res, next) => {
|
|
var clause = { where: {} }
|
|
if (req.body.app) {
|
|
clause.where.app = req.body.app
|
|
}
|
|
if (req.body.category) {
|
|
clause.where.category = { [db.Sequelize.Op.like]: req.body.category }
|
|
}
|
|
if (req.body.code) {
|
|
clause.where.code = { [db.Sequelize.Op.like]: req.body.code }
|
|
}
|
|
db.VideoCategory.findAll(clause).then(
|
|
VideoCategory => {
|
|
res.json({ code: 200, data: VideoCategory });
|
|
}
|
|
);
|
|
}); |