Пересоздание данных в Nest
Старые тестовые строки накопились в таблице, и новый набор опорных данных должен заменить их целиком. Пересоздавать всю базу PostgreSQL ради одной темы слишком грубо для локальной работы.
Наполнитель сначала просит репозиторий
убрать все строки сущности из
таблицы, не трогая остальные
таблицы и саму базу site.
Затем он сохраняет свежий список
объектов тем же способом, что
и при первичном заполнении.
Покажем на примере постов:
import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
export class Post {
@PrimaryGeneratedColumn()
id: number;
@Column()
title: string;
}
Сервис при старте очистит таблицу и запишет новые заготовки:
import { Injectable, OnModuleInit } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { Post } from '../post.entity.js';
@Injectable()
export class PostService implements OnModuleInit {
postRepository: Repository<Post>;
constructor(
@InjectRepository(Post) postRepository: Repository<Post>,
) {
this.postRepository = postRepository;
}
async onModuleInit() {
await this.postRepository.clear();
await this.postRepository.save([
{ title: 'Fresh alpha' },
{ title: 'Fresh beta' },
]);
}
findAll() {
return this.postRepository.find();
}
}
Контроллер откроет актуальный список:
import { Controller, Get } from '@nestjs/common';
import { PostService } from './post.service.js';
@Controller('posts')
export class PostController {
postService: PostService;
constructor(postService: PostService) {
this.postService = postService;
}
@Get()
findAll() {
return this.postService.findAll();
}
}
Модуль темы регистрирует сущность и классы страницы:
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Post } from '../post.entity.js';
import { PostController } from './post.controller.js';
import { PostService } from './post.service.js';
@Module({
imports: [TypeOrmModule.forFeature([Post])],
controllers: [PostController],
providers: [PostService],
})
export class PostsModule {}
Корень поднимает канал к базе и импортирует модуль темы:
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { PostsModule } from './posts/posts.module.js';
@Module({
imports: [
TypeOrmModule.forRoot({
type: 'postgres',
host: 'localhost',
port: 5432,
username: 'postgres',
password: 'postgres',
database: 'site',
autoLoadEntities: true,
synchronize: true,
}),
PostsModule,
],
})
export class AppModule {}
При старте очистите в
WorkerService таблицу
работников и запишите новый
набор строк. Список откройте в
WorkerController и соберите
WorkersModule с базой в корне.