mirror of
https://github.com/kmitresse/Compo-Service-Log-Project.git
synced 2026-05-13 17:11:49 +00:00
feat: Launch Server and database async
This commit is contained in:
+2
-7
@@ -5,14 +5,9 @@ import { TypeOrmDataSource } from "./TypeOrmDataSource";
|
||||
|
||||
dotenv.config();
|
||||
|
||||
// 1. initialize database connexions
|
||||
|
||||
// 2. Load all datasets
|
||||
|
||||
// 3. Start the server
|
||||
|
||||
TypeOrmDataSource.initialize()
|
||||
.then(() => DatasetCollection.loadAll())
|
||||
.then(() => console.log("All datasets are loaded"))
|
||||
.then(() => new Server().start())
|
||||
.catch(console.error);
|
||||
|
||||
new Server().start();
|
||||
|
||||
+12
-24
@@ -4,40 +4,28 @@ import axios from "axios";
|
||||
|
||||
const router = Router();
|
||||
|
||||
router.post("/randomize", (req: Request, res: Response) => {
|
||||
router.post("/randomize", async (req: Request, res: Response) => {
|
||||
const size: number = req.query.size ? parseInt(req.query.size as string) : 10;
|
||||
|
||||
DatasetCollection.getDatasetByMatchingSchema(req.body)
|
||||
.then((endpoints) => {
|
||||
// Split evenly the size between the datasets
|
||||
const sizePerDataset = Math.floor(size / endpoints.length);
|
||||
|
||||
return Promise.all(
|
||||
endpoints.map(async (endpoint) => {
|
||||
const params = { size: sizePerDataset };
|
||||
|
||||
return axios
|
||||
.post(endpoint, req.body, { params })
|
||||
.then((res) => res.data.data);
|
||||
})
|
||||
);
|
||||
})
|
||||
.then((r) => {
|
||||
const data = r
|
||||
const data = await Promise.all(
|
||||
DatasetCollection.datasets.map((dataset) =>
|
||||
axios
|
||||
.post(dataset.endpoint, req.body, { params: { size } })
|
||||
.then((res) => res.data.data)
|
||||
)
|
||||
).then((r) =>
|
||||
r
|
||||
.flat()
|
||||
.sort(() => Math.random() - 0.5)
|
||||
.slice(0, size);
|
||||
.slice(0, size)
|
||||
);
|
||||
|
||||
res.status(200).json({ status: "RANDOMIZED", data });
|
||||
});
|
||||
});
|
||||
|
||||
router.post("/randomize/:id", async (req: Request, res: Response) => {
|
||||
const { id } = req.params;
|
||||
|
||||
const size: number | undefined = req.query.size
|
||||
? parseInt(req.query.size as string)
|
||||
: undefined;
|
||||
const size: number = req.query.size ? parseInt(req.query.size as string) : 10;
|
||||
|
||||
const dataset = DatasetCollection.datasets.find(
|
||||
(dataset) => dataset.id === id
|
||||
|
||||
@@ -121,7 +121,7 @@ export default class Dataset {
|
||||
);
|
||||
}
|
||||
|
||||
async get(length: number = 10, schema: any) {
|
||||
async get(length: number, schema: any) {
|
||||
const db = await getDatabaseConnexion();
|
||||
|
||||
// Convert JSON schema to projection
|
||||
|
||||
@@ -4,7 +4,6 @@ import WorldCitiesDataTransformer from "../data_transformer/WorldCitiesDataTrans
|
||||
import { ExtractorType } from "../archive_extractor/ExtractorFactory";
|
||||
import NudgerDataTransformer from "../data_transformer/NudgerDataTransformer";
|
||||
import OpenfoodfactsDataTransformer from "../data_transformer/OpenfoodfactsDataTransformer";
|
||||
import axios from "axios";
|
||||
|
||||
class DatasetCollection {
|
||||
public static datasets: Dataset[] = [
|
||||
@@ -42,19 +41,19 @@ class DatasetCollection {
|
||||
return Promise.all(this.datasets.map((dataset) => dataset.load()));
|
||||
}
|
||||
|
||||
public static async getDatasetByMatchingSchema(
|
||||
schema: any
|
||||
): Promise<string[]> {
|
||||
return await Promise.all(
|
||||
this.datasets.map((dataset) =>
|
||||
axios
|
||||
.post(dataset.endpoint, schema, {
|
||||
params: { size: 1 },
|
||||
})
|
||||
.then((res) => (res.data.data.length > 0 ? dataset.endpoint : null))
|
||||
)
|
||||
).then((endpoints) => endpoints.filter((endpoint) => endpoint !== null));
|
||||
}
|
||||
// public static async getDatasetByMatchingSchema(
|
||||
// schema: any
|
||||
// ): Promise<string[]> {
|
||||
// return await Promise.all(
|
||||
// this.datasets.map((dataset) =>
|
||||
// axios
|
||||
// .post(dataset.endpoint, schema, {
|
||||
// params: { size: 1 },
|
||||
// })
|
||||
// .then((res) => (res.data.data.length > 0 ? dataset.endpoint : null))
|
||||
// )
|
||||
// ).then((endpoints) => endpoints.filter((endpoint) => endpoint !== null));
|
||||
// }
|
||||
}
|
||||
|
||||
export default DatasetCollection;
|
||||
|
||||
Reference in New Issue
Block a user