Timestamps
Si eres como yo, cuando diseñas un modelo de base de datos quieres que todas las tablas incluyan siempre tres campos clave:
- createdAt: indica cuándo se creó el registro.
- updatedAt: refleja la última vez que se actualizó.
- deletedAt: marca cuándo se eliminó de forma lógica (sin borrar físicamente el registro).
Problema
Como se puede observar, en cada migración tenemos que escribir manualmente los tres campos de timestamp. Esto no solo es repetitivo, sino que también es propenso a errores si olvidamos algún campo o escribimos mal el tipo de dato.
try await db.schema(model)
.id()
.field(.name, .string, .required)
.field(.createdAt, .datetime, .required)
.field(.updatedAt, .datetime, .required)
.field(.deletedAt, .datetime)
.create()
Solución
La solución es crear una extensión de SchemaBuilder que agregue un método timestamps(). Esta extensión encapsula la lógica repetitiva en un solo lugar, haciendo el código más limpio y mantenible.
extension SchemaBuilder {
func timestamps() -> Self {
self.field(.createdAt, .datetime, .required)
.field(.updatedAt, .datetime, .required)
.field(.deletedAt, .datetime)
}
}
Resultado
Ahora nuestras migraciones son mucho más limpias y legibles. Llamando a .timestamps() agregamos los tres campos necesarios. Esto reduce la posibilidad de errores y hace que el código sea más fácil de mantener.
try await db.schema(model)
.id()
.field(.name, .string, .required)
.timestamps()
.create()
Keep coding, keep running 🏃♂️