Paper 'upload' endpoint implemented #19

Open
danny-mhlv wants to merge 1 commits from feature/upload into develop
8 changed files with 89 additions and 13 deletions
Showing only changes of commit 324e6743d8 - Show all commits

View File

@ -3,7 +3,7 @@
__isint='^[0-9]+$'
__isvalidstr='^[a-z0-9]+$'
__isvalidaddr='^[a-z]+$|^((25[0-5]|2[0-4]?[0-9]|1[0-9]?[0-9]|[3-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4]?[0-9]|1[0-9]?[0-9]|[3-9][0-9]|[0-9])$'
__isJSONfile='^[a-z0-9\_\-]+(\.json)$'
__isJSONfile='^[-_\/a-zA-Z\.]+(\.json){1}$'
create_template() {
curl -H "Content-Type: application/json" -X PUT "$1:$2/_index_template/papers_t" -d @"$3"

View File

@ -1,9 +1,10 @@
import { Controller, Get, HttpCode, Param, ParseUUIDPipe, Query, UseFilters, UseInterceptors } from "@nestjs/common";
import { Body, Controller, Get, HttpCode, Param, ParseUUIDPipe, Post, Put, Query, UseFilters, UseInterceptors } from "@nestjs/common";
import { SearchService } from "../../core/services/common/search.service";
import { PageInterceptor } from "../../core/interceptors/page.interceptor";
import { ApiExtraModels, ApiGatewayTimeoutResponse, ApiOperation, ApiResponse, ApiTags } from "@nestjs/swagger";
import { EsHitDto, EsResponseDto, PageDto, PaperDto, SearchQueryDto } from "../../core/domain";
import { HttpExceptionFilter } from "../../core/filters/http-exception.filter";
import { UploadService } from "../../core/services/common/upload.service";
/**
* /papers/ route controller
@ -15,7 +16,10 @@ import { HttpExceptionFilter } from "../../core/filters/http-exception.filter";
})
@ApiExtraModels(EsHitDto, EsResponseDto)
export class PapersController {
constructor(private searchService: SearchService) {}
constructor(
private searchService: SearchService,
private uploadService: UploadService
) {}
/**
* Request handler for: GET /papers/search
@ -80,4 +84,28 @@ export class PapersController {
}
);
}
/**
* Request handler for PUT /papers/upload
* @param uuid
Review

а где дексрипшн

а где дексрипшн
* @param response
* @returns a response with a requested object
*/
@ApiTags('Upload')
@ApiOperation({
summary: 'Uploads paper',
tags: ['Upload']
})
@Put('upload')
uploadPaper(@Body() paperData: PaperDto) {
console.log('gdgdgdgd')
return this.uploadService.upload(paperData).then(
(response) => {
return response;
},
(error) => {
throw error;
}
)
}
}

View File

@ -1,5 +1,5 @@
import { ApiExtraModels, ApiProperty } from "@nestjs/swagger";
import { IsArray, IsDefined, IsIn, IsInt, IsNotEmpty, IsOptional, IsString } from "class-validator";
import { IsArray, IsNotEmpty, IsString } from "class-validator";
/**
* List of allowed properties in this DTO

View File

@ -1,8 +1,8 @@
import { HttpService } from "@nestjs/axios";
import { GatewayTimeoutException, ImATeapotException, Injectable, NotFoundException } from "@nestjs/common";
import { GatewayTimeoutException, Injectable, NotFoundException } from "@nestjs/common";
import { map, take } from "rxjs";
import { EsMultimatchQueryDto } from "src/core/domain/dtos/elastic/es-multimatch.dto";
import { EsResponseDto, SearchQueryDto} from "../../domain/dtos";
import { EsResponseDto, SearchQueryDto } from "../../domain/dtos";
import { EsQueryDto } from "../../domain/dtos/elastic/es-query.dto";
/**

View File

@ -0,0 +1,48 @@
import { HttpService } from "@nestjs/axios";
import { Injectable } from "@nestjs/common";
import { map, take } from "rxjs";
import { PaperDto } from "../../domain/dtos";
/**
* Upload service provider
*/
@Injectable()
export class UploadService {
Review

зачем отдельный сервис выделять под аплоуд

зачем отдельный сервис выделять под аплоуд
/**
* Constructs the service with injection of
* HTTPService instance
* @param httpService
*/
constructor(private readonly httpService: HttpService) {}
/**
* Elastichsearch server port-number
*/
private readonly ES_PORT = process.env.ES_PORT;
Review

не надо так напрямую к енвам обращаться из сервиса

не надо так напрямую к енвам обращаться из сервиса
/**
* Elasticsearch IP address
*/
private readonly ES_IP = process.env.ES_CONTAINER_NAME;
/**
* Uploads a paper
* @returns
*/
async upload(paperData: PaperDto): Promise<Object | any> {
return new Promise((resolve, reject) => {
try {
Review

трай кэтч на промисах не работает

трай кэтч на промисах не работает
(this.httpService.post(`http://${this.ES_IP}:${this.ES_PORT}/papers/_doc/`, {
data: paperData,
headers: {'Content-Type': 'application/json'},
}))
?.pipe(take(1), map(axiosRes => axiosRes.data))
.subscribe((res: Object | any) => {
resolve(res);
});
} catch (error) {
reject(error);
}
});
}
}

View File

@ -7,7 +7,7 @@ import { LoggerInterceptor } from '../../core/interceptors'
import * as modules from '../../core/modules'
import { CommonModule } from './common/common.module';
import { PrometheusModule } from '@willsoto/nestjs-prometheus';
import { SearchModule } from './search.module';
import { PapersModule } from './papers.module';
/**
* application modules list
@ -19,7 +19,7 @@ const modulesList = Object.keys(modules).map(moduleIndex => modules[moduleIndex
*/
@Module({
imports: [
SearchModule,
PapersModule,
PrometheusModule.register(),
CacheModule.register(),
CommonModule,

View File

@ -1,2 +1 @@
export * from './app.module';
export * from './search.module'
export * from './app.module';

View File

@ -2,6 +2,7 @@ import { HttpModule } from "@nestjs/axios";
import { CacheModule, Module } from "@nestjs/common";
import { PapersController } from "../../application";
import { SearchService } from "../../core/services/common/search.service";
import { UploadService } from "../../core/services/common/upload.service";
/**
* Search module
@ -11,8 +12,8 @@ import { SearchService } from "../../core/services/common/search.service";
HttpModule,
CacheModule.register(),
],
exports: [SearchService],
providers: [SearchService],
exports: [SearchService, UploadService],
providers: [SearchService, UploadService],
controllers: [PapersController],
})
export class SearchModule {}
export class PapersModule {}