feat(core): Refactor data table update row to use filters (no-changelog) (#19092)

This commit is contained in:
Daria
2025-09-04 18:25:29 +03:00
committed by GitHub
parent 2f2672c551
commit ed6f60f52e
18 changed files with 1421 additions and 233 deletions

View File

@@ -3,40 +3,9 @@ import { z } from 'zod';
import { Z } from 'zod-class';
import { dataStoreColumnNameSchema } from '../../schemas/data-store.schema';
import { dataTableFilterSchema } from '../../schemas/data-table-filter.schema';
import { paginationSchema } from '../pagination/pagination.dto';
const FilterConditionSchema = z.union([
z.literal('eq'),
z.literal('neq'),
z.literal('like'),
z.literal('ilike'),
z.literal('gt'),
z.literal('gte'),
z.literal('lt'),
z.literal('lte'),
]);
export type ListDataStoreContentFilterConditionType = z.infer<typeof FilterConditionSchema>;
const filterRecord = z.object({
columnName: dataStoreColumnNameSchema,
condition: FilterConditionSchema.default('eq'),
value: z.union([z.string(), z.number(), z.boolean(), z.date(), z.null()]),
});
const chainedFilterSchema = z.union([z.literal('and'), z.literal('or')]);
export type ListDataStoreContentFilter = z.infer<typeof filterSchema>;
// ---------------------
// Parameter Validators
// ---------------------
const filterSchema = z.object({
type: chainedFilterSchema.default('and'),
filters: z.array(filterRecord).default([]),
});
// Filter parameter validation
const filterValidator = z
.string()
.optional()
@@ -45,7 +14,7 @@ const filterValidator = z
try {
const parsed: unknown = jsonParse(val);
try {
return filterSchema.parse(parsed);
return dataTableFilterSchema.parse(parsed);
} catch (e) {
ctx.addIssue({
code: z.ZodIssueCode.custom,
@@ -64,7 +33,6 @@ const filterValidator = z
}
});
// SortBy parameter validation
const sortByValidator = z
.string()
.optional()

View File

@@ -5,13 +5,14 @@ import {
dataStoreColumnNameSchema,
dataStoreColumnValueSchema,
} from '../../schemas/data-store.schema';
import { dataTableFilterSchema } from '../../schemas/data-table-filter.schema';
const updateDataStoreRowShape = {
filter: z
.record(dataStoreColumnNameSchema, dataStoreColumnValueSchema)
.refine((obj) => Object.keys(obj).length > 0, {
message: 'filter must not be empty',
}),
const updateFilterSchema = dataTableFilterSchema.refine((filter) => filter.filters.length > 0, {
message: 'filter must not be empty',
});
const updateDataTableRowShape = {
filter: updateFilterSchema,
data: z
.record(dataStoreColumnNameSchema, dataStoreColumnValueSchema)
.refine((obj) => Object.keys(obj).length > 0, {
@@ -20,4 +21,4 @@ const updateDataStoreRowShape = {
returnData: z.boolean().default(false),
};
export class UpdateDataStoreRowDto extends Z.class(updateDataStoreRowShape) {}
export class UpdateDataTableRowDto extends Z.class(updateDataTableRowShape) {}

View File

@@ -85,14 +85,10 @@ export { OidcConfigDto } from './oidc/config.dto';
export { CreateDataStoreDto } from './data-store/create-data-store.dto';
export { UpdateDataStoreDto } from './data-store/update-data-store.dto';
export { UpdateDataStoreRowDto } from './data-store/update-data-store-row.dto';
export { UpdateDataTableRowDto } from './data-store/update-data-store-row.dto';
export { UpsertDataStoreRowsDto } from './data-store/upsert-data-store-rows.dto';
export { ListDataStoreQueryDto } from './data-store/list-data-store-query.dto';
export { ListDataStoreContentQueryDto } from './data-store/list-data-store-content-query.dto';
export type {
ListDataStoreContentFilter,
ListDataStoreContentFilterConditionType,
} from './data-store/list-data-store-content-query.dto';
export { CreateDataStoreColumnDto } from './data-store/create-data-store-column.dto';
export { AddDataStoreRowsDto } from './data-store/add-data-store-rows.dto';
export { AddDataStoreColumnDto } from './data-store/add-data-store-column.dto';

View File

@@ -56,3 +56,8 @@ export {
type DataStoreListOptions,
dateTimeSchema,
} from './schemas/data-store.schema';
export type {
DataTableFilter,
DataTableFilterConditionType,
} from './schemas/data-table-filter.schema';

View File

@@ -0,0 +1,31 @@
import { z } from 'zod';
import { dataStoreColumnNameSchema } from './data-store.schema';
export const FilterConditionSchema = z.union([
z.literal('eq'),
z.literal('neq'),
z.literal('like'),
z.literal('ilike'),
z.literal('gt'),
z.literal('gte'),
z.literal('lt'),
z.literal('lte'),
]);
export type DataTableFilterConditionType = z.infer<typeof FilterConditionSchema>;
export const dataTableFilterRecordSchema = z.object({
columnName: dataStoreColumnNameSchema,
condition: FilterConditionSchema.default('eq'),
value: z.union([z.string(), z.number(), z.boolean(), z.date(), z.null()]),
});
export const dataTableFilterTypeSchema = z.union([z.literal('and'), z.literal('or')]);
export const dataTableFilterSchema = z.object({
type: dataTableFilterTypeSchema.default('and'),
filters: z.array(dataTableFilterRecordSchema).default([]),
});
export type DataTableFilter = z.infer<typeof dataTableFilterSchema>;