async createGraph()

in backend/src/controllers/cypherController.js [38:87]


    async createGraph(req, res, next) {
        let db = sessionService.get(req.sessionID);
        if (db.isConnected()){
            let [client, transaction] = await db.graphRepository.createTransaction();
            try {
                let graph = new GraphCreator({
                    nodes: req.files.nodes,
                    edges: req.files.edges,
                    graphName: req.body.graphName,
                    dropGraph: req.body.dropGraph === 'true'
                });
                
                await graph.parseData();
                const DROP = graph.query.graph.drop;
                const CREATE = graph.query.graph.create;
                if (DROP){
                    try{
                       await client.query(DROP);
                    }catch(e){
                        if(e.code !== '3F000') throw e;
                    }
                    
                }
                await client.query(CREATE);
                await transaction('BEGIN');
                await Promise.all(graph.query.labels.map(async (q)=>{
                    return await transaction(q);
                }));
                await Promise.all(graph.query.nodes.map(async (q)=>{
                    return await transaction(q);
                }));
                await Promise.all(graph.query.edges.map(async (q)=>{
                    return await transaction(q);
                }));
                await transaction('COMMIT');
                res.status(204).end();
            } catch (e){
                await transaction('ROLLBACK');
                const details = e.toString();
                const err = {
                    ...e,
                    details
                }
                res.status(500).json(err).end();
            }finally{
                client.release();
            }

        }
    }