Skip to content

Commit 26d8ba4

Browse files
committed
add generic crud
1 parent cff293d commit 26d8ba4

24 files changed

+442
-4
lines changed

package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@
3636
"@nestjs/platform-express": "^10.0.2",
3737
"@nestjs/swagger": "^7.1.13",
3838
"@nestjs/typeorm": "^10.0.0",
39+
"@nestjsx/crud": "^5.0.0-alpha.3",
40+
"@nestjsx/crud-typeorm": "^5.0.0-alpha.3",
3941
"@svtslv/nestjs-ioredis": "^1.0.2",
4042
"bcrypt": "^5.1.0",
4143
"cache-manager-redis-store": "^3.0.1",
@@ -44,6 +46,7 @@
4446
"ejs": "^3.1.8",
4547
"ioredis": "^5.3.2",
4648
"jsonwebtoken": "^9.0.1",
49+
"nest-access-control": "^3.1.0",
4750
"nestjs-i18n": "^10.3.6",
4851
"passport": "^0.6.0",
4952
"passport-jwt": "^4.0.1",

src/admin/admin.module.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { Module } from "@nestjs/common";
2+
import { SwaggerModule } from "@nestjs/swagger";
3+
import { UserModule } from "src/apps/user/user.module";
4+
import { UsersModule } from "./users/users.module";
5+
import { RolesModule } from './roles/roles.module';
6+
7+
@Module({
8+
imports: [
9+
UsersModule,
10+
RolesModule,
11+
]
12+
})
13+
export class AdminModule {}

src/admin/admin.roles.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { RolesBuilder } from 'nest-access-control';
2+
3+
export enum AppRoles {
4+
ADMIN = 'ADMIN',
5+
EDITOR = 'EDITOR',
6+
}
7+
8+
export const roles: RolesBuilder = new RolesBuilder();
9+
10+
roles
11+
.grant(AppRoles.EDITOR)
12+
.create('jobs')
13+
.update('jobs')
14+
// admin
15+
.grant(AppRoles.ADMIN)
16+
.extend(AppRoles.EDITOR)
17+
.create(['companies'])
18+
.update(['companies'])
19+
.delete(['companies', 'jobs']);
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { ApiProperty } from "@nestjsx/crud/lib/crud";
2+
import { Exclude } from "class-transformer";
3+
4+
export class CreateRoleDto {
5+
6+
@ApiProperty({example: 'Admin'})
7+
name: string;
8+
9+
@ApiProperty({example: 'ADMIN'})
10+
key: string;
11+
12+
@ApiProperty()
13+
description: string;
14+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import { PartialType } from '@nestjs/swagger';
2+
import { CreateRoleDto } from './create-role.dto';
3+
4+
export class UpdateRoleDto extends PartialType(CreateRoleDto) {}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { Test, TestingModule } from '@nestjs/testing';
2+
import { RolesController } from './roles.controller';
3+
import { RolesService } from './roles.service';
4+
5+
describe('RolesController', () => {
6+
let controller: RolesController;
7+
8+
beforeEach(async () => {
9+
const module: TestingModule = await Test.createTestingModule({
10+
controllers: [RolesController],
11+
providers: [RolesService],
12+
}).compile();
13+
14+
controller = module.get<RolesController>(RolesController);
15+
});
16+
17+
it('should be defined', () => {
18+
expect(controller).toBeDefined();
19+
});
20+
});

src/admin/roles/roles.controller.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { Controller, Get, Post, Body, Patch, Param, Delete } from '@nestjs/common';
2+
import { RolesService } from './roles.service';
3+
import { CreateRoleDto } from './dto/create-role.dto';
4+
import { UpdateRoleDto } from './dto/update-role.dto';
5+
import { ApiSecurity, ApiTags } from '@nestjs/swagger';
6+
import { BaseCrudController } from 'src/i18n/base-crud/base-crud.controller';
7+
8+
@Controller('admin/roles')
9+
@ApiTags("Admin > Role")
10+
@ApiSecurity('api-key')
11+
export class RolesController extends BaseCrudController<CreateRoleDto, UpdateRoleDto> {
12+
constructor(public readonly service: RolesService) {
13+
super(service);
14+
}
15+
}

src/admin/roles/roles.module.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { Module } from '@nestjs/common';
2+
import { RolesService } from './roles.service';
3+
import { RolesController } from './roles.controller';
4+
import { TypeOrmModule } from '@nestjs/typeorm';
5+
import { Role } from 'src/entities/role.entity';
6+
7+
@Module({
8+
imports: [
9+
TypeOrmModule.forFeature([Role])
10+
],
11+
controllers: [RolesController],
12+
providers: [RolesService],
13+
})
14+
export class RolesModule {}

src/admin/roles/roles.service.spec.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { Test, TestingModule } from '@nestjs/testing';
2+
import { RolesService } from './roles.service';
3+
4+
describe('RolesService', () => {
5+
let service: RolesService;
6+
7+
beforeEach(async () => {
8+
const module: TestingModule = await Test.createTestingModule({
9+
providers: [RolesService],
10+
}).compile();
11+
12+
service = module.get<RolesService>(RolesService);
13+
});
14+
15+
it('should be defined', () => {
16+
expect(service).toBeDefined();
17+
});
18+
});

src/admin/roles/roles.service.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { Injectable } from '@nestjs/common';
2+
import { CreateRoleDto } from './dto/create-role.dto';
3+
import { UpdateRoleDto } from './dto/update-role.dto';
4+
import { Role } from 'src/entities/role.entity';
5+
import { InjectRepository } from '@nestjs/typeorm';
6+
import { Repository } from 'typeorm';
7+
import { IBaseService } from 'src/i18n/base-crud/base-service.interface';
8+
import { BaseCrudService } from 'src/i18n/base-crud/base-crud.service';
9+
10+
@Injectable()
11+
// export class RolesService implements IBaseService<CreateRoleDto, UpdateRoleDto> {
12+
export class RolesService extends BaseCrudService<CreateRoleDto, UpdateRoleDto> implements IBaseService<CreateRoleDto, UpdateRoleDto> {
13+
constructor(
14+
@InjectRepository(Role)
15+
public roleRepository: Repository<Role>
16+
) {
17+
super(roleRepository)
18+
}
19+
}

0 commit comments

Comments
 (0)