Bloquer votes sur versions obsolètes
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
export default ({filter}) => {
|
||||
const checkVersionAge = async (versionId, database) => {
|
||||
export default ({filter}, {services}) => {
|
||||
const checkVersionValidity = async (versionId, database, schema) => {
|
||||
if (!versionId) {
|
||||
throw new Error('L’identifiant de la version est manquant.')
|
||||
}
|
||||
@@ -13,6 +13,7 @@ export default ({filter}) => {
|
||||
throw new Error('Version non trouvée.')
|
||||
}
|
||||
|
||||
// Check if version is older than 3 days
|
||||
const createdAt = new Date(version.date_created)
|
||||
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.'
|
||||
)
|
||||
}
|
||||
|
||||
// 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') {
|
||||
await checkVersionAge(input.content_version_id, database)
|
||||
await checkVersionValidity(input.content_version_id, database, schema)
|
||||
}
|
||||
return input
|
||||
})
|
||||
|
||||
filter('items.update', async (input, {collection}, {database}) => {
|
||||
filter('items.update', async (input, {collection}, {database, schema}) => {
|
||||
if (collection === 'votes') {
|
||||
await checkVersionAge(input.content_version_id, database)
|
||||
await checkVersionValidity(input.content_version_id, database, schema)
|
||||
}
|
||||
return input
|
||||
})
|
||||
|
||||
filter('items.delete', async (input, {collection}, {database}) => {
|
||||
filter('items.delete', async (input, {collection}, {database, schema}) => {
|
||||
if (collection === 'votes') {
|
||||
const voteId = input[0]
|
||||
|
||||
@@ -54,7 +75,7 @@ export default ({filter}) => {
|
||||
throw new Error('Vote non trouvé.')
|
||||
}
|
||||
|
||||
await checkVersionAge(vote.content_version_id, database)
|
||||
await checkVersionValidity(vote.content_version_id, database, schema)
|
||||
}
|
||||
return input
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user