brf/server/lib/kysely_helpers.ts

48 lines
1.4 KiB
TypeScript

// import type { QueryBuilder } from 'knex'
import type { SelectQueryBuilder } from 'kysely'
import _ from 'lodash'
// export function convertToReturning(obj: Record<string, string>) {
// return _.map(obj, (value, key) => _.isString(value) && `${value} as ${key}`).filter(_.identity)
// }
// export function columnAs(name: string, table: string, transformer = _.snakeCase) {
// const transformed = transformer(name)
// if (transformed !== name) {
// // knex automagically wraps everything in ", so they are not needed around ${name}
// return `${table ? table + '.' : ''}${transformed} as ${name}`
// }
// return table ? `${table}.${name}` : name
// }
// export function columnBuilder(builder: QueryBuilder, columns: Record<string, string>, columnNames: string[]) {
// for (const columnName of columnNames) {
// const column = columns[columnName]
// if (column) {
// // @ts-ignore
// builder.column(column)
// }
// }
// return builder
// }
export function where<DB, TB extends keyof DB, O>(builder: SelectQueryBuilder<DB, TB, O>, json: Record<string, ANY>) {
return _.reduce(
json,
(builder, value, key) => {
if (value === null) {
return builder.where(key, 'is', null)
} else if (Array.isArray(value)) {
return builder.where(key, 'in', value)
}
return builder.where(key, '=', value)
},
builder,
)
}