Untitled

Anonymous
plain_text
03/28/2026 6:47 PM
1.8 KB
10
Indexable
import { z } from 'zod';

export const BaseModelSchema = z.object({
    id: z.number().int(),
    name: z.string()
});

export const StringIdBaseModelSchema = z.object({
    id: z.string(),
    name: z.string()
});

export const PaginationSchema = z.object({
    perPage: z.number(),
    currentPage: z.number()
});

export const MetaDataModelSchema = z.intersection(
    PaginationSchema,
    z.object({
        total: z.number()
    })
);

export const StringIdBaseModelMetaDataSchema = z.object({
    data: z.array(StringIdBaseModelSchema),
    metadata: MetaDataModelSchema
});

export const BaseModelMetaDataSchema = z.object({
    data: z.array(BaseModelSchema),
    metadata: MetaDataModelSchema
});

export type PaginatedResponse<T> = {
    data: T;
    metadata: z.infer<typeof MetaDataModelSchema>;
};

type BaseModel = z.infer<typeof BaseModelSchema>;
type StringIdBaseModel = z.infer<typeof StringIdBaseModelSchema>;
type MetaDataModel = z.infer<typeof MetaDataModelSchema>;
type PaginationModel = z.infer<typeof PaginationSchema>;
type StringIdBaseModelMetaDataModel = z.infer<typeof StringIdBaseModelMetaDataSchema>;
type BaseModelMetaDataModel = z.infer<typeof BaseModelMetaDataSchema>;

export type { BaseModel, StringIdBaseModel, PaginationModel, StringIdBaseModelMetaDataModel, BaseModelMetaDataModel, MetaDataModel };
Editor is loading...
Leave a Comment