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