UNPKG

apflora

Version:

Aktionsplan Flora Kt. Zürich

498 lines (443 loc) 16.3 kB
/** * startet die Anwendung, indem der Server gestartet wird */ 'use strict'; var _ = require('underscore'), json2xls = require('json2xls'), json2csv = require('json2csv'), Hapi = require('hapi'), server = new Hapi.Server( '0.0.0.0', 4000, { debug: { request: ['error'] } } ), mysql = require('mysql'), config = require('./src/modules/configuration'), connectionApflora = mysql.createConnection({ host: 'localhost', user: config.db.userName, password: config.db.passWord, database: 'alexande_apflora' }), queryGemeinden = require('./queries/gemeinden'), queryArtliste = require('./queries/artliste'), queryApliste = require('./queries/apliste'), queryAdressen = require('./queries/adressen'), queryLrDelarze = require('./queries/lrDelarze'), queryTpopMassnTypen = require('./queries/tpopMassnTypen'), queryAp = require('./queries/ap'), queryApInsert = require('./queries/apInsert'), queryFeldkontrZähleinheit = require('./queries/feldkontrZaehleinheit'), queryIdealbiotopÜbereinst = require('./queries/idealbiotopUebereinst'), queryTabelleSelectApfloraNumber = require('./queries/tabelleSelectApfloraNumber'), queryTabelleSelectApfloraString = require('./queries/tabelleSelectApfloraString'), queryTabelleSelectBeobNumber = require('./queries/tabelleSelectBeobNumber'), queryTabelleSelectBeobString = require('./queries/tabelleSelectBeobString'), queryTabelleInsertApflora = require('./queries/tabelleInsertApflora'), queryTabelleInsertMultipleApflora = require('./queries/tabelleInsertMultipleApflora'), queryTpopmassnInsertKopie = require('./queries/tpopmassnInsertKopie'), queryTpopfeldkontrInsertKopie = require('./queries/tpopfeldkontrInsertKopie'), queryTpopInsertKopie = require('./queries/tpopInsertKopie'), queryFeldkontrInsert = require('./queries/feldkontrInsert'), queryTabelleUpdateApflora = require('./queries/tabelleUpdateApflora'), queryTabelleUpdateMultipleApflora = require('./queries/tabelleUpdateMultipleApflora'), queryTabelleUpdateBeob = require('./queries/tabelleUpdateBeob'), queryTabelleDeleteApflora = require('./queries/tabelleDeleteApflora'), queryAnmeldung = require('./queries/anmeldung'), treeAssozarten = require('./queries/tree/assozarten'), treeIdealbiotop = require('./queries/tree/idealbiotop'), treeBeobNichtZuzuordnen = require('./queries/tree/beobNichtZuzuordnen'), treeBeobNichtBeurteilt = require('./queries/tree/beobNichtBeurteilt'), treeBer = require('./queries/tree/ber'), treeJBer = require('./queries/tree/jber'), treeErfkrit = require('./queries/tree/erfkrit'), treeApziel = require('./queries/tree/apziel'), treePop = require('./queries/tree/pop'), queryBeobDistzutpopEvab = require('./queries/beobDistzutpopEvab'), queryBeobNächsteTpop = require('./queries/beobNaechsteTpop'), queryBeobDistzutpopInfospezies = require('./queries/beobDistzutpopInfospezies'), queryBeobKarte = require('./queries/beobKarte'), queryApKarte = require('./queries/apKarte'), queryPopKarte = require('./queries/popKarte'), queryPopKarteAlle = require('./queries/popKarteAlle'), queryPopChKarte = require('./queries/popChKarte'), queryPopsChKarte = require('./queries/popsChKarte'), queryTPopKarte = require('./queries/tpopKarte'), queryTPopsKarte = require('./queries/tpopsKarte'), queryTPopKarteAlle = require('./queries/tpopKarteAlle'), exportView = require('./queries/exportView'), exportViewWhereIdIn = require('./queries/exportViewWhereIdIn'); connectionApflora.connect(); server.start(function (err) { if (err) throw err; console.log('Server running at:', server.info.uri); }); server.route({ method: 'GET', path: '/{path*}', handler: function (request, reply) { reply.file('index.html'); } }); server.route({ method: 'GET', path: '/src/{param*}', handler: { directory: { path: 'src' } } }); server.route({ method: 'GET', path: '/style/{param*}', handler: { directory: { path: 'style' } } }); server.route({ method: 'GET', path: '/kml/{param*}', handler: { directory: { path: 'kml' } } }); server.route({ method: 'GET', path: '/geojson/{param*}', handler: { directory: { path: 'geojson' } } }); server.route({ method: 'GET', path: '/img/{param*}', handler: { directory: { path: 'img' } } }); server.route({ method: 'GET', path: '/api/v1/gemeinden', handler: queryGemeinden }); server.route({ method: 'GET', path: '/api/v1/artliste', config: { handler: queryArtliste } }); server.route({ method: 'GET', path: '/api/v1/apliste/programm={programm}', handler: queryApliste }); server.route({ method: 'GET', path: '/api/v1/anmeldung/name={name}/pwd={pwd}', handler: queryAnmeldung }); server.route({ method: 'GET', path: '/api/v1/adressen', handler: queryAdressen }); server.route({ method: 'GET', path: '/api/v1/apflora/tabelle={tabelle}/feld={feld}/wertNumber={wert}', handler: queryTabelleSelectApfloraNumber }); server.route({ method: 'GET', path: '/api/v1/beob/tabelle={tabelle}/feld={feld}/wertNumber={wert}', handler: queryTabelleSelectBeobNumber }); server.route({ method: 'GET', path: '/api/v1/apflora/tabelle={tabelle}/feld={feld}/wertString={wert}', handler: queryTabelleSelectApfloraString }); server.route({ method: 'GET', path: '/api/v1/beob/tabelle={tabelle}/feld={feld}/wertString={wert}', handler: queryTabelleSelectBeobString }); server.route({ method: 'POST', path: '/api/v1/update/apflora/tabelle={tabelle}/tabelleIdFeld={tabelleIdFeld}/tabelleId={tabelleId}/feld={feld}/wert={wert?}/user={user}', handler: queryTabelleUpdateApflora }); server.route({ method: 'POST', path: '/api/v1/updateMultiple/apflora/tabelle={tabelle}/felder={felder}', handler: queryTabelleUpdateMultipleApflora }); server.route({ method: 'POST', path: '/api/v1/update/beob/tabelle={tabelle}/tabelleIdFeld={tabelleIdFeld}/tabelleId={tabelleId}/feld={feld}/wert={wert?}/user={user}', handler: queryTabelleUpdateBeob }); server.route({ method: 'POST', path: '/api/v1/insert/apflora/tabelle={tabelle}/feld={feld}/wert={wert}/user={user}', handler: queryTabelleInsertApflora }); server.route({ method: 'POST', path: '/api/v1/insertMultiple/apflora/tabelle={tabelle}/felder={felder}', handler: queryTabelleInsertMultipleApflora }); server.route({ method: 'POST', path: '/api/v1/tpopmassnInsertKopie/tpopId={tpopId}/tpopMassnId={tpopMassnId}/user={user}', handler: queryTpopmassnInsertKopie }); server.route({ method: 'POST', path: '/api/v1/tpopfeldkontrInsertKopie/tpopId={tpopId}/tpopKontrId={tpopKontrId}/user={user}', handler: queryTpopfeldkontrInsertKopie }); server.route({ method: 'POST', path: '/api/v1/tpopInsertKopie/popId={popId}/tpopId={tpopId}/user={user}', handler: queryTpopInsertKopie }); server.route({ method: 'POST', path: '/api/v1/insert/feldkontr/tpopId={tpopId}/tpopKontrtyp={tpopKontrtyp?}/user={user}', handler: queryFeldkontrInsert }); server.route({ method: 'DELETE', path: '/api/v1/apflora/tabelle={tabelle}/tabelleIdFeld={tabelleIdFeld}/tabelleId={tabelleId}', handler: queryTabelleDeleteApflora }); server.route({ method: 'GET', path: '/api/v1/lrDelarze', handler: queryLrDelarze }); server.route({ method: 'GET', path: '/api/v1/tpopMassnTypen', handler: queryTpopMassnTypen }); server.route({ method: 'GET', path: '/api/v1/ap={apId}', handler: queryAp }); server.route({ method: 'POST', path: '/api/v1/apInsert/ap={apId}/user={user}', handler: queryApInsert }); server.route({ method: 'GET', path: '/api/v1/feldkontrZaehleinheit', handler: queryFeldkontrZähleinheit }); server.route({ method: 'GET', path: '/api/v1/idealbiotopUebereinst', handler: queryIdealbiotopÜbereinst }); /** * Wenn mehrere DB-Aufrufe nötig sind, können sie parallel getätigt werden: * pre: ... (siehe http://blog.andyet.com/tag/node bei 20min) * und im reply zu einem Objekt zusammengefasst werden * Beispiel: BeoListe, FeldListe, tree */ server.route({ method: 'GET', path: '/api/v1/tree/apId={apId}', config: { pre: [ [ { method: treeAssozarten, assign: 'assozarten' }, { method: treeIdealbiotop, assign: 'idealbiotop' }, { method: treeBeobNichtZuzuordnen, assign: 'beobNichtZuzuordnen' }, { method: treeBeobNichtBeurteilt, assign: 'beobNichtBeurteilt' }, { method: treeBer, assign: 'ber' }, { method: treeJBer, assign: 'jber' }, { method: treeErfkrit, assign: 'erfkrit' }, { method: treeApziel, assign: 'apziel' }, { method: treePop, assign: 'pop' } ] ], handler: function (request, reply) { reply([ request.pre.pop, request.pre.apziel, request.pre.erfkrit, request.pre.jber, request.pre.ber, request.pre.beobNichtBeurteilt, request.pre.beobNichtZuzuordnen, request.pre.idealbiotop, request.pre.assozarten ]); } } }); server.route({ method: 'GET', path: '/api/v1/beobDistzutpopEvab/beobId={beobId}', handler: queryBeobDistzutpopEvab }); server.route({ method: 'GET', path: '/api/v1/beobDistzutpopInfospezies/beobId={beobId}', handler: queryBeobDistzutpopInfospezies }); server.route({ method: 'GET', path: '/api/v1/beobNaechsteTpop/apId={apId}/X={X}/Y={Y}', handler: queryBeobNächsteTpop }); server.route({ method: 'GET', path: '/api/v1/beobKarte/apId={apId?}/tpopId={tpopId?}/beobId={beobId?}/nichtZuzuordnen={nichtZuzuordnen?}', handler: queryBeobKarte }); server.route({ method: 'GET', path: '/api/v1/apKarte/apId={apId}', handler: queryApKarte }); server.route({ method: 'GET', path: '/api/v1/popKarte/popId={popId}', handler: queryPopKarte }); server.route({ method: 'GET', path: '/api/v1/popKarteAlle/apId={apId}', handler: queryPopKarteAlle }); server.route({ method: 'GET', path: '/api/v1/popChKarte/popId={popId}', handler: queryPopChKarte }); server.route({ method: 'GET', path: '/api/v1/popsChKarte/apId={apId}', handler: queryPopsChKarte }); server.route({ method: 'GET', path: '/api/v1/tpopKarte/tpopId={tpopId}', handler: queryTPopKarte }); server.route({ method: 'GET', path: '/api/v1/tpopsKarte/popId={popId}', handler: queryTPopsKarte }); server.route({ method: 'GET', path: '/api/v1/tpopKarteAlle/apId={apId}', handler: queryTPopKarteAlle }); server.route({ method: 'GET', path: '/api/v1/exportView/csv/view={view}/filename={filename}', handler: function(request, reply) { var filename = decodeURIComponent(request.params.filename); exportView(request, function(data) { var fields = _.keys(data[0]); json2csv({ data: data, fields: fields }, function (err, csv) { if (err) console.log(err); reply(csv) .header('Content-Type', 'text/x-csv; charset=utf-8') .header('Content-disposition', 'attachment; filename=' + filename + '.csv') .header('Pragma', 'no-cache') .header('Set-Cookie', 'fileDownload=true; path=/'); }); }); } }); // versucht - hat nicht funktioniert: 'unexpected token <' server.route({ method: 'GET', path: '/api/v1/exportView/xslx/view={view}/filename={filename}', handler: function(request, reply) { var filename = decodeURIComponent(request.params.filename); exportView(request, function(data) { console.log('data: ', data); var fields = _.keys(data[0]); var xls = json2xls(data, { fields: fields }); reply(xls) //.type('application/octet-stream') //.header('Content-Type', 'application/octet-stream') .header('Content-Type', 'application/vnd.ms-excel; charset=utf-8') .header('Content-disposition', 'attachment; filename=' + filename + '.xlsx') .header('Pragma', 'no-cache') .header('Set-Cookie', 'fileDownload=true; path=/'); }); } }); server.route({ method: 'GET', path: '/api/v1/exportViewWhereIdIn/csv/view={view}/idName={idName}/idListe={idListe}/filename={filename}', handler: function(request, reply) { var filename = decodeURIComponent(request.params.filename); exportViewWhereIdIn(request, function(data) { var fields = _.keys(data[0]); json2csv({ data: data, fields: fields }, function (err, csv) { if (err) console.log(err); reply(csv) .header('Content-Type', 'text/x-csv; charset=utf-8') .header('Content-disposition', 'attachment; filename=' + filename + '.csv') .header('Pragma', 'no-cache') .header('Set-Cookie', 'fileDownload=true; path=/'); }); }); } }); server.route({ method: 'GET', path: '/api/v1/exportView/kml/view={view}/filename={filename}', handler: function(request, reply) { var filename = decodeURIComponent(request.params.filename), view = decodeURIComponent(request.params.view), kml; exportView(request, function(data) { switch (view) { case 'vPopFuerKml': case 'vPopFuerKmlNamen': kml = require('./src/modules/getKmlForPop') (data); break; case 'vTPopFuerKml': case 'vTPopFuerKmlNamen': kml = require('./src/modules/getKmlForTpop') (data); break; } if (kml) { reply(kml) .header('Content-Type', 'application/vnd.google-earth.kml+xml kml; charset=utf-8') .header('Content-disposition', 'attachment; filename=' + filename + '.kml') .header('Pragma', 'no-cache') .header('Set-Cookie', 'fileDownload=true; path=/'); } }); } });