/** * @description Selector class for {SObject} queries. * Encapsulates all SOQL for {SObject} records. * All methods return bulkified results (Lists or Maps). * @author Generated by Apex Class Writer Skill */ public with sharing class {SObject}Selector { // ─── Field Lists ───────────────────────────────────────────────────── /** * @description Returns the default set of fields to query for {SObject}. * Centralizes field references to keep queries DRY. * @return Comma-separated field list as a String */ private static String getDefaultFields() { return String.join( new List{ 'Id', 'Name', 'CreatedDate', 'LastModifiedDate' // TODO: Add additional fields here }, ', ' ); } // ─── Query Methods ─────────────────────────────────────────────────── /** * @description Selects {SObject} records by their Ids * @param recordIds Set of {SObject} Ids to query * @return List of {SObject} records matching the provided Ids * @example * Set ids = new Set{ '001xx000003DGbY' }; * List<{SObject}> results = {SObject}Selector.selectByIds(ids); */ public static List<{SObject}> selectByIds(Set recordIds) { if (recordIds == null || recordIds.isEmpty()) { return new List<{SObject}>(); } return Database.query( 'SELECT ' + getDefaultFields() + ' FROM {SObject}' + ' WHERE Id IN :recordIds' ); } /** * @description Selects {SObject} records as a Map keyed by Id * @param recordIds Set of {SObject} Ids to query * @return Map of Id to {SObject} */ public static Map selectMapByIds(Set recordIds) { return new Map(selectByIds(recordIds)); } /** * @description Selects {SObject} records by a specific field value * @param fieldName API name of the field to filter on * @param values Set of values to match * @return List of matching {SObject} records * @example * List<{SObject}> results = {SObject}Selector.selectByField('Status__c', new Set{ 'Active' }); */ public static List<{SObject}> selectByField(String fieldName, Set values) { if (String.isBlank(fieldName) || values == null || values.isEmpty()) { return new List<{SObject}>(); } // Validate field name to prevent SOQL injection Schema.SObjectField field = Schema.SObjectType.{SObject}.fields.getMap().get(fieldName); if (field == null) { throw new QueryException('Invalid field name: ' + fieldName); } return Database.query( 'SELECT ' + getDefaultFields() + ' FROM {SObject}' + ' WHERE ' + String.escapeSingleQuotes(fieldName) + ' IN :values' ); } // ─── Exception ─────────────────────────────────────────────────────── /** * @description Custom exception for query errors */ public class QueryException extends Exception {} }