Update to use new backendVariantConfig; removed unused session field in base api action

This commit is contained in:
2025-02-14 20:01:00 -06:00
parent be25fc1272
commit 4c502df328
4 changed files with 75 additions and 17 deletions

View File

@ -61,7 +61,6 @@ public abstract class AbstractAPIAction
apiActionUtil.setBackendMetaData(this.backendMetaData); apiActionUtil.setBackendMetaData(this.backendMetaData);
apiActionUtil.setActionInput(actionInput); apiActionUtil.setActionInput(actionInput);
apiActionUtil.setSession(session);
} }
} }

View File

@ -61,6 +61,8 @@ import com.kingsrook.qqq.backend.core.model.actions.tables.update.UpdateOutput;
import com.kingsrook.qqq.backend.core.model.data.QRecord; import com.kingsrook.qqq.backend.core.model.data.QRecord;
import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldMetaData; import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldMetaData;
import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData; import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData;
import com.kingsrook.qqq.backend.core.model.metadata.variants.BackendVariantSetting;
import com.kingsrook.qqq.backend.core.model.metadata.variants.LegacyBackendVariantSetting;
import com.kingsrook.qqq.backend.core.model.session.QSession; import com.kingsrook.qqq.backend.core.model.session.QSession;
import com.kingsrook.qqq.backend.core.model.statusmessages.SystemErrorStatusMessage; import com.kingsrook.qqq.backend.core.model.statusmessages.SystemErrorStatusMessage;
import com.kingsrook.qqq.backend.core.utils.CollectionUtils; import com.kingsrook.qqq.backend.core.utils.CollectionUtils;
@ -77,6 +79,7 @@ import com.kingsrook.qqq.backend.module.api.exceptions.RetryableServerErrorExcep
import com.kingsrook.qqq.backend.module.api.model.AuthorizationType; import com.kingsrook.qqq.backend.module.api.model.AuthorizationType;
import com.kingsrook.qqq.backend.module.api.model.OutboundAPILog; import com.kingsrook.qqq.backend.module.api.model.OutboundAPILog;
import com.kingsrook.qqq.backend.module.api.model.metadata.APIBackendMetaData; import com.kingsrook.qqq.backend.module.api.model.metadata.APIBackendMetaData;
import com.kingsrook.qqq.backend.module.api.model.metadata.APIBackendVariantSetting;
import com.kingsrook.qqq.backend.module.api.model.metadata.APITableBackendDetails; import com.kingsrook.qqq.backend.module.api.model.metadata.APITableBackendDetails;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.BooleanUtils; import org.apache.commons.lang.BooleanUtils;
@ -114,7 +117,6 @@ public class BaseAPIActionUtil
{ {
private final QLogger LOG = QLogger.getLogger(BaseAPIActionUtil.class); private final QLogger LOG = QLogger.getLogger(BaseAPIActionUtil.class);
protected QSession session; // todo not commit - delete!!
protected APIBackendMetaData backendMetaData; protected APIBackendMetaData backendMetaData;
protected AbstractTableActionInput actionInput; protected AbstractTableActionInput actionInput;
@ -778,7 +780,7 @@ public class BaseAPIActionUtil
if(backendMetaData.getUsesVariants()) if(backendMetaData.getUsesVariants())
{ {
QRecord record = getVariantRecord(); QRecord record = getVariantRecord();
return (record.getValueString(backendMetaData.getVariantOptionsTableApiKeyField())); return (record.getValueString(getVariantSettingSourceFieldName(backendMetaData, LegacyBackendVariantSetting.API_KEY, APIBackendVariantSetting.API_KEY)));
} }
return (backendMetaData.getApiKey()); return (backendMetaData.getApiKey());
@ -786,6 +788,18 @@ public class BaseAPIActionUtil
/***************************************************************************
** todo - once deprecated variant methods are removed from QBackendMetaData,
** then we can remove the LegacyBackendVariantSetting enum, and this param.
***************************************************************************/
private String getVariantSettingSourceFieldName(APIBackendMetaData backendMetaData, LegacyBackendVariantSetting legacyBackendVariantSetting, APIBackendVariantSetting apiBackendVariantSetting)
{
Map<BackendVariantSetting, String> map = CollectionUtils.nonNullMap(backendMetaData.getBackendVariantsConfig().getBackendSettingSourceFieldNameMap());
return map.getOrDefault(legacyBackendVariantSetting, map.get(apiBackendVariantSetting));
}
/*************************************************************************** /***************************************************************************
** **
***************************************************************************/ ***************************************************************************/
@ -794,7 +808,10 @@ public class BaseAPIActionUtil
if(backendMetaData.getUsesVariants()) if(backendMetaData.getUsesVariants())
{ {
QRecord record = getVariantRecord(); QRecord record = getVariantRecord();
return (Pair.of(record.getValueString(backendMetaData.getVariantOptionsTableUsernameField()), record.getValueString(backendMetaData.getVariantOptionsTablePasswordField()))); return (Pair.of(
record.getValueString(getVariantSettingSourceFieldName(backendMetaData, LegacyBackendVariantSetting.USERNAME, APIBackendVariantSetting.USERNAME)),
record.getValueString(getVariantSettingSourceFieldName(backendMetaData, LegacyBackendVariantSetting.PASSWORD, APIBackendVariantSetting.PASSWORD))
));
} }
return (Pair.of(backendMetaData.getUsername(), backendMetaData.getPassword())); return (Pair.of(backendMetaData.getUsername(), backendMetaData.getPassword()));
@ -812,14 +829,14 @@ public class BaseAPIActionUtil
Serializable variantId = getVariantId(); Serializable variantId = getVariantId();
GetInput getInput = new GetInput(); GetInput getInput = new GetInput();
getInput.setShouldMaskPasswords(false); getInput.setShouldMaskPasswords(false);
getInput.setTableName(backendMetaData.getVariantOptionsTableName()); getInput.setTableName(backendMetaData.getBackendVariantsConfig().getOptionsTableName());
getInput.setPrimaryKey(variantId); getInput.setPrimaryKey(variantId);
GetOutput getOutput = new GetAction().execute(getInput); GetOutput getOutput = new GetAction().execute(getInput);
QRecord record = getOutput.getRecord(); QRecord record = getOutput.getRecord();
if(record == null) if(record == null)
{ {
throw (new QException("Could not find Backend Variant in table " + backendMetaData.getVariantOptionsTableName() + " with id '" + variantId + "'")); throw (new QException("Could not find Backend Variant in table " + backendMetaData.getBackendVariantsConfig().getOptionsTableName() + " with id '" + variantId + "'"));
} }
return record; return record;
} }
@ -832,11 +849,11 @@ public class BaseAPIActionUtil
protected Serializable getVariantId() throws QException protected Serializable getVariantId() throws QException
{ {
QSession session = QContext.getQSession(); QSession session = QContext.getQSession();
if(session.getBackendVariants() == null || !session.getBackendVariants().containsKey(backendMetaData.getVariantOptionsTableTypeValue())) if(session.getBackendVariants() == null || !session.getBackendVariants().containsKey(backendMetaData.getBackendVariantsConfig().getVariantTypeKey()))
{ {
throw (new QException("Could not find Backend Variant information for Backend '" + backendMetaData.getName() + "'")); throw (new QException("Could not find Backend Variant information for Backend '" + backendMetaData.getName() + "'"));
} }
Serializable variantId = session.getBackendVariants().get(backendMetaData.getVariantOptionsTableTypeValue()); Serializable variantId = session.getBackendVariants().get(backendMetaData.getBackendVariantsConfig().getVariantTypeKey());
return variantId; return variantId;
} }
@ -945,7 +962,10 @@ public class BaseAPIActionUtil
if(backendMetaData.getUsesVariants()) if(backendMetaData.getUsesVariants())
{ {
QRecord record = getVariantRecord(); QRecord record = getVariantRecord();
return (Pair.of(record.getValueString(backendMetaData.getVariantOptionsTableClientIdField()), record.getValueString(backendMetaData.getVariantOptionsTableClientSecretField()))); return (Pair.of(
record.getValueString(getVariantSettingSourceFieldName(backendMetaData, LegacyBackendVariantSetting.CLIENT_ID, APIBackendVariantSetting.CLIENT_ID)),
record.getValueString(getVariantSettingSourceFieldName(backendMetaData, LegacyBackendVariantSetting.CLIENT_SECRET, APIBackendVariantSetting.CLIENT_SECRET))
));
} }
return (Pair.of(backendMetaData.getClientId(), backendMetaData.getClientSecret())); return (Pair.of(backendMetaData.getClientId(), backendMetaData.getClientSecret()));
@ -1480,9 +1500,9 @@ public class BaseAPIActionUtil
** Setter for session ** Setter for session
** **
*******************************************************************************/ *******************************************************************************/
@Deprecated(since = "wasn't used.")
public void setSession(QSession session) public void setSession(QSession session)
{ {
this.session = session;
} }

