Paper 'upload' endpoint implemented #19
@ -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"
|
||||
|
@ -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
|
||||
|
||||
* @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;
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
@ -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
|
||||
|
@ -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";
|
||||
|
||||
/**
|
||||
|
48
src/core/services/common/upload.service.ts
Normal file
48
src/core/services/common/upload.service.ts
Normal 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 {
|
||||
Klutrem
commented
зачем отдельный сервис выделять под аплоуд зачем отдельный сервис выделять под аплоуд
|
||||
/**
|
||||
* 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;
|
||||
Klutrem
commented
не надо так напрямую к енвам обращаться из сервиса не надо так напрямую к енвам обращаться из сервиса
|
||||
|
||||
/**
|
||||
* 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 {
|
||||
Klutrem
commented
трай кэтч на промисах не работает трай кэтч на промисах не работает
|
||||
(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);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
@ -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,
|
||||
|
@ -1,2 +1 @@
|
||||
export * from './app.module';
|
||||
export * from './search.module'
|
||||
export * from './app.module';
|
@ -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 {}
|
Loading…
x
Reference in New Issue
Block a user
а где дексрипшн