Bloquer votes sur versions obsolètes

This commit is contained in:
2026-01-04 13:04:10 +04:00
parent 5595587c6f
commit 6a9717008b
@@ -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('Lidentifiant de la version est manquant.') throw new Error('Lidentifiant 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 nest plus possible après 3 jours de la création de la version.' 'Le vote nest 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 nest plus possible sur une version obsolète.'
)
}
} catch (error) {
// If it's our custom error, rethrow it
if (error.message === 'Le vote nest 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
}) })