Paper 'upload' endpoint implemented #19
@ -3,7 +3,7 @@
|
|||||||
__isint='^[0-9]+$'
|
__isint='^[0-9]+$'
|
||||||
__isvalidstr='^[a-z0-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])$'
|
__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() {
|
create_template() {
|
||||||
curl -H "Content-Type: application/json" -X PUT "$1:$2/_index_template/papers_t" -d @"$3"
|
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 { SearchService } from "../../core/services/common/search.service";
|
||||||
import { PageInterceptor } from "../../core/interceptors/page.interceptor";
|
import { PageInterceptor } from "../../core/interceptors/page.interceptor";
|
||||||
import { ApiExtraModels, ApiGatewayTimeoutResponse, ApiOperation, ApiResponse, ApiTags } from "@nestjs/swagger";
|
import { ApiExtraModels, ApiGatewayTimeoutResponse, ApiOperation, ApiResponse, ApiTags } from "@nestjs/swagger";
|
||||||
import { EsHitDto, EsResponseDto, PageDto, PaperDto, SearchQueryDto } from "../../core/domain";
|
import { EsHitDto, EsResponseDto, PageDto, PaperDto, SearchQueryDto } from "../../core/domain";
|
||||||
import { HttpExceptionFilter } from "../../core/filters/http-exception.filter";
|
import { HttpExceptionFilter } from "../../core/filters/http-exception.filter";
|
||||||
|
import { UploadService } from "../../core/services/common/upload.service";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* /papers/ route controller
|
* /papers/ route controller
|
||||||
@ -15,7 +16,10 @@ import { HttpExceptionFilter } from "../../core/filters/http-exception.filter";
|
|||||||
})
|
})
|
||||||
@ApiExtraModels(EsHitDto, EsResponseDto)
|
@ApiExtraModels(EsHitDto, EsResponseDto)
|
||||||
export class PapersController {
|
export class PapersController {
|
||||||
constructor(private searchService: SearchService) {}
|
constructor(
|
||||||
|
private searchService: SearchService,
|
||||||
|
private uploadService: UploadService
|
||||||
|
) {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Request handler for: GET /papers/search
|
* 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 { 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
|
* List of allowed properties in this DTO
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import { HttpService } from "@nestjs/axios";
|
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 { map, take } from "rxjs";
|
||||||
import { EsMultimatchQueryDto } from "src/core/domain/dtos/elastic/es-multimatch.dto";
|
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";
|
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 * as modules from '../../core/modules'
|
||||||
import { CommonModule } from './common/common.module';
|
import { CommonModule } from './common/common.module';
|
||||||
import { PrometheusModule } from '@willsoto/nestjs-prometheus';
|
import { PrometheusModule } from '@willsoto/nestjs-prometheus';
|
||||||
import { SearchModule } from './search.module';
|
import { PapersModule } from './papers.module';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* application modules list
|
* application modules list
|
||||||
@ -19,7 +19,7 @@ const modulesList = Object.keys(modules).map(moduleIndex => modules[moduleIndex
|
|||||||
*/
|
*/
|
||||||
@Module({
|
@Module({
|
||||||
imports: [
|
imports: [
|
||||||
SearchModule,
|
PapersModule,
|
||||||
PrometheusModule.register(),
|
PrometheusModule.register(),
|
||||||
CacheModule.register(),
|
CacheModule.register(),
|
||||||
CommonModule,
|
CommonModule,
|
||||||
|
@ -1,2 +1 @@
|
|||||||
export * from './app.module';
|
export * from './app.module';
|
||||||
export * from './search.module'
|
|
@ -2,6 +2,7 @@ import { HttpModule } from "@nestjs/axios";
|
|||||||
import { CacheModule, Module } from "@nestjs/common";
|
import { CacheModule, Module } from "@nestjs/common";
|
||||||
import { PapersController } from "../../application";
|
import { PapersController } from "../../application";
|
||||||
import { SearchService } from "../../core/services/common/search.service";
|
import { SearchService } from "../../core/services/common/search.service";
|
||||||
|
import { UploadService } from "../../core/services/common/upload.service";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Search module
|
* Search module
|
||||||
@ -11,8 +12,8 @@ import { SearchService } from "../../core/services/common/search.service";
|
|||||||
HttpModule,
|
HttpModule,
|
||||||
CacheModule.register(),
|
CacheModule.register(),
|
||||||
],
|
],
|
||||||
exports: [SearchService],
|
exports: [SearchService, UploadService],
|
||||||
providers: [SearchService],
|
providers: [SearchService, UploadService],
|
||||||
controllers: [PapersController],
|
controllers: [PapersController],
|
||||||
})
|
})
|
||||||
export class SearchModule {}
|
export class PapersModule {}
|
Loading…
x
Reference in New Issue
Block a user
а где дексрипшн