FloydReme
@FloydReme
Пишу музыку и программирую

Почему не обновляется сущность в TypeORM?

Я делаю телеграмм-бота на TypeScript по созданию очередей. Я хочу реализовать команду по свапу двух участников этой очереди. Моя проблема в том, что в момент свапа очередь обновляется, а когда я хочу отдельно эту очередь показать, возвращается старая. Почему - не понимаю. Буду рад любой помощи:

@Entity("users")
export class User {
    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    telegramId: number;

    @Column()
    firstName: string;

    @Column()
    lastName: string;

    @Column()
    short: string;

    @ManyToMany(() => Queue, queue => queue.users)
    @JoinTable()
    queues: Queue[];
}


@Entity("queues")
export class Queue {
    @PrimaryGeneratedColumn()
    id: number;

    @CreateDateColumn()
    createdAt: Date;

    @Column()
    chatId: string;

    @ManyToMany(() => User, user => user.queues, { cascade: true, onDelete: "CASCADE", onUpdate: "CASCADE"})
    users: User[];
}


//...
 this.queueRepository = this.connection.getRepository(Queue)
 this.userRepository = this.connection.getRepository(User)
//..
// Вот тут очередь не обновлена
 async showQueue(chatId: number): Promise<Queue> {
    const queue = (await this.queueRepository.findOne({ where: { chatId: chatId.toString() }, relations: ["users"] }))!

    if (!queue) throw new Error("Очереди еще нет")

    return queue!
}

// а тут возвращается обновленная очередь
async swapUsers(users: SwapDTO): Promise<Queue> {
    const queue = (await this.queueRepository.findOne({ where: { chatId: users.chatId.toString() }, relations: ["users"] }))!

    const callerPosition = queue.users.findIndex(u => u.id === users.caller.id)
    const resolverPosition = queue.users.findIndex(u => u.id === users.resolver.id)

    queue.users[callerPosition] = users.resolver
    queue.users[resolverPosition] = users.caller

    users.caller.queues[users.caller.queues.findIndex(q => q.chatId === queue.chatId)] = queue
    users.resolver.queues[users.resolver.queues.findIndex(q => q.chatId === queue.chatId)] = queue

    await this.userRepository.save(users.caller)
    await this.userRepository.save(users.resolver)


    return await this.queueRepository.save(queue)
}
  • Вопрос задан
  • 109 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы