РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
⊗jsnsSpSfHd 57 of 201 menu
◀ ▶

Окончательное удаление в Nest

Архивная запись больше не нужна ни клиенту, ни отчёту. Мягкая метка ещё держит строку в таблице, хотя список для пользователя её уже не показывает.

Метод delete по ключу убирает строку из PostgreSQL целиком. После него запись не появится ни в активной выборке, ни в find с withDeleted. Если ключ не затронут, сервис бросает NotFoundException. Номер из адреса переводят в число через ParseIntPipe.

Покажем на примере постов:

import { Column, DeleteDateColumn, Entity, PrimaryGeneratedColumn, } from 'typeorm'; @Entity() export class Post { @PrimaryGeneratedColumn() id: number; @Column() title: string; @DeleteDateColumn() deletedAt: Date | null; }

Сервис сотрёт строку и проверит, была ли она в таблице:

import { Injectable, NotFoundException } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { Post } from '../post.entity.js'; @Injectable() export class PostService { postRepository: Repository<Post>; constructor( @InjectRepository(Post) postRepository: Repository<Post>, ) { this.postRepository = postRepository; } async removeForever(id: number): Promise<void> { const result = await this.postRepository.delete(id); if (result.affected === 0) { throw new NotFoundException('Post not found'); } } findAllWithArchived() { return this.postRepository.find({ withDeleted: true }); } }

Контроллер откроет полное стирание и список с архивом для проверки:

import { Controller, Delete, Get, Param, ParseIntPipe, } from '@nestjs/common'; import { PostService } from './post.service.js'; @Controller('posts') export class PostController { postService: PostService; constructor(postService: PostService) { this.postService = postService; } @Delete(':id/forever') removeForever(@Param('id', ParseIntPipe) id: number) { return this.postService.removeForever(id); } @Get('archive') findAllWithArchived() { return this.postService.findAllWithArchived(); } }

Модуль темы регистрирует сущность и классы страницы:

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 к базе в корне.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить