import DadosferaLogger from '@dadosfera/dadosfera-logs'; import { Body, Controller, Header, HttpCode, Inject, Param, Post, Query, Req, UseFilters, UseGuards } from '@nestjs/common'; import { ApiCreatedResponse, ApiHeaders, ApiOkResponse, ApiTags } from '@nestjs/swagger'; import { ApiInternalOnlyController } from 'src/decorators/swagger.decorator'; import { GrpcToHttpExceptionFilter } from 'src/error/grpc-to-http-exception.filter'; import { LanguageEnum } from 'src/utils/languages.enum'; import { UsersService } from '../users/users.service'; import { Language } from 'src/decorators/language.decorator'; import { OpenDataService } from './open-data.service'; import { CreateUserOpenDataDTO, WordpressForm } from './dto/wordpres-form'; import { CORSGuard, SetOrigin } from 'src/decorators/set-origin.decorator'; import { Metadata } from '@grpc/grpc-js'; import { PackTheMetadata } from 'src/utils/ PackTheMetadata'; import { request } from 'http'; import { Request } from 'express'; @Controller('open-data') @ApiInternalOnlyController() @ApiTags('OpenData') @ApiHeaders([{ name: 'dadosfera-lang', enum: LanguageEnum, required: false }]) @UseFilters(GrpcToHttpExceptionFilter) export class OpenDataController { logger: DadosferaLogger; constructor( @Inject(DadosferaLogger) dadosferaLogger: DadosferaLogger, private openDataService: OpenDataService, ) { this.logger = dadosferaLogger.logger; } @Post("/sharing-ocean-data") // @SetOrigin('devsbm.dadosfera.io') // @UseGuards(CORSGuard) @HttpCode(200) @Header('content-type', 'application/json') @ApiOkResponse() async createUser( @Body() body: WordpressForm, @Query('language') language: string, @Req() request: Request, ) { this.logger.info('createUser for open data' + JSON.stringify({ language, body })); this.logger.info('headers' + JSON.stringify({ headers: request.headers })); // "401573bb-334f-44b2-b30e-88d4cea31ae9" // const OPENDATA_PUBLIC_USERS_GROUP_ID = process.env.OPEN_GROUP_ID; // ""f239718a-a271-4ef9-ae7e-02a2f0f3aa6e"" // const OPENDATA_CUSTOMER_ID = process.env.OPEN_CUSTOMER_ID; const OPENDATA_CUSTOMER_ID = "b3e3dfe5-b992-4586-a73c-c0b0c00f615d"; this.logger.info("OPENDATA_CUSTOMER_ID: " + process.env.OPEN_CUSTOMER_ID) this.logger.info("OPEN_GROUP_ID: " + process.env.OPEN_GROUP_ID) const roles = ["e3f98a2f-7748-4981-8505-7695c8ca8218"]; const metadata = PackTheMetadata({ language: language || 'en-us' }); const data = {} try { Object.keys(body.fields) .filter(key => body.fields[key].required === "1") .forEach(key => { const field = body.fields[key] data[field.id] = field.value }); } catch (e) { this.logger.error('user data ' + e.message); } const user: CreateUserOpenDataDTO = { email: data["email"], enquiryType: data["enquiry_type"], firstName: data["first_name"], lastName: data["last_name"], organization: data["organization"] } this.logger.info('user request' + JSON.stringify({ user, roles, customer: OPENDATA_CUSTOMER_ID })); try { await this.openDataService.createUser(OPENDATA_CUSTOMER_ID, user, roles, metadata); this.logger.info('user created with sucessfull data'); return { success: true, status: 'success', message: 'user created with succesfull' } } catch (e) { this.logger.error('failed with exception: ' + e.message); return { success: false, status: 'failed', message: e.message }; } } }