mirror of
https://github.com/safishamsi/graphify.git
synced 2026-07-13 19:07:10 +00:00
7467c1b6a4
#1118 — prune stale AST nodes on full re-extraction (#1116) Stamps every AST-extracted node with _origin="ast" in extract(). On a full rebuild _rebuild_code drops any AST-marked node absent from the fresh output even when its source file survives, fixing stale symbols. Backward-compat: marker-less nodes from pre-1118 graphs survive one cycle then self-heal. #1110 — stop reading images and PDFs as garbage in headless extract Images route through per-backend vision payloads (base64/data-URI/bytes for claude/openai/bedrock); non-vision backends get _strip_pixels for graceful degradation. PDFs reuse pypdf. 5MB cap, 20-image chunk limit. #1159 — Salesforce Apex extractor (.cls, .trigger) Regex-based extractor: classes, interfaces, enums, methods, triggers, SOQL/DML edges. No new dependency. Dispatched as .cls and .trigger. #1107 — Azure OpenAI Service backend (--backend azure) Uses AzureOpenAI SDK client (from existing openai package). Auto-detects when AZURE_OPENAI_API_KEY + AZURE_OPENAI_ENDPOINT both set. Uses max_completion_tokens (not deprecated max_tokens). #1103 — live PostgreSQL introspection (--postgres DSN) graphify extract --postgres "postgresql://..." introspects tables, views, routines, and FK relations via information_schema (SERIALIZABLE READ ONLY). Credentials sanitized on error. New graphify[postgres] extra (psycopg3). Union-resolved llm.py conflict: Azure functions + bedrock images= param. Fixed test_image_vision.py mock to accept timeout= kwarg (our #1112). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
56 lines
1.6 KiB
OpenEdge ABL
56 lines
1.6 KiB
OpenEdge ABL
public with sharing class AccountService {
|
|
|
|
private static final String DEFAULT_TYPE = 'Customer';
|
|
|
|
public interface Notifiable {
|
|
void notify(String message);
|
|
}
|
|
|
|
public enum AccountStatus { ACTIVE, INACTIVE, PENDING }
|
|
|
|
@AuraEnabled
|
|
public static List<Account> getAccounts(String accountType) {
|
|
return [SELECT Id, Name, Type FROM Account WHERE Type = :accountType];
|
|
}
|
|
|
|
@future
|
|
public static void updateAccountsAsync(List<Id> accountIds) {
|
|
List<Account> accounts = [SELECT Id FROM Account WHERE Id IN :accountIds];
|
|
for (Account acc : accounts) {
|
|
acc.Type = DEFAULT_TYPE;
|
|
}
|
|
update accounts;
|
|
}
|
|
|
|
@InvocableMethod(label='Create Account' description='Creates a new Account')
|
|
public static List<Id> createAccounts(List<String> names) {
|
|
List<Account> toInsert = new List<Account>();
|
|
for (String n : names) {
|
|
toInsert.add(new Account(Name = n));
|
|
}
|
|
insert toInsert;
|
|
List<Id> ids = new List<Id>();
|
|
for (Account a : toInsert) {
|
|
ids.add(a.Id);
|
|
}
|
|
return ids;
|
|
}
|
|
|
|
public static void deleteOldAccounts(Date cutoff) {
|
|
List<Account> old = [SELECT Id FROM Account WHERE CreatedDate < :cutoff];
|
|
delete old;
|
|
}
|
|
|
|
@isTest
|
|
static void testGetAccounts() {
|
|
List<Account> result = getAccounts('Customer');
|
|
System.assertNotEquals(null, result);
|
|
}
|
|
|
|
@isTest
|
|
static void testCreateAccounts() {
|
|
List<Id> ids = createAccounts(new List<String>{'Test'});
|
|
System.assertEquals(1, ids.size());
|
|
}
|
|
}
|