-1

I am trying to build a function that allows users to retrieve data from the database, but in a dynamic way. So allowing them to specify the source table, as well as which columns they would like to retrieve.

I have already built out the part that allows them to choose the table and columns, and these users only have access to data we are happy for them to retrieve.

I want this to be as dynamic as possible, so I am building a function to help me with this. I have run into one problem though so far. I have this function:

  const modelMap = (model, action, criteria, options) => {

    const models = {
      EXTERNAL_USER: {
        READ: services.externalUser.readExternalUser(criteria, options),
      },
      TASK: {
        READ: services.task.readTask(criteria, options),
      },
      USER: {
        READ: services.user.readUser(criteria, options),
      },
    }

    return models[model][action]
  }

So, for example, I call this function using

modelMap('EXTERNAL_USER', 'READ', { id: userID }, { populates: ['documents'] }).

This returns the data I want, however I get an ``OperationError` in my terminal:

OperationalError [UsageError]: Invalid populate(s).
Details:
  Could not populate `documents`.  There is no attribute named `documents` defined in this model.

The error is saying that the Task model has no attribute documents, which it doesn't. So I am guessing that even though I am not trying to access the readTask function, it is being called anyway. How can I get around this?

SOLUTION

I altered the models object to the following:

    const models = {
      EXTERNAL_USER: {
        READ: () => services.externalUser.readExternalUsers(criteria, options),
      },
      TASK: {
        READ: () => services.task.readTask(criteria, options),
      },
      USER: {
        READ: () => services.user.readUser(criteria, options),
      },
    }

And I can then use await modelMap(model, action, criteria, options)() to get the data I need.

TreyCollier
  • 181
  • 1
  • 12

1 Answers1

-1

Yes. The functions called anyway

Ihar Dziamidau
  • 337
  • 2
  • 9