#Can't seem to apply unique constraints on particular value of column

2 messages · Page 1 of 1 (latest)

sand pasture
#

I want apply DB level unique constraint on particular value of column otherwise repeated values can be inserted. I have implemented it using Unique decorator but can't seem to apply some partial indexing ```ts /* eslint-disable import/no-cycle */
import { ApiHideProperty } from '@nestjs/swagger';
import { Column, Entity, JoinColumn, ManyToOne, Unique } from 'typeorm';

import { BaseEntity } from '../../../common/base/base.entity';
import { User } from '../user.entity';

export enum UserActionType {
BLOCK = 'block',
REPORT = 'report',
}

export enum ReportStatus {
RECIEVED = 'recieved',
REVIEWING = 'awaiting',
DECIDED = 'decided',
}
@Unique('unique_user_action', ['userId', 'actionUserId', 'actionType'])
@Entity()
export class UserAction extends BaseEntity {
@Column({ nullable: false }) // this will be authenticated user id
userId!: number;

@Column({ nullable: true, default: null }) /// assigned by relationship
actionUserId!: number;

@Column({ default: false })
blockRelated!: boolean;

@Column({ nullable: true, default: null })
reportReason!: string;

@Column({ type: 'enum', enum: ReportStatus, default: ReportStatus.RECIEVED }) // when created set first status
status!: ReportStatus;

@Column({ type: 'enum', enum: UserActionType })
actionType!: UserActionType;

@ApiHideProperty()
@ManyToOne(() => User, (user) => user.userActions, { onDelete: 'CASCADE' }) // many relationship this is why use plural
@JoinColumn({ name: 'action_user_id' })
actionUser!: User;
}

signal quartz