es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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[];
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para comparar UUID de forma insensible a mayúsculas y minúsculas, puede usar el operador ILIKE 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 en varchar y 36 respectivamente, y aplicará un LowercaseTransformer para transformar el UUID a minúsculas.

    Necesitará implementar la clase LowercaseTransformer usted mismo. Aquí hay una implementación de ejemplo:

    import { ValueTransformer } from 'typeorm';
    
    export class LowercaseTransformer implements ValueTransformer {
    
        to(value: any): any {
            return value;
        }
    
        from(value: any): any {
            return value ? value.toLowerCase() : value;
        }
    }
    

    Con esta implementación, cada vez que recupere una entidad Application de la base de datos, la propiedad id se transformará automáticamente a minúsculas. De manera similar, cada vez que una entidad Application se guarde en la base de datos, la propiedad id 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.

Comments are closed.