View File

@ -0,0 +1,38 @@
/*
* QQQ - Low-code Application Framework for Engineers.
* Copyright (C) 2021-2025. Kingsrook, LLC
* 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States
* contact@kingsrook.com
* https://github.com/Kingsrook/
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.kingsrook.qqq.backend.module.api.model.metadata;
import com.kingsrook.qqq.backend.core.model.metadata.variants.BackendVariantSetting;
/*******************************************************************************
** settings that the API backend module can get from a backend variant.
*******************************************************************************/
public enum APIBackendVariantSetting implements BackendVariantSetting
{
USERNAME,
PASSWORD,
API_KEY,
CLIENT_ID,
CLIENT_SECRET
}

View File

@ -95,8 +95,6 @@ import com.kingsrook.qqq.backend.core.model.actions.tables.get.GetInput;
import com.kingsrook.qqq.backend.core.model.actions.tables.get.GetOutput; import com.kingsrook.qqq.backend.core.model.actions.tables.get.GetOutput;
import com.kingsrook.qqq.backend.core.model.actions.tables.insert.InsertInput; import com.kingsrook.qqq.backend.core.model.actions.tables.insert.InsertInput;
import com.kingsrook.qqq.backend.core.model.actions.tables.insert.InsertOutput; import com.kingsrook.qqq.backend.core.model.actions.tables.insert.InsertOutput;
import com.kingsrook.qqq.backend.core.model.actions.tables.query.QCriteriaOperator;
import com.kingsrook.qqq.backend.core.model.actions.tables.query.QFilterCriteria;
import com.kingsrook.qqq.backend.core.model.actions.tables.query.QQueryFilter; import com.kingsrook.qqq.backend.core.model.actions.tables.query.QQueryFilter;
import com.kingsrook.qqq.backend.core.model.actions.tables.query.QueryInput; import com.kingsrook.qqq.backend.core.model.actions.tables.query.QueryInput;
import com.kingsrook.qqq.backend.core.model.actions.tables.query.QueryJoin; import com.kingsrook.qqq.backend.core.model.actions.tables.query.QueryJoin;
@ -1200,15 +1198,18 @@ public class QJavalinImplementation
///////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////
if(backend != null && backend.getUsesVariants()) if(backend != null && backend.getUsesVariants())
{ {
queryInput.setTableName(backend.getVariantOptionsTableName()); QTableMetaData variantsTable = QContext.getQInstance().getTable(backend.getBackendVariantsConfig().getOptionsTableName());
queryInput.setFilter(new QQueryFilter(new QFilterCriteria(backend.getVariantOptionsTableTypeField(), QCriteriaOperator.EQUALS, backend.getVariantOptionsTableTypeValue())));
queryInput.setTableName(variantsTable.getName());
queryInput.setFilter(backend.getBackendVariantsConfig().getOptionsFilter());
queryInput.setShouldGenerateDisplayValues(true);
QueryOutput output = new QueryAction().execute(queryInput); QueryOutput output = new QueryAction().execute(queryInput);
for(QRecord qRecord : output.getRecords()) for(QRecord qRecord : output.getRecords())
{ {
variants.add(new QFrontendVariant() variants.add(new QFrontendVariant()
.withId(qRecord.getValue(backend.getVariantOptionsTableIdField())) .withId(qRecord.getValue(variantsTable.getPrimaryKeyField()))
.withType(backend.getVariantOptionsTableTypeValue()) .withType(backend.getBackendVariantsConfig().getVariantTypeKey())
.withName(qRecord.getValueString(backend.getVariantOptionsTableNameField()))); .withName(qRecord.getRecordLabel()));
} }
QJavalinAccessLogger.logStartSilent("variants"); QJavalinAccessLogger.logStartSilent("variants");