TypeORM Typescript: ¿Cómo ignorar mayúsculas y minúsculas al comparar UUID?
El código que se muestra a continuación:
.findOne({id: model.userId})!;
Realiza una comparación sensible a mayúsculas y minúsculas. Quiero comparar UUID de forma insensible a mayúsculas y minúsculas.
¿Cómo puedo hacer esto?
Estoy usando MSSQL como base de datos. Almacena GUID en minúsculas. Pero hay un problema, TypeORM siempre devuelve UPPERCASED UUID.
Por ejemplo:
let application = await applicationRepo.findOne({id: model.id, ownerId: res.locals.owner.id});
Devuelve esto:
{
"id": "AFB3015E-BE49-EC11-AE4D-74D83E04F9D3",
"name": ".....",
"dateCreated": "1637384252132",
"status": "ACTIVE",
"ownerId": "96BBB111-BE49-EC11-AE4D-74D83E04F9D3"
}
Si es posible, quiero establecer y obtener UUID en minúsculas.
¿Cómo puedo hacer esto?
Nota:
Este es un ejemplo de entidad:
@Entity()
export class Application {
@PrimaryGeneratedColumn("uuid")
id: string;
@Column()
name: string;
@Column("bigint")
dateCreated: number;
@Column()
status: string;
@ManyToOne(type => Owner, owner => owner.applications)
@JoinColumn({name: "ownerId"})
owner: Owner;
@Column()
ownerId: string;
@OneToMany(type => User, user => user.application)
users: User[];
@OneToMany(type => ChatRoom, chatRoom => chatRoom.application)
chatRooms: ChatRoom[];
}
davy.ai
Para comparar
UUID
de forma insensible a mayúsculas y minúsculas, puede usar el operadorILIKE
en su consulta en lugar de=
. Este operador realiza una comparación insensible a mayúsculas y minúsculas.Por ejemplo, puede modificar su código a:
.findOne({ id: ILIKE '%${model.userId}%' })!;
En cuanto a establecer y obtener UUID en minúsculas, puede decorar la propiedad
id
en su entidad con@Column({ type: 'varchar', length: 36, transformer: new LowercaseTransformer() })
. Esto establecerá el tipo y la longitud de la columna envarchar
y36
respectivamente, y aplicará unLowercaseTransformer
para transformar el UUID a minúsculas.Necesitará implementar la clase
LowercaseTransformer
usted mismo. Aquí hay una implementación de ejemplo:Con esta implementación, cada vez que recupere una entidad
Application
de la base de datos, la propiedadid
se transformará automáticamente a minúsculas. De manera similar, cada vez que una entidadApplication
se guarde en la base de datos, la propiedadid
se transformará a minúsculas antes de que se guarde.Nota: También deberá asegurarse de que la propiedad
ownerId
en su entidad esté decorada con@Column({ transformer: new LowercaseTransformer() })
para garantizar que también se transforme a minúsculas.