Разделение методов создания и обновления элементов, добавление полей author, description, service_name. Исправление бага при котором не удалялось апи. Удаление из ответа лишних полей __v и _id

This commit is contained in:
vigdorov
2020-07-10 15:55:10 +03:00
parent 2a671f30d0
commit 89cf9d0c84
6 changed files with 148 additions and 59 deletions

View File

@ -1,9 +1,15 @@
import { Controller, Get, Post, Body, Param, Options, Header, Delete, HttpCode } from '@nestjs/common';
import { Controller, Get, Post, Body, Param, Options, Header, Delete, HttpCode, Put } from '@nestjs/common';
import {StoreService} from './store.service';
import {Store, StoreResponse, StoreRequest} from './store.schema';
import {Store, StoreRequest} from './store.schema';
import {ApiResponse} from '@nestjs/swagger';
import {ALLOW_ORIGIN_ALL, ALLOW_METHOD, ALLOW_CREDENTIALS, CONTENT_LENGTH, ALLOW_HEADERS} from 'src/consts';
const prepareStoreToStoreRequest = ({
key, value, description, service_name, author
}: Store): StoreRequest => ({
key, value, description, service_name, author,
});
@Controller('store')
export class StoreController {
constructor(
@ -15,10 +21,11 @@ export class StoreController {
@ApiResponse({
status: 200,
description: 'Список всех пар ключ-значение',
type: [StoreResponse],
type: [StoreRequest],
})
async findAll(): Promise<Store[]> {
return this.storeService.findAll();
async findAll(): Promise<StoreRequest[]> {
const storeList = await this.storeService.findAll();
return storeList.map(prepareStoreToStoreRequest);
}
@Get(':key')
@ -26,21 +33,35 @@ export class StoreController {
@ApiResponse({
status: 200,
description: 'Возвращает пару ключ-значение по ключу',
type: StoreResponse,
type: StoreRequest,
})
async findOne(@Param() {key}: {key: string}): Promise<Store> {
return this.storeService.findOne(key);
async findOne(@Param() {key}: {key: string}): Promise<StoreRequest> {
const store = await this.storeService.findOne(key);
return prepareStoreToStoreRequest(store);
}
@Post()
@Header(...ALLOW_ORIGIN_ALL)
@ApiResponse({
status: 200,
description: 'Создает новую пару ключ-значение или заменяет существующую по ключу',
type: StoreResponse,
description: 'Создает новую пару ключ-значение',
type: StoreRequest,
})
async create(@Body() createStoreClass: StoreRequest): Promise<Store> {
return this.storeService.create(createStoreClass);
async create(@Body() createStoreClass: StoreRequest): Promise<StoreRequest> {
const store = await this.storeService.create(createStoreClass);
return prepareStoreToStoreRequest(store);
}
@Put()
@Header(...ALLOW_ORIGIN_ALL)
@ApiResponse({
status: 200,
description: 'Обновляет по ключу объект и мета-поля, кроме author',
type: StoreRequest,
})
async update(@Body() updateStoreClass: StoreRequest): Promise<StoreRequest> {
const store = await this.storeService.update(updateStoreClass);
return prepareStoreToStoreRequest(store);
}
@Delete(':key')
@ -48,10 +69,11 @@ export class StoreController {
@ApiResponse({
status: 200,
description: 'Удаляет пару ключ-значение по ключу',
type: String,
type: StoreRequest,
})
async removeOne(@Param() {key}: {key: string}): Promise<string> {
return this.storeService.removeOne(key);
async removeOne(@Param() {key}: {key: string}): Promise<StoreRequest> {
const store = await this.storeService.removeOne(key);
return prepareStoreToStoreRequest(store);
}
@Options()