Bloquer votes sur versions obsolètes
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
export default ({filter}) => {
|
export default ({filter}, {services}) => {
|
||||||
const checkVersionAge = async (versionId, database) => {
|
const checkVersionValidity = async (versionId, database, schema) => {
|
||||||
if (!versionId) {
|
if (!versionId) {
|
||||||
throw new Error('L’identifiant de la version est manquant.')
|
throw new Error('L’identifiant de la version est manquant.')
|
||||||
}
|
}
|
||||||
@@ -13,6 +13,7 @@ export default ({filter}) => {
|
|||||||
throw new Error('Version non trouvée.')
|
throw new Error('Version non trouvée.')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check if version is older than 3 days
|
||||||
const createdAt = new Date(version.date_created)
|
const createdAt = new Date(version.date_created)
|
||||||
const threeDaysAgo = new Date(Date.now() - 3 * 24 * 60 * 60 * 1000)
|
const threeDaysAgo = new Date(Date.now() - 3 * 24 * 60 * 60 * 1000)
|
||||||
|
|
||||||
@@ -21,23 +22,43 @@ export default ({filter}) => {
|
|||||||
'Le vote n’est plus possible après 3 jours de la création de la version.'
|
'Le vote n’est plus possible après 3 jours de la création de la version.'
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check if version is outdated (has been superseded by a promoted version)
|
||||||
|
try {
|
||||||
|
const {VersionsService} = services
|
||||||
|
const versionsService = new VersionsService({schema, knex: database})
|
||||||
|
const comparison = await versionsService.compare(versionId)
|
||||||
|
|
||||||
|
if (comparison && comparison.outdated === true) {
|
||||||
|
throw new Error(
|
||||||
|
'Le vote n’est plus possible sur une version obsolète.'
|
||||||
|
)
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
// If it's our custom error, rethrow it
|
||||||
|
if (error.message === 'Le vote n’est plus possible sur une version obsolète.') {
|
||||||
|
throw error
|
||||||
|
}
|
||||||
|
// Otherwise, log and continue (don't block vote if comparison fails)
|
||||||
|
console.warn('Could not check version outdated status:', error.message)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
filter('items.create', async (input, {collection}, {database}) => {
|
filter('items.create', async (input, {collection}, {database, schema}) => {
|
||||||
if (collection === 'votes') {
|
if (collection === 'votes') {
|
||||||
await checkVersionAge(input.content_version_id, database)
|
await checkVersionValidity(input.content_version_id, database, schema)
|
||||||
}
|
}
|
||||||
return input
|
return input
|
||||||
})
|
})
|
||||||
|
|
||||||
filter('items.update', async (input, {collection}, {database}) => {
|
filter('items.update', async (input, {collection}, {database, schema}) => {
|
||||||
if (collection === 'votes') {
|
if (collection === 'votes') {
|
||||||
await checkVersionAge(input.content_version_id, database)
|
await checkVersionValidity(input.content_version_id, database, schema)
|
||||||
}
|
}
|
||||||
return input
|
return input
|
||||||
})
|
})
|
||||||
|
|
||||||
filter('items.delete', async (input, {collection}, {database}) => {
|
filter('items.delete', async (input, {collection}, {database, schema}) => {
|
||||||
if (collection === 'votes') {
|
if (collection === 'votes') {
|
||||||
const voteId = input[0]
|
const voteId = input[0]
|
||||||
|
|
||||||
@@ -54,7 +75,7 @@ export default ({filter}) => {
|
|||||||
throw new Error('Vote non trouvé.')
|
throw new Error('Vote non trouvé.')
|
||||||
}
|
}
|
||||||
|
|
||||||
await checkVersionAge(vote.content_version_id, database)
|
await checkVersionValidity(vote.content_version_id, database, schema)
|
||||||
}
|
}
|
||||||
return input
|
return input
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user