Skip to content
Snippets Groups Projects
Commit dfd10d06 authored by paultranvan's avatar paultranvan
Browse files

fix: Avoid duplicates

parent 10cf73ec
No related branches found
No related tags found
No related merge requests found
......@@ -57,7 +57,8 @@ async function start(fields) {
try {
/* Fetch new trips from the start date and save them in geojson doctype */
const lastSavedTripDate = await fetchAndSaveTrips(token, startDate, {
excludeFirst: !firstRun
excludeFirst: !firstRun,
accountId: this.accountId
})
if (lastSavedTripDate) {
log('info', `Save last trip date : ${lastSavedTripDate}`)
......
......@@ -7,7 +7,10 @@ const {
getServerCollectionFromDate,
getTripsForDay
} = require('./trace-requests')
const { saveTrip, updateTripsWithManualEntries } = require('./timeseries.js')
const {
saveTripForAccount,
updateTripsWithManualEntries
} = require('./timeseries.js')
function filterTripsByDate(trips, tripStartDates) {
return trips.filter(trip => {
......@@ -26,7 +29,7 @@ function filterTripsByDate(trips, tripStartDates) {
module.exports.fetchAndSaveTrips = async function(
token,
startDate,
{ excludeFirst = true }
{ excludeFirst = true, accountId }
) {
/* Extract the days having saved trips */
log('info', `Fetch trips metadata from ${startDate.toISOString()}`)
......@@ -59,7 +62,7 @@ module.exports.fetchAndSaveTrips = async function(
/* Save the trips in database */
const savePromises = tripsToSave.map(async trip => {
return new Promise(resolve => resolve(saveTrip(trip)))
return new Promise(resolve => resolve(saveTripForAccount(accountId, trip)))
})
log('info', `Save ${savePromises.length} trips`)
await Promise.all(savePromises)
......
......@@ -25,8 +25,20 @@ async function findSavedTripByDates(startDate, endDate) {
return trips.data.length > 0 ? trips.data[0] : null
}
async function isTripInDatabaseForAccount(accountId, trip) {
const startDate = trip.properties.start_fmt_time
const endDate = trip.properties.end_fmt_time
const tripInDb = await findSavedTripByDates(startDate, endDate)
return tripInDb && tripInDb.cozyMetadata.sourceAccount === accountId
}
// TODO: use saveTimeSeries from cozy-client models
const saveTrip = async function(trip) {
const saveTripForAccount = async function(accountId, trip) {
const tripInDb = await isTripInDatabaseForAccount(accountId, trip)
if (tripInDb) {
// Avoid duplicates for the same account
return
}
const startDate = trip.properties.start_fmt_time
const endDate = trip.properties.end_fmt_time
const timeserie = {
......@@ -60,6 +72,6 @@ async function updateTripsWithManualEntries(manualEntries, { entryKey }) {
}
module.exports = {
saveTrip,
saveTripForAccount,
updateTripsWithManualEntries
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment