@Override public AccountAuditLogs getAccountAuditLogs(final UUID accountId, final AuditLevel auditLevel, final TenantContext tenantContext) { // Optimization - bail early if (AuditLevel.NONE.equals(auditLevel)) { return new DefaultAccountAuditLogs(accountId); } return auditDao.getAuditLogsForAccountRecordId(auditLevel, internalCallContextFactory.createInternalTenantContext(accountId, tenantContext)); }
@Override public List<AuditLog> getAuditLogsForBundle(final UUID bundleId) { return getAuditLogs(ObjectType.BUNDLE).getAuditLogs(bundleId); }
@Test(groups = "slow", description = "Test Account: verify audits") public void testAudits() throws AccountApiException { // Special test to verify audits - they are handled a bit differently due to the account record id (see EntitySqlDaoWrapperInvocationHandler#insertAudits) final AccountModelDao account1 = createTestAccount(); accountDao.create(account1, internalCallContext); refreshCallContext(account1.getId()); // Verify audits via account record id final DefaultAccountAuditLogs auditLogsForAccount1ViaAccountRecordId1 = auditDao.getAuditLogsForAccountRecordId(AuditLevel.FULL, internalCallContext); Assert.assertEquals(auditLogsForAccount1ViaAccountRecordId1.getAuditLogsForAccount().size(), 1); Assert.assertEquals(auditLogsForAccount1ViaAccountRecordId1.getAuditLogsForAccount().get(0).getChangeType(), ChangeType.INSERT); // Add an entry in the account_history table to make sure we pick up the right // record id / target record id / account record id in the audit_log table accountDao.updatePaymentMethod(account1.getId(), UUID.randomUUID(), internalCallContext); final AccountModelDao account2 = createTestAccount(); accountDao.create(account2, internalCallContext); refreshCallContext(account2.getId()); // Verify audits via account record id final DefaultAccountAuditLogs auditLogsForAccount2ViaAccountRecordId = auditDao.getAuditLogsForAccountRecordId(AuditLevel.FULL, internalCallContext); Assert.assertEquals(auditLogsForAccount2ViaAccountRecordId.getAuditLogsForAccount().size(), 1); Assert.assertEquals(auditLogsForAccount2ViaAccountRecordId.getAuditLogsForAccount().get(0).getChangeType(), ChangeType.INSERT); refreshCallContext(account1.getId()); final DefaultAccountAuditLogs auditLogsForAccount1ViaAccountRecordId2 = auditDao.getAuditLogsForAccountRecordId(AuditLevel.FULL, internalCallContext); Assert.assertEquals(auditLogsForAccount1ViaAccountRecordId2.getAuditLogsForAccount().size(), 2); Assert.assertEquals(auditLogsForAccount1ViaAccountRecordId2.getAuditLogsForAccount().get(0).getChangeType(), ChangeType.INSERT); Assert.assertEquals(auditLogsForAccount1ViaAccountRecordId2.getAuditLogsForAccount().get(1).getChangeType(), ChangeType.UPDATE); }
@Override public List<AuditLog> getAuditLogsForPaymentAttempt(final UUID paymentAttemptId) { return getAuditLogs(ObjectType.PAYMENT_ATTEMPT).getAuditLogs(paymentAttemptId); }
@Override public DefaultAccountAuditLogs getAuditLogsForAccountRecordId(final AuditLevel auditLevel, final InternalTenantContext context) { final UUID accountId = dbRouter.onDemand(true).getIdFromObject(context.getAccountRecordId(), TableName.ACCOUNT.getTableName()); // Lazy evaluate records to minimize the memory footprint (these can yield a lot of results) // We usually always want to wrap our queries in an EntitySqlDaoTransactionWrapper... except here. // Since we want to stream the results out, we don't want to auto-commit when this method returns. final EntitySqlDao auditSqlDao = transactionalSqlDao.onDemandForStreamingResults(EntitySqlDao.class); final Iterator<AuditLogModelDao> auditLogsForAccountRecordId = auditSqlDao.getAuditLogsForAccountRecordId(context); final Iterator<AuditLog> allAuditLogs = buildAuditLogsFromModelDao(auditLogsForAccountRecordId, context); return new DefaultAccountAuditLogs(accountId, auditLevel, allAuditLogs); }
@Override public List<AuditLog> getAuditLogsForSubscription(final UUID subscriptionId) { return getAuditLogs(ObjectType.SUBSCRIPTION).getAuditLogs(subscriptionId); }
@Override public AccountAuditLogs getAccountAuditLogs(final UUID accountId, final AuditLevel auditLevel, final TenantContext tenantContext) { // Optimization - bail early if (AuditLevel.NONE.equals(auditLevel)) { return new DefaultAccountAuditLogs(accountId); } return auditDao.getAuditLogsForAccountRecordId(auditLevel, internalCallContextFactory.createInternalTenantContext(accountId, tenantContext)); }
@Override public List<AuditLog> getAuditLogsForPayment(final UUID paymentId) { return getAuditLogs(ObjectType.PAYMENT).getAuditLogs(paymentId); }
@Override public DefaultAccountAuditLogs getAuditLogsForAccountRecordId(final AuditLevel auditLevel, final InternalTenantContext context) { final UUID accountId = dbRouter.onDemand(true).getIdFromObject(context.getAccountRecordId(), TableName.ACCOUNT.getTableName()); // Lazy evaluate records to minimize the memory footprint (these can yield a lot of results) // We usually always want to wrap our queries in an EntitySqlDaoTransactionWrapper... except here. // Since we want to stream the results out, we don't want to auto-commit when this method returns. final EntitySqlDao auditSqlDao = transactionalSqlDao.onDemandForStreamingResults(EntitySqlDao.class); final Iterator<AuditLogModelDao> auditLogsForAccountRecordId = auditSqlDao.getAuditLogsForAccountRecordId(context); final Iterator<AuditLog> allAuditLogs = buildAuditLogsFromModelDao(auditLogsForAccountRecordId, context); return new DefaultAccountAuditLogs(accountId, auditLevel, allAuditLogs); }
@Override public List<AuditLog> getAuditLogsForSubscriptionEvent(final UUID subscriptionEventId) { return getAuditLogs(ObjectType.SUBSCRIPTION_EVENT).getAuditLogs(subscriptionEventId); }
@Override public List<AuditLog> getAuditLogsForBlockingState(final UUID blockingStateId) { return getAuditLogs(ObjectType.BLOCKING_STATES).getAuditLogs(blockingStateId); }
@Override public List<AuditLog> getAuditLogsForInvoicePayment(final UUID invoicePaymentId) { return getAuditLogs(ObjectType.INVOICE_PAYMENT).getAuditLogs(invoicePaymentId); }
@Override public List<AuditLog> getAuditLogsForAccount() { return getAuditLogs(ObjectType.ACCOUNT).getAuditLogs(accountId); }
@Override public List<AuditLog> getAuditLogsForInvoice(final UUID invoiceId) { return getAuditLogs(ObjectType.INVOICE).getAuditLogs(invoiceId); }
@Override public List<AuditLog> getAuditLogsForTag(final UUID tagId) { return getAuditLogs(ObjectType.TAG).getAuditLogs(tagId); }
@Override public List<AuditLog> getAuditLogsForCustomField(final UUID customFieldId) { return getAuditLogs(ObjectType.CUSTOM_FIELD).getAuditLogs(customFieldId); }
@Override public List<AuditLog> getAuditLogsForInvoiceItem(final UUID invoiceItemId) { return getAuditLogs(ObjectType.INVOICE_ITEM).getAuditLogs(invoiceItemId); }
@Override public List<AuditLog> getAuditLogsForPaymentTransaction(final UUID paymentTransactionId) { return getAuditLogs(ObjectType.TRANSACTION).getAuditLogs(paymentTransactionId); }
@Override public List<AuditLog> getAuditLogsForPaymentMethod(final UUID paymentMethodId) { return getAuditLogs(ObjectType.PAYMENT_METHOD).getAuditLogs(paymentMethodId); }
@Override public List<AuditLog> getAuditLogsForSubscription(final UUID subscriptionId) { return getAuditLogs(ObjectType.SUBSCRIPTION).getAuditLogs(subscriptionId); }