Skip to content

Commit ef4b59e

Browse files
committed
feat: implement example client api
1 parent 7431dfd commit ef4b59e

File tree

7 files changed

+127
-52
lines changed

7 files changed

+127
-52
lines changed

example/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@
2222
"dependencies": {
2323
"@nestjs/common": "^10.0.0",
2424
"@nestjs/core": "^10.0.0",
25-
"@nestjs/mapped-types": "*",
2625
"@nestjs/platform-express": "^10.0.0",
2726
"@r2don/nest-http-interface": "^1.3.0",
27+
"class-transformer": "^0.5.1",
2828
"reflect-metadata": "^0.1.13",
2929
"rxjs": "^7.8.1"
3030
},

example/pnpm-lock.yaml

Lines changed: 15 additions & 46 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

example/src/app.module.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import { Module } from '@nestjs/common';
22
import { ServerModule } from './server/server.module';
3+
import { ClientModule } from './client/client.module';
4+
import { HttpInterfaceModule } from '@r2don/nest-http-interface';
35

46
@Module({
5-
imports: [ServerModule],
7+
imports: [HttpInterfaceModule.forRoot(), ServerModule, ClientModule],
68
})
79
export class AppModule {}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import {
2+
Controller,
3+
Post,
4+
Body,
5+
Delete,
6+
Get,
7+
Param,
8+
Patch,
9+
} from '@nestjs/common';
10+
import { ClientHttpService } from './client.http.service';
11+
import { CreateServerDto } from '../server/dto/create-server.dto';
12+
import { UpdateServerDto } from '../server/dto/update-server.dto';
13+
import { Server } from '../server/entities/server.entity';
14+
15+
@Controller('client')
16+
export class ClientController {
17+
constructor(private readonly clientService: ClientHttpService) {}
18+
19+
@Post()
20+
async create(@Body() createClientDto: CreateServerDto): Promise<Server> {
21+
return await this.clientService.create(createClientDto);
22+
}
23+
24+
@Get()
25+
findAll(): Promise<Server[]> {
26+
return this.clientService.findAll();
27+
}
28+
29+
@Get(':id')
30+
findOne(@Param('id') id: string): Promise<Server> {
31+
return this.clientService.findOne(+id);
32+
}
33+
34+
@Patch(':id')
35+
update(
36+
@Param('id') id: string,
37+
@Body() updateServerDto: UpdateServerDto,
38+
): Promise<void> {
39+
return this.clientService.update(+id, updateServerDto);
40+
}
41+
42+
@Delete(':id')
43+
remove(@Param('id') id: string): Promise<void> {
44+
return this.clientService.remove(+id);
45+
}
46+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import {
2+
DeleteExchange,
3+
GetExchange,
4+
HttpInterface,
5+
imitation,
6+
PatchExchange,
7+
PathVariable,
8+
PostExchange,
9+
RequestBody,
10+
ResponseBody,
11+
} from '@r2don/nest-http-interface';
12+
import { CreateServerDto } from '../server/dto/create-server.dto';
13+
import { Server } from '../server/entities/server.entity';
14+
import { UpdateServerDto } from '../server/dto/update-server.dto';
15+
16+
@HttpInterface('http://localhost:3000')
17+
export class ClientHttpService {
18+
@PostExchange('/api/servers')
19+
@ResponseBody(Server) // you don't need to use this decorator if cli plugin is configured (see nest-cli.json)
20+
async create(
21+
@RequestBody() createServerDto: CreateServerDto,
22+
): Promise<Server> {
23+
return imitation(createServerDto);
24+
}
25+
26+
@GetExchange('/api/servers')
27+
async findAll(): Promise<Server[]> {
28+
return imitation();
29+
}
30+
31+
@GetExchange('/api/servers/{id}')
32+
async findOne(@PathVariable('id') id: number): Promise<Server> {
33+
return imitation(id);
34+
}
35+
36+
@PatchExchange('/api/servers/{id}')
37+
async update(
38+
@PathVariable('id') id: number,
39+
@RequestBody()
40+
updateServerDto: UpdateServerDto,
41+
): Promise<void> {
42+
return imitation(id, updateServerDto);
43+
}
44+
45+
@DeleteExchange('/api/servers/{id}')
46+
async remove(@PathVariable('id') id: number): Promise<void> {
47+
return imitation(id);
48+
}
49+
}

example/src/client/client.module.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { Module } from '@nestjs/common';
2+
import { ClientHttpService } from './client.http.service';
3+
import { ClientController } from './client.controller';
4+
5+
@Module({
6+
controllers: [ClientController],
7+
providers: [ClientHttpService],
8+
})
9+
export class ClientModule {}
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { PartialType } from '@nestjs/mapped-types';
2-
import { CreateServerDto } from './create-server.dto';
3-
4-
export class UpdateServerDto extends PartialType(CreateServerDto) {}
1+
export class UpdateServerDto {
2+
name?: string;
3+
isOnline?: boolean;
4+
}

0 commit comments

Comments
 (0)