modification articles for articles evaluation and comments ready for Peter
This commit is contained in:
parent
871f476794
commit
57d7301800
15
apxtri/models/Articles.js
Normal file
15
apxtri/models/Articles.js
Normal file
@ -0,0 +1,15 @@
|
||||
const fs = require(`fs-extra`);
|
||||
const mustache = require(`mustache`);
|
||||
const path = require(`path`);
|
||||
const dayjs = require(`dayjs`);
|
||||
const Notifications = require(`./Notifications.js`);
|
||||
const Odmdb = require(`./Odmdb.js`);
|
||||
const Checkjson = require(`./Checkjson`);
|
||||
const conf = require(`../../objects/tribes/itm/adminapi.json`);
|
||||
const currentmod = "Articles";
|
||||
const log = conf.api.activelog.includes(currentmod);
|
||||
|
||||
|
||||
const Articles={}
|
||||
|
||||
module.exports=Articles;
|
86
apxtri/routes/articles.js
Normal file
86
apxtri/routes/articles.js
Normal file
@ -0,0 +1,86 @@
|
||||
const fs = require(`fs-extra`);
|
||||
const path = require(`path`);
|
||||
const express = require(`express`);
|
||||
// Middlewares
|
||||
const checkHeaders = require(`../middlewares/checkHeaders`);
|
||||
const isAuthenticated = require(`../middlewares/isAuthenticated`);
|
||||
// Classes
|
||||
const Articles = require(`../models/Articles`);
|
||||
|
||||
const conf = require(`../../../adminapi/objects/tribes/itm/adminapi.json`);
|
||||
const currentmod = "Articles";
|
||||
const log = conftrib.activelog.includes(currentmod);
|
||||
|
||||
const router = express.Router();
|
||||
|
||||
/**
|
||||
* @api {GET} /adminapi/articles/evaluation/:tribe/:articleid/:evaluation -set article evaluation
|
||||
* @apiName articleevaluation
|
||||
* @apiGroup Articles
|
||||
* @apiDescription Get evaluation about an articleid
|
||||
*
|
||||
* @apiParam {string} tribe an existing tribe where articles exist
|
||||
* @apiParam {string} articleid an existing articleid in tribe/objects/articles/itm
|
||||
* @apiParam {string} evaluation a value from 0 to 4 or follow
|
||||
*
|
||||
* @apiSuccess {object} successfull
|
||||
* @apiSuccessExample {json} successfullmessage
|
||||
* HTTP/1.1 200 OK
|
||||
* {"status":200, "ref":"Articles", "msg":"evaluationsaved", "data":{article}}
|
||||
*
|
||||
* @apiError {object} notfound
|
||||
* @apiErrorexampleExample {json} notfound
|
||||
* HTTP/1.1 200 OK
|
||||
* {"status":404, "ref":"Articles", "msg":"notfound", "data":{articleid}}
|
||||
*
|
||||
*/
|
||||
router.get(
|
||||
"/evaluation/:tribe/:articleid/:evaluation",
|
||||
checkHeaders,
|
||||
async (req, res) => {
|
||||
// @todo
|
||||
// Check if tribe/objects/articles/articleid exist
|
||||
// if evaluation between 0 and 4 then update article propertie "articleevaluations" by adding alias:evaluation if alias !=anonymous, if anonymous then add uuid:evaluation
|
||||
// recalculate articlevalue with an average of all evaluation
|
||||
// if evaluatiopn == follow then add alias to article.followupdate
|
||||
res.status(200).json({
|
||||
status: 200,
|
||||
ref: "Articles",
|
||||
msg: "evaluationsaved",
|
||||
data: { article: req.params.articleid },
|
||||
});
|
||||
}
|
||||
);
|
||||
|
||||
/**
|
||||
* @api {post} adminapi/articles/comments - pagan Post
|
||||
* @apiName addcomments
|
||||
* @apiGroup Articles
|
||||
* @apiDescription
|
||||
* Add a comments to an articles or to another comments
|
||||
* @apiBody {string} [articleid] concern by the comment
|
||||
* @apiBody {string} [tribe] where the articleid is store
|
||||
* @apiBody {string} [comment] the comment text
|
||||
* @apiBody {string} [commentanswer] the position in a comment list in case of answer to a previous comment
|
||||
*
|
||||
* @apiError {json} articleNotfound the tribe/objects/articles/itm does not exist
|
||||
* @apiErrorExample {json}
|
||||
* HTTP/1.1 404 Not Found
|
||||
{"status":404,"ref":"Articles","msg":"articleidnotfound","data":{}}
|
||||
*
|
||||
* @apiSuccess {object}
|
||||
* @apiSuccessExample {json} Success-Response:
|
||||
* HTTP/1.1 200 OK
|
||||
* {"status":200, "ref":"Articles", "msg":"commentsaved", "data":{}}
|
||||
*
|
||||
*/
|
||||
router.post("/comments", checkHeaders, isAuthenticated, async (req, res) => {
|
||||
console.log('articles comment todo')
|
||||
res.status(200).json({
|
||||
status: 200,
|
||||
ref: "Articles",
|
||||
msg: "commentsaved",
|
||||
data: {},
|
||||
});
|
||||
});
|
||||
module.exports = router;
|
224
schema/articles.json
Normal file
224
schema/articles.json
Normal file
@ -0,0 +1,224 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "/schema/articles",
|
||||
"title": "Article",
|
||||
"description": "Way to store data about articles",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"articleid": {
|
||||
"title": "Unique identification",
|
||||
"description": "A unique uuid string identifying an article",
|
||||
"type": "string",
|
||||
"format": "uuid"
|
||||
},
|
||||
"title": {
|
||||
"title": " Article title for SEO",
|
||||
"description": "Use to create a url if needed",
|
||||
"type": "string"
|
||||
},
|
||||
"description": {
|
||||
"title": "Description for SEO",
|
||||
"type": "string"
|
||||
},
|
||||
"imgseo": {
|
||||
"title": "Image for SEO",
|
||||
"type": "string",
|
||||
"format": "url"
|
||||
},
|
||||
"url": {
|
||||
"type": "string",
|
||||
"format": "url",
|
||||
"comment": "A web access of this article public or private"
|
||||
},
|
||||
"author": {
|
||||
"title": "Auteur",
|
||||
"type": "string",
|
||||
"comment": "Can be different than owner"
|
||||
},
|
||||
"email": {
|
||||
"title": "To contact author",
|
||||
"format": "email",
|
||||
"comment": "Hide to public but to be aware of a comment "
|
||||
},
|
||||
"owner": {
|
||||
"title": "Owner of this article",
|
||||
"description": "For accessright purpose this is always equal as alias",
|
||||
"type": "string"
|
||||
},
|
||||
"dt_create": {
|
||||
"title": "Creation date",
|
||||
"type": "string",
|
||||
"format": "date-time"
|
||||
},
|
||||
"dt_update": {
|
||||
"type": "string",
|
||||
"format": "date-time"
|
||||
},
|
||||
"dt_publish": {
|
||||
"type": "string",
|
||||
"format": "date-time"
|
||||
},
|
||||
"manualkeywords": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"tips",
|
||||
"news",
|
||||
"tutorial"
|
||||
]
|
||||
}
|
||||
},
|
||||
"autokeywords": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"articleevaluations": {
|
||||
"title": "key is an alias or uuid and value is an evaluation from 0 to 4",
|
||||
"type": "object",
|
||||
"patternProperties": {
|
||||
"*": {
|
||||
"title": "evaluation 0 dislike 4 like",
|
||||
"type": "integer",
|
||||
"minimum": 0,
|
||||
"maximum": 4
|
||||
}
|
||||
},
|
||||
"articlevalue": {
|
||||
"type": "float",
|
||||
"minimum": 0,
|
||||
"maximum": 4
|
||||
},
|
||||
"followupdate": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"title": "alias",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"comments": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"comments": {
|
||||
"type": "string",
|
||||
"maxLength": 250
|
||||
},
|
||||
"dt_create": {
|
||||
"title": "Creation date",
|
||||
"type": "string",
|
||||
"format": "date-time"
|
||||
},
|
||||
"alias": {
|
||||
"type": "string"
|
||||
},
|
||||
"commenthash": {
|
||||
"type": "string"
|
||||
},
|
||||
"answerto": {
|
||||
"type": "integer",
|
||||
"title": "position of the comments of this response comment"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"publiccontent": {
|
||||
"type": "string"
|
||||
},
|
||||
"privatecontent": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"articleid",
|
||||
"owner",
|
||||
"title",
|
||||
"description"
|
||||
],
|
||||
"additionalProperties": true,
|
||||
"apxref": [],
|
||||
"apxid": "articleid",
|
||||
"apxuniquekey": [
|
||||
"articleid"
|
||||
],
|
||||
"apxidx": [
|
||||
{
|
||||
"name": "lst_articleid",
|
||||
"type": "array",
|
||||
"keyval": "articleid"
|
||||
},
|
||||
{
|
||||
"name": "lst_author",
|
||||
"type": "array",
|
||||
"keyval": "author"
|
||||
},
|
||||
{
|
||||
"name": "articleid",
|
||||
"type": "view",
|
||||
"keyval": "articleid",
|
||||
"objkey": [
|
||||
"articleid",
|
||||
"title",
|
||||
"description",
|
||||
"imgseo",
|
||||
"url",
|
||||
"author",
|
||||
"dt_create",
|
||||
"dt_update",
|
||||
"dt_publish",
|
||||
"manualkeywords",
|
||||
"autokeywords"
|
||||
],
|
||||
"filter": ""
|
||||
},
|
||||
{
|
||||
"name": "author_articleid",
|
||||
"type": "distribution",
|
||||
"keyval": "author",
|
||||
"filter": ""
|
||||
},
|
||||
{
|
||||
"name": "manualkeywords_articleid",
|
||||
"type": "distribution",
|
||||
"keyval": "manualkeywords",
|
||||
"filter": ""
|
||||
}
|
||||
],
|
||||
"apxaccessrights": {
|
||||
"owner": {
|
||||
"C": [],
|
||||
"D": [],
|
||||
"R": [],
|
||||
"U": [
|
||||
"title",
|
||||
"description",
|
||||
"imgseo",
|
||||
"url",
|
||||
"author",
|
||||
"dt_publish",
|
||||
"manualkeywords",
|
||||
"publiccontent",
|
||||
"privatecontent"
|
||||
]
|
||||
},
|
||||
"persons": {
|
||||
"R": [
|
||||
"articleid",
|
||||
"title",
|
||||
"description",
|
||||
"imgseo",
|
||||
"url",
|
||||
"author",
|
||||
"dt_publish",
|
||||
"manualkeywords",
|
||||
"publiccontent",
|
||||
"comments",
|
||||
"articlevalue"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user