bulkInsert returning undefined

Hi all,

I have the following bits of code for a bulkInsert into my collection but it keeps returning “undefined”. I’m pretty sure the “events” array is good as I’ve checked it in the console and I can’t see anything odd. It has a length of 409 which is under the 1000 item limit for a bulkInsert too. Weirdly, bulkInsert was working earlier but I must have changed something in the code as it’s seemingly randomly stopped working. Either that or the database is doing something odd that I have no understanding of?

Please note I am not a pro, just trying to improve a local sports club’s website!

This is the function for the bulkInsert:

export function button73_click(event) {
	getAllResults()
  .then(async (events)=>{
  
		console.log(events)
    let options = {
                    "suppressAuth": true,
                    "suppressHooks": false
        };
    
      let insert = await wixData.bulkInsert('TimeTrialResults', events, options).catch((err)=>{console.log("Insert to database failed: " + err)})
      console.log(insert)
  })

}

This is the hook that was working earlier but has now stopped (again seemingly random)

function searchForDuplicates(collection, item){
    let date = new Date(Date.parse(item.date)) 
	date.setUTCHours(0)
	let greaterThan = new Date(date.toString())
	let lessThan = new Date(date.setDate(date.getDate()+1))


    const checkDate = wixData.query('TimeTrialResults').gt("date", greaterThan).lt("date", lessThan);
    const checkEvent = wixData.query(collection).eq("course", item.course);
   
    return checkDate.and(checkEvent).find()
        .then((results) =>{
            return results.items.length;
        })
		.catch((err)=>{
			console.log(err);
		})
}

export function TimeTrialResults_beforeInsert(item, context) {
	return searchForDuplicates(context.collectionName, item)
        .then((res) =>{
            if( res > 0 ){
                Promise.reject("Item already exists!")
            } else {
                return item;
            }
            
        })
		.catch((err)=>{
			console.log(err);
		})
}

Finally this is the code that generates the events array from a google sheet

export async function getAllResults() {
    try {
        const sheetId = await getSecretSheetId();
        const range = await getValues(sheetId, 'config!B1');
        console.log(`test!${range.data.values[0][0]}`)
        const result = await getValues(sheetId, `test!${range.data.values[0][0]}`);
        const response = result.data.values;
        let event=[];
        let events = []

        for(let i=1; i < response.length-1; i++){ 
                
                    if (response[i][0]===response[i-1][0]){ //check if the date value is the same (assumes one event per day)
                    // Matched!
                    //create an obiect for each result within a matched event
                    let result = {
                        date: response[i-1][0],
                        course: response[i-1][1],
                        name: response[i-1][3],
                        time: response[i-1][6],
                        overall: response[i-1][13],
                        category: response[i-1][12]
                    }
                    event.push(result); //push each result to the event array 
                    
                    } else {
                        //New Event!
                        //Create an event obiect and push to eventArray
                            if(event.length && event[0].date != undefined){

                                let date = new Date(Date.parse(event[0].date))
                                date.setUTCHours(18)
                                
                                let eventObiect = {
                                results: event,
                                date: date,
                                year: date.getFullYear,
                                course: event[0].course,
                                }
                                
                                events.push(eventObiect)
                                event = []
                            }
                    }
            }
        return events;  
        
    } catch (err) {
        return Promise.reject(`Get values failed. Info: ${err} `);
    }
   
}

Update.

The bulkInsert() is working fine now when I remove the beforeInsert Hook. The problem was I couldn’t suppress hooks when calling from the frontend, hiding that it was the hook causing the issue.

I’ve followed the guide for preventing duplicates given here. But it doesn’t seem to work properly. I’ve not done hooks before so am a bit stumped.

export function searchForDuplicateInDatabase(item, context) {
    let date = new Date(Date.parse(item.date)) 
	date.setUTCHours(0)
	let greaterThan = date
	let lessThan = date.setDate(date.getDate()+1)

    return wixData.query(context.collectionName)
            .gt("date", greaterThan)
            .lt("date", lessThan)
            .eq("course", item.course)
            .find()
            .then((results) => {
    return results.items.length;
            })
            .catch((err) => {
    let errorMsg = err;
            })
}
export function TimeTrialResults_beforeInsert(item, context) {
    return searchForDuplicateInDatabase(item, context).then((res) => {
    if(res > 0) {
    return Promise.reject('This item has already been submitted to the collection!');
            }
    return item;
        });
}