Newer
Older
import { Body, Controller, Delete, Get, Param, Post, Put, Request, UseGuards } from '@nestjs/common';
import { ApiBody, ApiParam, ApiTags } from '@nestjs/swagger';
import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard';
import { StructuresService } from '../structures/services/structures.service';
import { IsPersonalOfferOwnerGuard } from '../users/guards/isPersonalOfferOwner.guard';
import { IUser } from '../users/interfaces/user.interface';
import { UsersService } from '../users/services/users.service';
import { CreatePersonalOfferDto } from './dto/create-personal-offer.dto';
import { PersonalOfferDto } from './dto/personal-offer.dto';
import { PersonalOffersService } from './personal-offers.service';
import { PersonalOfferDocument } from './schemas/personal-offer.schema';
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
@Controller('personal-offers')
export class PersonalOffersController {
constructor(
private personalOffersService: PersonalOffersService,
private structuresService: StructuresService,
private usersService: UsersService
) {}
/**
* Return personal offer of given id.
* @param id
* @returns {PersonalOffer} Personal offer
*/
@Get(':id')
@ApiParam({ name: 'id', type: String, required: true })
public async find(@Param('id') id: string) {
return this.personalOffersService.findOne(id);
}
/**
* Create and return a personal offer.
* @param createPersonalOfferDto
* @returns {PersonalOffer} created personal offer
*/
@Post()
@ApiBody({ type: CreatePersonalOfferDto, required: true })
@UseGuards(JwtAuthGuard)
public async create(
@Request() req,
@Body() createPersonalOfferDto: CreatePersonalOfferDto
): Promise<PersonalOfferDocument> {
const user: IUser = req.user;
const personalOfferDocument: PersonalOfferDocument = await this.personalOffersService.create(
createPersonalOfferDto
);
await this.structuresService.addPersonalOffer(createPersonalOfferDto.structureId, personalOfferDocument);
await this.usersService.addPersonalOffer(user._id, personalOfferDocument);
return personalOfferDocument;
}
/**
* Update and return a personal offer.
* @param id - id of the personal offer to update
* @param updatePersonalOfferDto - personal offer data to update
* @returns {PersonalOffer} Updated personal offer
*/
@Put(':id')
@ApiParam({ name: 'id', type: String, required: true })
@ApiBody({ type: PersonalOfferDto, required: true })
@UseGuards(JwtAuthGuard, IsPersonalOfferOwnerGuard)
public async update(
@Param('id') id: string,
@Body() updatePersonalOfferDto: PersonalOfferDto
): Promise<PersonalOfferDocument> {
return this.personalOffersService.update(id, updatePersonalOfferDto);
}
/**
* Delete and return a personal offer.
* @param id - id of the personal offer to delete
* @returns {PersonalOffer} Deleted personal offer
*/
@Delete(':id')
@ApiParam({ name: 'id', type: String, required: true })
@UseGuards(JwtAuthGuard, IsPersonalOfferOwnerGuard)
public async delete(@Param('id') id: string): Promise<PersonalOfferDocument> {
return this.personalOffersService.delete(id);
}
}