feat: Launch Server and database async

This commit is contained in:
Lucàs
2024-12-16 18:50:43 +01:00
parent 6975765e18
commit 735ab03d6e
4 changed files with 31 additions and 49 deletions
+2 -7
View File
@@ -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
View File
@@ -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
+1 -1
View File
@@ -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
+13 -14
View File
@@ -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;