diff --git a/media-store/.gitignore b/media-store/.gitignore index 1b6ca866..95434c5a 100644 --- a/media-store/.gitignore +++ b/media-store/.gitignore @@ -7,13 +7,11 @@ gen/ node_modules/ target/ package-lock.json +app/ # html5Deployer deployers/html5Deployer/resources/app/ -# app -app/ - # Web IDE, App Studio .che/ .gen/ diff --git a/media-store/app/.gitignore b/media-store/app/.gitignore new file mode 100644 index 00000000..4d29575d --- /dev/null +++ b/media-store/app/.gitignore @@ -0,0 +1,23 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# production +/build + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/media-store/app/.vscode/launch.json b/media-store/app/.vscode/launch.json new file mode 100644 index 00000000..d4e0b5d5 --- /dev/null +++ b/media-store/app/.vscode/launch.json @@ -0,0 +1,13 @@ + +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Chrome", + "type": "chrome", + "request": "launch", + "url": "http://localhost:3000", + "webRoot": "${workspaceRoot}/src" + } + ] +} \ No newline at end of file diff --git a/media-store/mta.yaml b/media-store/mta.yaml index 2c205de6..a18ab5f1 100644 --- a/media-store/mta.yaml +++ b/media-store/mta.yaml @@ -16,6 +16,8 @@ build-parameters: commands: - npm install - npx @sap/cds-dk build + - npm --prefix ./app-src install ./app-src + - npm run build --prefix ./app-src #This line runs the build script modules: # --------------------- SERVER MODULE ------------------------ @@ -48,7 +50,7 @@ modules: - name: media-store-hmtl5-deployer # ------------------------------------------------------------ type: com.sap.html5.application-content - path: html5Deployer + path: deployers/html5Deployer requires: - name: media-store-html5-host build-parameters: @@ -65,13 +67,13 @@ modules: path: app build-parameters: supported-platforms: [] - build-result: build + build-result: / # --------------------- APPROUTER MODULE --------------------- - name: media-store-approuter # ------------------------------------------------------------ type: approuter.nodejs - path: approuter + path: deployers/approuter requires: - name: media-store-html5-runtime - name: media-store-xsuaa diff --git a/media-store/server.js b/media-store/server.js index f4d04b21..f8ad1798 100644 --- a/media-store/server.js +++ b/media-store/server.js @@ -1,4 +1,8 @@ const cds = require("@sap/cds"); +const { + getDurationInMilliseconds, + getFormattedDateTime, +} = require("./util/helpers"); // handle bootstrapping events... cds.on("bootstrap", (app) => { @@ -28,13 +32,26 @@ cds.on("bootstrap", (app) => { cds.on("served", async ({ db, messaging, ...servedServices }) => { // add logging current user before any request for (let i in servedServices) { - servedServices[i].prepend((srv) => - srv.before("*", (req) => { + servedServices[i].prepend((srv) => { + srv.on("*", async (req, next) => { + const method = req._.req.method; + const url = req._.req.url; + const start = process.hrtime(); + if (req.user) { console.log("[USER]:", req.user.id, req.user.attr, req.user._roles); } - }) - ); + const result = await next(); + + const status = req._.res.statusCode; + const currentDateTime = getFormattedDateTime(); + const durationInMilliseconds = getDurationInMilliseconds(start); + const log = `[${currentDateTime}] ${durationInMilliseconds.toLocaleString()} ms ${method}:${url} status: ${status} `; + console.log(log); + + return result; + }); + }); } }); diff --git a/media-store/srv/user-service.js b/media-store/srv/user-service.js index eb305111..f5eb2fe1 100644 --- a/media-store/srv/user-service.js +++ b/media-store/srv/user-service.js @@ -3,6 +3,7 @@ const jwt = require("jsonwebtoken"); const bcrypt = require("bcryptjs"); const { ACCESS_TOKEN_SECRET, REFRESH_TOKEN_SECRET } = cds.env; + const ACCESS_TOKEN_EXP_IN = "10m"; const REFRESH_TOKEN_EXPIRES_IN = "20m";