Skip to content

Instantly share code, notes, and snippets.

@noam-honig
noam-honig / changelog.ts
Created April 21, 2024 14:52
Chagelog / audit trail
import {
Entity,
FieldRef,
Fields,
FieldsRef,
getEntityRef,
IdEntity,
isBackend,
LifecycleEvent,
@noam-honig
noam-honig / data-provider-wrapper.ts
Last active September 11, 2024 12:59
DataProvider wrapper that documents number of returned rows and query duration
return new Proxy(db, {
get(target, prop) {
if (prop == 'getEntityDataProvider') {
return (meta: EntityMetadata) => {
return new Proxy(db.getEntityDataProvider(meta), {
get(target, prop) {
if (prop == 'find') {
return async (options: EntityDataProviderFindOptions) => {
const start = performance.now();
const result = await target.find(options);
@noam-honig
noam-honig / bulk-insert.ts
Last active September 11, 2024 13:02
bulk insert without hooks - just push to sql db
async function bulkInsert<entityType extends EntityBase>(
array: entityType[],
db: SqlDatabase,
) {
if (array.length == 0) return
const chunkSize = 250
for (let i = 0; i < array.length; i += chunkSize) {
const items = array.slice(i, i + chunkSize)
dataProvider: async () => {
const result = await createKnexDataProvider({
client: 'mssql',
//debug: true,
connection: {
server: process.env['DBServer'],
database: process.env['DBDatabase'],
user: process.env['DBUser'],
password: process.env['DBPassword'],
query_timeout: 30000,
@noam-honig
noam-honig / filterContains.ts
Created October 11, 2024 07:11
A way to test if an EntityFilter contains a field #remult
/**
* Checks if a filter contains a specific field
* @example
backendPreprocessFilter: async (filter) => {
// If not specific filter for deletedBy was specified - only show non deleted rows
if (!filterContains(filter, 'deletedBy')) {
return {
...filter,
deletedBy: null,
}
@noam-honig
noam-honig / InnerSelectHelper.cs
Last active March 13, 2025 05:26
Inner Select Helper With Child Rows
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Firefly.Box;
using Firefly.Box.Data.Advanced;
using ENV.Data.DataProvider;
using Firefly.Box.Data.DataProvider;