¿Qué hace convex-schema-validator?
Define y valida esquemas de base de datos con tipado adecuado, configuración de índices, campos opcionales, uniones y estrategias de migración para cambios de esquema.
Resumen
Este skill te ayuda a:
- Definir esquemas de base de datos tipados en Convex.
- Configurar índices para optimizar consultas.
- Manejar campos opcionales y enumeraciones tipo unión.
- Planificar y ejecutar migraciones de esquema de forma segura.
Requisitos previos
- Conocimiento básico de Convex y TypeScript.
- Proyecto Convex configurado.
Uso
Definición de esquemas
Utiliza el validador de esquemas de Convex para definir tablas con tipado estricto:
import { defineSchema, defineTable } from "convex/server";
import { v } from "convex/values";
export default defineSchema({
tasks: defineTable({
text: v.string(),
completed: v.boolean(),
priority: v.union(v.literal("low"), v.literal("medium"), v.literal("high")),
dueDate: v.optional(v.number()),
})
.index("by_priority", ["priority"])
.index("by_completed_priority", ["completed", "priority"]),
});
Configuración de índices
Los índices mejoran el rendimiento de las consultas. Puedes definir índices compuestos y de búsqueda de texto:
.index("by_text", ["text"])
.searchIndex("search_text", {
searchField: "text",
filterFields: ["completed"],
})
Campos opcionales
Usa v.optional() para campos que no son obligatorios:
dueDate: v.optional(v.number()),
Uniones
Define tipos unión para campos con valores limitados:
priority: v.union(v.literal("low"), v.literal("medium"), v.literal("high")),
Migraciones
Para cambios de esquema, sigue estas estrategias:
- Agregar campos opcionales: Seguro de hacer en cualquier momento.
- Eliminar campos: Requiere migración de datos para eliminar el campo de documentos existentes.
- Actualizar índices: Elimina el índice antiguo antes de crear el nuevo.
- Cambiar tipos de campos: Puede requerir migración de datos.
Plataformas compatibles
- Convex
- TypeScript
Ejemplos completos
Mira la carpeta examples/ para ver implementaciones completas.
Contribuciones
¡Las contribuciones son bienvenidas! Por favor, abre un issue o pull request en el repositorio.