yachts controller added
This commit is contained in:
parent
e2797ed159
commit
171d670629
|
|
@ -10,7 +10,7 @@ deploy:
|
||||||
only:
|
only:
|
||||||
- main
|
- main
|
||||||
script:
|
script:
|
||||||
- docker-compose -p "$COMPOSE_PROJECT_NAME" up -d --build
|
- docker compose -p "$COMPOSE_PROJECT_NAME" up -d --build
|
||||||
environment:
|
environment:
|
||||||
name: production
|
name: production
|
||||||
url: http://89.169.188.2
|
url: http://89.169.188.2
|
||||||
|
|
@ -11,7 +11,9 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nestjs/common": "^11.0.1",
|
"@nestjs/common": "^11.0.1",
|
||||||
"@nestjs/core": "^11.0.1",
|
"@nestjs/core": "^11.0.1",
|
||||||
|
"@nestjs/mapped-types": "^2.1.0",
|
||||||
"@nestjs/platform-express": "^11.0.1",
|
"@nestjs/platform-express": "^11.0.1",
|
||||||
|
"class-validator": "^0.14.3",
|
||||||
"reflect-metadata": "^0.2.2",
|
"reflect-metadata": "^0.2.2",
|
||||||
"rxjs": "^7.8.1"
|
"rxjs": "^7.8.1"
|
||||||
},
|
},
|
||||||
|
|
@ -2368,6 +2370,26 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@nestjs/mapped-types": {
|
||||||
|
"version": "2.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@nestjs/mapped-types/-/mapped-types-2.1.0.tgz",
|
||||||
|
"integrity": "sha512-W+n+rM69XsFdwORF11UqJahn4J3xi4g/ZEOlJNL6KoW5ygWSmBB2p0S2BZ4FQeS/NDH72e6xIcu35SfJnE8bXw==",
|
||||||
|
"license": "MIT",
|
||||||
|
"peerDependencies": {
|
||||||
|
"@nestjs/common": "^10.0.0 || ^11.0.0",
|
||||||
|
"class-transformer": "^0.4.0 || ^0.5.0",
|
||||||
|
"class-validator": "^0.13.0 || ^0.14.0",
|
||||||
|
"reflect-metadata": "^0.1.12 || ^0.2.0"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"class-transformer": {
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"class-validator": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@nestjs/platform-express": {
|
"node_modules/@nestjs/platform-express": {
|
||||||
"version": "11.1.9",
|
"version": "11.1.9",
|
||||||
"resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-11.1.9.tgz",
|
"resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-11.1.9.tgz",
|
||||||
|
|
@ -2987,6 +3009,12 @@
|
||||||
"@types/superagent": "^8.1.0"
|
"@types/superagent": "^8.1.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@types/validator": {
|
||||||
|
"version": "13.15.10",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.15.10.tgz",
|
||||||
|
"integrity": "sha512-T8L6i7wCuyoK8A/ZeLYt1+q0ty3Zb9+qbSSvrIVitzT3YjZqkTZ40IbRsPanlB4h1QB3JVL1SYCdR6ngtFYcuA==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/@types/yargs": {
|
"node_modules/@types/yargs": {
|
||||||
"version": "17.0.35",
|
"version": "17.0.35",
|
||||||
"resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
|
"resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
|
||||||
|
|
@ -4443,6 +4471,17 @@
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
"node_modules/class-validator": {
|
||||||
|
"version": "0.14.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.3.tgz",
|
||||||
|
"integrity": "sha512-rXXekcjofVN1LTOSw+u4u9WXVEUvNBVjORW154q/IdmYWy1nMbOU9aNtZB0t8m+FJQ9q91jlr2f9CwwUFdFMRA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@types/validator": "^13.15.3",
|
||||||
|
"libphonenumber-js": "^1.11.1",
|
||||||
|
"validator": "^13.15.20"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/cli-cursor": {
|
"node_modules/cli-cursor": {
|
||||||
"version": "3.1.0",
|
"version": "3.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
|
||||||
|
|
@ -7327,6 +7366,12 @@
|
||||||
"node": ">= 0.8.0"
|
"node": ">= 0.8.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/libphonenumber-js": {
|
||||||
|
"version": "1.12.30",
|
||||||
|
"resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.12.30.tgz",
|
||||||
|
"integrity": "sha512-KxH7uIJFD6+cR6nhdh+wY6prFiH26A3W/W1gTMXnng2PXSwVfi5MhYkdq3Z2Y7vhBVa1/5VJgpNtI76UM2njGA==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/lines-and-columns": {
|
"node_modules/lines-and-columns": {
|
||||||
"version": "1.2.4",
|
"version": "1.2.4",
|
||||||
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
|
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
|
||||||
|
|
@ -9901,6 +9946,15 @@
|
||||||
"node": ">=10.12.0"
|
"node": ">=10.12.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/validator": {
|
||||||
|
"version": "13.15.23",
|
||||||
|
"resolved": "https://registry.npmjs.org/validator/-/validator-13.15.23.tgz",
|
||||||
|
"integrity": "sha512-4yoz1kEWqUjzi5zsPbAS/903QXSYp0UOtHsPpp7p9rHAw/W+dkInskAE386Fat3oKRROwO98d9ZB0G4cObgUyw==",
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.10"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/vary": {
|
"node_modules/vary": {
|
||||||
"version": "1.1.2",
|
"version": "1.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,9 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nestjs/common": "^11.0.1",
|
"@nestjs/common": "^11.0.1",
|
||||||
"@nestjs/core": "^11.0.1",
|
"@nestjs/core": "^11.0.1",
|
||||||
|
"@nestjs/mapped-types": "^2.1.0",
|
||||||
"@nestjs/platform-express": "^11.0.1",
|
"@nestjs/platform-express": "^11.0.1",
|
||||||
|
"class-validator": "^0.14.3",
|
||||||
"reflect-metadata": "^0.2.2",
|
"reflect-metadata": "^0.2.2",
|
||||||
"rxjs": "^7.8.1"
|
"rxjs": "^7.8.1"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import { Controller, Get } from '@nestjs/common';
|
import { Controller, Get } from '@nestjs/common';
|
||||||
import { AppService } from './app.service';
|
import { AppService } from './app.service';
|
||||||
|
|
||||||
@Controller()
|
@Controller('test')
|
||||||
export class AppController {
|
export class AppController {
|
||||||
constructor(private readonly appService: AppService) {}
|
constructor(private readonly appService: AppService) {}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,10 @@
|
||||||
import { Module } from '@nestjs/common';
|
import { Module } from '@nestjs/common';
|
||||||
import { AppController } from './app.controller';
|
import { AppController } from './app.controller';
|
||||||
import { AppService } from './app.service';
|
import { AppService } from './app.service';
|
||||||
|
import { YachtModule } from './yacht/yacht.module';
|
||||||
|
|
||||||
@Module({
|
@Module({
|
||||||
imports: [],
|
imports: [YachtModule],
|
||||||
controllers: [AppController],
|
controllers: [AppController],
|
||||||
providers: [AppService],
|
providers: [AppService],
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
import { IsString, IsNumber, IsBoolean, IsUrl, Min } from 'class-validator';
|
||||||
|
|
||||||
|
export class CreateYachtDto {
|
||||||
|
@IsString()
|
||||||
|
name: string;
|
||||||
|
|
||||||
|
@IsNumber()
|
||||||
|
@Min(1)
|
||||||
|
length: number;
|
||||||
|
|
||||||
|
@IsNumber()
|
||||||
|
@Min(0)
|
||||||
|
speed: number;
|
||||||
|
|
||||||
|
@IsNumber()
|
||||||
|
@Min(0)
|
||||||
|
minCost: number;
|
||||||
|
|
||||||
|
@IsBoolean()
|
||||||
|
hasQuickRent: boolean;
|
||||||
|
|
||||||
|
@IsUrl()
|
||||||
|
pictureUrl: string;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
import { PartialType } from '@nestjs/mapped-types';
|
||||||
|
import { CreateYachtDto } from './create-yacht.dto';
|
||||||
|
|
||||||
|
export class UpdateYachtDto extends PartialType(CreateYachtDto) {}
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
export class Yacht {
|
||||||
|
id?: number;
|
||||||
|
name: string;
|
||||||
|
length: number;
|
||||||
|
speed: number;
|
||||||
|
minCost: number;
|
||||||
|
hasQuickRent: boolean;
|
||||||
|
pictureUrl: string;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
import { Test, TestingModule } from '@nestjs/testing';
|
||||||
|
import { YachtController } from './yacht.controller';
|
||||||
|
|
||||||
|
describe('YachtController', () => {
|
||||||
|
let controller: YachtController;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
const module: TestingModule = await Test.createTestingModule({
|
||||||
|
controllers: [YachtController],
|
||||||
|
}).compile();
|
||||||
|
|
||||||
|
controller = module.get<YachtController>(YachtController);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should be defined', () => {
|
||||||
|
expect(controller).toBeDefined();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
@ -0,0 +1,47 @@
|
||||||
|
import {
|
||||||
|
Controller,
|
||||||
|
Get,
|
||||||
|
Post,
|
||||||
|
Body,
|
||||||
|
Patch,
|
||||||
|
Param,
|
||||||
|
Delete,
|
||||||
|
ParseIntPipe,
|
||||||
|
} from '@nestjs/common';
|
||||||
|
import { YachtService } from './yacht.service';
|
||||||
|
import { CreateYachtDto } from './dto/create-yacht.dto';
|
||||||
|
import { UpdateYachtDto } from './dto/update-yacht.dto';
|
||||||
|
import { Yacht } from './entities/yacht.entity';
|
||||||
|
|
||||||
|
@Controller('yacht') // Routes will be /yacht
|
||||||
|
export class YachtController {
|
||||||
|
constructor(private readonly yachtService: YachtService) {}
|
||||||
|
|
||||||
|
@Post()
|
||||||
|
create(@Body() createYachtDto: CreateYachtDto): Yacht {
|
||||||
|
return this.yachtService.create(createYachtDto);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Get()
|
||||||
|
getAll(): Yacht[] {
|
||||||
|
return this.yachtService.getAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Get(':id')
|
||||||
|
getById(@Param('id', ParseIntPipe) id: number): Yacht {
|
||||||
|
return this.yachtService.getById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Patch(':id')
|
||||||
|
update(
|
||||||
|
@Param('id', ParseIntPipe) id: number,
|
||||||
|
@Body() updateYachtDto: UpdateYachtDto,
|
||||||
|
): Yacht {
|
||||||
|
return this.yachtService.update(id, updateYachtDto);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Delete(':id')
|
||||||
|
remove(@Param('id', ParseIntPipe) id: number): void {
|
||||||
|
return this.yachtService.remove(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
import { Module } from '@nestjs/common';
|
||||||
|
import { YachtService } from './yacht.service';
|
||||||
|
import { YachtController } from './yacht.controller';
|
||||||
|
|
||||||
|
@Module({
|
||||||
|
controllers: [YachtController],
|
||||||
|
providers: [YachtService],
|
||||||
|
})
|
||||||
|
export class YachtModule {}
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
import { Test, TestingModule } from '@nestjs/testing';
|
||||||
|
import { YachtService } from './yacht.service';
|
||||||
|
|
||||||
|
describe('YachtService', () => {
|
||||||
|
let service: YachtService;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
const module: TestingModule = await Test.createTestingModule({
|
||||||
|
providers: [YachtService],
|
||||||
|
}).compile();
|
||||||
|
|
||||||
|
service = module.get<YachtService>(YachtService);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should be defined', () => {
|
||||||
|
expect(service).toBeDefined();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
@ -0,0 +1,53 @@
|
||||||
|
import { Injectable, NotFoundException } from '@nestjs/common';
|
||||||
|
import { Yacht } from './entities/yacht.entity';
|
||||||
|
import { CreateYachtDto } from './dto/create-yacht.dto';
|
||||||
|
import { UpdateYachtDto } from './dto/update-yacht.dto';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class YachtService {
|
||||||
|
private yachts: Yacht[] = [];
|
||||||
|
private idCounter = 1;
|
||||||
|
|
||||||
|
create(createYachtDto: CreateYachtDto): Yacht {
|
||||||
|
const yacht: Yacht = {
|
||||||
|
id: this.idCounter++,
|
||||||
|
...createYachtDto,
|
||||||
|
};
|
||||||
|
this.yachts.push(yacht);
|
||||||
|
return yacht;
|
||||||
|
}
|
||||||
|
|
||||||
|
getAll(): Yacht[] {
|
||||||
|
return this.yachts;
|
||||||
|
}
|
||||||
|
|
||||||
|
getById(id: number): Yacht {
|
||||||
|
const yacht = this.yachts.find((y) => y.id === id);
|
||||||
|
if (!yacht) {
|
||||||
|
throw new NotFoundException(`Yacht with ID ${id} not found`);
|
||||||
|
}
|
||||||
|
return yacht;
|
||||||
|
}
|
||||||
|
|
||||||
|
update(id: number, updateYachtDto: UpdateYachtDto): Yacht {
|
||||||
|
const index = this.yachts.findIndex((y) => y.id === id);
|
||||||
|
if (index === -1) {
|
||||||
|
throw new NotFoundException(`Yacht with ID ${id} not found`);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.yachts[index] = {
|
||||||
|
...this.yachts[index],
|
||||||
|
...updateYachtDto,
|
||||||
|
};
|
||||||
|
|
||||||
|
return this.yachts[index];
|
||||||
|
}
|
||||||
|
|
||||||
|
remove(id: number): void {
|
||||||
|
const index = this.yachts.findIndex((y) => y.id === id);
|
||||||
|
if (index === -1) {
|
||||||
|
throw new NotFoundException(`Yacht with ID ${id} not found`);
|
||||||
|
}
|
||||||
|
this.yachts.splice(index, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue