From 49b8f4ef95f6e0d228e2437d10345ee898d92b98 Mon Sep 17 00:00:00 2001 From: "Dzmitry_Tamashevich@epam.com" Date: Fri, 23 Oct 2020 12:04:03 +0300 Subject: [PATCH] reaname services --- media-store/db/schema.cds | 8 ++++--- media-store/srv/invoices-service.cds | 2 +- media-store/srv/manage-tracks-service.cds | 13 ++++++++++++ media-store/srv/manage-tracks-service.js | 7 ++++++ media-store/srv/user-service.cds | 26 ++++++++++++++--------- media-store/srv/user-service.js | 18 +++++++++++++--- media-store/util/importData.js | 8 ++++++- 7 files changed, 64 insertions(+), 18 deletions(-) create mode 100644 media-store/srv/manage-tracks-service.cds create mode 100644 media-store/srv/manage-tracks-service.js diff --git a/media-store/db/schema.cds b/media-store/db/schema.cds index 090bac7e..5e00473d 100644 --- a/media-store/db/schema.cds +++ b/media-store/db/schema.cds @@ -22,9 +22,11 @@ aspect Persone { entity MediaTypes : Named {} -entity Genres : Named { - tracks : Association to many Tracks - on tracks.genre = $self; +entity Genres { + key ID : Integer; + name : localized String; + tracks : Association to many Tracks + on tracks.genre = $self; } entity Playlists : Named {} diff --git a/media-store/srv/invoices-service.cds b/media-store/srv/invoices-service.cds index 550023e2..60dbb037 100644 --- a/media-store/srv/invoices-service.cds +++ b/media-store/srv/invoices-service.cds @@ -1,7 +1,7 @@ using {sap.capire.media.store as my} from '../db/schema'; @(requires : 'authenticated-user') -service InvoicesService { +service Invoices { @readonly entity Invoices as projection on my.Invoices; diff --git a/media-store/srv/manage-tracks-service.cds b/media-store/srv/manage-tracks-service.cds new file mode 100644 index 00000000..dfd08d52 --- /dev/null +++ b/media-store/srv/manage-tracks-service.cds @@ -0,0 +1,13 @@ +using {sap.capire.media.store as my} from '../db/schema'; + +@(requires : 'authenticated-user') +service ManageTracks { + @(restrict : [{ + grant : [ + 'READ', + 'WRITE' + ], + to : 'employee' + }, ]) + entity Genres as projection on my.Genres; +} diff --git a/media-store/srv/manage-tracks-service.js b/media-store/srv/manage-tracks-service.js new file mode 100644 index 00000000..f7357baf --- /dev/null +++ b/media-store/srv/manage-tracks-service.js @@ -0,0 +1,7 @@ +const cds = require("@sap/cds"); + +module.exports = async function () { + this.before("*", async (req) => { + req.user.locale = "fr"; + }); +}; diff --git a/media-store/srv/user-service.cds b/media-store/srv/user-service.cds index 878b06c2..9b24345d 100644 --- a/media-store/srv/user-service.cds +++ b/media-store/srv/user-service.cds @@ -1,15 +1,15 @@ using {sap.capire.media.store as my} from '../db/schema'; -service UserService { - - @restrict : [{ - grant : '*', +service Users { + entity Customers @(restrict : [{ + grant : [ + 'READ', + 'WRITE' + ], to : 'employee' - }] - entity Customers as projection on my.Customers; + }, ]) as projection on my.Customers; - @(requires : 'authenticated-user') - function getUser() returns { + type Person { lastName : String(20); firstName : String(40); city : String(40); @@ -20,7 +20,13 @@ service UserService { phone : String(24); fax : String(24); email : String(60); - }; + } + + @(requires : 'authenticated-user') + action updatePerson(person : Person); + + @(requires : 'authenticated-user') + function getPerson() returns Person; function mockLogin(email : String(111), password : String(200)) returns { roles : array of String(111); @@ -28,5 +34,5 @@ service UserService { mockedToken : String(500); email : my.Persone.email; ID : my.Persone.ID - } + }; } diff --git a/media-store/srv/user-service.js b/media-store/srv/user-service.js index be44365c..d488ace9 100644 --- a/media-store/srv/user-service.js +++ b/media-store/srv/user-service.js @@ -3,9 +3,11 @@ const cds = require("@sap/cds"); const USER_LEVELS = { customer: 1, employee: 2 }; module.exports = async function () { - const db = await cds.connect.to("db"); // connect to database service + const db = await cds.connect.to("db"); const { Employees, Customers } = db.entities; + const getUserEntity = (isCustomer) => (isCustomer ? Customers : Employees); + this.before("*", (req) => { console.log( "[USER]:", @@ -17,9 +19,19 @@ module.exports = async function () { ); }); - this.on("getUser", async (req) => { + this.on("updatePerson", async (req) => { + await UPDATE( + getUserEntity(req.user && req.user._roles && req.user.is("customer")) + ) + .set(req.data.person) + .where({ ID: req.user.attr.ID }); + }); + + this.on("getPerson", async (req) => { return await db.run( - SELECT.one(Customers) + SELECT.one( + getUserEntity(req.user && req.user._roles && req.user.is("customer")) + ) .columns( "lastName", "firstName", diff --git a/media-store/util/importData.js b/media-store/util/importData.js index a65bd1b8..8dbc3e0f 100644 --- a/media-store/util/importData.js +++ b/media-store/util/importData.js @@ -89,7 +89,13 @@ const logProcessArgs = () => { const insertQuery = constructInsertQuery(targetEntityName, targetColumns); const srcEntityName = camelCaseToSnake(targetEntityName.split(".").pop()); - let srcResultRows = await srcStorage.read(srcEntityName); // e.g. [ { AlbumId:1, ArtistId:1, Title:'some' }, ... ] + let srcResultRows; + try { + srcResultRows = await srcStorage.read(srcEntityName); // e.g. [ { AlbumId:1, ArtistId:1, Title:'some' }, ... ] + } catch (e) { + console.log("[ERROR]: while trying to read source table", e.message); + continue; + } if (!srcResultRows || srcResultRows.length < ZERO_VALUE) { console.log( `[LOG] Skipping ${targetEntityName}.