feat: ajout de l'extension disallow-votes

This commit is contained in:
2024-12-17 12:34:42 +04:00
parent 67f8c565cc
commit 90f07c68db
4 changed files with 5107 additions and 0 deletions
@@ -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('Lidentifiant 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 nest 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('Lidentifiant 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
})
}