refactor: Delete unused utility files
Remove queryBuilder.js and pagination.js — zero imports anywhere in codebase. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,25 +0,0 @@
|
|||||||
export const DEFAULT_PAGE_SIZE = 20;
|
|
||||||
export const MAX_PAGE_SIZE = 100;
|
|
||||||
|
|
||||||
export const parsePagination = (query) => {
|
|
||||||
const page = Math.max(1, parseInt(query.page) || 1);
|
|
||||||
const limit = Math.min(
|
|
||||||
MAX_PAGE_SIZE,
|
|
||||||
Math.max(1, parseInt(query.limit) || DEFAULT_PAGE_SIZE)
|
|
||||||
);
|
|
||||||
const offset = (page - 1) * limit;
|
|
||||||
|
|
||||||
return { page, limit, offset };
|
|
||||||
};
|
|
||||||
|
|
||||||
export const paginatedResponse = (data, total, { page, limit }) => ({
|
|
||||||
data,
|
|
||||||
pagination: {
|
|
||||||
page,
|
|
||||||
limit,
|
|
||||||
total,
|
|
||||||
totalPages: Math.ceil(total / limit),
|
|
||||||
hasNext: page * limit < total,
|
|
||||||
hasPrev: page > 1,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
@@ -1,63 +0,0 @@
|
|||||||
import { and, or, ilike, eq, desc, asc } from 'drizzle-orm';
|
|
||||||
import { NotFoundError } from './errors.js';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Genericky query builder pre list operacie
|
|
||||||
* @param {object} db - Drizzle db instance
|
|
||||||
* @param {object} table - Drizzle table
|
|
||||||
* @param {object} options - Query options
|
|
||||||
*/
|
|
||||||
export const buildListQuery = (db, table, options = {}) => {
|
|
||||||
const {
|
|
||||||
searchTerm,
|
|
||||||
searchFields = [],
|
|
||||||
filters = {},
|
|
||||||
orderBy = 'createdAt',
|
|
||||||
orderDir = 'desc',
|
|
||||||
limit,
|
|
||||||
offset,
|
|
||||||
} = options;
|
|
||||||
|
|
||||||
let query = db.select().from(table);
|
|
||||||
const conditions = [];
|
|
||||||
|
|
||||||
// Search
|
|
||||||
if (searchTerm && searchFields.length > 0) {
|
|
||||||
const searchConditions = searchFields.map((field) =>
|
|
||||||
ilike(table[field], `%${searchTerm}%`)
|
|
||||||
);
|
|
||||||
conditions.push(or(...searchConditions));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Filters
|
|
||||||
Object.entries(filters).forEach(([key, value]) => {
|
|
||||||
if (value !== undefined && value !== null && value !== '') {
|
|
||||||
conditions.push(eq(table[key], value));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
if (conditions.length > 0) {
|
|
||||||
query = query.where(and(...conditions));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Order
|
|
||||||
const orderFn = orderDir === 'desc' ? desc : asc;
|
|
||||||
query = query.orderBy(orderFn(table[orderBy]));
|
|
||||||
|
|
||||||
// Pagination
|
|
||||||
if (limit) query = query.limit(limit);
|
|
||||||
if (offset) query = query.offset(offset);
|
|
||||||
|
|
||||||
return query;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Wrapper pre single item fetch s NotFoundError
|
|
||||||
*/
|
|
||||||
export const findOneOrThrow = async (db, table, whereClause, errorMessage) => {
|
|
||||||
const [item] = await db.select().from(table).where(whereClause).limit(1);
|
|
||||||
if (!item) {
|
|
||||||
throw new NotFoundError(errorMessage);
|
|
||||||
}
|
|
||||||
return item;
|
|
||||||
};
|
|
||||||
Reference in New Issue
Block a user