Lifecycle event beforeUpdate not working with CRUD operation

System Information
  • Strapi Version: v4.15.0
  • Operating System: Ubuntu 22.04
  • Database: PostgreSQL 16
  • Node Version: v20.11.1
  • NPM Version: v10.4.0
  • Yarn Version: v1.22.19

I have created a lifecycle event with beforeUpdate to make sure that dates in my collection type Event follows a set of rules to make sure that exports to google calendar works without errors:

beforeUpdate(event) {
    const { data } = event.params;

    // Check that all dates are filled in
    if (
        !data.start_date || data.start_date === "" ||
        !data.end_date || data.end_date === "" ||
        !data.unpublish_at || data.unpublish_at === ""
    ) {
            "Error beforeUpdate Event, dates missing/undefined. Start_date: " + data.start_date + ". End_date: " + data.end_date +
            ". Unpublish_at: " + data.unpublish_at
        throw new ApplicationError("Check that all dates are filled in!")

    // Throw error to user in Admin GUI if end_date is before start_date
    if (data.end_date <= data.start_date) {
        throw new ApplicationError("Dates in wrong order!")

I also have a function that updates the number of views for each event with a CRUD operation strapi.entityService.update:

async function incrementViewCounter(strapi, content_type, content_id) {
     try {
         let api_string = `api::${content_type}.${content_type}`;

         // Find entry
         const entry = await strapi.entityService.findOne(api_string, content_id);

         let currentViews = !!parseInt(entry.views) ? parseInt(entry.views) : 0;

         // update views
         await strapi.entityService.update(api_string, content_id, {
             data: {
                 views: currentViews + 1
         throw new Error("Increment view counter threw error: " + e);

But each time this operation runs both functions to throw errors:

Error beforeUpdate Event, dates missing/undefined. Start_date: undefined. End_date: undefined. Unpublish_at: undefined
Error: Increment view counter threw error: ApplicationError: Check that all dates are filled in!
      at incrementViewCounter (/workspace/src/lifecycle/inspect-log.js:18:15)
      at process.processTicksAndRejections (node:internal/process/task_queues:95:5)

The Strapi Docs notes that update() only performs a partial update, so existing fields that are not included won’t be replaced. Does that mean that that the lifecycle event doesn’t receive the whole Event object, but rather and only the supplied attributes, i.e views?
What is the prefered solution for this? Is there any way to fetch up to date “missing attributes” of the object in beforeUpdate()?
To need to include the dates in the CRUD operation entityService.update() seems like a bad solution since it’s implemented in multiple places (big rewrite, and potential it could be missed in some places) and it could lead to potential errors in the future if missed in new implemenations.