diff --git a/test-server/http.js b/test-server/http.js index 752a85c..043229c 100644 --- a/test-server/http.js +++ b/test-server/http.js @@ -10,9 +10,9 @@ serve({ let json; if (url.pathname === '/GetSVGLayoutConfiguration') { json = JSON.stringify(GetSVGLayoutConfiguration()); - } else if (url.pathname === 'FillHoleWithChassis') { + } else if (url.pathname === '/FillHoleWithChassis') { json = JSON.stringify(FillHoleWithChassis(request)); - } else if (url.pathname === 'SplitRemplissage') { + } else if (url.pathname === '/SplitRemplissage') { json = JSON.stringify(SplitRemplissage(request)); } else { // TODO: Return 404 rather than this diff --git a/test-server/node-http.js b/test-server/node-http.js new file mode 100644 index 0000000..b78fe50 --- /dev/null +++ b/test-server/node-http.js @@ -0,0 +1,303 @@ +import http from 'http'; +const host = 'localhost'; +const port = 5000; + +const requestListener = function(request, response) { + if (request.method === 'POST') { + response.setHeader('Access-Control-Allow-Origin', '*'); + response.setHeader('Content-Type', 'application/json'); + const url = request.url; + let json; + if (url === '/GetSVGLayoutConfiguration') { + json = GetSVGLayoutConfiguration(); + } else if (url === '/FillHoleWithChassis') { + json = FillHoleWithChassis(request); + } else if (url === '/SplitRemplissage') { + json = SplitRemplissage(request); + } else { + // TODO: Return 404 rather than this + json = GetSVGLayoutConfiguration(); + } + response.writeHead(200); + return response.end(JSON.stringify(json)); + } else if (request.method === 'OPTIONS') { + response.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, PATCH, OPTIONS'); + response.setHeader('Access-Control-Allow-Headers', '*'); + response.writeHead(200); + return response.end(); + } + + response.setHeader('Content-Type', 'text/plain'); + response.writeHead(200); + return response.end('Hello world'); +}; + +const server = http.createServer(requestListener); +server.listen(port, host, () => { + console.log(`Server is running on http://${host}:${port}`); +}); + +const GetSVGLayoutConfiguration = () => { + return { + AvailableContainers: [ + { + BodyColor: null, + BorderColor: '#ff0000', + BorderWidth: 48, + ContainerActions: null, + ContainerDimensionning: null, + DefaultChildrenContainers: null, + Height: 0, + IsPositionFixed: false, + IsWidthFixed: false, + MaxHeight: 0, + MaxWidth: 3000, + MinHeight: 0, + MinWidth: 500, + Type: 'Chassis', + TypeChildContainerDefault: 'Trou', + Width: 500, + XPositionReference: 0, + Style: { + fillOpacity: 0, + borderWidth: 2, + stroke: 'red' + } + }, + { + BodyColor: null, + BorderColor: '#FFFFFF', + BorderWidth: 0, + ContainerActions: null, + ContainerDimensionning: null, + DefaultChildrenContainers: null, + Height: 0, + IsPositionFixed: false, + IsWidthFixed: false, + MaxHeight: 0, + MaxWidth: 0, + MinHeight: 0, + MinWidth: 0, + Type: 'Trou', + TypeChildContainerDefault: 'Remplissage', + Width: 0, + XPositionReference: 0 + }, + { + BodyColor: '#99C8FF', + BorderColor: '#00FF00', + BorderWidth: 0, + ContainerActions: [ + { + Action: 'SplitRemplissage', + AddingBehavior: 0, + CustomLogo: { + Base64Image: null, + Name: null, + Svg: null, + Url: '' + }, + Description: 'Diviser le remplissage en insérant un montant', + Id: null, + Label: 'Diviser le remplissage' + } + ], + ContainerDimensionning: { + DimensionningStyle: 1, + ShowDimensionning: false, + ShowLabel: false + }, + DefaultChildrenContainers: null, + Height: 0, + IsPositionFixed: false, + IsWidthFixed: false, + MaxHeight: 0, + MaxWidth: 0, + MinHeight: 0, + MinWidth: 0, + Type: 'Remplissage', + TypeChildContainerDefault: null, + Width: 0, + XPositionReference: 0 + }, + { + BodyColor: '#FFA947', + BorderColor: '#FFA947', + BorderWidth: 0, + ContainerActions: null, + ContainerDimensionning: null, + DefaultChildrenContainers: null, + Height: 0, + IsPositionFixed: false, + IsWidthFixed: false, + MaxHeight: 0, + MaxWidth: 0, + MinHeight: 0, + MinWidth: 0, + Type: 'Montant', + TypeChildContainerDefault: null, + Width: 50, + XPositionReference: 1 + }, + { + BodyColor: '#FFA3D1', + BorderColor: '#FF6DE6', + BorderWidth: 0, + ContainerActions: null, + ContainerDimensionning: { + DimensionningStyle: 0, + ShowDimensionning: false, + ShowLabel: false + }, + DefaultChildrenContainers: null, + Height: 0, + IsPositionFixed: false, + IsWidthFixed: false, + MaxHeight: 0, + MaxWidth: 0, + MinHeight: 0, + MinWidth: 0, + Type: 'Ouverture', + TypeChildContainerDefault: null, + Width: 0, + XPositionReference: 0 + }, + { + BodyColor: '#000000', + BorderColor: null, + BorderWidth: 0, + ContainerActions: null, + ContainerDimensionning: { + DimensionningStyle: 0, + ShowDimensionning: false, + ShowLabel: false + }, + DefaultChildrenContainers: null, + Height: 0, + IsPositionFixed: false, + IsWidthFixed: false, + MaxHeight: 0, + MaxWidth: 0, + MinHeight: 0, + MinWidth: 0, + Type: 'Dilatation', + TypeChildContainerDefault: null, + Width: 8, + XPositionReference: 0 + }, + { + BodyColor: '#dee2e4', + BorderColor: '#54616c', + BorderWidth: 0, + ContainerActions: [ + { + Action: 'FillHoleWithChassis', + AddingBehavior: 1, + CustomLogo: { + Base64Image: null, + Name: null, + Svg: null, + Url: '' + }, + Description: 'Remplir le trou avec des châssis', + Id: null, + Label: 'Calepiner' + } + ], + ContainerDimensionning: null, + DefaultChildrenContainers: null, + Height: 0, + IsPositionFixed: false, + IsWidthFixed: false, + MaxHeight: 0, + MaxWidth: 0, + MinHeight: 0, + MinWidth: 0, + Type: '', + TypeChildContainerDefault: null, + Width: 0, + XPositionReference: 0 + } + ], + AvailableSymbols: [ + { + Height: 0, + Image: { + Base64Image: null, + Name: null, + Svg: null, + Url: 'https://www.manutan.fr/img/S/GRP/ST/AIG3930272.jpg' + }, + Name: 'Poteau structure', + Width: 0, + XPositionReference: 1 + }, + { + Height: 0, + Image: { + Base64Image: null, + Name: null, + Svg: null, + Url: 'https://e7.pngegg.com/pngimages/647/127/png-clipart-svg-working-group-information-world-wide-web-internet-structure.png' + }, + Name: 'Joint de structure', + Width: 0, + XPositionReference: 0 + } + ], + MainContainer: { + BodyColor: null, + BorderColor: '#FFFFFF', + BorderWidth: 0, + ContainerActions: null, + ContainerDimensionning: null, + DefaultChildrenContainers: null, + Height: 200, + IsPositionFixed: false, + IsWidthFixed: false, + MaxHeight: 0, + MaxWidth: 0, + MinHeight: 0, + MinWidth: 0, + Type: 'Trou', + TypeChildContainerDefault: null, + Width: 1000, + XPositionReference: 0 + } + }; +}; + +const FillHoleWithChassis = (request) => { + const maxWidthChassis = 3000; + const nbChassis = Math.ceil(request.ContainerActions.Width / maxWidthChassis); + const lstModels = []; + for (let i = 0; i <= nbChassis; i++) { + if (i === 1 && request.ContainerAction.ExistOnBefore) { + lstModels.Add({ Type: 'Dilatation' }); + } + lstModels.Add({ Type: 'Chassis' }); + if (i < nbChassis) { + lstModels.Add({ Type: 'Dilatation' }); + } + if (i === nbChassis && request.ContainerAction.ExistOnAfter) { + lstModels.Add({ Type: 'Dilatation' }); + } + } + return { + ApplicationState: { + Containers: lstModels + } + }; +}; + +const SplitRemplissage = (request) => { + const lstModels = [ + { Type: 'Remplissage' }, + { Type: 'Montant' }, + { Type: 'Remplissage' } + ]; + + return { + ApplicationState: { Containers: lstModels } + }; +};