feat: ajout de l'extension disallow-votes
This commit is contained in:
@@ -0,0 +1,3 @@
|
|||||||
|
.DS_Store
|
||||||
|
node_modules
|
||||||
|
dist
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"name": "disallow-votes",
|
||||||
|
"description": "Interdit les votes sur des versions ayant plus de 3 jours",
|
||||||
|
"icon": "extension",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"keywords": [
|
||||||
|
"directus",
|
||||||
|
"directus-extension",
|
||||||
|
"directus-extension-hook"
|
||||||
|
],
|
||||||
|
"type": "module",
|
||||||
|
"files": [
|
||||||
|
"dist"
|
||||||
|
],
|
||||||
|
"directus:extension": {
|
||||||
|
"type": "hook",
|
||||||
|
"path": "dist/index.js",
|
||||||
|
"source": "src/index.js",
|
||||||
|
"host": "^10.10.0"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"build": "directus-extension build",
|
||||||
|
"dev": "directus-extension build -w --no-minify",
|
||||||
|
"link": "directus-extension link"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@directus/extensions-sdk": "12.1.4"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
export default ({filter}) => {
|
||||||
|
const checkVersionAge = async (versionId, database) => {
|
||||||
|
if (!versionId) {
|
||||||
|
throw new Error('L’identifiant de la version est manquant.')
|
||||||
|
}
|
||||||
|
|
||||||
|
const version = await database('directus_versions')
|
||||||
|
.select('date_created')
|
||||||
|
.where({id: versionId })
|
||||||
|
.first()
|
||||||
|
|
||||||
|
if (!version) {
|
||||||
|
throw new Error('Version non trouvée.')
|
||||||
|
}
|
||||||
|
|
||||||
|
const createdAt = new Date(version.date_created)
|
||||||
|
const threeDaysAgo = new Date(Date.now() - 3 * 24 * 60 * 60 * 1000)
|
||||||
|
|
||||||
|
if (createdAt < threeDaysAgo) {
|
||||||
|
throw new Error(
|
||||||
|
'Le vote n’est plus possible après 3 jours de la création de la version.'
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
filter('items.create', async (input, {collection}, {database}) => {
|
||||||
|
if (collection === 'votes') {
|
||||||
|
await checkVersionAge(input.content_version_id, database)
|
||||||
|
}
|
||||||
|
return input
|
||||||
|
})
|
||||||
|
|
||||||
|
filter('items.update', async (input, {collection}, {database}) => {
|
||||||
|
if (collection === 'votes') {
|
||||||
|
await checkVersionAge(input.content_version_id, database)
|
||||||
|
}
|
||||||
|
return input
|
||||||
|
})
|
||||||
|
|
||||||
|
filter('items.delete', async (input, {collection}, {database}) => {
|
||||||
|
if (collection === 'votes') {
|
||||||
|
const voteId = input[0]
|
||||||
|
|
||||||
|
if (!voteId) {
|
||||||
|
throw new Error('L’identifiant du vote est manquant.')
|
||||||
|
}
|
||||||
|
|
||||||
|
const vote = await database('votes')
|
||||||
|
.select('content_version_id')
|
||||||
|
.where({id: voteId })
|
||||||
|
.first()
|
||||||
|
|
||||||
|
if (!vote) {
|
||||||
|
throw new Error('Vote non trouvé.')
|
||||||
|
}
|
||||||
|
|
||||||
|
await checkVersionAge(vote.content_version_id, database)
|
||||||
|
}
|
||||||
|
return input
|
||||||
|
})
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user