Size: a a a

TypeORM - Русскоязычное сообщество

2021 July 20

КБ

Константин Брызгалин... in TypeORM - Русскоязычное сообщество
конечно всегда можно ему всяких any туда насовать. да и руками в базе что-то наделать – тут компилятор понятное дело ничем не поможет… 🙂
источник

🏡K

🏡 ILshat Khamitov in TypeORM - Русскоязычное сообщество
featureService.create({phone:'+7'}) оно отвалится с ошибкой и до базы не дойдет
источник

КБ

Константин Брызгалин... in TypeORM - Русскоязычное сообщество
а вот например если ты описал тип как AwesomePayload, а потом решил а сделаю-ка я AwesomePayload | NotSoGoodPayload – тут-то тебе компилятор и раскрасит красным все места, где у тебя не срастается по типам, заставит везде проверками обложиться и т.п.
источник

КБ

Константин Брызгалин... in TypeORM - Русскоязычное сообщество
а… я похоже не совсем понял вопроса – нет, строка прилетит только если в поле хранится string в json. typeorm парсит json перед заполнением поля… если у тебя в поле хранится json-объект, в поле тебе прилетит сам объект…
источник

🏡K

🏡 ILshat Khamitov in TypeORM - Русскоязычное сообщество
вот так делал если че, все пишут, фиг пойми кто кому)))
await queryRunner.manager
     .getRepository<ContentType>(ContentType)
     .save(plainToClass(ContentType, { name: 'permission', title: 'Permission' }))

@Entity({ name: 'content_types' })
export class ContentType {
 @PrimaryGeneratedColumn()
 id: number = undefined;

 @Column({ length: 100 })
 @IsNotEmpty()
 @MaxLength(100)
 name: string = undefined;

 @Column({ length: 255 })
 @IsNotEmpty()
 @MaxLength(255)
 title: string = undefined;

 @OneToMany(type => Permission, permission => permission.contentType)
 permissions: Permission[];

 @BeforeInsert()
 doBeforeInsertion() {
   const errors = validateSync(this, { validationError: { target: false } });
   if (errors.length > 0) {
     throw new CustomValidationError(errors);
   }
 }

 @BeforeUpdate()
 doBeforeUpdate() {
   const errors = validateSync(this, { validationError: { target: false } });
   if (errors.length > 0) {
     throw new CustomValidationError(errors);
   }
 }
}

ну или вызывать после сериализации валидацию validateSync

короче на входе в функцию
источник

КБ

Константин Брызгалин... in TypeORM - Русскоязычное сообщество
но типы лучше всё-таки описывать. надо пользоваться возможностями тайпскрипта, чтобы потом проще было рефакторить и вообще код править. компилятор он умный по большей части, хорошо помогает…
источник

КБ

Константин Брызгалин... in TypeORM - Русскоязычное сообщество
await queryRunner.manager
     .getRepository<ContentType>(ContentType)
     .save(plainToClass(ContentType, { name: 'permission', title: 'Permission' }))

вот тут plainToClass не нужен. репозиторий в save умеет принимать DeepPartial<Entity>, самостоятельно его в класс преобразует… EntityManager в save может класс энтити брать первым параметром – нигде plainToClass не нужен реально…
источник

🏡K

🏡 ILshat Khamitov in TypeORM - Русскоязычное сообщество
вложенные валидаторы не сработают, так как у тя не будт классов
источник

КБ

Константин Брызгалин... in TypeORM - Русскоязычное сообщество
то есть я бы написал
await queryRunner.manager.save(ContentType, {name: 'permission', title: 'Permission' })
источник

КБ

Константин Брызгалин... in TypeORM - Русскоязычное сообщество
@BeforeInsert() сработает, почему нет-то…
источник

🏡K

🏡 ILshat Khamitov in TypeORM - Русскоязычное сообщество
плайн ту класс все в классы конвертет до глубоуой вложенности
источник

🏡K

🏡 ILshat Khamitov in TypeORM - Русскоязычное сообщество
в этом примере если без плаин ту класс валидаторы пермишенов не срабоают
источник

КБ

Константин Брызгалин... in TypeORM - Русскоязычное сообщество
да почему не сработают-то, ты же validateSync дёргаешь в @BeforeInsert()
источник

🏡K

🏡 ILshat Khamitov in TypeORM - Русскоязычное сообщество
потомучто пермишены будут массив жсонов
источник

🏡K

🏡 ILshat Khamitov in TypeORM - Русскоязычное сообщество
а не клаассов
источник

🏡K

🏡 ILshat Khamitov in TypeORM - Русскоязычное сообщество
и валидаторов там нет
источник

🏡K

🏡 ILshat Khamitov in TypeORM - Русскоязычное сообщество
тут просто пример, нужен еще декоратор валидат нестед
источник

КБ

Константин Брызгалин... in TypeORM - Русскоязычное сообщество
а я понял. но – если ты добавишь @Type на пермишены, то validateSync будет валидировать их по указанному типу даже если они не классы а простые объекты…
источник

KB

Konstantin Belkin in TypeORM - Русскоязычное сообщество
на моем примере у меня нету связей мужду табалицами, я правильно понял что могу сделать энтити, и колонке присвоить что-то вроде

```import { IsEmail } from 'class-validator';

export class ValidationInterface {
 
@IsEmail@IsEmail()
 email:
string;
}
```
источник

🏡K

🏡 ILshat Khamitov in TypeORM - Русскоязычное сообщество
validateSync нужно вызвать где нить или в хуках или до запуска инсерта
источник