Я делаю телеграмм-бота на 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)
}