Автоинкремент по соседниму полю

Задача сделать автоинкремент для поля position,но увеличиваться должен вределах одного значения в поле room_id. Решение нужно на postgres или typeorm

id room_id position ...
1 1 1 ...
2 1 2 ...
3 2 1 ...
4 3 1 ...
5 3 2 ...

Ответы (1 шт):

Автор решения: Игорь Рожков
import {BeforeInsert} from 'typeorm';

class Code {
  @BeforeInsert()
  async incrementPosition() {
    const code = await Code.findOne({
      where: {
        room: this.room,
      },
      select: ['id', 'position'],
      order: {
        position: 'DESC',
      },
    })

    this.position = (code?.position ?? 0) + 1;
  }
}


Code.create({
  room: await Room.findOne(1),
}).save() // не используйте insert

Это мой вариант. Если кто то напишет свой вариант например на тригерах, буду признателен.

→ Ссылка