@@ -1,11 +1,3 @@
-/**********************************
- * @Author: Ronnie Zhang
- * @LastEditor: Ronnie Zhang
- * @LastEditTime: 2023/12/07 20:24:51
- * @Email: zclzone@outlook.com
- * Copyright © 2023 Ronnie Zhang(大脸怪) | https://isme.top
- **********************************/
-
import { AuthGuard } from '@nestjs/passport';
export class JwtGuard extends AuthGuard('jwt') {
- * @LastEditTime: 2023/12/07 20:24:58
export class LocalGuard extends AuthGuard('local') {
- * @LastEditTime: 2023/12/07 20:25:04
import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';
import { Reflector } from '@nestjs/core';
import { CustomException, ErrorCode } from '@/common/exceptions/custom.exception';
- * @LastEditTime: 2023/12/07 20:25:11
import { CanActivate, Injectable } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
@@ -8,7 +8,7 @@ import { RedisService } from '@/shared/redis.service';
@Injectable()
export class SessionMiddleware implements NestMiddleware {
- constructor(@Inject(RedisService) private readonly redisService: RedisService) { }
+ constructor(@Inject(RedisService) private readonly redisService: RedisService) {}
use(req: Request, res: Response, next: NextFunction) {
return session({
@@ -40,4 +40,4 @@ export function getTopMenuFragment(tree: TreeNode[], targetId: number): TreeNode
// 如果整个树中都没有找到目标节点,返回 null
return null;
-}
+}
@@ -11,7 +11,7 @@ export class ArticleTranslation extends TranslationEntity<Article> {
content?: string;
@ManyToOne(() => Article, (article) => article.translations, {
- onDelete: 'CASCADE',
+ // onDelete: 'CASCADE',
createForeignKeyConstraints: false,
})
source?: Article | undefined;
@@ -69,8 +69,7 @@ export class Article extends TranslatableEntity<ArticleTranslation> {
updateTime: Date;
@OneToMany(() => ArticleTranslation, (articleTranslation) => articleTranslation.source, {
- cascade: true,
+ cascade: ['insert', 'update', 'remove'],
translations?: Translation<ArticleTranslation>[] | undefined;
@@ -61,7 +61,16 @@ export class ArticleService {
}
async remove(id: number) {
- await this.articleRepo.delete(id);
+ const article = await this.articleRepo.findOne({
+ where: { id },
+ relations: {
+ translations: true,
+ },
+ });
+ article.translations.forEach(async (trans) => {
+ await this.articleTranslationRepo.delete(trans.id);
+ await this.articleRepo.remove(article);
return true;
@@ -1,5 +1,3 @@
import { Injectable } from '@nestjs/common';
import { JwtService } from '@nestjs/jwt';
import { compareSync } from 'bcryptjs';
@@ -1,4 +1,3 @@
import { ApiProperty } from '@nestjs/swagger';
import { IsBoolean, IsNotEmpty, IsOptional, IsString, Length } from 'class-validator';
import { ACCESS_TOKEN_EXPIRATION_TIME, USER_ACCESS_TOKEN_KEY } from '@/constants/redis.contant';
import { RedisService } from '@/shared/redis.service';
import { PassportStrategy } from '@nestjs/passport';
import { Strategy } from 'passport-local';
@@ -9,4 +9,4 @@ import { TypeOrmModule } from '@nestjs/typeorm';
controllers: [MenuController],
providers: [MenuService],
-export class MenuModule { }
+export class MenuModule {}
import { BadRequestException, Injectable } from '@nestjs/common';
import {
AddRolePermissionsDto,
@@ -1,6 +1 @@
-export class QueryPublicCategoryDto {
+export class QueryPublicCategoryDto {}
@@ -6,7 +6,6 @@ import { TypeOrmModule } from '@nestjs/typeorm';
import { Menu } from '@/modules/menu/menu.entity';
import { Article } from '@/modules/article/article.entity';
@Module({
imports: [TypeOrmModule.forFeature([Menu, Category, Article])],
controllers: [WebController],