mirror of
https://github.com/dadosfera/maestro.git
synced 2026-10-24 18:09:09 +00:00
Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
65ab16236f | ||
|
|
b4cc8151d7 |
@@ -113,6 +113,8 @@ spec:
|
|||||||
value: {{ .Values.maestro.platform_api_url }}
|
value: {{ .Values.maestro.platform_api_url }}
|
||||||
- name: STORAGE_EXPLORER_API_URL
|
- name: STORAGE_EXPLORER_API_URL
|
||||||
value: {{ .Values.maestro.storage_explorer_api_url | quote }}
|
value: {{ .Values.maestro.storage_explorer_api_url | quote }}
|
||||||
|
- name: FIREBASE_BASE_URL
|
||||||
|
value: {{ .Values.maestro.firebase_base_url }}
|
||||||
- name: JWT_PRIVATE_KEY
|
- name: JWT_PRIVATE_KEY
|
||||||
valueFrom:
|
valueFrom:
|
||||||
secretKeyRef:
|
secretKeyRef:
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ maestro:
|
|||||||
redis_database: "1"
|
redis_database: "1"
|
||||||
platform_api_url: https://xs2hkhq07k.execute-api.us-east-1.amazonaws.com
|
platform_api_url: https://xs2hkhq07k.execute-api.us-east-1.amazonaws.com
|
||||||
storage_explorer_api_url: "http://storage-explorer-{customer}.data-apps.svc.cluster.local:8000/api"
|
storage_explorer_api_url: "http://storage-explorer-{customer}.data-apps.svc.cluster.local:8000/api"
|
||||||
|
firebase_base_url: https://feature-flag-25bf6-default-rtdb.firebaseio.com/stg
|
||||||
|
|
||||||
hostname: maestro.stg.dadosfera.ai
|
hostname: maestro.stg.dadosfera.ai
|
||||||
|
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ maestro:
|
|||||||
redis_database: "0"
|
redis_database: "0"
|
||||||
redis_tls: "true"
|
redis_tls: "true"
|
||||||
cookie_secret: "13cc5e136d3074bcc05bec8697092ec1f5f376bf"
|
cookie_secret: "13cc5e136d3074bcc05bec8697092ec1f5f376bf"
|
||||||
|
firebase_base_url: https://feature-flag-25bf6-default-rtdb.firebaseio.com/prd
|
||||||
autoscaling:
|
autoscaling:
|
||||||
enabled: false
|
enabled: false
|
||||||
minReplicas: 1
|
minReplicas: 1
|
||||||
|
|||||||
+27
-1
@@ -3580,7 +3580,10 @@
|
|||||||
"content": {
|
"content": {
|
||||||
"application/json": {
|
"application/json": {
|
||||||
"schema": {
|
"schema": {
|
||||||
"type": "string"
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -8593,6 +8596,29 @@
|
|||||||
"Health"
|
"Health"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"/release_note": {
|
||||||
|
"get": {
|
||||||
|
"operationId": "ReleaseNoteController_getLatestReleaseNote",
|
||||||
|
"parameters": [],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "",
|
||||||
|
"content": {
|
||||||
|
"application/json": {
|
||||||
|
"schema": {
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"security": [
|
||||||
|
{
|
||||||
|
"access-token": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"info": {
|
"info": {
|
||||||
|
|||||||
@@ -35,6 +35,8 @@ import { ShareMetadataModule } from './modules/share-metadata/share-metadata.mod
|
|||||||
import { ApiKeyModule } from './modules/api-key/api-key.module';
|
import { ApiKeyModule } from './modules/api-key/api-key.module';
|
||||||
import { PlatformApiModule } from './modules/platform-api/platform-api.module';
|
import { PlatformApiModule } from './modules/platform-api/platform-api.module';
|
||||||
import { StorageExplorerModule } from './modules/storage-explorer/storage-explorer.module';
|
import { StorageExplorerModule } from './modules/storage-explorer/storage-explorer.module';
|
||||||
|
import { ReleaseNoteModule } from './modules/release_note/release_note.module';
|
||||||
|
|
||||||
|
|
||||||
@Module({
|
@Module({
|
||||||
providers: [
|
providers: [
|
||||||
@@ -79,6 +81,7 @@ import { StorageExplorerModule } from './modules/storage-explorer/storage-explor
|
|||||||
StorageExplorerModule,
|
StorageExplorerModule,
|
||||||
//Always leave HealthModule last, so it is on the bottom of swagger
|
//Always leave HealthModule last, so it is on the bottom of swagger
|
||||||
HealthModule,
|
HealthModule,
|
||||||
|
ReleaseNoteModule,
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
export class AppModule {}
|
export class AppModule {}
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
export type ReleaseNoteDTO = {
|
||||||
|
id: string;
|
||||||
|
date: string;
|
||||||
|
tag: string;
|
||||||
|
title: string;
|
||||||
|
visible: boolean;
|
||||||
|
expiryDate: string;
|
||||||
|
content: string;
|
||||||
|
showEmojis: boolean;
|
||||||
|
image?: string;
|
||||||
|
link?: string;
|
||||||
|
linkText?: string;
|
||||||
|
};
|
||||||
|
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
import { Test, TestingModule } from '@nestjs/testing';
|
||||||
|
import { ReleaseNoteController } from './release_note.controller';
|
||||||
|
import { ReleaseNoteService } from './release_note.service';
|
||||||
|
|
||||||
|
describe('ReleaseNoteController', () => {
|
||||||
|
let controller: ReleaseNoteController;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
const module: TestingModule = await Test.createTestingModule({
|
||||||
|
controllers: [ReleaseNoteController],
|
||||||
|
providers: [ReleaseNoteService],
|
||||||
|
}).compile();
|
||||||
|
|
||||||
|
controller = module.get<ReleaseNoteController>(ReleaseNoteController);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should be defined', () => {
|
||||||
|
expect(controller).toBeDefined();
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
import { Controller, Get, Inject } from '@nestjs/common';
|
||||||
|
import { ReleaseNoteService } from './release_note.service';
|
||||||
|
import { Authenticated } from 'src/decorators/authentication.decorator';
|
||||||
|
import { Language } from 'src/decorators/language.decorator';
|
||||||
|
import { LanguageEnum } from 'src/utils/languages.enum';
|
||||||
|
import DadosferaLogger from '@dadosfera/dadosfera-logs';
|
||||||
|
|
||||||
|
@Controller('release_note')
|
||||||
|
@Authenticated()
|
||||||
|
export class ReleaseNoteController {
|
||||||
|
logger: DadosferaLogger;
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
@Inject(DadosferaLogger)
|
||||||
|
dadosferaLogger: DadosferaLogger,
|
||||||
|
private readonly releaseNoteService: ReleaseNoteService,
|
||||||
|
) {
|
||||||
|
this.logger = dadosferaLogger.logger;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Get()
|
||||||
|
async getLatestReleaseNote(@Language() language: LanguageEnum) {
|
||||||
|
this.logger.info(`Fetching latest release note for language: ${language}`);
|
||||||
|
return await this.releaseNoteService.getLatestReleaseNote(language);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
import { Module } from '@nestjs/common';
|
||||||
|
import { ReleaseNoteService } from './release_note.service';
|
||||||
|
import { ReleaseNoteController } from './release_note.controller';
|
||||||
|
import DadosferaLogger from '@dadosfera/dadosfera-logs';
|
||||||
|
|
||||||
|
@Module({
|
||||||
|
controllers: [ReleaseNoteController],
|
||||||
|
providers: [ReleaseNoteService, DadosferaLogger]
|
||||||
|
})
|
||||||
|
export class ReleaseNoteModule {}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
import { Test, TestingModule } from '@nestjs/testing';
|
||||||
|
import { ReleaseNoteService } from './release_note.service';
|
||||||
|
|
||||||
|
describe('ReleaseNoteService', () => {
|
||||||
|
let service: ReleaseNoteService;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
const module: TestingModule = await Test.createTestingModule({
|
||||||
|
providers: [ReleaseNoteService],
|
||||||
|
}).compile();
|
||||||
|
|
||||||
|
service = module.get<ReleaseNoteService>(ReleaseNoteService);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should be defined', () => {
|
||||||
|
expect(service).toBeDefined();
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
import { Inject, Injectable } from '@nestjs/common';
|
||||||
|
import axios, { AxiosInstance } from 'axios';
|
||||||
|
import { LanguageEnum } from 'src/utils/languages.enum';
|
||||||
|
import { ReleaseNoteDTO } from './dto/release_note.dto';
|
||||||
|
import DadosferaLogger from '@dadosfera/dadosfera-logs';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class ReleaseNoteService {
|
||||||
|
client: AxiosInstance;
|
||||||
|
logger: DadosferaLogger;
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
@Inject(DadosferaLogger)
|
||||||
|
dadosferaLogger: DadosferaLogger,
|
||||||
|
) {
|
||||||
|
this.logger = dadosferaLogger.logger;
|
||||||
|
this.client = axios.create({
|
||||||
|
baseURL: process.env.FIREBASE_BASE_URL,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async getLatestReleaseNote(lang: LanguageEnum) {
|
||||||
|
try {
|
||||||
|
const lng = lang.split('-');
|
||||||
|
const language = lng[0] + '-' + lng[1].toUpperCase();
|
||||||
|
|
||||||
|
const endpoint = `/release_note/${language}.json`;
|
||||||
|
const {
|
||||||
|
data,
|
||||||
|
status,
|
||||||
|
config
|
||||||
|
} = await this.client.get<ReleaseNoteDTO>(endpoint)
|
||||||
|
this.logger.info(`Fetched release note for language: ${lang} with status: ${status}`);
|
||||||
|
this.logger.info(`Request URL: ${config.baseURL}/${config.url}`);
|
||||||
|
|
||||||
|
return data;
|
||||||
|
} catch (error) {
|
||||||
|
this.logger.error(`Error fetching release note: ${error.message}`);
|
||||||
|
|
||||||
|
if (axios.isAxiosError(error)) {
|
||||||
|
this.logger.error(`Axios error details: ${error.toJSON()}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user