@sphereon/ssi-sdk.data-store
Version:
96 lines (78 loc) • 3.28 kB
text/typescript
import { IsNotEmpty, Validate, validate, ValidationError } from 'class-validator'
import {
BaseEntity,
BeforeInsert,
BeforeUpdate,
Column,
CreateDateColumn,
Entity,
ManyToOne,
PrimaryGeneratedColumn,
UpdateDateColumn,
} from 'typeorm'
import { typeOrmDateTime } from '@sphereon/ssi-sdk.agent-config'
import { getConstraint } from '../../utils/ValidatorUtils'
import type { PhysicalAddressType, ValidationConstraint } from '../../types/index'
import { PartyEntity } from './PartyEntity'
import { IsNonEmptyStringConstraint } from '../validators'
('PhysicalAddress')
export class PhysicalAddressEntity extends BaseEntity {
('uuid')
id!: string
('varchar', { name: 'type', length: 255, nullable: false })
({ message: 'Blank physical address types are not allowed' })
type!: PhysicalAddressType
('varchar', { name: 'street_name', length: 255, nullable: false })
({ message: 'Blank street names are not allowed' })
streetName!: string
('varchar', { name: 'street_number', length: 255, nullable: false })
({ message: 'Blank street numbers are not allowed' })
streetNumber!: string
('varchar', { name: 'postal_code', length: 255, nullable: false })
({ message: 'Blank postal codes are not allowed' })
postalCode!: string
('varchar', { name: 'city_name', length: 255, nullable: false })
({ message: 'Blank city names are not allowed' })
cityName!: string
('varchar', { name: 'province_name', length: 255, nullable: false })
({ message: 'Blank province names are not allowed' })
provinceName!: string
('varchar', { name: 'country_code', length: 2, nullable: false })
({ message: 'Blank country codes are not allowed' })
countryCode!: string
('varchar', { name: 'building_name', length: 255, nullable: true })
(IsNonEmptyStringConstraint, { message: 'Blank building names are not allowed' })
buildingName?: string
('text', { name: 'owner_id', nullable: true })
ownerId?: string
('text', { name: 'tenant_id', nullable: true })
tenantId?: string
(() => PartyEntity, (party: PartyEntity) => party.physicalAddresses, {
onDelete: 'CASCADE',
})
party!: PartyEntity
('text', { name: 'partyId', nullable: true })
partyId?: string
({ name: 'created_at', nullable: false, type: typeOrmDateTime() })
createdAt!: Date
({ name: 'last_updated_at', nullable: false, type: typeOrmDateTime() })
lastUpdatedAt!: Date
// By default, @UpdateDateColumn in TypeORM updates the timestamp only when the entity's top-level properties change.
()
()
updateUpdatedDate(): void {
this.lastUpdatedAt = new Date()
}
()
()
async validate(): Promise<void> {
const validation: Array<ValidationError> = await validate(this)
if (validation.length > 0) {
const constraint: ValidationConstraint | undefined = getConstraint(validation[0])
if (constraint) {
const message: string = Object.values(constraint!)[0]
return Promise.reject(Error(message))
}
}
}
}