diff --git a/media-store/app/src/GlobalContext.js b/media-store/app/src/GlobalContext.js index d3d2acd9..c19e1609 100644 --- a/media-store/app/src/GlobalContext.js +++ b/media-store/app/src/GlobalContext.js @@ -1,5 +1,6 @@ import React, { useMemo, createContext, useContext, useState } from "react"; import axios from "axios"; +import { isEmpty, isArray } from "lodash"; const globalContext = { error: {}, @@ -8,7 +9,6 @@ const globalContext = { ID: undefined, roles: [], email: undefined, - level: undefined, token: undefined, }, locale: undefined, @@ -19,46 +19,57 @@ const GlobalContext = createContext(globalContext); const useGlobals = () => useContext(GlobalContext); const AVAILABLE_LOCALES = ["en", "fr", "de"]; +const isValidUser = (user) => { + return ( + !isEmpty(user) && + user.ID && + user.roles && + user.email && + user.token && + isArray(user.roles) + ); +}; + +const resetAxiosParams = () => { + delete axios.defaults.headers.common["Authorization"]; + delete axios.defaults.userEntity; + axios.defaults.tracksEntity = "Tracks"; +}; + +const setAxiosParams = (user) => { + axios.defaults.headers.common["Authorization"] = `Basic ${user.token}`; + axios.defaults.userID = user.ID; + if (user.roles.includes("customer")) { + axios.defaults.userEntity = `Customers/${user.ID}`; + axios.defaults.tracksEntity = "MarkedTracks"; + } else { + axios.defaults.userEntity = `Employees/${user.ID}`; + axios.defaults.tracksEntity = "Tracks"; + } +}; + const useUserData = () => { const getUserDataFromLS = () => { let userFromLS; try { userFromLS = JSON.parse(localStorage.getItem("user")); } catch (e) {} - if (userFromLS) { - axios.defaults.headers.common[ - "Authorization" - ] = `Basic ${userFromLS.token}`; - axios.defaults.userID = userFromLS.ID; - axios.defaults.userEntity = - !!userFromLS && userFromLS.roles.includes("customer") - ? `Customers/${userFromLS.ID}` - : `Employees/${userFromLS.ID}`; + if (isValidUser(userFromLS)) { + setAxiosParams(userFromLS); + return userFromLS; + } else { + localStorage.removeItem("user"); + resetAxiosParams(); } - axios.defaults.tracksEntity = - !!userFromLS && userFromLS.roles.includes("customer") - ? "MarkedTracks" - : "Tracks"; - return userFromLS; }; const setUserDataToLS = (value) => { - if (!!value) { + if (isValidUser(value)) { localStorage.setItem("user", JSON.stringify(value)); - axios.defaults.headers.common["Authorization"] = `Basic ${value.token}`; - axios.defaults.tracksEntity = value.roles.includes("customer") - ? "MarkedTracks" - : "Tracks"; - axios.defaults.userEntity = - !!value && value.roles.includes("customer") - ? `Customers/${value.ID}` - : `Employees/${value.ID}`; + setAxiosParams(value); } else { localStorage.removeItem("user"); - delete axios.defaults.headers.common["Authorization"]; - delete axios.defaults.userEntity; - axios.defaults.tracksEntity = - !!value && value.roles.includes("customer") ? "MarkedTracks" : "Tracks"; + resetAxiosParams(); } }; diff --git a/media-store/db/schema.cds b/media-store/db/schema.cds index c99d0c78..bf4196e5 100644 --- a/media-store/db/schema.cds +++ b/media-store/db/schema.cds @@ -7,17 +7,17 @@ aspect Named { aspect Person { key ID : Integer; - lastName : String(20); - firstName : String(40); - city : String(40); - state : String(40); - address : String(70); - country : String(40); - postalCode : String(10); - phone : String(24); - fax : String(24); - email : String(60); - password : String(500); + lastName : String(20) default 'dummy'; + firstName : String(40) default 'dummy'; + city : String(40) default 'dummy'; + state : String(40) default 'dummy'; + address : String(70) default 'dummy'; + country : String(40) default 'dummy'; + postalCode : String(10) default 123; + phone : String(24) default 'dummy'; + fax : String(24) default 'dummy'; + email : String(60) default 'dummy@email.com'; + password : String(500) default 'dummy'; } entity MediaTypes : Named {} @@ -66,11 +66,11 @@ entity Invoices { key ID : Integer; customer : Association to Customers; invoiceDate : DateTime; - billingAddress : String(70); - billingCity : String(40); - billingState : String(40); - billingCountry : String(40); - billingPostalCode : String(40); + billingAddress : String(70) default 'dummy'; + billingCity : String(40) default 'dummy'; + billingState : String(40) default 'dummy'; + billingCountry : String(40) default 'dummy'; + billingPostalCode : String(40) default 123; total : Decimal(10, 2); invoiceItems : Composition of many InvoiceItems on invoiceItems.invoice = $self;