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();
|
dotenv.config();
|
||||||
|
|
||||||
// 1. initialize database connexions
|
|
||||||
|
|
||||||
// 2. Load all datasets
|
|
||||||
|
|
||||||
// 3. Start the server
|
|
||||||
|
|
||||||
TypeOrmDataSource.initialize()
|
TypeOrmDataSource.initialize()
|
||||||
.then(() => DatasetCollection.loadAll())
|
.then(() => DatasetCollection.loadAll())
|
||||||
.then(() => console.log("All datasets are loaded"))
|
.then(() => console.log("All datasets are loaded"))
|
||||||
.then(() => new Server().start())
|
|
||||||
.catch(console.error);
|
.catch(console.error);
|
||||||
|
|
||||||
|
new Server().start();
|
||||||
|
|||||||
+15
-27
@@ -4,40 +4,28 @@ import axios from "axios";
|
|||||||
|
|
||||||
const router = Router();
|
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;
|
const size: number = req.query.size ? parseInt(req.query.size as string) : 10;
|
||||||
|
|
||||||
DatasetCollection.getDatasetByMatchingSchema(req.body)
|
const data = await Promise.all(
|
||||||
.then((endpoints) => {
|
DatasetCollection.datasets.map((dataset) =>
|
||||||
// Split evenly the size between the datasets
|
axios
|
||||||
const sizePerDataset = Math.floor(size / endpoints.length);
|
.post(dataset.endpoint, req.body, { params: { size } })
|
||||||
|
.then((res) => res.data.data)
|
||||||
|
)
|
||||||
|
).then((r) =>
|
||||||
|
r
|
||||||
|
.flat()
|
||||||
|
.sort(() => Math.random() - 0.5)
|
||||||
|
.slice(0, size)
|
||||||
|
);
|
||||||
|
|
||||||
return Promise.all(
|
res.status(200).json({ status: "RANDOMIZED", data });
|
||||||
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
|
|
||||||
.flat()
|
|
||||||
.sort(() => Math.random() - 0.5)
|
|
||||||
.slice(0, size);
|
|
||||||
|
|
||||||
res.status(200).json({ status: "RANDOMIZED", data });
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
router.post("/randomize/:id", async (req: Request, res: Response) => {
|
router.post("/randomize/:id", async (req: Request, res: Response) => {
|
||||||
const { id } = req.params;
|
const { id } = req.params;
|
||||||
|
const size: number = req.query.size ? parseInt(req.query.size as string) : 10;
|
||||||
const size: number | undefined = req.query.size
|
|
||||||
? parseInt(req.query.size as string)
|
|
||||||
: undefined;
|
|
||||||
|
|
||||||
const dataset = DatasetCollection.datasets.find(
|
const dataset = DatasetCollection.datasets.find(
|
||||||
(dataset) => dataset.id === id
|
(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();
|
const db = await getDatabaseConnexion();
|
||||||
|
|
||||||
// Convert JSON schema to projection
|
// Convert JSON schema to projection
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import WorldCitiesDataTransformer from "../data_transformer/WorldCitiesDataTrans
|
|||||||
import { ExtractorType } from "../archive_extractor/ExtractorFactory";
|
import { ExtractorType } from "../archive_extractor/ExtractorFactory";
|
||||||
import NudgerDataTransformer from "../data_transformer/NudgerDataTransformer";
|
import NudgerDataTransformer from "../data_transformer/NudgerDataTransformer";
|
||||||
import OpenfoodfactsDataTransformer from "../data_transformer/OpenfoodfactsDataTransformer";
|
import OpenfoodfactsDataTransformer from "../data_transformer/OpenfoodfactsDataTransformer";
|
||||||
import axios from "axios";
|
|
||||||
|
|
||||||
class DatasetCollection {
|
class DatasetCollection {
|
||||||
public static datasets: Dataset[] = [
|
public static datasets: Dataset[] = [
|
||||||
@@ -42,19 +41,19 @@ class DatasetCollection {
|
|||||||
return Promise.all(this.datasets.map((dataset) => dataset.load()));
|
return Promise.all(this.datasets.map((dataset) => dataset.load()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async getDatasetByMatchingSchema(
|
// public static async getDatasetByMatchingSchema(
|
||||||
schema: any
|
// schema: any
|
||||||
): Promise<string[]> {
|
// ): Promise<string[]> {
|
||||||
return await Promise.all(
|
// return await Promise.all(
|
||||||
this.datasets.map((dataset) =>
|
// this.datasets.map((dataset) =>
|
||||||
axios
|
// axios
|
||||||
.post(dataset.endpoint, schema, {
|
// .post(dataset.endpoint, schema, {
|
||||||
params: { size: 1 },
|
// params: { size: 1 },
|
||||||
})
|
// })
|
||||||
.then((res) => (res.data.data.length > 0 ? dataset.endpoint : null))
|
// .then((res) => (res.data.data.length > 0 ? dataset.endpoint : null))
|
||||||
)
|
// )
|
||||||
).then((endpoints) => endpoints.filter((endpoint) => endpoint !== null));
|
// ).then((endpoints) => endpoints.filter((endpoint) => endpoint !== null));
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
export default DatasetCollection;
|
export default DatasetCollection;
|
||||||
|
|||||||
Reference in New Issue
Block a user