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