Skip to content

Commit

Permalink
Merge pull request #142 from coworking-metz/trail-day-free
Browse files Browse the repository at this point in the history
Trail day is actually free
gfra54 authored Jan 14, 2025
2 parents 40b378f + 2feb2be commit d1a84c2
Showing 4 changed files with 50 additions and 12 deletions.
6 changes: 5 additions & 1 deletion lib/api.js
Original file line number Diff line number Diff line change
@@ -246,7 +246,11 @@ export async function updatePresence(req, res) {
throw createHttpError(404, 'Member not found')
}

await Activity.updateMemberActivity(userId, date, value)
const user = await Member.getUserById(userId)
const {trialDay} = user
const overrideValue = trialDay && trialDay === date ? 0 : value

await Activity.updateMemberActivity(userId, date, value, overrideValue)

// Mise à jour de la balance de tickets
await Member.recomputeBalance(userId)
11 changes: 8 additions & 3 deletions lib/models/activity.js
Original file line number Diff line number Diff line change
@@ -22,12 +22,12 @@ export async function getMemberActivity(memberId) {

return activity.map(item => ({
date: item.date,
value: item.value,
value: item.overrideValue ?? item.value,
type: isPresenceDuringAbo(item.date, abos) ? 'subscription' : 'ticket'
}))
}

export async function updateMemberActivity(memberId, date, value) {
export async function updateMemberActivity(memberId, date, value, overrideValue = null) {
if (![0, 0.5, 1].includes(value)) {
throw createHttpError(400, 'Invalid value')
}
@@ -41,9 +41,14 @@ export async function updateMemberActivity(memberId, date, value) {
return
}

const set = {value}
if (overrideValue !== null && overrideValue !== value) {
set.overrideValue = overrideValue
}

await mongo.db.collection('member_activity').updateOne(
{member: memberId, date},
{$set: {value}},
{$set: set},
{upsert: true}
)
}
11 changes: 7 additions & 4 deletions lib/models/member.js
Original file line number Diff line number Diff line change
@@ -120,7 +120,7 @@ export async function syncWithWordpress(memberId) {
throw new Error(`Unable to sync ${memberId}: WP user ${user.wpUserId} not found`)
}

const {email, first_name: firstName, last_name: lastName, acf: {date_naissance: birthDate}} = wpUser
const {email, first_name: firstName, last_name: lastName, trialDay, acf: {date_naissance: birthDate}} = wpUser

await mongo.db.collection('users').updateOne(
{_id: memberId},
@@ -129,7 +129,8 @@ export async function syncWithWordpress(memberId) {
email,
firstName,
lastName,
birthDate
birthDate,
trialDay
}
}
)
@@ -159,6 +160,7 @@ export async function reconcileWithWordpressId(wpUserId) {
email,
first_name: firstName,
last_name: lastName,
trialDay,
acf: {date_naissance: birthDate}
} = await getWpUser(wpUserId)

@@ -175,15 +177,16 @@ export async function reconcileWithWordpressId(wpUserId) {
email,
firstName,
lastName,
birthDate
birthDate,
trialDay
}
}
)
return user._id
}

// Finally, create a new user
user = await createUser({wpUserId, firstName, lastName, birthDate, email})
user = await createUser({wpUserId, firstName, lastName, email, birthDate, trialDay})
return user._id
}

34 changes: 30 additions & 4 deletions scripts/recompute-balances.js
Original file line number Diff line number Diff line change
@@ -1,16 +1,42 @@
#!/usr/bin/env node

/**
* This script recalculates the balances of members
* If the `--membersIds` argument is provided, the script will use the specified member IDs.
* Otherwise, it retrieves all unique member IDs from the database. After processing,
* it logs each member's ID and balance
*
* Usage:
* node script.js [--membersIds=id1,id2,id3]
*
*/

import 'dotenv/config.js'
import process from 'node:process'

import mongo from '../lib/util/mongo.js'
import * as Member from '../lib/models/member.js'

await mongo.connect()
const memberIds = await mongo.db.collection('users').distinct('_id')

for (const memberId of memberIds) {
const args = process.argv.slice(2)

const memberIdsArg = args.find(arg => arg.startsWith('--membersIds='))
let memberIds = false
// eslint-disable-next-line unicorn/prefer-ternary
if (memberIdsArg) {
memberIds = memberIdsArg.split('=')[1].split(',').map(id => id.trim())
} else {
memberIds = await mongo.db.collection('users').distinct('_id')
}

if (memberIds) {
// Process each member ID
for (const memberId of memberIds) {
/* eslint-disable-next-line no-await-in-loop */
const balance = await Member.recomputeBalance(memberId)
console.log(`${memberId} : ${balance}`)
const balance = await Member.recomputeBalance(memberId)
console.log(`${memberId} : ${balance}`)
}
}

console.log('Completed!')

0 comments on commit d1a84c2

Please sign in to comment.