init
This commit is contained in:
parent
4d3e1bd0ac
commit
918e337a2a
13
mainfest.yml
Normal file
13
mainfest.yml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
---
|
||||||
|
applications:
|
||||||
|
- name: digital-fingerprint-of-plastics-api
|
||||||
|
instances: 1
|
||||||
|
memory: 256M
|
||||||
|
stack: cflinuxfs3
|
||||||
|
buildpacks:
|
||||||
|
- nodejs_buildpack
|
||||||
|
env:
|
||||||
|
NODE_ENV: production
|
||||||
|
OPTIMIZE_MEMORY: true
|
||||||
|
services:
|
||||||
|
- dfopdb
|
53
oas.yml
Normal file
53
oas.yml
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
openapi: 3.0.2
|
||||||
|
|
||||||
|
|
||||||
|
info:
|
||||||
|
title: Digital fingerprint of plastics - API
|
||||||
|
version: 1.0.0
|
||||||
|
description: Gives access to the project database
|
||||||
|
|
||||||
|
|
||||||
|
servers:
|
||||||
|
- url: http://localhost:3000
|
||||||
|
description: local server
|
||||||
|
- url: https://digital-fingerprint-of-plastics-api.apps.de1.bosch-iot-cloud.com/
|
||||||
|
description: server on the BIC
|
||||||
|
|
||||||
|
|
||||||
|
tags:
|
||||||
|
- name: /
|
||||||
|
|
||||||
|
|
||||||
|
paths:
|
||||||
|
/:
|
||||||
|
get:
|
||||||
|
summary: Root method
|
||||||
|
tags:
|
||||||
|
- /
|
||||||
|
responses:
|
||||||
|
200:
|
||||||
|
description: Server is working
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
properties:
|
||||||
|
message:
|
||||||
|
type: string
|
||||||
|
example: 'API server up and running!'
|
||||||
|
500:
|
||||||
|
$ref: '#/components/responses/500'
|
||||||
|
|
||||||
|
components:
|
||||||
|
responses:
|
||||||
|
500:
|
||||||
|
description: Internal server error
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
properties:
|
||||||
|
message:
|
||||||
|
type: string
|
||||||
|
example: 'Internal server error'
|
||||||
|
error:
|
||||||
|
type: boolean
|
||||||
|
example: true
|
2348
package-lock.json
generated
Normal file
2348
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
31
package.json
Normal file
31
package.json
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
{
|
||||||
|
"name": "dfop-api",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "API for the digital fingerprint of plastics mongodb",
|
||||||
|
"main": "index.js",
|
||||||
|
"scripts": {
|
||||||
|
"test": "mocha dist/**/**.spec.js",
|
||||||
|
"start": "tsc && node dist/index.js",
|
||||||
|
"dev": "nodemon -e ts --exec \"npm run start\""
|
||||||
|
},
|
||||||
|
"keywords": [],
|
||||||
|
"author": "",
|
||||||
|
"license": "ISC",
|
||||||
|
"dependencies": {
|
||||||
|
"@types/mocha": "^5.2.7",
|
||||||
|
"@types/node": "^13.1.6",
|
||||||
|
"cfenv": "^1.2.2",
|
||||||
|
"express": "^4.17.1",
|
||||||
|
"mongoose": "^5.8.7",
|
||||||
|
"swagger-ui-express": "^4.1.2",
|
||||||
|
"tslint": "^5.20.1",
|
||||||
|
"typescript": "^3.7.4",
|
||||||
|
"yamljs": "^0.3.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"mocha": "^7.0.0",
|
||||||
|
"nodemon": "^2.0.2",
|
||||||
|
"should": "^13.2.3",
|
||||||
|
"supertest": "^4.0.2"
|
||||||
|
}
|
||||||
|
}
|
58
src/index.ts
Normal file
58
src/index.ts
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
import cfenv from 'cfenv';
|
||||||
|
import express from 'express';
|
||||||
|
import mongoose from 'mongoose';
|
||||||
|
import swagger from 'swagger-ui-express';
|
||||||
|
import yaml from 'yamljs';
|
||||||
|
|
||||||
|
|
||||||
|
// tell if server is running in debug or production environment
|
||||||
|
console.log(process.env.NODE_ENV === 'production' ? '===== PRODUCTION =====' : '===== DEVELOPMENT =====');
|
||||||
|
|
||||||
|
|
||||||
|
// get mongodb address from server, otherwise set to localhost
|
||||||
|
let connectionString: string = "";
|
||||||
|
if(process.env.NODE_ENV === 'production') {
|
||||||
|
let services = cfenv.getAppEnv().getServices();
|
||||||
|
for (let service in services) {
|
||||||
|
if(services[service].tags.indexOf("mongodb") >= 0) {
|
||||||
|
connectionString = services[service]["credentials"].uri;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
connectionString = 'mongodb://localhost/dfopdb';
|
||||||
|
}
|
||||||
|
mongoose.connect(connectionString, {useNewUrlParser: true, useUnifiedTopology: true});
|
||||||
|
|
||||||
|
// connect to mongodb
|
||||||
|
let db = mongoose.connection;
|
||||||
|
db.on('error', console.error.bind(console, 'connection error:'));
|
||||||
|
db.once('open', () => {
|
||||||
|
console.log(`Connected to ${connectionString}`);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
// create Express app
|
||||||
|
const app = express();
|
||||||
|
app.disable('x-powered-by');
|
||||||
|
|
||||||
|
// get port from environment, defaults to 3000
|
||||||
|
const port = process.env.PORT || 3000;
|
||||||
|
|
||||||
|
// require routes
|
||||||
|
app.use('/', require('./routes/root'));
|
||||||
|
|
||||||
|
// Swagger UI
|
||||||
|
app.use('/api', swagger.serve, swagger.setup(
|
||||||
|
yaml.load('./oas.yml'),
|
||||||
|
{
|
||||||
|
defaultModelsExpandDepth: -1,
|
||||||
|
customCss: '.swagger-ui .topbar { display: none }'
|
||||||
|
}
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
// hook up server to port
|
||||||
|
app.listen(port, () => {
|
||||||
|
console.log(`Listening on http;//localhost:${port}`);
|
||||||
|
});
|
19
src/routes/root.spec.ts
Normal file
19
src/routes/root.spec.ts
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
import supertest from 'supertest';
|
||||||
|
import should from 'should/as-function';
|
||||||
|
|
||||||
|
|
||||||
|
let server = supertest.agent('http://localhost:3000');
|
||||||
|
|
||||||
|
describe('Testing /', () => {
|
||||||
|
it('returns the message object', done => {
|
||||||
|
server
|
||||||
|
.get('/')
|
||||||
|
.expect('Content-type', /json/)
|
||||||
|
.expect(200)
|
||||||
|
.end(function(err, res) {
|
||||||
|
should(res.statusCode).equal(200);
|
||||||
|
should(res.body).be.eql({message: 'API server up and running!'});
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
9
src/routes/root.ts
Normal file
9
src/routes/root.ts
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
import express from 'express';
|
||||||
|
|
||||||
|
const router = express.Router();
|
||||||
|
|
||||||
|
router.get('/', (req, res) => {
|
||||||
|
res.json({message: 'API server up and running!'});
|
||||||
|
});
|
||||||
|
|
||||||
|
module.exports = router;
|
18
tsconfig.json
Normal file
18
tsconfig.json
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"module": "commonjs",
|
||||||
|
"target": "es5",
|
||||||
|
"outDir": "dist",
|
||||||
|
"sourceMap": true,
|
||||||
|
"esModuleInterop": true
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"./node_modules/@types/node/index.d.ts"
|
||||||
|
],
|
||||||
|
"include": [
|
||||||
|
"src/**/*.ts"
|
||||||
|
],
|
||||||
|
"exclude": [
|
||||||
|
"node_modules"
|
||||||
|
]
|
||||||
|
}
|
9
tslint.json
Normal file
9
tslint.json
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"defaultSeverity": "error",
|
||||||
|
"extends": [
|
||||||
|
"tslint:recommended"
|
||||||
|
],
|
||||||
|
"jsRules": { },
|
||||||
|
"rules": { },
|
||||||
|
"rulesDirectory": []
|
||||||
|
}
|
Reference in New Issue
Block a user