Как через sequelize-typescript создать связь 1-к-1 с возможностью каскадного удаления?

Для создания связи 1-к-1 с возможностью каскадного удаления используется функционал sequelize - одной из самых популярных ORM для работы с базами данных в Node.js.

Для начала, установите необходимые пакеты:

npm install sequelize sequelize-typescript

После этого, создайте модели для обоих связанных объектов.

Например, пусть у нас есть модели User и Profile, причем каждый пользователь имеет только один профиль, а при удалении пользователя также нужно удалить и его профиль.

import { Model, Table, Column, PrimaryKey, ForeignKey, BelongsTo } from 'sequelize-typescript';
import { User } from './user.model';

@Table
export class Profile extends Model<Profile> {

  @PrimaryKey
  @Column
  id: number;

  @Column
  firstName: string;

  @Column
  lastName: string;

  @ForeignKey(() => User)
  @Column
  userId: number;

  @BelongsTo(() => User, { onDelete: 'CASCADE' })
  user: User;
}

@Table
export class User extends Model<User> {

  @PrimaryKey
  @Column
  id: number;

  @Column
  username: string;

  @Column
  email: string;

  @HasOne(() => Profile, { onDelete: 'CASCADE' })
  profile: Profile;
}

В модели Profile мы используем декоратор @BelongsTo для определения связи с моделью User, указывая при этом опцию onDelete: 'CASCADE'. Это позволяет установить каскадное удаление, при котором при удалении пользователя будет также удален и его профиль.

В модели User мы используем декоратор @HasOne для определения связи с моделью Profile с тем же параметром onDelete: 'CASCADE'.

Теперь, при создании или удалении объектов User и Profile, sequelize автоматически управляет каскадным удалением, сохраняя целостность данных и упрощая кодирование логики удаления связанных объектов.

Для большего количества моделей вам может потребоваться расширить или изменить код в соответствии с вашей конкретной ситуацией, однако данное объяснение предоставляет базовую концепцию работы с sequelize-typescript для создания связи 1-к-1 с возможностью каскадного удаления.