diff --git a/app/api/group/delete.js b/app/api/group/delete.js
index 90521fb44e445e0b7e801106023bb5bafb879699..5a8c7cd09ba653d1c5a7c24cb6cfe38f32d2a6eb 100644
--- a/app/api/group/delete.js
+++ b/app/api/group/delete.js
@@ -1,51 +1,42 @@
 'use strict'
 
-const groupService = require('../../dal/groupService')
-
-const logger = require('../../utils/format')
-const util = require('util')
+const groupService = require('../../dal/groupService');
+const logger = require('../../utils/logger');
 
 const Group = {
     async deleteGroup(ctx) {
         try {
-            ctx.body = await groupService.deleteGroup(ctx.request.body)
-            ctx.status = 201
-            logger.info('group is deleted successfully!')
+            ctx.body = await groupService.deleteGroup(ctx.request.body);
+            ctx.status = 201;
+            logger.info('Group deleted.');
         } catch (error) {
-            ctx.body = error.response || 'erroror occurred!'
-            ctx.status = 500
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`)
+            throw error;
         }
     },
 
     async deleteGroupPolicy(ctx) {
         try {
-            ctx.body = await groupService.deleteGroupPolicy(ctx.request.body)
-            ctx.status = 201
-            logger.info('GroupPolicy is deleted successfully!')
+            ctx.body = await groupService.deleteGroupPolicy(ctx.request.body);
+            ctx.status = 201;
+            logger.info('Group policy deleted.');
         } catch (error) {
-            ctx.body = error.response || 'erroror occurred!'
-            ctx.status = 500
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`)
+            throw error;
         }
     },
 
     async deleteGroupUser(ctx) {
         try {
-            ctx.body = await groupService.deleteGroupUser(ctx.request.body)
-            ctx.status = 201
-            logger.info('GroupUser is deleted successfully!')
+            ctx.body = await groupService.deleteGroupUser(ctx.request.body);
+            ctx.status = 201;
+            logger.info('Group user deleted.');
         } catch (error) {
-            ctx.body = error.response || 'erroror occurred!'
-            ctx.status = 500
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`)
+            throw error;
         }
     },
-}
-
+};
 
 module.exports = {
-    deleteGroup : Group.deleteGroup, 
+    deleteGroup : Group.deleteGroup,
     deleteGroupPolicy: Group.deleteGroupPolicy,
     deleteGroupUser: Group.deleteGroupUser
-}
\ No newline at end of file
+};
diff --git a/app/api/group/get.js b/app/api/group/get.js
index d380c1008c067bbba93b2511efda5110a631df0b..8a99ad0512411e53234e463a89a0ed1f2d27477f 100644
--- a/app/api/group/get.js
+++ b/app/api/group/get.js
@@ -1,51 +1,42 @@
 'use strict'
 
-const groupService = require('../../dal/groupService')
-
-const logger = require('../../utils/format')
-const util = require('util')
+const groupService = require('../../dal/groupService');
+const logger = require('../../utils/logger');
 
 const Group = {
-
     async groups(ctx) {
         try {
-            ctx.body = await groupService.groups(ctx.request.body)
-            ctx.status = 201
-            logger.info('groups are fetched successfully!')
+            ctx.body = await groupService.groups();
+            ctx.status = 201;
+            logger.info('Groups fetched.');
         } catch (error) {
-            ctx.body = error.response || 'erroror occurred!'
-            ctx.status = 500
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`)
+            throw error;
         }
     },
 
     async groupPolicies(ctx) {
         try {
-            ctx.body = await groupService.groupPolicies(ctx.request.body)
-            ctx.status = 201
-            logger.info('groupPolicies are fetched successfully!')
+            ctx.body = await groupService.groupPolicies();
+            ctx.status = 201;
+            logger.info('Group policies fetched.');
         } catch (error) {
-            ctx.body = error.response || 'erroror occurred!'
-            ctx.status = 500
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`)
+           throw error;
         }
     },
 
     async groupUsers(ctx) {
         try {
-            ctx.body = await groupService.groupUsers(ctx.request.body)
-            ctx.status = 201
-            logger.info('groupUsers are fetched successfully!')
+            ctx.body = await groupService.groupUsers(ctx.request.body);
+            ctx.status = 201;
+            logger.info('Group users fetched.');
         } catch (error) {
-            ctx.body = error.response || 'erroror occurred!'
-            ctx.status = 500
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`)
+           throw error;
         }
     }
-}
+};
 
 module.exports = {
-    groups: Group.groups, 
+    groups: Group.groups,
     groupPolicies: Group.groupPolicies,
     groupUsers: Group.groupUsers,
-}
\ No newline at end of file
+};
diff --git a/app/api/group/index.js b/app/api/group/index.js
index bb15fd2750badfafa59dfa725b41a86bb897a0dd..32fb0668b48efeb86f601558977fb064eb9f6388 100644
--- a/app/api/group/index.js
+++ b/app/api/group/index.js
@@ -1,9 +1,10 @@
 'use strict'
 
-const { groups, groupUsers, groupPolicies } = require('./get')
-const { createGroup, createGroupPolicy, createGroupUser } = require('./post')
-const { deleteGroup, deleteGroupPolicy, deleteGroupUser } = require('./delete')
-const { updateGroup, updateGroupPolicy, updateGroupUser } = require('./update')
+const { groups, groupUsers, groupPolicies } = require('./get');
+const { createGroup, createGroupPolicy, createGroupUser } = require('./post');
+const { deleteGroup, deleteGroupPolicy, deleteGroupUser } = require('./delete');
+const { updateGroup, updateGroupPolicy, updateGroupUser } = require('./update');
+
 const GroupHandler = {
     groups,
     groupUsers,
@@ -17,6 +18,6 @@ const GroupHandler = {
     updateGroup,
     updateGroupPolicy,
     updateGroupUser
-}
+};
 
-module.exports = GroupHandler
\ No newline at end of file
+module.exports = GroupHandler;
diff --git a/app/api/group/post.js b/app/api/group/post.js
index 76f4e172bf2b32d52fd63e9dd499af3472dfa99e..dd0a5b530a1994c9476e5affc2d97a53a5af7e65 100644
--- a/app/api/group/post.js
+++ b/app/api/group/post.js
@@ -1,48 +1,42 @@
 'use strict'
 
-const groupService = require('../../dal/groupService')
-
-const logger = require('../../utils/format')
-const util = require('util')
+const groupService = require('../../dal/groupService');
+const logger = require('../../utils/logger');
 
 const Group = {
     async createGroup(ctx) {
         try {
-            ctx.body = await groupService.createGroup(ctx.request.body)
-            ctx.status = 201
-            logger.info('group created successfully!')
+            ctx.body = await groupService.createGroup(ctx.request.body);
+            ctx.status = 201;
+            logger.info('Group created.');
         } catch (error) {
-            ctx.body = error || 'error occurred!'
-            ctx.status = 500
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`)
+            throw error;
         }
     },
+
     async createGroupPolicy(ctx) {
         try {
-            ctx.body = await groupService.createGroupPolicy(ctx.request.body)
-            ctx.status = 201
-            logger.info('GroupPolicy created successfully!')
+            ctx.body = await groupService.createGroupPolicy(ctx.request.body);
+            ctx.status = 201;
+            logger.info('Assigned policy to group.');
         } catch (error) {
-            ctx.body = error || 'error occurred!'
-            ctx.status = 500
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`)
+            throw error;
         }
     },
+
     async createGroupUser(ctx) {
         try {
-            ctx.body = await groupService.createGroupUser(ctx.request.body)
-            ctx.status = 201
-            logger.info('GroupUser created successfully!')
+            ctx.body = await groupService.createGroupUser(ctx.request.body);
+            ctx.status = 201;
+            logger.info('Assigned user to group.');
         } catch (error) {
-            ctx.body = error || 'error occurred!'
-            ctx.status = 500
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`)
+            throw error;
         }
     }
-}
+};
 
 module.exports = {
     createGroup: Group.createGroup,
-    createGroupPolicy: Group.createGroupPolicy, 
-    createGroupUser: Group.createGroupUser, 
-}
\ No newline at end of file
+    createGroupPolicy: Group.createGroupPolicy,
+    createGroupUser: Group.createGroupUser,
+};
diff --git a/app/api/group/update.js b/app/api/group/update.js
index 880fffbb2e3d19ab0cc91ee9b223b92df8f9d7b3..6241040bfbb0c205c72932040f0bba23b7979678 100644
--- a/app/api/group/update.js
+++ b/app/api/group/update.js
@@ -1,50 +1,42 @@
 'use strict'
 
-const groupService = require('../../dal/groupService')
-
-const logger = require('../../utils/format')
-const util = require('util')
+const groupService = require('../../dal/groupService');
+const logger = require('../../utils/logger');
 
 const Group = {
     async updateGroup(ctx) {
         try {
-            ctx.body = await groupService.updateGroup(ctx.request.body)
-            ctx.status = 201
-            logger.info('group is updated successfully!')
+            ctx.body = await groupService.updateGroup(ctx.request.body);
+            ctx.status = 201;
+            logger.info('Group updated.');
         } catch (error) {
-            ctx.body = error.response || 'erroror occurred!'
-            ctx.status = 500
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`)
+            throw error;
         }
     },
 
     async updateGroupPolicy(ctx) {
         try {
-            ctx.body = await groupService.updateGroupPolicy(ctx.request.body)
-            ctx.status = 201
-            logger.info('GroupPolicy is updated successfully!')
+            ctx.body = await groupService.updateGroupPolicy(ctx.request.body);
+            ctx.status = 201;
+            logger.info('Group policy updated.');
         } catch (error) {
-            ctx.body = error.response || 'erroror occurred!'
-            ctx.status = 500
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`)
+            throw error;
         }
     },
 
     async updateGroupUser(ctx) {
         try {
-            ctx.body = await groupService.updateGroupUser(ctx.request.body)
-            ctx.status = 201
-            logger.info('GroupUser is updated successfully!')
+            ctx.body = await groupService.updateGroupUser(ctx.request.body);
+            ctx.status = 201;
+            logger.info('Group user updated.');
         } catch (error) {
-            ctx.body = error.response || 'erroror occurred!'
-            ctx.status = 500
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`)
+            throw error;
         }
     },
-}
+};
 
 module.exports = {
     updateGroup: Group.updateGroup,
     updateGroupPolicy: Group.updateGroupPolicy,
     updateGroupUser: Group.updateGroupUser,
-}
+};
diff --git a/app/api/index.js b/app/api/index.js
index 96dbbe4159f8cb082e8da7b49ec35d5adf8a9b09..a69d35fc0717d34a1f10da4774b1e28a44f88e00 100644
--- a/app/api/index.js
+++ b/app/api/index.js
@@ -1,103 +1,106 @@
 'use strict'
 
-const Router = require("koa-router")
-const bodyParser = require("koa-bodyparser")
+const Router = require("koa-router");
+const bodyParser = require("koa-bodyparser");
+/* const { keycloak } = require('../../init-keycloak') */
 
-const { keycloak } = require('../../init-keycloak')
+// Handlers
+const userHandler = require('./users');
+const roleHandler = require('./roles');
+const allocationRoleHandler = require('./role-user');
+const searchHistoryHandler = require('./user-search-history');
+const userRequestHandler = require('./user-requests');
+const groupHandler = require('./group');
+const policyHandler = require('./policy');
+const UserFieldsDisplaySettingsHandler = require("./user-fields-display-settings");
 
-// handlers
-const userHandler = require('./users')
-const roleHandler = require('./roles')
-const allocationRoleHandler = require('./role-user')
-const searchHistoryHandler = require('./user-search-history')
-const userRequestHandler = require('./user-requests')
-const groupHandler = require('./group')
-const policyHandler = require('./policy')
-const { groups } = require("../dal/groupService")
-const routers = new Router()
+const routers = new Router();
+
+routers.use(bodyParser());
 
-routers.use(bodyParser())
 routers.get('/healthcheck', (ctx) => {
-    // ctx.body = 'inra.paca.gatekeeper is up!'
-    console.log('consul hit!!')
-    ctx.res.statusCode = 200
-    ctx.res.end('OK!')
-})
+    ctx.res.statusCode = 200;
+    ctx.res.end('OK');
+});
 
-// user
-routers.post('/user', userHandler.addNewUser)
-routers.post('/user/findOne',/* keycloak.protect(),*/ userHandler.user)
-routers.get('/user/find',/* keycloak.protect(),*/ userHandler.users)
-routers.delete('/user/delete',/* keycloak.protect(),*/ userHandler.deleteUser)
-routers.put('/user/update',/* keycloak.protect(),*/ userHandler.update)
-routers.post('/user/kcid', /* keycloak.protect(),*/ userHandler.kcId)
-routers.post('/user/detail', /* keycloak.protect(),*/ userHandler.detail)
-routers.post('/user/assigned-by-role', userHandler.getAssignedUserByRole)
-routers.post('/user/send-mail', userHandler.sendMail)
-routers.post('/user/reset-password', userHandler.resetPassword)
+// Users
+routers.post('/user', userHandler.create);
+routers.post('/user/findOne',/* keycloak.protect(),*/ userHandler.user);
+routers.get('/user/find',/* keycloak.protect(),*/ userHandler.users);
+routers.delete('/user/delete',/* keycloak.protect(),*/ userHandler.deleteUser);
+routers.put('/user/update',/* keycloak.protect(),*/ userHandler.update);
+routers.post('/user/kcid', /* keycloak.protect(),*/ userHandler.kcId);
+routers.post('/user/detail', /* keycloak.protect(),*/ userHandler.detail);
+routers.post('/user/assigned-by-role', userHandler.getAssignedUserByRole);
+routers.post('/user/send-mail', userHandler.sendMail);
+routers.post('/user/reset-password', userHandler.resetPassword);
 
-// System User
-routers.post('/user/create-system-user', userHandler.createSystemUser)
-routers.get('/user/with-groups-and-roles', userHandler.usersWithGroupAndRole)
-routers.post('/user/one-with-groups-and-roles', userHandler.userWithGroupAndRole)
+// System admin user
+routers.post('/user/create-system-user', userHandler.createSystemUser);
+routers.get('/user/with-groups-and-roles', userHandler.usersWithGroupAndRole);
+routers.post('/user/one-with-groups-and-roles', userHandler.userWithGroupAndRole);
 
-// search-history
-routers.post('/user/add-history', searchHistoryHandler.add)
-routers.post('/user/fetch-history', searchHistoryHandler.fetch)
-routers.delete('/user/delete-history', searchHistoryHandler.deleteH)
+// Search history
+routers.post('/user/add-history', searchHistoryHandler.create);
+routers.post('/user/fetch-history', searchHistoryHandler.fetch);
+routers.delete('/user/delete-history', searchHistoryHandler.deleteUserSearchHistory);
 
-// user requests
-routers.post('/user/create-request', userRequestHandler.createRequest)
-routers.delete('/user/delete-request', userRequestHandler.deleteRequest)
-routers.post('/user/process-request', userRequestHandler.processRequest)
-routers.get('/user/list-requests', userRequestHandler.fetchRequests)
-routers.post('/user/list-requests-by-user', userRequestHandler.fetchRequestsByUser)
-routers.get('/user/list-pending-requests', userRequestHandler.fetchPendingRequests)
+// User fields display settings
+routers.post('/user/fields-display-settings/', /* keycloak.protect(),*/ UserFieldsDisplaySettingsHandler.createUserFieldsDisplaySettings);
+routers.get('/user/fields-display-settings/:userId',/* keycloak.protect(),*/ UserFieldsDisplaySettingsHandler.findUserFieldsDisplaySettings);
+routers.get('/user/fields-display-settings/',/* keycloak.protect(),*/ UserFieldsDisplaySettingsHandler.findUsersFieldsDisplaySettings);
+routers.put('/user/fields-display-settings/',/* keycloak.protect(),*/ UserFieldsDisplaySettingsHandler.updateUserFieldsDisplaySettings);
+routers.delete('/user/fields-display-settings/:userId',/* keycloak.protect(),*/ UserFieldsDisplaySettingsHandler.deleteUserFieldsDisplaySettings);
 
-// group
-routers.post('/user/groups', groupHandler.groups)
-routers.post('/user/group-policies', groupHandler.groupPolicies)
-routers.post('/user/group-users', groupHandler.groupUsers)
-routers.post('/user/add-group', groupHandler.createGroup)
-routers.post('/user/add-group-policy', groupHandler.createGroupPolicy)
-routers.post('/user/add-group-user', groupHandler.createGroupUser)
-routers.put('/user/update-group', groupHandler.updateGroup)
-routers.put('/user/update-group-policy', groupHandler.updateGroupPolicy)
-routers.put('/user/update-group-user', groupHandler.updateGroupUser)
-routers.delete('/user/delete-group', groupHandler.deleteGroup)
-routers.delete('/user/delete-group-policy', groupHandler.deleteGroupPolicy)
-routers.delete('/user/delete-group-user', groupHandler.deleteGroupUser)
+// User requests
+routers.post('/user/create-request', userRequestHandler.createRequest);
+routers.delete('/user/delete-request', userRequestHandler.deleteRequest);
+routers.post('/user/process-request', userRequestHandler.processRequest);
+routers.get('/user/list-requests', userRequestHandler.fetchRequests);
+routers.post('/user/list-requests-by-user', userRequestHandler.fetchRequestsByUser);
+routers.get('/user/list-pending-requests', userRequestHandler.fetchPendingRequests);
 
-// policy
-routers.post('/policy/add', policyHandler.createPolicy)
-routers.delete('/policy/delete', policyHandler.deletePolicy)
-routers.put('/policy/update', policyHandler.updatePolicy)
-routers.get('/policy/list', policyHandler.policies)
-routers.post('/policy/list-by-user', policyHandler.policiesByUser)
-routers.post('/policy/assigned-fields', policyHandler.assignedPolicies)
-routers.get('/policy/policies-with-sources', policyHandler.getPoliciesWithSources)
-routers.post('/policy/policies-with-sources-by-user', policyHandler.getPoliciesWithSourcesByUser)
-routers.post('/policy/policies-with-groups', policyHandler.getGroupDetailsByPolicy)
-routers.post('/policyField/add', policyHandler.createPolicyField)
-routers.delete('/policyField/delete', policyHandler.deletePolicyField)
-routers.put('/policyField/update', policyHandler.updatePolicyField)
-routers.get('/policyField/list', policyHandler.policyFields)
-routers.post('/policySource/add', policyHandler.createPolicySource)
-// role
-routers.post('/role',/* keycloak.protect(),*/ roleHandler.addNewRole)
-routers.get('/role/find', /* keycloak.protect(),*/ roleHandler.roles)
-routers.get('/role/findOne', /* keycloak.protect(),*/ roleHandler.role)
-routers.delete('/role/delete', /* keycloak.protect(),*/ roleHandler.deleteRole)
-routers.put('/role/update', /* keycloak.protect(),*/ roleHandler.update)
+// Groups
+routers.post('/user/groups', groupHandler.groups);
+routers.post('/user/group-policies', groupHandler.groupPolicies);
+routers.post('/user/group-users', groupHandler.groupUsers);
+routers.post('/user/add-group', groupHandler.createGroup);
+routers.post('/user/add-group-policy', groupHandler.createGroupPolicy);
+routers.post('/user/add-group-user', groupHandler.createGroupUser);
+routers.put('/user/update-group', groupHandler.updateGroup);
+routers.put('/user/update-group-policy', groupHandler.updateGroupPolicy);
+routers.put('/user/update-group-user', groupHandler.updateGroupUser);
+routers.delete('/user/delete-group', groupHandler.deleteGroup);
+routers.delete('/user/delete-group-policy', groupHandler.deleteGroupPolicy);
+routers.delete('/user/delete-group-user', groupHandler.deleteGroupUser);
 
-// role-user
-routers.post('/allocate-role-to-user', /* keycloak.protect(),*/allocationRoleHandler.allocateRole)
-routers.post('/allocatedRoles', /* keycloak.protect(),*/allocationRoleHandler.allocatedRoles)
-routers.put('/allocatedRoles/update', /* keycloak.protect(),*/allocationRoleHandler.update)
-routers.delete('/allocatedRoles/delete',/* keycloak.protect(),*/allocationRoleHandler.deleteAllocatedRole)
+// Policies
+routers.post('/policy/add', policyHandler.createPolicy);
+routers.delete('/policy/delete', policyHandler.deletePolicy);
+routers.put('/policy/update', policyHandler.updatePolicy);
+routers.get('/policy/list', policyHandler.policies);
+routers.post('/policy/list-by-user', policyHandler.policiesByUser);
+routers.post('/policy/assigned-fields', policyHandler.assignedPolicies);
+routers.get('/policy/policies-with-sources', policyHandler.getPoliciesWithSources);
+routers.post('/policy/policies-with-sources-by-user', policyHandler.getPoliciesWithSourcesByUser);
+routers.post('/policy/policies-with-groups', policyHandler.getGroupDetailsByPolicy);
+routers.post('/policyField/add', policyHandler.createPolicyField);
+routers.delete('/policyField/delete', policyHandler.deletePolicyField);
+routers.put('/policyField/update', policyHandler.updatePolicyField);
+routers.get('/policyField/list', policyHandler.policyFields);
+routers.post('/policySource/add', policyHandler.createPolicySource);
 
-// user-resource
+// Roles
+routers.post('/role',/* keycloak.protect(),*/ roleHandler.createRole);
+routers.get('/role/find', /* keycloak.protect(),*/ roleHandler.roles);
+routers.get('/role/findOne', /* keycloak.protect(),*/ roleHandler.role);
+routers.delete('/role/delete', /* keycloak.protect(),*/ roleHandler.deleteRole);
+routers.put('/role/update', /* keycloak.protect(),*/ roleHandler.update);
 
-// role-field
+// Role allocation to users
+routers.post('/allocate-role-to-user', /* keycloak.protect(),*/allocationRoleHandler.create);
+routers.post('/allocatedRoles', /* keycloak.protect(),*/allocationRoleHandler.allocatedRoles);
+routers.put('/allocatedRoles/update', /* keycloak.protect(),*/allocationRoleHandler.update);
+routers.delete('/allocatedRoles/delete',/* keycloak.protect(),*/allocationRoleHandler.deleteAllocatedRole);
 
-module.exports = routers
+module.exports = routers;
diff --git a/app/api/policy/delete.js b/app/api/policy/delete.js
index 5b7b3e3e36edbac4703e2312cdb3496cdf4cbe8f..4a75dceb9babc969419b910195765a0bd9badcaa 100644
--- a/app/api/policy/delete.js
+++ b/app/api/policy/delete.js
@@ -1,38 +1,31 @@
 'use strict'
 
-const policyService = require('../../dal/policyService')
-
-const logger = require('../../utils/format')
-const util = require('util')
+const policyService = require('../../dal/policyService');
+const logger = require('../../utils/logger');
 
 const Policy = {
-
     async deletePolicy(ctx) {
         try {
-            ctx.body = await policyService.deletePolicy(ctx.request.body)
-            ctx.status = 201
-            logger.info('Policy is listed successfully!')
+            ctx.body = await policyService.deletePolicy(ctx.request.body);
+            ctx.status = 201;
+            logger.info('Policy deleted.');
         } catch (error) {
-            ctx.body = error.response || 'erroror occurred!'
-            ctx.status = 500
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`)
+            throw error;
         }
     },
 
     async deletePolicyField(ctx) {
         try {
-            ctx.body = await policyService.deletePolicyField(ctx.request.body)
-            ctx.status = 201
-            logger.info('PolicyField is listed successfully!')
+            ctx.body = await policyService.deletePolicyField(ctx.request.body);
+            ctx.status = 201;
+            logger.info('PolicyField deleted.');
         } catch (error) {
-            ctx.body = error.response || 'erroror occurred!'
-            ctx.status = 500
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`)
+            throw error;
         }
     }
-}
+};
 
 module.exports = {
     deletePolicy: Policy.deletePolicy,
     deletePolicyField: Policy.deletePolicyField
-}
\ No newline at end of file
+};
diff --git a/app/api/policy/get.js b/app/api/policy/get.js
index b73c29d47892ac9ff15022645699ee4a5080ca28..61abfad228e78a6f2b9cd79b852c89c809b82455 100644
--- a/app/api/policy/get.js
+++ b/app/api/policy/get.js
@@ -1,72 +1,59 @@
 'use strict'
 
-const policyService = require('../../dal/policyService')
-
-const logger = require('../../utils/format')
-const util = require('util')
+const policyService = require('../../dal/policyService');
+const logger = require('../../utils/logger');
 
 const Policy = {
-
     async policies(ctx) {
         try {
-            ctx.body = await policyService.policies(ctx.request.body)
-            ctx.status = 201
-            logger.info('Policy is listed successfully!')
+            ctx.body = await policyService.policies();
+            ctx.status = 201;
+            logger.info('Policies fetched.');
         } catch (error) {
-            ctx.body = error.response || 'erroror occurred!'
-            ctx.status = 500
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`)
+            throw error;
         }
     },
 
     async policyFields(ctx) {
         try {
-            ctx.body = await policyService.policyFields(ctx.request.body)
-            ctx.status = 201
-            logger.info('PolicyField is listed successfully!')
+            ctx.body = await policyService.policyFields();
+            ctx.status = 201;
+            logger.info('Policy fields fetched.');
         } catch (error) {
-            ctx.body = error.response || 'erroror occurred!'
-            ctx.status = 500
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`)
+            throw error;
         }
     },
 
     async assignedPolicies(ctx) {
         try {
-            ctx.body = await policyService.getAssignedPolicies(ctx.request.body)
-            ctx.status = 201
-            logger.info('assignedPolicies are listed successfully!')
+            ctx.body = await policyService.getAssignedPolicies(ctx.request.body);
+            ctx.status = 201;
+            logger.info('Assigned policies fetched.');
         } catch (error) {
-            ctx.body = error.response || 'erroror occurred!'
-            ctx.status = 500
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`)
+            throw error;
         }
     },
 
     async getPoliciesWithSources(ctx) {
         try {
-            ctx.body = await policyService.getPoliciesWithSources(ctx.request.body)
-            ctx.status = 201
-            logger.info('PoliciesWithSources are listed successfully!')
+            ctx.body = await policyService.getPoliciesWithSources();
+            ctx.status = 201;
+            logger.info('Policies with sources fetched.');
         } catch (error) {
-            ctx.body = error.response || 'erroror occurred!'
-            ctx.status = 500
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`)
+            throw error;
         }
     },
 
     async getGroupDetailsByPolicy(ctx) {
         try {
-            ctx.body = await policyService.getGroupDetailsByPolicy(ctx.request.body)
-            ctx.status = 201
-            logger.info('Group Details by policy are listed successfully!')
+            ctx.body = await policyService.getGroupDetailsByPolicy(ctx.request.body);
+            ctx.status = 201;
+            logger.info('Group details by policy fetched.');
         } catch (error) {
-            ctx.body = error.response || 'erroror occurred!'
-            ctx.status = 500
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`)
+            throw error;
         }
     }
-}
+};
 
 module.exports = {
     policies: Policy.policies,
@@ -74,4 +61,4 @@ module.exports = {
     assignedPolicies: Policy.assignedPolicies,
     getPoliciesWithSources: Policy.getPoliciesWithSources,
     getGroupDetailsByPolicy: Policy.getGroupDetailsByPolicy
-}
\ No newline at end of file
+};
diff --git a/app/api/policy/post.js b/app/api/policy/post.js
index 41a26e1ddf10f4d9911a977e2f3b030510bac456..a04c6bb89819b12671c987d64ade4acbfd4227ce 100644
--- a/app/api/policy/post.js
+++ b/app/api/policy/post.js
@@ -1,72 +1,59 @@
 'use strict'
 
-const policyService = require('../../dal/policyService')
-
-const logger = require('../../utils/format')
-const util = require('util')
+const policyService = require('../../dal/policyService');
+const logger = require('../../utils/logger');
 
 const Policy = {
-
     async createPolicy(ctx) {
         try {
-            ctx.body = await policyService.createPolicy(ctx.request.body)
-            ctx.status = 201
-            logger.info('Policy is created successfully!')
+            ctx.body = await policyService.createPolicy(ctx.request.body);
+            ctx.status = 201;
+            logger.info('Policy created.');
         } catch (error) {
-            ctx.body = error.response || 'erroror occurred!'
-            ctx.status = 500
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`)
+            throw error;
         }
     },
 
     async createPolicyField(ctx) {
         try {
-            ctx.body = await policyService.createPolicyField(ctx.request.body)
-            ctx.status = 201
-            logger.info('PolicyField is created successfully!')
+            ctx.body = await policyService.createPolicyField(ctx.request.body);
+            ctx.status = 201;
+            logger.info('PolicyField created.');
         } catch (error) {
-            ctx.body = error.response || 'erroror occurred!'
-            ctx.status = 500
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`)
+            throw error;
         }
     },
 
     async createPolicySource(ctx) {
         try {
-            ctx.body = await policyService.createPolicySource(ctx.request.body)
-            ctx.status = 201
-            logger.info('PolicySource is created successfully!')
+            ctx.body = await policyService.createPolicySource(ctx.request.body);
+            ctx.status = 201;
+            logger.info('PolicySource created.');
         } catch (error) {
-            ctx.body = error.response || 'erroror occurred!'
-            ctx.status = 500
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`)
+            throw error;
         }
     },
 
     async policiesByUser(ctx) {
         try {
-            ctx.body = await policyService.policiesByUser(ctx.request.body)
-            ctx.status = 201
-            logger.info('Policies by user listed successfully!')
+            ctx.body = await policyService.policiesByUser(ctx.request.body);
+            ctx.status = 201;
+            logger.info('Policies by user listed.');
         } catch (error) {
-            ctx.body = error.response || 'erroror occurred!'
-            ctx.status = 500
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`)
+            throw error;
         }
     },
 
     async getPoliciesWithSourcesByUser(ctx) {
         try {
-            ctx.body = await policyService.getPoliciesWithSourcesByUser(ctx.request.body)
-            ctx.status = 201
-            logger.info('Policies with sources by user listed successfully!')
+            ctx.body = await policyService.getPoliciesWithSourcesByUser(ctx.request.body);
+            ctx.status = 201;
+            logger.info('Policies with sources by user listed.');
         } catch (error) {
-            ctx.body = error.response || 'erroror occurred!'
-            ctx.status = 500
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`)
+            throw error;
         }
     }
-}
+};
 
 module.exports = {
     policiesByUser: Policy.policiesByUser,
@@ -74,4 +61,4 @@ module.exports = {
     createPolicy: Policy.createPolicy,
     createPolicyField: Policy.createPolicyField,
     createPolicySource: Policy.createPolicySource
-}
\ No newline at end of file
+};
diff --git a/app/api/policy/update.js b/app/api/policy/update.js
index de97cfe90c5b0139795e75145e2fbcf1d8121e04..9afd22e22505a37b71d206401f834ab46214f897 100644
--- a/app/api/policy/update.js
+++ b/app/api/policy/update.js
@@ -1,39 +1,31 @@
 'use strict'
 
-const policyService = require('../../dal/policyService')
-
-const logger = require('../../utils/format')
-const util = require('util')
-
+const policyService = require('../../dal/policyService');
+const logger = require('../../utils/logger');
 
 const Policy = {
-
     async updatePolicy(ctx) {
         try {
-            ctx.body = await policyService.updatePolicy(ctx.request.body)
-            ctx.status = 201
-            logger.info('Policy is updated successfully!')
+            ctx.body = await policyService.updatePolicy(ctx.request.body);
+            ctx.status = 201;
+            logger.info('Policy updated.');
         } catch (error) {
-            ctx.body = error.response || 'erroror occurred!'
-            ctx.status = 500
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`)
+            throw error;
         }
     },
 
     async updatePolicyField(ctx) {
         try {
-            ctx.body = await policyService.updatePolicyField(ctx.request.body)
-            ctx.status = 201
-            logger.info('PolicyField is updated successfully!')
+            ctx.body = await policyService.updatePolicyField(ctx.request.body);
+            ctx.status = 201;
+            logger.info('Policy field updated.');
         } catch (error) {
-            ctx.body = error.response || 'erroror occurred!'
-            ctx.status = 500
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`)
+            throw error;
         }
     }
-}
+};
 
 module.exports = {
     updatePolicy: Policy.updatePolicy,
     updatePolicyField: Policy.updatePolicyField,
-}
\ No newline at end of file
+};
diff --git a/app/api/realm/delete.js b/app/api/realm/delete.js
index 791f45c83a693b6d6fbffe992a449416a0fd2fc4..b6b49bad17c9eb71451b1252fa04993bba14246f 100644
--- a/app/api/realm/delete.js
+++ b/app/api/realm/delete.js
@@ -1,10 +1,9 @@
 'use strict'
 
 const realmService = require('../../dal/realmService')
-const logger = require('../../utils/format')
+const logger = require('../../utils/logger')
 const util = require('util')
 
-
 const DeleteRealm = {
     async deleteRealm(ctx) {
         try {
@@ -19,8 +18,7 @@ const DeleteRealm = {
     }
 }
 
-
 module.exports = {
     deleteRealm: DeleteRealm.deleteRealm,
     DeleteRealm
-}
\ No newline at end of file
+}
diff --git a/app/api/realm/get.js b/app/api/realm/get.js
index 743d94c4cedb0afabfb30b4e3a3fbd6d9b34dc38..cdef5b9cde4033ecb73d9ef0c08fb45a525915fb 100644
--- a/app/api/realm/get.js
+++ b/app/api/realm/get.js
@@ -1,12 +1,10 @@
 'use strict'
 
 const realmService = require('../../dal/realmService')
-const logger = require('../../utils/format')
+const logger = require('../../utils/logger')
 const util = require('util')
 
-
 const GetRealm = {
-
     async find(ctx) {
         try {
             ctx.body = await realmService.realms()
@@ -33,9 +31,8 @@ const GetRealm = {
 
 }
 
-
 module.exports = {
     realms: GetRealm.find,
     realm: GetRealm.findOne,
     GetRealm
-}
\ No newline at end of file
+}
diff --git a/app/api/realm/post.js b/app/api/realm/post.js
index 0e04834c371b2722b43ba297ed147df89212f98b..d60ac09e9aa97dc6515144c78537054423dd2399 100644
--- a/app/api/realm/post.js
+++ b/app/api/realm/post.js
@@ -1,12 +1,10 @@
 "use strict"
 
 const realmService = require("../../dal/realmService")
-const logger = require("../../utils/format")
+const logger = require("../../utils/logger")
 const util = require('util')
 
-
 const AddRealm = {
-
     async AddNewRealm(ctx) {
         try {
             ctx.body = await realmService.create(ctx.request.body)
@@ -20,8 +18,7 @@ const AddRealm = {
     }
 }
 
-
 module.exports = {
     addRealm: AddRealm.AddNewRealm,
     AddRealm
-}
\ No newline at end of file
+}
diff --git a/app/api/realm/put.js b/app/api/realm/put.js
index 3c8e3d996798c4b4c3926a4b58d0ed72dac04f2c..adfa37c0db7a55484b8b04cdf3abfbead842f79e 100644
--- a/app/api/realm/put.js
+++ b/app/api/realm/put.js
@@ -1,12 +1,10 @@
 'use strict'
 
 const realmService = require("../../dal/realmService");
-const logger = require('../../utils/format')
+const logger = require('../../utils/logger')
 const util = require('util')
 
-
 const UpdateRealm = {
-
     async update(ctx) {
         try {
             ctx.body = await realmService.update(ctx.request.body);
@@ -20,8 +18,7 @@ const UpdateRealm = {
     }
 }
 
-
 module.exports = {
     update: UpdateRealm.update,
     UpdateRealm
-}
\ No newline at end of file
+}
diff --git a/app/api/role-user/delete.js b/app/api/role-user/delete.js
index 7394e1b18fe840fe762b201d77f65f0dda1ed980..ef7c9d1fbea7f49c0129c3aaa800ec056464c0f9 100644
--- a/app/api/role-user/delete.js
+++ b/app/api/role-user/delete.js
@@ -1,26 +1,21 @@
 'use strict'
 
-const roleAllocationService = require("../../dal/roleAllocationService")
-const logger = require("../../utils/format")
-const util = require('util')
-
+const roleAllocationService = require("../../dal/roleAllocationService");
+const logger = require("../../utils/logger");
 
 const DeleteAllocatedRole = {
-
-    async deleteAllocatedRole(ctx) {
+    async delete(ctx) {
         try {
-            ctx.body = await roleAllocationService.delete(ctx.request.body)
-            ctx.status = 201
-            logger.info('Allocated role is deleted successfully!')
-        } catch (err) {
-            ctx.body = err || 'Error occurred!'
-            ctx.status = 500;
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`)
+            ctx.body = await roleAllocationService.delete(ctx.request.body);
+            ctx.status = 201;
+            logger.info('Role allocated to user deleted.');
+        } catch (error) {
+            throw error;
         }
     }
-}
+};
 
 module.exports = {
-    deleteAllocatedRole: DeleteAllocatedRole.deleteAllocatedRole,
+    deleteAllocatedRole: DeleteAllocatedRole.delete,
     DeleteAllocatedRole
-}
\ No newline at end of file
+};
diff --git a/app/api/role-user/get.js b/app/api/role-user/get.js
index 29deb2fab8936c7674f18beb0addae7db96f9e7d..993607610fa5e184058bce9e87dfdd521f9bbb14 100644
--- a/app/api/role-user/get.js
+++ b/app/api/role-user/get.js
@@ -1,27 +1,21 @@
 'use strict'
 
-const roleAllocationService = require("../../dal/roleAllocationService")
-const logger = require("../../utils/format")
-const util = require('util')
+const roleAllocationService = require("../../dal/roleAllocationService");
+const logger = require("../../utils/logger");
 
 const GetAllocatedRole = {
-
     async find(ctx) {
         try {
-            const allocatedRoles = await roleAllocationService.allocatedRoles(ctx.request.body)
-            ctx.body = allocatedRoles.rows
-            ctx.status = 201
-            logger.info('Allocated roles are listed by kc_id')
-        } catch (err) {
-            ctx.body = err || 'Error occurred!'
-            ctx.status = 500;
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`)
+            ctx.body = await roleAllocationService.allocatedRoles(ctx.request.body);
+            ctx.status = 201;
+            logger.info('User allocated roles fetched.');
+        } catch (error) {
+            throw error;
         }
     }
-}
-
+};
 
 module.exports = {
     allocatedRoles: GetAllocatedRole.find,
     GetAllocatedRole
-}
\ No newline at end of file
+};
diff --git a/app/api/role-user/index.js b/app/api/role-user/index.js
index f927a5638a842007e2e98d4abeb629f6910ea3c8..19a8e5234a324a09dbb05cc6a480ae7a4d0ddc4a 100644
--- a/app/api/role-user/index.js
+++ b/app/api/role-user/index.js
@@ -1,15 +1,15 @@
 'use strict'
 
-const { allocateRole } = require("./post")
-const { allocatedRoles } = require('./get')
-const { update } = require('./put')
-const { deleteAllocatedRole } = require('./delete')
+const { create } = require("./post");
+const { allocatedRoles } = require('./get');
+const { update } = require('./put');
+const { deleteAllocatedRole } = require('./delete');
 
 const AllocationRoleHandler = {
-    allocateRole,
+    create,
     allocatedRoles,
     update,
     deleteAllocatedRole,
-}
+};
 
-module.exports = AllocationRoleHandler
\ No newline at end of file
+module.exports = AllocationRoleHandler;
diff --git a/app/api/role-user/post.js b/app/api/role-user/post.js
index 798ed05ccbd053ee10adc11acd58a0cf3e5b1fc6..0e1c04b94222162d4f5e0b76cc0c1d095578387a 100644
--- a/app/api/role-user/post.js
+++ b/app/api/role-user/post.js
@@ -1,26 +1,21 @@
 'use strict'
 
-const roleAllocationService = require("../../dal/roleAllocationService")
-const logger = require("../../utils/format")
-const util = require('util')
-
+const roleAllocationService = require("../../dal/roleAllocationService");
+const logger = require("../../utils/logger");
 
 const AllocateRoleToUser = {
-
-    async allocateRoleToUser(ctx) {
+    async create(ctx) {
         try {
-            ctx.body = await roleAllocationService.create(ctx.request.body)
-            ctx.status = 201
-            logger.info('role is allocated to user successfully!')
-        } catch (err) {
-            ctx.body = err || 'Error occurred!'
-            ctx.status = 500
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`)
+            ctx.body = await roleAllocationService.create(ctx.request.body);
+            ctx.status = 201;
+            logger.info('Role allocated to user.');
+        } catch (error) {
+            throw error;
         }
     }
-}
+};
 
 module.exports = {
-    allocateRole: AllocateRoleToUser.allocateRoleToUser,
+    create: AllocateRoleToUser.create,
     AllocateRoleToUser
-}
+};
diff --git a/app/api/role-user/put.js b/app/api/role-user/put.js
index 58cf42708bf658f054407361f3d7b1192b1c61d9..9cebeaec1d0499290f9b10fb19cee14c046867ae 100644
--- a/app/api/role-user/put.js
+++ b/app/api/role-user/put.js
@@ -1,25 +1,21 @@
 'use strict'
 
-const roleAllocationService = require("../../dal/roleAllocationService")
-const logger = require("../../utils/format")
-const util = require('util')
+const roleAllocationService = require("../../dal/roleAllocationService");
+const logger = require("../../utils/logger");
 
 const UpdateAllocatedRole = {
     async update(ctx) {
         try {
-            ctx.body = await roleAllocationService.update(ctx.request.body)
-            ctx.status = 201
-            logger.info('Allocated role is updated successfully!')
-        } catch (err) {
-            ctx.body = err || 'Error occurred!'
-            ctx.status = 500;
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`)
+            ctx.body = await roleAllocationService.update(ctx.request.body);
+            ctx.status = 201;
+            logger.info('Role allocated to user updated.');
+        } catch (error) {
+            throw error;
         }
     }
-}
-
+};
 
 module.exports = {
     update: UpdateAllocatedRole.update,
     UpdateAllocatedRole
-}
\ No newline at end of file
+};
diff --git a/app/api/role-v2/index.js b/app/api/role-v2/index.js
deleted file mode 100644
index b7ff1bce2840cdbd119f780fa5fb1ea5a7071687..0000000000000000000000000000000000000000
--- a/app/api/role-v2/index.js
+++ /dev/null
@@ -1,2 +0,0 @@
-'use strict'
-
diff --git a/app/api/roles/delete.js b/app/api/roles/delete.js
index 56b6b38f5e2bf20073d32866f8cf3a531cc6be39..cd637740aace15ec2a9ebf4b5b575a61cb94d946 100644
--- a/app/api/roles/delete.js
+++ b/app/api/roles/delete.js
@@ -1,26 +1,21 @@
 'use strict'
 
-const roleService = require('../../dal/roleService')
-const logger = require('../../utils/format')
-const util = require('util')
-
+const roleService = require('../../dal/roleService');
+const logger = require('../../utils/logger');
 
 const DeleteRole = {
-
     async deleteRole(ctx) {
         try {
-            ctx.body = await roleService.delete(ctx.request.body)
-            ctx.status = 201
-            logger.info('role is deleted successfully!')
-        } catch (err) {
-            ctx.body = err || 'Error occurred!'
-            ctx.status = 500;
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`)
+            ctx.body = await roleService.delete(ctx.request.body);
+            ctx.status = 201;
+            logger.info('Role deleted.');
+        } catch (error) {
+            throw error;
         }
     }
-}
+};
 
 module.exports = {
     deleteRole: DeleteRole.deleteRole,
     DeleteRole,
-}
\ No newline at end of file
+};
diff --git a/app/api/roles/get.js b/app/api/roles/get.js
index 37789be581c3e62cb542223c81b6dd9fdefae236..9ae5a0ffd9545e5d9b92ea98fb194b56136909c1 100644
--- a/app/api/roles/get.js
+++ b/app/api/roles/get.js
@@ -1,39 +1,32 @@
 'use strict'
 
-const roleService = require("../../dal/roleService")
-const logger = require('../../utils/format')
-const util = require('util')
+const roleService = require("../../dal/roleService");
+const logger = require('../../utils/logger');
 
 const GetRole = {
     async find(ctx) {
         try {
-            ctx.body = await roleService.roles()
-            ctx.status = 201
-            logger.info('roles are listed successfully!')
-        } catch (err) {
-            ctx.body = err || 'Error occurred!'
-            ctx.status = 500;
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`)
+            ctx.body = await roleService.roles();
+            ctx.status = 201;
+            logger.info('Roles fetched.');
+        } catch (error) {
+            throw error;
         }
     },
 
     async findOne(ctx) {
         try {
-            ctx.body = await roleService.role(ctx.request.body)
-            ctx.status = 201
-            logger.info('role is found successfully!')
-        } catch (err) {
-            ctx.body = err || 'Error occurred!'
-            ctx.status = 500;
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`)
+            ctx.body = await roleService.role(ctx.request.body);
+            ctx.status = 201;
+            logger.info('Role fetched.');
+        } catch (error) {
+            throw error;
         }
     }
-}
+};
 
 module.exports = {
     roles: GetRole.find,
     role: GetRole.findOne,
     GetRole
-}
-
-
+};
diff --git a/app/api/roles/index.js b/app/api/roles/index.js
index 8e24e08378a77839b6fc8468a594b0be49ddc71a..0cc31dacb696235b5678fab18893b90008e6186c 100644
--- a/app/api/roles/index.js
+++ b/app/api/roles/index.js
@@ -1,17 +1,17 @@
 'use strict'
 
-const { addNewRole } = require('./post')
-const { roles } = require('./get')
-const { role } = require('./get')
-const { deleteRole } = require('./delete')
-const { update } = require('./put')
+const { createRole } = require('./post');
+const { roles } = require('./get');
+const { role } = require('./get');
+const { deleteRole } = require('./delete');
+const { update } = require('./put');
 
 const RoleHandler = {
-    addNewRole,
+    createRole,
     roles,
     role,
     deleteRole,
     update,
-}
+};
 
-module.exports = RoleHandler
\ No newline at end of file
+module.exports = RoleHandler;
diff --git a/app/api/roles/post.js b/app/api/roles/post.js
index d38fd7b8fa5210f878a4ff476d95d8e7ecc0849c..58c83a55f52d3a8438f3535c117cbf6f745f4f12 100644
--- a/app/api/roles/post.js
+++ b/app/api/roles/post.js
@@ -1,26 +1,21 @@
 'use strict'
 
-const roleService = require("../../dal/roleService")
-const logger = require('../../utils/format')
-const util = require('util')
-
+const roleService = require("../../dal/roleService");
+const logger = require('../../utils/logger');
 
 const AddRole = {
-
-    async addNewRole(ctx) {
+    async create(ctx) {
         try {
-            ctx.body = await roleService.create(ctx.request.body)
-            ctx.status = 201
-            logger.info('role is created successfully!')
-        } catch (err) {
-            ctx.body = err.response.data || 'Error occurred!'
-            ctx.status = 500
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`)
+            ctx.body = await roleService.create(ctx.request.body);
+            ctx.status = 201;
+            logger.info('Role created.');
+        } catch (error) {
+            throw error;
         }
     }
-}
+};
 
 module.exports = {
-    addNewRole: AddRole.addNewRole,
+    createRole: AddRole.create,
     AddRole
-}
\ No newline at end of file
+};
diff --git a/app/api/roles/put.js b/app/api/roles/put.js
index 24e1fd6150673c92b1b8ab1d80e16b91539865f9..9ed289b9aab7c1e26b04ea1ec4883bb655d79e5f 100644
--- a/app/api/roles/put.js
+++ b/app/api/roles/put.js
@@ -1,26 +1,21 @@
 'use strict'
 
-const roleService = require('../../dal/roleService')
-const logger = require('../../utils/format')
-const util = require('util')
-
+const roleService = require('../../dal/roleService');
+const logger = require('../../utils/logger');
 
 const UpdateRole = {
     async update(ctx) {
         try {
-            ctx.body = await roleService.update(ctx.request.body)
-            ctx.status = 201
-            logger.info('role is updated successfully!')
-
-        } catch (err) {
-            ctx.body = err || 'Error occurred!'
-            ctx.status = 500
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`)
+            ctx.body = await roleService.update(ctx.request.body);
+            ctx.status = 201;
+            logger.info('Role updated.');
+        } catch (error) {
+            throw error;
         }
     }
-}
+};
 
 module.exports = {
     update: UpdateRole.update,
     UpdateRole
-}
\ No newline at end of file
+};
diff --git a/app/api/user-fields-display-settings/delete.js b/app/api/user-fields-display-settings/delete.js
new file mode 100644
index 0000000000000000000000000000000000000000..743ae4aade7245b26ce447b3d3992c6eefb6671a
--- /dev/null
+++ b/app/api/user-fields-display-settings/delete.js
@@ -0,0 +1,21 @@
+'use strict'
+
+const userFieldsDisplaySettingsService = require("../../dal/userFieldsDisplaySettingsService");
+const logger = require('../../utils/logger');
+
+const UserFieldsDisplaySettings = {
+    async delete(ctx) {
+        try {
+            ctx.body = await userFieldsDisplaySettingsService.delete(ctx.request.params);
+            ctx.status = 201;
+            logger.info('User fields display settings deleted.');
+        } catch (error) {
+            throw error;
+        }
+    }
+}
+
+module.exports = {
+    deleteUserFieldsDisplaySettings: UserFieldsDisplaySettings.delete,
+    UserFieldsDisplaySettings
+};
diff --git a/app/api/user-fields-display-settings/get.js b/app/api/user-fields-display-settings/get.js
new file mode 100644
index 0000000000000000000000000000000000000000..e8b08ef97ebddbac2443428f7bc7b4c08d134b33
--- /dev/null
+++ b/app/api/user-fields-display-settings/get.js
@@ -0,0 +1,32 @@
+"use strict";
+
+const logger = require('../../utils/logger')
+const userFieldsDisplaySettingsService = require("../../dal/userFieldsDisplaySettingsService");
+
+const GetUserFieldsDisplaySettings = {
+    async find(ctx) {
+        try {
+            ctx.body = await userFieldsDisplaySettingsService.usersFieldsDisplaySettings();
+            ctx.status = 201;
+            logger.info('Users fields display settings retrieved.');
+        } catch (error) {
+            throw error;
+        }
+    },
+
+    async findOne(ctx) {
+        try {
+            ctx.body = await userFieldsDisplaySettingsService.userFieldsDisplaySettings(ctx.request.params);
+            ctx.status = 201;
+            logger.info('User fields display settings retrieved.');
+        } catch (error) {
+            throw error;
+        }
+    },
+};
+
+module.exports = {
+    findUsersFieldsDisplaySettings: GetUserFieldsDisplaySettings.find,
+    findUserFieldsDisplaySettings: GetUserFieldsDisplaySettings.findOne,
+    GetUserFieldsDisplaySettings
+};
diff --git a/app/api/user-fields-display-settings/index.js b/app/api/user-fields-display-settings/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..338b10b3732a4bc49181e93e3dc136b3092d33fa
--- /dev/null
+++ b/app/api/user-fields-display-settings/index.js
@@ -0,0 +1,16 @@
+"use strict";
+
+const { createUserFieldsDisplaySettings } = require('./post');
+const { findUsersFieldsDisplaySettings, findUserFieldsDisplaySettings } = require('./get');
+const { updateUserFieldsDisplaySettings } = require('./put');
+const { deleteUserFieldsDisplaySettings } = require('./delete');
+
+const UserFieldsDisplaySettingsHandler = {
+    createUserFieldsDisplaySettings,
+    findUsersFieldsDisplaySettings,
+    findUserFieldsDisplaySettings,
+    updateUserFieldsDisplaySettings,
+    deleteUserFieldsDisplaySettings
+}
+
+module.exports = UserFieldsDisplaySettingsHandler
diff --git a/app/api/user-fields-display-settings/post.js b/app/api/user-fields-display-settings/post.js
new file mode 100644
index 0000000000000000000000000000000000000000..2b0075bac46cba7991f6bca121ccbecbc2e4efa9
--- /dev/null
+++ b/app/api/user-fields-display-settings/post.js
@@ -0,0 +1,21 @@
+'use strict'
+
+const userFieldsDisplaySettingsService = require("../../dal/userFieldsDisplaySettingsService");
+const logger = require('../../utils/logger')
+
+const CreateUserFieldsDisplaySettings = {
+    async create(ctx) {
+        try {
+            ctx.body = await userFieldsDisplaySettingsService.create(ctx.request.body);
+            ctx.status = 201;
+            logger.info('User fields display settings created.');
+        } catch (error) {
+            throw error;
+        }
+    },
+}
+
+module.exports = {
+    createUserFieldsDisplaySettings: CreateUserFieldsDisplaySettings.create,
+    CreateUserFieldsDisplaySettings
+}
diff --git a/app/api/user-fields-display-settings/put.js b/app/api/user-fields-display-settings/put.js
new file mode 100644
index 0000000000000000000000000000000000000000..066f5939c2fc0713635c7adfe7e394b53c2204d2
--- /dev/null
+++ b/app/api/user-fields-display-settings/put.js
@@ -0,0 +1,21 @@
+'use strict'
+
+const userFieldsDisplaySettingsService = require("../../dal/userFieldsDisplaySettingsService");
+const logger = require('../../utils/logger');
+
+const UpdateUserFieldsDisplaySettings = {
+    async update(ctx) {
+        try {
+            ctx.body = await userFieldsDisplaySettingsService.update(ctx.request.body);
+            ctx.status = 201;
+            logger.info('User fields display settings updated.');
+        } catch (error) {
+            throw error;
+        }
+    }
+}
+
+module.exports = {
+    updateUserFieldsDisplaySettings: UpdateUserFieldsDisplaySettings.update,
+    UpdateUserFieldsDisplaySettings
+};
diff --git a/app/api/user-requests/delete.js b/app/api/user-requests/delete.js
index 2e2515d4e23de2620f4e6c798e16cc8b1507e9cd..d1be7f915ac21a520c869ca9c1666f32bd41dd57 100644
--- a/app/api/user-requests/delete.js
+++ b/app/api/user-requests/delete.js
@@ -1,26 +1,21 @@
 'use strict'
 
-const userRequestService = require('../../dal/userRequestService')
-const logger = require('../../utils/format')
-const util = require('util')
-
+const userRequestService = require('../../dal/userRequestService');
+const logger = require('../../utils/logger');
 
 const UserRequest = {
-
     async delete(ctx) {
         try {
-            ctx.body = await userRequestService.delete(ctx.request.body)
-            ctx.status = 201
-            logger.info('user request deleted successfully!')
-        } catch (err) {
-            ctx.body = err || 'Error occurred!'
-            ctx.status = 500
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`)
+            ctx.body = await userRequestService.delete(ctx.request.body);
+            ctx.status = 201;
+            logger.info('User request deleted.');
+        } catch (error) {
+            throw error;
         }
     }
-}
+};
 
 module.exports = {
     deleteRequest: UserRequest.delete,
     UserRequest
-}
\ No newline at end of file
+};
diff --git a/app/api/user-requests/get.js b/app/api/user-requests/get.js
index d682e94a10c4d7db7f1cddf0e18987258f02c6f6..b62ee084f955adc7859774cb0d02cc3e053a996c 100644
--- a/app/api/user-requests/get.js
+++ b/app/api/user-requests/get.js
@@ -1,39 +1,32 @@
 'use strict'
 
-const userRequestService = require('../../dal/userRequestService')
-const logger = require('../../utils/format')
-const util = require('util')
-
+const userRequestService = require('../../dal/userRequestService');
+const logger = require('../../utils/logger');
 
 const UserRequest = {
-
     async list(ctx) {
         try {
-            ctx.body = await userRequestService.fetch(ctx.request.body)
-            ctx.status = 201
-            logger.info('user requests fetched successfully!')
+            ctx.body = await userRequestService.fetch();
+            ctx.status = 201;
+            logger.info('User requests fetched.');
         } catch (error) {
-            ctx.body = error.response || 'erroror occurred!'
-            ctx.status = 500
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`)
+            throw error;
         }
     },
 
     async listPending(ctx) {
         try {
-            ctx.body = await userRequestService.fetchPending(ctx.request.body)
-            ctx.status = 201
-            logger.info('user requests fetched successfully!')
+            ctx.body = await userRequestService.fetchPending();
+            ctx.status = 201;
+            logger.info('Pending user requests fetched.');
         } catch (error) {
-            ctx.body = error.response || 'erroror occurred!'
-            ctx.status = 500
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`)
+            throw error;
         }
     }
-}
+};
 
 module.exports = {
     fetchRequests: UserRequest.list,
     fetchPendingRequests: UserRequest.listPending,
     UserRequest
-}
\ No newline at end of file
+};
diff --git a/app/api/user-requests/index.js b/app/api/user-requests/index.js
index 310ac8de36b2c23d5be7925e0203fb0d4441bc90..8d0a9ea6c5d9c8d58065f1a22c317a3ab3419c4b 100644
--- a/app/api/user-requests/index.js
+++ b/app/api/user-requests/index.js
@@ -1,8 +1,8 @@
 'use strict'
 
-const { createRequest, processRequest, fetchRequestsByUser } = require('./post')
-const { fetchRequests, fetchPendingRequests } = require('./get')
-const { deleteRequest } = require('./delete')
+const { createRequest, processRequest, fetchRequestsByUser } = require('./post');
+const { fetchRequests, fetchPendingRequests } = require('./get');
+const { deleteRequest } = require('./delete');
 
 const UserRequestHandler = {
     createRequest,
@@ -11,6 +11,6 @@ const UserRequestHandler = {
     fetchPendingRequests,
     fetchRequestsByUser,
     deleteRequest
-}
+};
 
-module.exports = UserRequestHandler
\ No newline at end of file
+module.exports = UserRequestHandler;
diff --git a/app/api/user-requests/post.js b/app/api/user-requests/post.js
index 9d865c96eb3cf27614b413f5c4b91f1adae6d2dd..d0b90afd9d8b76444d773602e703cf1cf4ed4577 100644
--- a/app/api/user-requests/post.js
+++ b/app/api/user-requests/post.js
@@ -1,50 +1,43 @@
 'use strict'
 
-const userRequestService = require('../../dal/userRequestService')
-const logger = require('../../utils/format')
-const util = require('util')
+const userRequestService = require('../../dal/userRequestService');
+const logger = require('../../utils/logger');
 
 const UserRequest = {
-
     async create(ctx) {
         try {
-            ctx.body = await userRequestService.create(ctx.request.body)
-            ctx.status = 201
-            logger.info('user request created successfully!')
-        } catch (err) {
-            ctx.body = err || 'Error occurred!'
-            ctx.status = 500
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`)
+            ctx.body = await userRequestService.create(ctx.request.body);
+            ctx.status = 201;
+            logger.info('User request created.');
+        } catch (error) {
+            throw error;
         }
     },
+
     async process(ctx) {
         try {
-            ctx.body = await userRequestService.process(ctx.request.body)
-            ctx.status = 201
-            logger.info('user request processed successfully!')
-        } catch (err) {
-            ctx.body = err || 'Error occurred!'
-            ctx.status = 500
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`)
+            ctx.body = await userRequestService.process(ctx.request.body);
+            ctx.status = 201;
+            logger.info('User request processed.');
+        } catch (error) {
+            throw error;
         }
     },
 
     async listByUser(ctx) {
         try {
-            ctx.body = await userRequestService.fetchByUser(ctx.request.body)
-            ctx.status = 201
-            logger.info('user requests fetched successfully!')
+            ctx.body = await userRequestService.fetchByUser(ctx.request.body);
+            ctx.status = 201;
+            logger.info('User requests fetched by user.');
         } catch (error) {
-            ctx.body = error.response || 'erroror occurred!'
-            ctx.status = 500
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`)
+            throw error;
         }
     }
-}
+};
 
 module.exports = {
     createRequest: UserRequest.create,
     processRequest: UserRequest.process,
     fetchRequestsByUser: UserRequest.listByUser,
     UserRequest
-}
\ No newline at end of file
+};
diff --git a/app/api/user-search-history/delete.js b/app/api/user-search-history/delete.js
index 2d4376251bb68e61fab4f126f02b1101e9afa5e6..a1f7ef94d879154fbeaab488dc4c18d6f926e8d5 100644
--- a/app/api/user-search-history/delete.js
+++ b/app/api/user-search-history/delete.js
@@ -1,26 +1,21 @@
 'use strict'
 
-const searchHistoryService = require('../../dal/searchHistoryService')
-const logger = require('../../utils/format')
-const util = require('util')
-
+const searchHistoryService = require('../../dal/searchHistoryService');
+const logger = require('../../utils/logger');
 
 const SearchHistory = {
-
     async delete(ctx) {
         try {
-            ctx.body = await searchHistoryService.delete(ctx.request.body)
-            ctx.status = 201
-            logger.info('search history is deleted successfully!')
+            ctx.body = await searchHistoryService.delete(ctx.request.body);
+            ctx.status = 201;
+            logger.info('User search history deleted.');
         } catch (error) {
-            ctx.body = error.response || 'erroror occurred!'
-            ctx.status = 500
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`)
+            throw error;
         }
     }
-}
+};
 
 module.exports = {
-    deleteH: SearchHistory.delete,
+    deleteUserSearchHistory: SearchHistory.delete,
     SearchHistory
-}
\ No newline at end of file
+};
diff --git a/app/api/user-search-history/get.js b/app/api/user-search-history/get.js
index 7f2b75d925e02f1cefa1573e50959fcfab2ffd3e..e8cc7b7ef103903119a8a6b72f64484ed4b88c43 100644
--- a/app/api/user-search-history/get.js
+++ b/app/api/user-search-history/get.js
@@ -1,26 +1,21 @@
 'use strict'
 
-const searchHistoryService = require('../../dal/searchHistoryService')
-const logger = require('../../utils/format')
-const util = require('util')
-
+const searchHistoryService = require('../../dal/searchHistoryService');
+const logger = require('../../utils/logger');
 
 const SearchHistory = {
-
     async list(ctx) {
         try {
-            ctx.body = await searchHistoryService.fetch(ctx.request.body)
-            ctx.status = 201
-            logger.info('search history is fetched successfully!')
+            ctx.body = await searchHistoryService.fetch(ctx.request.body);
+            ctx.status = 201;
+            logger.info('User search history fetched.');
         } catch (error) {
-            ctx.body = error.response || 'erroror occurred!'
-            ctx.status = 500
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`)
+            throw error;
         }
     }
-}
+};
 
 module.exports = {
     fetch: SearchHistory.list,
     SearchHistory
-}
\ No newline at end of file
+};
diff --git a/app/api/user-search-history/index.js b/app/api/user-search-history/index.js
index ec1d92bdc0bce847e843df161060da73e5960130..7dab2705e3ccbf2eff1784bb2a8ef61dc3e17a03 100644
--- a/app/api/user-search-history/index.js
+++ b/app/api/user-search-history/index.js
@@ -1,13 +1,13 @@
 'use strict'
 
-const { add } = require('./post')
-const { fetch } = require('./get')
-const { deleteH } = require('./delete')
+const { create } = require('./post');
+const { fetch } = require('./get');
+const { deleteUserSearchHistory } = require('./delete');
 
 const SearchHistoryHandler = {
-    add,
+    create,
     fetch,
-    deleteH
-}
+    deleteUserSearchHistory
+};
 
-module.exports = SearchHistoryHandler
\ No newline at end of file
+module.exports = SearchHistoryHandler;
diff --git a/app/api/user-search-history/post.js b/app/api/user-search-history/post.js
index 61e2a3398ec9e9e3f9e718398629bcc83afcd96c..5739977c7ecee96509bf12e28c2c084369919b26 100644
--- a/app/api/user-search-history/post.js
+++ b/app/api/user-search-history/post.js
@@ -1,25 +1,21 @@
 'use strict'
 
-const searchHistoryService = require('../../dal/searchHistoryService')
-const logger = require('../../utils/format')
-const util = require('util')
+const searchHistoryService = require('../../dal/searchHistoryService');
+const logger = require('../../utils/logger');
 
-const SearchHistory = { 
-
-    async add(ctx) {
+const SearchHistory = {
+    async create(ctx) {
         try {
-            ctx.body = await searchHistoryService.create(ctx.request.body)
-            ctx.status = 201
-            logger.info('search history is created successfully!')
+            ctx.body = await searchHistoryService.create(ctx.request.body);
+            ctx.status = 201;
+            logger.info('Search history created.');
         } catch (error) {
-            ctx.body = error.response || 'erroror occurred!'
-            ctx.status = 500
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(error, { compact: false, depth: 1, breakLength: 80 }))}`)
+           throw error;
         }
-    }  
-}
+    }
+};
 
 module.exports = {
-    add: SearchHistory.add,
+    create: SearchHistory.create,
     SearchHistory
-}
\ No newline at end of file
+};
diff --git a/app/api/users/delete.js b/app/api/users/delete.js
index 3ec3c0a89464eb025e0b47c87efef6f361bb51d9..ebe5496e9988441975d3a083c0f32bbff612b14b 100644
--- a/app/api/users/delete.js
+++ b/app/api/users/delete.js
@@ -1,24 +1,19 @@
-
 'use strict'
 
-const userService = require("../../dal/userService")
-const logger = require('../../utils/format')
-const util = require('util')
+const userService = require("../../dal/userService");
+const logger = require('../../utils/logger');
 
 const DeleteUser = {
-
     async deleteUser(ctx) {
         try {
-            ctx.body = await userService.delete(ctx.request.body)
-            ctx.status = 201
-            logger.info('user is deleted successfully!')
-        } catch (err) {
-            ctx.body = err || 'Error occurred!'
-            ctx.status = 500
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`)
+            ctx.body = await userService.delete(ctx.request.body);
+            ctx.status = 201;
+            logger.info('User deleted.');
+        } catch (error) {
+            throw error;
         }
     }
-}
+};
 
 module.exports = {
     deleteUser: DeleteUser.deleteUser,
diff --git a/app/api/users/get.js b/app/api/users/get.js
index 9330633a27a93bc8a28c476a5869efa87885cae2..f35efd235a7a917ba1dfa4cccd891a3069d0d43d 100644
--- a/app/api/users/get.js
+++ b/app/api/users/get.js
@@ -1,44 +1,36 @@
 "use strict";
 
 const userService = require("../../dal/userService");
-const logger = require('../../utils/format')
-const util = require('util')
+const logger = require('../../utils/logger');
 
 const GetUser = {
   async find(ctx) {
     try {
-      ctx.body = await userService.users()
-      ctx.status = 201
-      logger.info('users is listed successfully!')
-    } catch (err) {
-      ctx.body = err || 'Error occurred!'
-      ctx.status = 500;
-      logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`)
-
+      ctx.body = await userService.users();
+      ctx.status = 201;
+      logger.info('Users fetched.');
+    } catch (error) {
+      throw error;
     }
   },
 
   async findOne(ctx) {
     try {
-      ctx.body = await userService.user(ctx.request.body)
-      ctx.status = 201
-      logger.info('user is found successfully!')
-    } catch (err) {
-      ctx.body = err || 'Error occurred!'
-      ctx.status = 500;
-      logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`)
+      ctx.body = await userService.user(ctx.request.body);
+      ctx.status = 201;
+      logger.info('User fetched.');
+    } catch (error) {
+      throw error;
     }
   },
 
   async kcId(ctx) {
     try {
       ctx.body = await userService.kcId(ctx.request.body);
-      ctx.status = 201
-      logger.info('kcId is found successfully!')
-    } catch (err) {
-      ctx.body = err || 'Error occurred!'
-      ctx.status = 500;
-      logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`)
+      ctx.status = 201;
+      logger.info('User kc_id fetched.');
+    } catch (error) {
+      throw error;
     }
   },
 
@@ -46,11 +38,9 @@ const GetUser = {
     try {
       ctx.body = await userService.detail(ctx.request.body);
       ctx.status = 201;
-      logger.info('user_detail is found successfully!')
-    } catch (err) {
-      ctx.body = err || 'Error occurred!'
-      ctx.status = 500;
-      logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`)
+      logger.info('User details fetched.');
+    } catch (error) {
+      throw error;
     }
   },
 
@@ -58,26 +48,21 @@ const GetUser = {
     try {
       ctx.body = await userService.getAssignedUserByRole(ctx.request.body);
       ctx.status = 201;
-      logger.info('Assigned users listed successfully by Role!')
-    } catch (err) {
-      ctx.body = err || 'Error occurred!'
-      ctx.status = 500;
-      logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`)
+      logger.info('Users fetched by role.');
+    } catch (error) {
+      throw error;
     }
   },
 
   async usersWithGroupAndRole(ctx) {
     try {
-      ctx.body = await userService.usersWithGroupAndRole(ctx.request.body);
+      ctx.body = await userService.usersWithGroupAndRole();
       ctx.status = 201;
-      logger.info('Users listed with groups and roles successfully!')
-    } catch (err) {
-      ctx.body = err || 'Error occurred!'
-      ctx.status = 500;
-      logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`)
+      logger.info('Users with groups and roles fetched.');
+    } catch (error) {
+      throw error;
     }
   }
-
 };
 
 module.exports = {
diff --git a/app/api/users/index.js b/app/api/users/index.js
index 7def803e8285a923dd406e81fcc91e7c4d80d87d..c228799292cf848ea6366fbc73174140c87a6ac5 100644
--- a/app/api/users/index.js
+++ b/app/api/users/index.js
@@ -1,14 +1,12 @@
 "use strict";
 
-const { addNewUser, createSystemUser, sendMail, userWithGroupAndRole, resetPassword } = require('./post')
-const { user, detail, getAssignedUserByRole, usersWithGroupAndRole } = require('./get')
-const { users } = require('./get')
-const { deleteUser } = require('./delete')
-const { update } = require('./put')
-const { kcId } = require('./get')
+const { create, createSystemUser, sendMail, userWithGroupAndRole, resetPassword } = require('./post');
+const { user, users, kcId, detail, getAssignedUserByRole, usersWithGroupAndRole } = require('./get');
+const { deleteUser } = require('./delete');
+const { update } = require('./put');
 
 const UserHandler = {
-    addNewUser,
+    create,
     user,
     users,
     deleteUser,
@@ -21,6 +19,6 @@ const UserHandler = {
     userWithGroupAndRole,
     sendMail,
     resetPassword
-}
+};
 
-module.exports = UserHandler
+module.exports = UserHandler;
diff --git a/app/api/users/post.js b/app/api/users/post.js
index a368b49c36ab93fd97bf372e7373a662ce7addcc..87e5d64192bcdfffa52b5ed1bf85681d65cd8e81 100644
--- a/app/api/users/post.js
+++ b/app/api/users/post.js
@@ -1,73 +1,62 @@
 'use strict'
 
-const userService = require("../../dal/userService")
-const logger = require('../../utils/format')
-const util = require('util')
+const userService = require("../../dal/userService");
+const logger = require('../../utils/logger');
 
 const AddUser = {
-    /**
-     * @param {username,email} ctx
-     */
-    async addNewUser(ctx) {
+    async create(ctx) {
         try {
-            ctx.body = await userService.create(ctx.request.body)
-            ctx.status = 201
-            logger.info('user is created successfully!')
-        } catch (err) {
-            ctx.body = err || 'Error occurred!'
-            ctx.status = 500
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`)
+            ctx.body = await userService.create(ctx.request.body);
+            ctx.status = 201;
+            logger.info('User created.');
+        } catch (error) {
+            throw error;
         }
     },
 
     async createSystemUser(ctx) {
         try {
-            ctx.body = await userService.createSystemUser(ctx.request.body)
-            ctx.status = 201
-            logger.info('System user (admin) is created successfully!')
-        } catch (err) {
-            ctx.body = err || 'Error occurred!'
-            ctx.status = 500
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`)
+            ctx.body = await userService.createSystemUser();
+            ctx.status = 201;
+            logger.info('System user (admin) created.');
+        } catch (error) {
+            throw error;
         }
     },
+
     async sendMail(ctx) {
         try {
-            ctx.body = await userService.sendMail(ctx.request.body)
-            ctx.status = 201
-            logger.info('mail sent successfully!')
-        } catch (err) {
-            ctx.body = err || 'Error occurred!'
-            ctx.status = 500
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`)
+            ctx.body = await userService.sendMail(ctx.request.body);
+            ctx.status = 201;
+            logger.info('Mail sent.');
+        } catch (error) {
+            throw error;
         }
     },
+
     async userWithGroupAndRole(ctx) {
         try {
             ctx.body = await userService.userWithGroupAndRole(ctx.request.body);
             ctx.status = 201;
-            logger.info('Found user with groups and roles successfully!')
-        } catch (err) {
-            ctx.body = err || 'Error occurred!'
-            ctx.status = 500;
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`)
+            logger.info('User with groups and roles fetched.');
+        } catch (error) {
+            throw error;
         }
     },
+
     async resetPassword(ctx) {
         try {
             ctx.body = await userService.resetPassword(ctx.request.body);
             ctx.status = 201;
-            logger.info('Reset password successfully!')
-        } catch (err) {
-            ctx.body = err || 'Error occurred!'
-            ctx.status = 500;
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`)
+            logger.info('Password reset.');
+        } catch (error) {
+            throw error;
         }
     }
 }
 
 module.exports = {
-    addNewUser: AddUser.addNewUser,
+    create: AddUser.create,
     createSystemUser: AddUser.createSystemUser,
     sendMail: AddUser.sendMail,
     userWithGroupAndRole: AddUser.userWithGroupAndRole,
diff --git a/app/api/users/put.js b/app/api/users/put.js
index 26cf36e5934503815f579928921dc3f340dfb581..3d5db10b86daf5eb4f91bf2300c317bbc20fc543 100644
--- a/app/api/users/put.js
+++ b/app/api/users/put.js
@@ -1,26 +1,21 @@
 'use strict'
 
-const userService = require("../../dal/userService")
-const logger = require('../../utils/format')
-const util = require('util')
-
+const userService = require("../../dal/userService");
+const logger = require('../../utils/logger');
 
 const UpdateUser = {
-
     async update(ctx) {
         try {
-            ctx.body = await userService.update(ctx.request.body)
-            ctx.status = 201
-            logger.info('user is updated successfully!')
-        } catch (err) {
-            ctx.body = err || 'Error occurred!'
-            ctx.status = 500
-            logger.error(`Caught error: ${JSON.stringify(util.inspect(err, { compact: false, depth: 1, breakLength: 80 }))}`)
+            ctx.body = await userService.update(ctx.request.body);
+            ctx.status = 201;
+            logger.info('User updated.');
+        } catch (error) {
+            throw error;
         }
     }
-}
+};
 
 module.exports = {
     update: UpdateUser.update,
     UpdateUser
-}
\ No newline at end of file
+};
diff --git a/app/dal/groupService.js b/app/dal/groupService.js
index b2d99005d0197cbb24456600755d034109698c4d..d2a6b17fd241cd5c0103e3194758c33234364bb2 100644
--- a/app/dal/groupService.js
+++ b/app/dal/groupService.js
@@ -1,230 +1,197 @@
 'use strict'
 
-// const db = require('../../db');
-
 const { Group, GroupUser, GroupsPolicy } = require('../models/Group')
-
 const userService = require('./userService')
 const db = require('../../db')
 
 const GroupService = {
-
     async createGroup(ctx) {
-        if (!ctx) {
-            throw Error("The request body is empty!")
+        if (!ctx || !ctx.kcId) {
+            const error = new Error("Required parameters are missing.");
+            error.status = 400;
+            throw error;
         }
-
-        if (ctx.kcId === undefined)
-            throw Error("kcId did not supported.")
-
-        const user = await userService.detail({ kcId: ctx.kcId })
-        if (user) {
-
-            const group = await Group.findOne({
-                where: {
-                    name: ctx.name,
-                    user_id: user.id,
-                }
-            })
-
-            if (group) {
-                throw Error(`This name:${ctx.name} and userId:${user.id} already inserted to database!`)
-            } else {
-                const newGroup = await Group.create({
-                    name: ctx.name,
-                    description: ctx.description,
-                    user_id: user.id,
-                })
-
-                return newGroup
-            }
-
-        } else {
-            throw Error('The user account could not found.')
+        const user = await userService.detail({ kcId: ctx.kcId });
+        if (!user) {
+            const error = new Error("User account not found.");
+            error.status = 400;
+            throw error;
+        }
+        const [newGroup, isCreated] = await Group.findOrCreate(
+            {
+            where: {
+                name: ctx.name,
+                user_id: user.id,
+            },
+            defaults: {
+                description: ctx.description,
+            },
+        });
+        if (!isCreated) {
+            const error = new Error(`Group:${ctx.name} already exists.`);
+            error.status = 400;
+            throw error;
         }
+        return newGroup;
     },
 
     async createGroupPolicy(ctx) {
-        if (!ctx) {
-            throw Error("The request body is empty!")
+        if (!ctx || !ctx.groupId || !ctx.policyId) {
+            const error = new Error("Required parameters are missing.");
+            error.status = 400;
+            throw error;
         }
-
         const groupPolicy = await GroupsPolicy.findOne({
             where: {
                 group_id: ctx.groupId,
                 policy_id: ctx.policyId
             }
-        })
-
+        });
         if (groupPolicy) {
-            throw Error(`This groupId:${ctx.groupId} and policyId:${ctx.policyId} already assigned to each other!`)
+            const error = new Error(`GroupId:${ctx.groupId} and policyId:${ctx.policyId} already assigned to each other.`);
+            error.status = 400;
+            throw error;
         } else {
-            const newGroupPolicy = await GroupsPolicy.create({
+            return await GroupsPolicy.create({
                 group_id: ctx.groupId,
                 policy_id: ctx.policyId
-            })
-
-            return newGroupPolicy
+            });
         }
     },
 
     async createGroupUser(ctx) {
-        if (!ctx) {
-            throw Error("The request body is empty!")
+        if (!ctx || !ctx.kcId) {
+            const error = new Error("Required parameters are missing.");
+            error.status = 400;
+            throw error;
         }
-
-        if (ctx.kcId === undefined)
-            throw Error("kcId did not supported.")
-
-        const user = await userService.detail({ kcId: ctx.kcId })
+        const user = await userService.detail({ kcId: ctx.kcId });
         if (user) {
-
             const groupUser = await GroupUser.findOne({
                 where: {
                     group_id: ctx.groupId,
                     user_id: user.id
                 }
-            })
-
+            });
             if (groupUser) {
-                throw Error(`This groupId:${ctx.groupId} and userId:${ctx.user_id} already assigned to each other!`)
+                const error = new Error(`GroupId:${ctx.groupId} and userId:${user.id} already assigned to each other.`);
+                error.status = 400;
+                throw error;
             } else {
-                const newGroupUser = await GroupUser.create({
+                return await GroupUser.create({
                     group_id: ctx.groupId,
                     user_id: user.id
-                })
-
-                return newGroupUser
+                });
             }
         } else {
-            throw Error('The user account could not found.')
+            const error = new Error('User account not found.');
+            error.status = 400;
+            throw error;
         }
     },
 
     async updateGroup(ctx) {
-        if (!ctx) {
-            throw Error("The request body is empty!")
+        if (!ctx || !ctx.name || !ctx.description || !ctx.id || !ctx.userId) {
+            const error = new Error("Required parameters are missing.");
+            error.status = 400;
+            throw error;
         }
-
-        const group = await Group.update({
+        return await Group.update({
             name: ctx.name,
             description: ctx.description,
         }, {
-            where: { id: ctx.id, user_id: ctx.userId }
-        })
-
-        return group
-
+            where: {id: ctx.id, user_id: ctx.userId}
+        });
     },
 
     async updateGroupPolicy(ctx) {
-        if (!ctx) {
-            throw Error("The request body is empty!")
+        if (!ctx || !ctx.groupId || !ctx.policyId || !ctx.id) {
+            const error = new Error("Required parameters are missing.");
+            error.status = 400;
+            throw error;
         }
-
-        const groupPolicy = await GroupsPolicy.update({
+        return await GroupsPolicy.update({
             group_id: ctx.groupId,
             policy_id: ctx.policyId
-        }, { where: { id: ctx.id } })
-
-        return groupPolicy
+        }, {where: {id: ctx.id}});
     },
 
     async updateGroupUser(ctx) {
-        if (!ctx) {
-            throw Error("The request body is empty!")
+        if (!ctx || !ctx.kcId) {
+            const error = new Error("Required parameters are missing.");
+            error.status = 400;
+            throw error;
         }
-
-        const user = await userService.detail({ kcId: ctx.kcId })
-        if (user) {
-            const groupUser = await GroupUser.update({
-                group_id: ctx.groupId,
-                user_id: user.id
-            }, { where: { id: ctx.id } })
-
-            return groupUser
-
-        } else {
-            throw Error('The user account could not found.')
+        const user = await userService.detail({ kcId: ctx.kcId });
+        if (!user) {
+            const error = new Error("User account not found.");
+            error.status = 400;
+            throw error;
         }
+        return await GroupUser.update({
+            group_id: ctx.groupId,
+            user_id: user.id
+        }, {where: {id: ctx.id}});
     },
 
     async deleteGroup(ctx) {
-        if (!ctx) {
-            throw Error("The request body is empty!")
-        }
-        if (ctx.id) {
-            const group = await Group.destroy({
-                where: {
-                    id: ctx.id
-                }
-            })
-
-            return group
+        if (!ctx || !ctx.id) {
+            const error = new Error("Required parameters are missing.");
+            error.status = 400;
+            throw error;
         }
+        return await Group.destroy({
+            where: {
+                id: ctx.id
+            }
+        });
     },
 
     async deleteGroupPolicy(ctx) {
-        if (!ctx) {
-            throw Error("The request body is empty!")
+        if (!ctx || !ctx.id) {
+            const error = new Error("Required parameters are missing.");
+            error.status = 400;
+            throw error;
         }
-
-        const groupPolicy = await GroupsPolicy.destroy({
+        return await GroupsPolicy.destroy({
             where: {
                 id: ctx.id
             }
-        })
-
-        return groupPolicy
+        });
     },
 
     async deleteGroupUser(ctx) {
-        if (!ctx) {
-            throw Error("The request body is empty!")
+        if (!ctx || !ctx.groupId || !ctx.userId) {
+            const error = new Error("Required parameters are missing.");
+            error.status = 400;
+            throw error;
         }
-
-        const params = { groupId: ctx.groupId, userId: ctx.userId }
-
-        const groupUser = await db.raw(`
-              delete from group_users
-              where group_id = :groupId and user_id = :userId
-        `, params)
-
-        return groupUser
+        const params = { groupId: ctx.groupId, userId: ctx.userId };
+        return db.raw(`delete from group_users where group_id = :groupId and user_id = :userId`, params);
     },
 
-    async groups(ctx) {
-        /*if (!ctx) {
-            throw Error("The request body is empty!")
-        }*/
-
-        return await Group.findAll({})
-
+    async groups() {
+        return await Group.findAll({});
     },
 
-    async groupPolicies(ctx) {
-        /*if (!ctx) {
-            throw Error("The request body is empty!")
-        }*/
-
-        return await GroupsPolicy.findAll({})
+    async groupPolicies() {
+        return await GroupsPolicy.findAll({});
     },
 
     async groupUsers(ctx) {
-        if (!ctx) {
-            throw Error("The request body is empty!")
+        if (!ctx || !ctx.groupId) {
+            const error = new Error("Required parameters are missing.");
+            error.status = 400;
+            throw error;
         }
-
-        const params = { groupId: ctx.groupId }
-
+        const params = { groupId: ctx.groupId };
         const groupUsers = await db.raw(`
               select g.id as groupId, u.id as userId, u.username, g.name, g.description from group_users gu
               inner join users u on u.id = gu.user_id
               inner join groups g on gu.group_id = g.id
               where g.id = :groupId
-        `, params)
-
-        return groupUsers.rows
+        `, params);
+        return groupUsers.rows;
     }
 }
 
@@ -245,4 +212,4 @@ module.exports = {
     groups: GroupService.groups,
     groupPolicies: GroupService.groupPolicies,
     groupUsers: GroupService.groupUsers,
-}
\ No newline at end of file
+};
diff --git a/app/dal/policyService.js b/app/dal/policyService.js
index dc2faa346d573f3be3eaf7ebfd0fbdfef0a5b0b6..a101a67dfe4f4bc82cfc382465a39437ec928aa3 100644
--- a/app/dal/policyService.js
+++ b/app/dal/policyService.js
@@ -1,155 +1,134 @@
 'use strict'
 
 const { Policy, PolicyField, PolicySource } = require('../models/Policy')
-
 const db = require('../../db');
 const userService = require('./userService')
 
 const PolicyService = {
-
     async createPolicy(ctx) {
-        if (!ctx) {
-            throw Error("The request body is empty!")
+        if (!ctx || !ctx.kcId) {
+            const error = new Error("Required parameters are missing.");
+            error.status = 400;
+            throw error;
         }
-
-        if (ctx.kcId === undefined)
-            throw Error("kcId did not supported.")
-
-        const user = await userService.detail({ kcId: ctx.kcId })
-        if (user) {
-            const policy = await Policy.findOne({
+        const user = await userService.detail({ kcId: ctx.kcId });
+        if (!user) {
+            const error = new Error("User account not found.");
+            error.status = 400;
+            throw error;
+        }
+        const [newPolicy, isCreated] = await Policy.findOrCreate(
+            {
                 where: {
                     name: ctx.name,
-                    // source_id: ctx.sourceId,
-                    user_id: user.id,
-                    is_default: false
-                }
-            })
-            if (policy) {
-                throw Error(`This Policy name:${ctx.name} and sourceId:${ctx.sourceId} already inserted to database!`)
-            } else {
-                const newPolicy = await Policy.create({
-                    name: ctx.name,
-                    // source_id: ctx.sourceId,
                     user_id: user.id,
+                },
+                defaults: {
                     is_default: false
-                })
-
-                return newPolicy
-            }
-        } else {
-            throw Error('The user account could not found.')
+                },
+            });
+        if (!isCreated) {
+            const error = new Error(`Policy:${ctx.name} already exists.`);
+            error.status = 400;
+            throw error;
         }
+        return newPolicy;
     },
 
     async createPolicyField(ctx) {
-        if (!ctx) {
-            throw Error("The request body is empty!")
+        if (!ctx || !ctx.policyId || !ctx.stdFieldId) {
+            const error = new Error("Required parameters are missing.");
+            error.status = 400;
+            throw error;
         }
-
-        const { policyId, stdFieldId } = ctx
-
-        if (policyId && stdFieldId) {
-            const policyField = await PolicyField.findOne({
+        const [newPolicyField, isCreated] = await PolicyField.findOrCreate(
+            {
                 where: {
-                    policy_id: policyId,
-                    std_field_id: stdFieldId,
-                }
-            })
-
-            if (policyField) {
-                throw Error(`This policyId:${policyId} and stdFieldId:${stdFieldId} already assigned to each other in the database!`)
-            } else {
-                const newPolicyField = await PolicyField.create({
-                    policy_id: policyId,
-                    std_field_id: stdFieldId,
-                })
-
-                return newPolicyField
-            }
+                    policy_id: ctx.policyId,
+                    std_field_id: ctx.stdFieldId,
+                },
+            });
+        if (!isCreated) {
+            const error = new Error("Policy and stdField already assigned to each other.");
+            error.status = 400;
+            throw error;
         }
+        return newPolicyField;
     },
 
     async createPolicySource(ctx) {
-        if (!ctx) {
-            throw Error("The request body is empty!")
+        if (!ctx || !ctx.policyId || !ctx.sourceId) {
+            const error = new Error("Required parameters are missing.");
+            error.status = 400;
+            throw error;
         }
-
-        const { policyId, sourceId } = ctx
-
-        if (policyId && sourceId) {
-            const policySource = await PolicySource.findOne({
+        const [newPolicySource, isCreated] = await PolicySource.findOrCreate(
+            {
                 where: {
-                    policy_id: policyId,
-                    source_id: sourceId,
-                }
-            })
-            if (policySource) {
-                throw Error(`This policyId:${policyId} and sourceId:${sourceId} already assigned to each other in the database!`)
-            } else {
-                const newPolicySource = await PolicySource.create({
-                    policy_id: policyId,
-                    source_id: sourceId,
-                })
-                return newPolicySource
-            }
+                    policy_id: ctx.policyId,
+                    source_id: ctx.sourceId,
+                },
+            });
+        if (!isCreated) {
+            const error = new Error("Policy and source already assigned to each other.");
+            error.status = 400;
+            throw error;
         }
+        return newPolicySource;
     },
 
     async updatePolicySource(ctx) {
-        if (!ctx) {
-            throw Error("The request body is empty!")
+        if (!ctx || !ctx.id || !ctx.sourceId) {
+            const error = new Error("Required parameters are missing.");
+            error.status = 400;
+            throw error;
         }
-
-        const policySource = await PolicySource.update({
+        return await PolicySource.update({
             source_id: ctx.sourceId,
         }, {
             where: {
                 id: ctx.id
             }
         })
-
-        return policySource
     },
 
     async deletePolicySource(ctx) {
-        if (!ctx) {
-            throw Error("The request body is empty!")
+        if (!ctx || !ctx.id) {
+            const error = new Error("Required parameters are missing.");
+            error.status = 400;
+            throw error;
         }
-
-        const policySource = await PolicySource.destroyi({
+        return await PolicySource.destroy({
             where: {
                 id: ctx.id
             }
         })
-
-        return policySource
     },
 
     async updatePolicy(ctx) {
-        if (!ctx) {
-            throw Error("The request body is empty!")
+        if (!ctx || !ctx.id || !ctx.name || !ctx.sourceId || !ctx.isDefault) {
+            const error = new Error("Required parameters are missing.");
+            error.status = 400;
+            throw error;
         }
-
-        const policy = await Policy.update({
+        return await Policy.update({
             name: ctx.name,
             source_id: ctx.sourceId,
-            is_default: ctx.isDeafault
+            is_default: ctx.isDefault
         }, {
             where: {
                 id: ctx.id,
             }
         })
-        return policy
-
     },
 
     async updatePolicyField(ctx) {
-        if (!ctx) {
-            throw Error("The request body is empty!")
+        if (!ctx || !ctx.id || !ctx.policyId || !ctx.stdFieldId) {
+            const error = new Error("Required parameters are missing.");
+            error.status = 400;
+            throw error;
         }
-
-        const policyField = await PolicyField.update({
+        return await PolicyField.update({
             policy_id: ctx.policyId,
             std_field_id: ctx.stdFieldId,
         }, {
@@ -157,82 +136,70 @@ const PolicyService = {
                 id: ctx.id
             }
         })
-
-        return policyField
     },
 
     async deletePolicyField(ctx) {
-        if (!ctx) {
-            throw Error("The request body is empty!")
+        if (!ctx || !ctx.id) {
+            const error = new Error("Required parameters are missing.");
+            error.status = 400;
+            throw error;
         }
-
-        const policyField = await PolicyField.destroy({
+        return await PolicyField.destroy({
             where: {
                 id: ctx.id
             }
-        })
-
-        return policyField
+        });
     },
 
     async deletePolicy(ctx) {
-        if (!ctx) {
-            throw Error("The request body is empty!")
+        if (!ctx || !ctx.id) {
+            const error = new Error("Required parameters are missing.");
+            error.status = 400;
+            throw error;
         }
-
         const policyField = await PolicyField.destroy({
             where: {
                 policy_id: ctx.id
             }
-        })
-
-        const policy = await Policy.destroy({
+        });
+        await Policy.destroy({
             where: {
                 id: ctx.id
             }
-        })
-
-        return policyField
+        });
+        return policyField;
     },
 
-    async policies(ctx) {
-
-        return await Policy.findAll({})
+    async policies() {
+        return await Policy.findAll({});
     },
 
     async policiesByUser(ctx) {
-        if (!ctx) {
-            throw Error("The request body is empty!")
+        if (!ctx || !ctx.kcId) {
+            const error = new Error("Required parameters are missing.");
+            error.status = 400;
+            throw error;
         }
-
         try {
-
-            const params = { userId: ctx.kcId }
-
-            const policiesByUser = await db.raw(
-                `select DISTINCT p.id, p.name, p.user_id, p.source_id, u.kc_id from policies p
-          inner join users u  on p.user_id = u.id
-          where u.kc_id = :userId`, params)
-
-            return policiesByUser.rows
-
+            const params = { userId: ctx.kcId };
+            const policiesByUser = await db.raw(`select DISTINCT p.id, p.name, p.user_id, p.source_id, u.kc_id from policies p inner join users u  on p.user_id = u.id where u.kc_id = :userId`, params);
+            return policiesByUser.rows;
         } catch (error) {
-            throw new Error(error)
+            throw new Error(error);
         }
     },
 
-    async policyFields(ctx) {
-
-        return await PolicyField.findAll({})
+    async policyFields() {
+        return await PolicyField.findAll({});
     },
 
     async getAssignedPolicies(ctx) {
-        if (!ctx) {
-            throw Error("The request body is empty!")
+        if (!ctx || !ctx.policyId) {
+            const error = new Error("Required parameters are missing.");
+            error.status = 400;
+            throw error;
         }
-
-        const params = { policyId: ctx.policyId }
-
+        const params = { policyId: ctx.policyId };
         const assignedPolicies = await db.raw(`
             select pf.id, sf.field_name, sf.definition_and_comment, sf.field_type, sf.values from policies p
             inner join policy_fields pf on p.id = pf.policy_id
@@ -240,55 +207,46 @@ const PolicyService = {
             inner join policy_sources ps on p.id = ps.policy_id
             inner join sources s on ps.source_id = s.id
             where p.id = :policyId
-        `, params)
-
-        return assignedPolicies.rows
+        `, params);
+        return assignedPolicies.rows;
     },
 
-    async getPoliciesWithSources(ctx) {
-        if (!ctx) {
-            throw Error("The request body is empty!")
-        }
-        // remark: list all policies as usual, domain free
+    async getPoliciesWithSources() {
         const policiesWIthSource = await db.raw(`
             select p.id, p.name as policyName, s.name as sourceName from policies p
                 left join policy_sources ps on p.id = ps.policy_id
                 left join sources s on ps.source_id = s.id
         `)
-
         return policiesWIthSource.rows
     },
 
     async getPoliciesWithSourcesByUser(ctx) {
-        if (!ctx) {
-            throw Error("The request body is empty!")
+        if (!ctx || !ctx.kcId) {
+            const error = new Error("Required parameters are missing.");
+            error.status = 400;
+            throw error;
         }
-
         try {
-
-            const params = { userId: ctx.kcId }
-
+            const params = { userId: ctx.kcId };
             const policiesByUser = await db.raw(`
                 select p.id, p.name as policyName, s.name as sourceName, p.user_id, p.source_id, u.kc_id from policies p
                 inner join users u on p.user_id = u.id
                 left join policy_sources ps on p.id = ps.policy_id
                 left join sources s on ps.source_id = s.id
                 where u.kc_id = :userId`, params)
-
-
-            return policiesByUser.rows
-
+            return policiesByUser.rows;
         } catch (error) {
-            throw new Error(error)
+            throw new Error(error);
         }
     },
 
     async getGroupDetailsByPolicy(ctx) {
-        if (!ctx) {
-            throw Error("The request body is empty!")
+        if (!ctx || !ctx.policyId) {
+            const error = new Error("Required parameters are missing.");
+            error.status = 400;
+            throw error;
         }
-
-        const params = { policyId: ctx.policyId }
+        const params = { policyId: ctx.policyId };
         const groupDetailsByPolicy = await db.raw(`
             select p.id as policyId, g.id as groupId, gp.id groupPolicyId, g.name as group_name, g.description as group_description, s.name as source_name, s.description as source_description from policies p
             inner join groups_policies gp on p.id = gp.policy_id
@@ -296,13 +254,10 @@ const PolicyService = {
             left join policy_sources ps on p.id = ps.policy_id
             left join sources s on ps.source_id = s.id
             where p.id = :policyId
-        `, params)
-
-        return groupDetailsByPolicy.rows
+        `, params);
+        return groupDetailsByPolicy.rows;
     }
-
-}
-
+};
 
 module.exports = {
     createPolicy: PolicyService.createPolicy,
@@ -322,4 +277,4 @@ module.exports = {
     getPoliciesWithSources: PolicyService.getPoliciesWithSources,
     getPoliciesWithSourcesByUser: PolicyService.getPoliciesWithSourcesByUser,
     getGroupDetailsByPolicy: PolicyService.getGroupDetailsByPolicy,
-}
\ No newline at end of file
+};
diff --git a/app/dal/realmService.js b/app/dal/realmService.js
index 1b3049509c16ebed4921004d2ef7162e6b4e691f..c311b9505d2edbf28a2a620b271c47587a7b9487 100644
--- a/app/dal/realmService.js
+++ b/app/dal/realmService.js
@@ -1,37 +1,30 @@
 'use strict'
 
-
 const db = require('../../db');
 
 const RealmService = {
-
     async create(ctx) {
-        const realm = await db('realm').insert({
+        return await db('realm').insert({
             name: ctx.name
         }).returning('*').then((result) => result[0])
-        return realm
     },
 
     async update(ctx) {
-        const realm = await db('realm').where('id', ctx.id).update({
+        return db('realm').where('id', ctx.id).update({
             name: ctx.name
-        })
-        return realm
+        });
     },
 
     async delete(ctx) {
-        const result = await db.delete().from('realm').where('id', ctx.id).timeout(1000, { cancel: true })
-        return result
+        return db.delete().from('realm').where('id', ctx.id).timeout(1000, {cancel: true});
     },
 
     async realm(ctx) {
-        const realm = await db.select().from('realm').where('id', ctx.id).timeout(1000, { cancel: true });
-        return realm
+        return db.select().from('realm').where('id', ctx.id).timeout(1000, {cancel: true});
     },
 
-    async realms(ctx) {
-        const realms = await db.select().from('realm').timeout(1000, { cancel: true });
-        return realms
+    async realms() {
+        return db.select().from('realm').timeout(1000, {cancel: true});
     }
 }
 
@@ -41,4 +34,4 @@ module.exports = {
     delete: RealmService.delete,
     realm: RealmService.realm,
     realms: RealmService.realms
-}
\ No newline at end of file
+}
diff --git a/app/dal/roleAllocationService.js b/app/dal/roleAllocationService.js
index 3454077e655dc0f0389d06904773d05d16b5c7ed..09af1515ddf944096b05117599333cd95c1c457f 100644
--- a/app/dal/roleAllocationService.js
+++ b/app/dal/roleAllocationService.js
@@ -1,88 +1,77 @@
 'use strict'
 
-const db = require('../../db')
-
-
-const { Role, RoleUser } = require('../models/Role')
+const db = require('../../db');
+const { RoleUser } = require('../models/Role');
 
 const RoleAllocationService = {
-
-    // It allocates the role to user.
+    // Allocates a role to a user. If a role is already allocated to this user, updates it.
     async create(ctx) {
-        if (!ctx) {
-            throw Error("The request body is empty!")
+        if (!ctx || !ctx.kc_id) {
+            const error = new Error("Required parameters are missing.");
+            error.status = 400;
+            throw error;
         }
-
-        const roleUser = RoleUser.findOne({
-            where: {
-                kc_id: ctx.kc_id
-            }
-        })
-
-        if (!roleUser) {
-            return await RoleUser.create({
-                role_id: ctx.role_id,
-                kc_id: ctx.kc_id
-            })
-        } else {
+        const [roleUser, created] = await RoleUser.findOrCreate({
+            where: { kc_id: ctx.kc_id },
+            defaults: { role_id: ctx.role_id }
+        });
+        if (!created) {
             return await RoleUser.update({ role_id: ctx.role_id, }, {
                 where: {
                     kc_id: ctx.kc_id
                 }
-            })
+            });
         }
+        return roleUser;
     },
 
-    // It updates allocated user.
+    // Updates roles allocated to a user.
     async update(ctx) {
-        const result = await db('roles_users').where('id', ctx.id)
-            .update({
+        if (!ctx || !ctx.kc_id || !ctx.role_id) {
+            const error = new Error("Required parameters are missing.");
+            error.status = 400;
+            throw error;
+        }
+        return await RoleUser.update({ role_id: ctx.role_id, }, {
+            where: {
                 kc_id: ctx.kc_id
-            }).returning('*').then((result) => result[0])
-        return result
+            }
+        });
     },
 
+    // Deletes roles allocated to a user.
     async delete(ctx) {
-        const result = await db.delete().from('roles_users').where('id', ctx.id).timeout(1000, { cancel: true })
-        return result
+        if (!ctx || !ctx.kc_id) {
+            const error = new Error("Required parameters are missing.");
+            error.status = 400;
+            throw error;
+        }
+        return await RoleUser.destroy({
+            where: {
+                kc_id: ctx.kc_id
+            }
+        });
     },
 
-    // It returns allocated roles by kc_id.
+    // Get allocated roles by user kc_id.
     async allocatedRolesByKcId(ctx) {
-        try {
-            if (!ctx) {
-                throw Error("The request body is empty!")
-            }
-            if (ctx.kc_id) {
-                const allocatedRoles = await db.raw(`
+        if (!ctx || !ctx.kc_id) {
+            const error = new Error("Required parameters are missing.");
+            error.status = 400;
+            throw error;
+        }
+        const allocatedRoles = await db.raw(`
                     select roles.id, u.username as user, roles.name as role , roles.description from roles
                     inner join roles_users ru on roles.id = ru.role_id
                     inner join users u on ru.kc_id = u.kc_id
-                    where u.kc_id = ?`, [ctx.kc_id])
-
-                return allocatedRoles
-            }
-        } catch (err) {
-            throw new Error(error)
-        }
-    },
-    async allocatedRoles(ctx) {
-        if (!ctx) {
-            throw Error("The request body is empty!")
-        }
-
-        const allocatedRoles = await db.raw(`
-                select u.username as user,r.name as role from roles r
-                inner join roles_users ru on r.id = ru.role_id
-                inner join users u on ru.kc_id = u.kc_id`)
-
-        return allocatedRoles
+                    where u.kc_id = ?`, [ctx.kc_id]);
+        return allocatedRoles.rows;
     },
-}
+};
 
 module.exports = {
     create: RoleAllocationService.create,
     allocatedRoles: RoleAllocationService.allocatedRolesByKcId,
     update: RoleAllocationService.update,
     delete: RoleAllocationService.delete
-}
\ No newline at end of file
+};
diff --git a/app/dal/roleService.js b/app/dal/roleService.js
index 81641945caf24c388e6965eab55d74b70c340e1e..8589381a2d97c7c304a0c25afe6575b19cb0297a 100644
--- a/app/dal/roleService.js
+++ b/app/dal/roleService.js
@@ -1,71 +1,69 @@
 "use strict"
 
-const db = require('../../db')
+const db = require('../../db');
+const { Role, RoleUser } = require('../models/Role');
 
-const { Role, RoleUser } = require('../models/Role')
 const RoleService = {
-
     //  Get all roles
-    async roles(ctx) {
-        const roles = await db.select().from('roles').timeout(1000, { cancel: true })
-        return roles
+    async roles() {
+        return await Role.findAll();
     },
+
     // Get a role
     async role(ctx) {
-        const role = await db.select().from('roles').where('id', ctx.id).timeout(1000, { cancel: true })
-        return role
-    },
-    // Delete role by id
-    async delete(ctx) {
-        const result = await db.delete().from('roles').where('id', ctx.id).timeout(1000, { cancel: true })
-        return result
+        if (!ctx || !ctx.id) {
+            const error = new Error("Required parameters are missing.");
+            error.status = 400;
+            throw error;
+        }
+        return await Role.findAll({where: {'id': ctx.id}});
     },
+
+
     // Update role by id
     async update(ctx) {
-        const result = await db('roles').where('id', ctx.id)
-            .update({
-                name: ctx.name,
-                description: ctx.description
-            }).returning('*').then((result) => result[0])
-        return result
+        if (!ctx || !ctx.id || !ctx.name || !ctx.description) {
+            const error = new Error("Required parameters are missing.");
+            error.status = 400;
+            throw error;
+        }
+        return await Role.update({
+            'name': ctx.name,
+            'description': ctx.description
+        }, {
+            where: {'id': ctx.id}
+        });
     },
+
     // Create a role
     async create(ctx) {
-        const role = await db('roles').insert({
+        return await db('roles').insert({
             name: ctx.name,
             description: ctx.description
-        }).returning('*').then((result) => result[0])
-
-        return role
+        }).returning('*').then((result) => result[0]);
     },
 
-    async deleteRole(ctx) {
-        if (!ctx) {
-            throw Error("The request body is empty!")
-        }
-
-        console.log(ctx)
 
-        const roleUser = await RoleUser.destroy({
+    // Delete role
+    async delete(ctx) {
+        if (!ctx || !ctx.id) {
+            const error = new Error("Required parameters are missing.");
+            error.status = 400;
+            throw error;
+        }
+        await RoleUser.destroy({
             where: {
                 role_id: ctx.id
             }
-        })
-
-        const role = await Role.destroy({
-            where: {
-                id: ctx.id
-            }
-        })
-
-        return role
-    }, 
+        });
+        return await Role.destroy({where: {'id': ctx.id}});
+    },
 }
 
 module.exports = {
     create: RoleService.create,
     roles: RoleService.roles,
     role: RoleService.role,
-    delete: RoleService.deleteRole,
+    delete: RoleService.delete,
     update: RoleService.update,
-}
\ No newline at end of file
+};
diff --git a/app/dal/searchHistoryService.js b/app/dal/searchHistoryService.js
index 2d5a2913831e5acfe2f1403cf888c3c29600dfca..1671d4d5e686409dff0d36c6dd4519e5940994ae 100644
--- a/app/dal/searchHistoryService.js
+++ b/app/dal/searchHistoryService.js
@@ -1,86 +1,69 @@
 'use strict'
 
 const userService = require("./userService");
-
 const { SearchHistory } = require('../models/UserHistory');
 
 const SearchHistoryService = {
-
     async create(ctx) {
-        if (!ctx) {
-            throw Error("The request body is empty!")
+        if (!ctx || !ctx.kcId || !ctx.query || !ctx.name || !ctx.uiStructure) {
+            const error = new Error("Required parameters are missing.");
+            error.status = 400;
+            throw error;
         }
-
-        if (ctx.kcId === undefined)
-            throw Error("kcId did not supported.")
-
-        const user = await userService.detail({ kcId: ctx.kcId })
-
-        if (user) {
-            const result = await SearchHistory.create({
-                kc_id: user.kc_id,
-                query: ctx.query,
-                name: ctx.name,
-                ui_structure: ctx.uiStructure,
-                description: ctx.description
-            })
-
-            return result
-        } else {
-            throw Error('The user account could not found.')
+        const user = await userService.detail({ kcId: ctx.kcId });
+        if (!user) {
+            const error = new Error("User account not found.");
+            error.status = 400;
+            throw error;
         }
+        return await SearchHistory.create({
+            kc_id: user.kc_id,
+            query: ctx.query,
+            name: ctx.name,
+            ui_structure: ctx.uiStructure,
+            description: ctx.description
+        })
     },
 
-    async getSearchHistories(ctx) {
-        if (!ctx) {
-            throw Error("The request body is empty!")
-        }
-
-        if (ctx.kcId === undefined)
-            throw Error("kcId did not supported.")
-
-        const user = await userService.detail({ kcId: ctx.kcId })
-
-        if (user) {
-
-            const histories = await SearchHistory.findAll({
-                where: {
-                    kc_id: user.kc_id
-                }
-            })
-
-            return histories
+    async fetchUserSearchHistory(ctx) {
+        if (!ctx || !ctx.kcId) {
+            const error = new Error("Required parameters are missing.");
+            error.status = 400;
+            throw error;
         }
+        return await SearchHistory.findAll({
+            where: {
+                kc_id: ctx.kcId
+            }
+        });
     },
 
     async update(ctx) {
-        if (!ctx) {
-            throw Error("The request body is empty!")
+        if (!ctx || !ctx.kcId) {
+            const error = new Error("Required parameters are missing.");
+            error.status = 400;
+            throw error;
         }
-
-        if (ctx.kc_id === undefined)
-            throw Error("kcId did not supported.")
+        // Not finished ? I don't know why there is no method call to update db.
     },
 
     async delete(ctx) {
-        if (!ctx) {
-            throw Error("The request body is empty!")
+        if (!ctx || !ctx.id) {
+            const error = new Error("Required parameters are missing.");
+            error.status = 400;
+            throw error;
         }
-
-        const result = await SearchHistory.destroy({
+        return await SearchHistory.destroy({
             where: {
                 id: ctx.id
             }
-        })
-
-        return result;
+        });
     }
-}
-
+};
 
 module.exports = {
     create: SearchHistoryService.create,
     update: SearchHistoryService.update,
     delete: SearchHistoryService.delete,
-    fetch: SearchHistoryService.getSearchHistories
-}
\ No newline at end of file
+    fetch: SearchHistoryService.fetchUserSearchHistory
+};
diff --git a/app/dal/userFieldsDisplaySettingsService.js b/app/dal/userFieldsDisplaySettingsService.js
new file mode 100644
index 0000000000000000000000000000000000000000..48af77e0444767993b827a60ce0ce0cd360d15d4
--- /dev/null
+++ b/app/dal/userFieldsDisplaySettingsService.js
@@ -0,0 +1,117 @@
+"use strict"
+
+const {UserFieldsDisplaySettings} = require("../models/UserFieldsDisplaySettings");
+
+/*
+  userFieldsDisplaySettingsService
+  Manage all users fields display settings
+  Used in search tool for results table columns
+*/
+const userFieldsDisplaySettingsService = {
+
+  // POST create fields settings for a specific user
+  // userId: id of the user
+  // stdFieldsIds: array of ids of fields selected by user
+  async create(ctx) {
+      if (!ctx || !ctx.userId || !ctx.stdFieldsIds) {
+        const error = new Error("Required parameters are missing.");
+        error.status = 400;
+        throw error;
+      }
+      // Check if all fields ids exists
+      if (!await UserFieldsDisplaySettings.validateStdFieldIds(ctx.stdFieldsIds)) {
+        const error = new Error("One or more std_field_id do not exists.");
+        error.status = 400;
+        throw error;
+      }
+      // Insert new row in user settings table
+      const [newUserFieldsSettings, isCreated] = await UserFieldsDisplaySettings.findOrCreate({
+        where: { user_id: ctx.userId }, // Unique field(s) to check for existence
+        defaults: {
+          std_fields_ids: ctx.stdFieldsIds,
+        },
+      });
+      if (!isCreated) {
+        const error = new Error("User fields display settings already exists.");
+        error.status = 400;
+        throw error;
+      }
+      return { newUserFieldsSettings, status: 201 };
+  },
+
+  // GET all users fields settings
+  async usersFieldsDisplaySettings() {
+    return await UserFieldsDisplaySettings.findAll({});
+  },
+
+  // GET single user settings
+  // userId: id of the user
+  async userFieldsDisplaySettings(ctx) {
+    if (!ctx || !ctx.userId) {
+      const error = new Error("Required parameters are missing.");
+      error.status = 400;
+      throw error;
+    }
+    const result = await UserFieldsDisplaySettings.findOne({ where: { user_id: ctx.userId } });
+    if (!result) {
+      const error = new Error("No settings found for this userId.");
+      error.status = 404;
+      throw error;
+    }
+    return result;
+  },
+
+  // PUT update a user settings
+  // userId: id of the user
+  // stdFieldsIds: new array of all fields ids
+  async update(ctx) {
+    if (!ctx || !ctx.userId || !ctx.stdFieldsIds) {
+      const error = new Error("Required parameters are missing.");
+      error.status = 400;
+      throw error;
+    }
+    // Check if all fields ids exists
+    if (!await UserFieldsDisplaySettings.validateStdFieldIds(ctx.stdFieldsIds)) {
+      const error = new Error("One or more std_field_id do not exists.");
+      error.status = 400;
+      throw error;
+    }
+    const [updatedCount, updatedRows] = await UserFieldsDisplaySettings.update({
+      std_fields_ids: ctx.stdFieldsIds,
+    }, { where: { user_id: ctx.userId }});
+    if (updatedCount === 0) {
+      const error = new Error("No settings found for this userId.");
+      error.status = 404;
+      throw error;
+    }
+    return updatedRows ? updatedRows[0] : { message: 'User fields display settings updated.'};
+  },
+
+  // DELETE the user settings
+  async delete(ctx) {
+    if (!ctx || !ctx.userId) {
+      const error = new Error("Required parameters are missing.");
+      error.status = 400;
+      throw error;
+    }
+    const deletedCount = await UserFieldsDisplaySettings.destroy({
+      where: {
+        user_id: ctx.userId
+      }
+    });
+    if (deletedCount === 0) {
+      const error = new Error("No settings found for this userId.");
+      error.status = 404;
+      throw error;
+    }
+    return {message: 'User fields display settings deleted.'};
+  },
+}
+
+module.exports = {
+  create: userFieldsDisplaySettingsService.create,
+  usersFieldsDisplaySettings: userFieldsDisplaySettingsService.usersFieldsDisplaySettings,
+  userFieldsDisplaySettings: userFieldsDisplaySettingsService.userFieldsDisplaySettings,
+  delete: userFieldsDisplaySettingsService.delete,
+  update: userFieldsDisplaySettingsService.update,
+};
diff --git a/app/dal/userRequestService.js b/app/dal/userRequestService.js
index b430bae6802302c6a8c4885712dbbc34678f0489..d0c0c10a657bc222416ab8fc1173dfb06d05b6c9 100644
--- a/app/dal/userRequestService.js
+++ b/app/dal/userRequestService.js
@@ -1,113 +1,88 @@
 'use strict'
 
 const userService = require("./userService");
-
 const { UserRequest } = require('../models/UserRequest');
 
-const db = require('../../db');
-
 const UserRequestService = {
-
     async create(ctx) {
-        if (!ctx) {
-            throw Error("The request body is empty!")
+        if (!ctx || !ctx.kcId || !ctx.message) {
+            const error = new Error("Required parameters are missing.");
+            error.status = 400;
+            throw error;
         }
-
-        if (ctx.kcId === undefined)
-            throw Error("kcId did not supported.")
-
-        const user = await userService.detail({ kcId: ctx.kcId })
-
-        if (user) {
-            const result = await UserRequest.create({
-                user_id: user.id,
-                request_message: ctx.message,
-                is_processed: false,
-            })
-
-            return result
-        } else {
-            throw Error('The user account could not found.')
+        const user = await userService.detail({ kcId: ctx.kcId });
+        if (!user) {
+            const error = new Error("User account not found.");
+            error.status = 400;
+            throw error;
         }
+        return await UserRequest.create({
+            user_id: user.id,
+            request_message: ctx.message,
+            is_processed: false,
+        });
     },
 
-    async getAllRequests(ctx) {
-
-        return await UserRequest.findAll({})
+    async getAllRequests() {
+        return await UserRequest.findAll({});
     },
 
     async getUserRequests(ctx) {
-        if (!ctx) {
-            throw Error("The request body is empty!")
+        if (!ctx || !ctx.kcId) {
+            const error = new Error("Required parameters are missing.");
+            error.status = 400;
+            throw error;
         }
-
-        if (ctx.kcId === undefined)
-            throw Error("kcId did not supported.")
-
         const user = await userService.detail({ kcId: ctx.kcId })
-
         if (user) {
-
-
-            const requests = await db.select("*").from('user_requests').where('user_id', user.id).timeout(1000, { cancel: true })
-            // const requests = await UserRequest.find({
-            //     where: {
-            //         user_id: user.id
-            //     }
-            // })
-
-            return requests
+            return await UserRequest.findAll({
+                where: {
+                    user_id: user.id
+                }
+            });
         }
     },
 
-    async getPendingRequests(ctx) {
-        if (!ctx) {
-            throw Error("The request body is empty!")
-        }
-        console.log("hey")
-        const requests = await UserRequest.findAll({
+    async getPendingRequests() {
+        return await UserRequest.findAll({
             where: {
                 is_processed: false
             }
-        })
-
-        return requests
+        });
     },
 
-    async update(ctx) {
-        if (!ctx) {
-            throw Error("The request body is empty!")
+    async process(ctx) {
+        if (!ctx || !ctx.id) {
+            const error = new Error("Required parameters are missing.");
+            error.status = 400;
+            throw error;
         }
-
-        const group = await UserRequest.update({
+        return await UserRequest.update({
             is_processed: true,
         }, {
-            where: { id: ctx.id }
-        })
-        return result
+            where: {id: ctx.id}
+        });
     },
 
     async delete(ctx) {
-        if (!ctx) {
-            throw Error("The request body is empty!")
+        if (!ctx || !ctx.id) {
+            const error = new Error("Required parameters are missing.");
+            error.status = 400;
+            throw error;
         }
-
-        const result = await UserRequest.destroy({
+        return await UserRequest.destroy({
             where: {
                 id: ctx.id
             }
-        })
-
-        return result;
+        });
     }
 }
 
-
 module.exports = {
     create: UserRequestService.create,
-    process: UserRequestService.update,
-    delete: UserRequestService.delete,
     fetch: UserRequestService.getAllRequests,
     fetchPending: UserRequestService.getPendingRequests,
-    fetchByUser: UserRequestService.getUserRequests
-}
\ No newline at end of file
+    fetchByUser: UserRequestService.getUserRequests,
+    process: UserRequestService.process,
+    delete: UserRequestService.delete,
+}
diff --git a/app/dal/userService.js b/app/dal/userService.js
index e03b4ced6fd0661b7fbaa078a969bba62a1f8a35..3ffe89eaeec26b27436b01ba180b746e69b19829 100644
--- a/app/dal/userService.js
+++ b/app/dal/userService.js
@@ -1,490 +1,394 @@
 "use strict"
 
-const KcAdminClient = require("keycloak-admin").default
-const { Issuer } = require("openid-client")
-const db = require('../../db')
-const { User } = require('../models/User')
-const { Role, RoleUser } = require('../models/Role')
-const { postgresSeq } = require('../config/db')
-const { BotService, MailService } = require('@in-sylva/common')
+const KcAdminClient = require("keycloak-admin").default;
+const db = require('../../db');
+const { User } = require('../models/User');
+const { RoleUser } = require('../models/Role');
+const { postgresSeq } = require('../config/db');
+const { BotService, MailService } = require('@in-sylva/common');
 const { Op } = require("sequelize");
-const bcrypt = require('bcrypt')
+const bcrypt = require('bcrypt');
 
-const mailService = new MailService()
+const mailService = new MailService();
+mailService.auth_user = process.env.IN_SYLVA_EMAIL;
+mailService.auth_pass = process.env.IN_SYLVA_EMAIL_PASSWORD;
+mailService.smtp_host = process.env.IN_SYLVA_SMTP_HOST;
+mailService.smtp_port = process.env.IN_SYLVA_SMTP_PORT;
+mailService.smtp_secure = true;
 
-mailService.auth_user = process.env.IN_SYLVA_EMAIL
-mailService.auth_pass = process.env.IN_SYLVA_EMAIL_PASSWORD
-mailService.smtp_host = process.env.IN_SYLVA_SMTP_HOST
-mailService.smtp_port = process.env.IN_SYLVA_SMTP_PORT
-mailService.smtp_secure = true
-
-const botService = new BotService()
-
-botService.token = process.env.BOT_SERVICE_TOKEN
-botService.channel = process.env.BOT_SERVICE_CHANNEL
+const botService = new BotService();
+botService.token = process.env.BOT_SERVICE_TOKEN;
+botService.channel = process.env.BOT_SERVICE_CHANNEL;
 
 const keycloakAdmin = new KcAdminClient({
   baseUrl: `${process.env.IN_SYLVA_KEYCLOAK_HOST}:${process.env.IN_SYLVA_KEYCLOAK_PORT}/keycloak/auth`,
   realmName: "master"
-})
+});
 
-async function auth() {
+const auth = async () => {
   await keycloakAdmin.auth({
     username: process.env.KEYCLOAK_USERNAME,
     password: process.env.KEYCLOAK_PASSWORD,
     grantType: process.env.KEYCLOAK_GRANT_TYPE,
     clientId: process.env.KEYCLOAK_CLIENT_ID,
-  })
+  });
 }
 
-async function generatePassword(length) {
-  const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",
-    retVal = []
+const generatePassword = async (length) => {
+  const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", retVal = [];
   for (let i = 0, n = charset.length; i < length; ++i) {
-    retVal.push(charset.charAt(Math.floor(Math.random() * n)))
+    retVal.push(charset.charAt(Math.floor(Math.random() * n)));
   }
-  return retVal.join("")
-}
-
-async function tokenRefresher() {
-  const keycloakIssuer = await Issuer.discover(
-    `${process.env.IN_SYLVA_KEYCLOAK_HOST}:${process.env.IN_SYLVA_KEYCLOAK_PORT}/auth/realms/master`
-  )
-
-  const client = new keycloakIssuer.Client({
-    client_id: "admin-cli" // Same as `clientId` passed to client.auth()
-  })
-
-  // Periodically using refresh_token grant flow to get new access token here
-  setInterval(async () => {
-    const refreshToken = tokenSet.refresh_token
-    tokenSet = await client.refresh(keycloakAdmin.accessToken)
-    kcAdminClient.setAccessToken(tokenSet.access_token)
-  }, 58 * 1000) // 58 seconds
+  const password = retVal.join("");
+  const salt = bcrypt.genSaltSync();
+  return bcrypt.hashSync(password, salt);
 }
 
 const UserService = {
-  async resetPassword(ctx) {
+  // POST Create a user account
+  async create(ctx) {
+    if (!ctx || !ctx.username || !ctx.email || !ctx.password) {
+      const error = new Error("Required parameters are missing.");
+      error.status = 400;
+      throw error;
+    }
+    // Check roleId or assign to default role "normal-user"
+    const roleId = ctx.roleId || 3;
+    // TODO fetch roles ids and verify that ctx.roleId is included
+    // TODO assign roleId of normal-user dynamically ? instead of hard-coded value 3
+    if (![1, 2, 3].includes(roleId)) {
+      const error = new Error("RoleId must be either 1, 2 or 3.");
+      error.status = 400;
+      throw error;
+    }
     const t = await postgresSeq.transaction();
-    try {
-      if (!ctx) {
-        throw Error("The request body is empty!");
-      }
-      await auth();
-      const users = await keycloakAdmin.users.find({
+    await auth();
+    const [newUser, isCreated] = await User.findOrCreate({
+      where: {
+        username: ctx.username,
         email: ctx.email,
-        realm: process.env.KEYCLOAK_REALM,
-      });
-      if (users.length > 0) {
-        const user = users[0];
-        const password = await generatePassword(10);
-        const salt = bcrypt.genSaltSync()
-        const hashedPassword = bcrypt.hashSync(password, salt)
-        console.log("generated password: " + password);
-        // Update user in insylva db.
-        const [updatedRows, _] = await User.update({
-          password: hashedPassword,
-        }, {
-          where: {
-            kc_id: user.id,
-          },
-        });
-        if (updatedRows > 0) {
-          // Update user in keycloak db.
-          await keycloakAdmin.users.resetPassword({
-            id: user.id,
-            credential: {
-              temporary: false,
-              type: 'password',
-              value: password,
-            },
-            realm: process.env.KEYCLOAK_REALM,
-          });
-          this.sendMail({ ...ctx, subject: "Password reset", message: `Your new password is ${password}` });
-          t.commit();
-          return { status: 200, message: "Password reset successfully" };
-        }
-        else {
-          t.rollback();
-          return { status: 500, message: "Password reset failed" };
-        }
-      }
+      },
+      defaults: {
+        password: ctx.password
+      },
+    });
+    if (!isCreated) {
+      const error = new Error(`User ${ctx.email} or ${ctx.username} already exists.`);
+      error.status = 400;
+      throw error;
     }
-    catch (err) {
-      t.rollback();
-      ctx.status = err.status || 500
-      ctx.body = err.message
-      throw Error(err)
+    // Insert new user into keycloak db
+    const kcUser = await keycloakAdmin.users.create({
+      username: ctx.username,
+      email: ctx.email,
+      emailVerified: true,
+      enabled: true,
+      realm: process.env.KEYCLOAK_REALM,
+    });
+    if (!kcUser.id) {
+      await t.rollback();
     }
+    // Set new user's password in kc
+    await keycloakAdmin.users.resetPassword({
+      id: kcUser.id,
+      credential: {
+        temporary: false,
+        type: 'password',
+        value: ctx.password
+      },
+      realm: process.env.KEYCLOAK_REALM,
+    });
+    // Set user kc_id in db
+    await User.update({
+      kc_id: kcUser.id
+    }, {
+      where: {
+        id: newUser.id
+      }
+    });
+    // User Role allocation, default user is normal-user
+    await RoleUser.create({
+      role_id: roleId,
+      kc_id: kcUser.id
+    })
+    await t.commit();
+    const date = new Date().toLocaleDateString();
+    const message = `[INFO]:[User ${ctx.username} is created with this email address: ${ctx.email} successfully.]:[${date}]`;
+    const subject = "In-Sylva new user added";
+    await mailService.send(process.env.IN_SYLVA_EMAIL_FROM, process.env.IN_SYLVA_EMAIL_TO, subject, "", message);
+    await botService.message(message);
+    return newUser;
   },
 
   // GET list users
-  // Backlog: security vulnerability
-  // Realm structure should implement here.
-  async users(ctx) {
-    try {
-      await auth()
-      const users = await keycloakAdmin.users.find({
+  // Backlog: security vulnerability. Realm structure should implement here.
+  async users(){
+      await auth();
+      return await keycloakAdmin.users.find({
         realm: process.env.KEYCLOAK_REALM
-      })
-      return users
-    }
-    catch (err) {
-      ctx.status = err.status || 500
-      ctx.body = err.message
-      throw Error(err)
-    }
-  },
-
-  // PUT update the user.
-  async update(ctx) {
-    await auth()
-    const userId = ctx.id
-    keycloakAdmin.setConfig({
-      realmName: process.env.KEYCLOAK_REALM
-    })
-
-    await keycloakAdmin.users.update(
-      { id: userId },
-      {
-        firstName: ctx.firstName,
-        lastName: ctx.lastName,
-        // email: ctx.email,
-        //requiredActions: [RequiredActionAlias.UPDATE_PASSWORD],
-        emailVerified: true,
-      })
-
-    const user = await keycloakAdmin.users.findOne({
-      id: userId, realm: process.env.KEYCLOAK_REALM,
-    })
-
-    await db('users').where('kc_id', userId)
-      .update({
-        firstname: ctx.firstName,
-        lastname: ctx.lastName
-      }).returning('*').then((result) => result[0])
-
-    return user
+      });
   },
 
-  // DELETE the user
-  async delete(ctx) {
-    try {
-      if (!ctx) {
-        throw Error("The request body is empty!")
-      }
-
-      await auth()
-
-      const userId = ctx.userId
-
-      if (userId) {
-        const deleted = await User.destroy({
-          where: {
-            kc_id: userId
-          }
-        })
-
-        if (deleted) {
-          return await keycloakAdmin.users.del({
-            id: userId,
-            realm: process.env.KEYCLOAK_REALM
-          })
-        }
-      }
-    } catch (error) {
-      ctx.status = error.status || 500
-      ctx.body = error.message
-      throw Error(error)
-    }
-  },
-  // GET single user
+  // GET Fetch single user
   async user(ctx) {
-    try {
-      await auth()
-      return await keycloakAdmin.users.findOne({
-        id: ctx.id, realm: process.env.KEYCLOAK_REALM,
-      })
-    } catch (err) {
-      ctx.status = err.status || 500
-      ctx.body = err.message
-      throw Error(err)
+    if (!ctx || !ctx.id) {
+      const error = new Error("Required parameters are missing.");
+      error.status = 400;
+      throw error;
     }
+    await auth();
+    return await keycloakAdmin.users.findOne({
+      id: ctx.id, realm: process.env.KEYCLOAK_REALM,
+    });
   },
 
+  // GET kc_id from email
   async kcId(ctx) {
-    try {
-      if (!ctx) {
-        throw Error("The request body is empty!")
-      }
-      if (!ctx.email) {
-        throw Error("The email field is empty!")
-      }
-      const { kc_id } = await db.select('kc_id').from('users').where('email', ctx.email).timeout(1000, { cancel: true }).then((result) => result[0])
-      const role = await RoleUser.findOne({
-        attributes: ['role_id'],
-        where: {
-          kc_id: kc_id
-        }
-      })
-      return { kcId: kc_id, role: role }
-    } catch (err) {
-      ctx.status = err.status || 500
-      ctx.body = err.message
-      throw Error(err)
+    if (!ctx || !ctx.email) {
+      const error = new Error("Required parameters are missing.");
+      error.status = 400;
+      throw error;
     }
+    const { kc_id } = await db.select('kc_id').from('users').where('email', ctx.email).timeout(1000, { cancel: true }).then((result) => result[0]);
+    const role = await RoleUser.findOne({
+      attributes: ['role_id'],
+      where: {
+        kc_id: kc_id
+      }
+    });
+    return { kcId: kc_id, role: role };
   },
 
+  // GET user account details
+  // TODO return user details such as roles and policies
   async detail(ctx) {
-    try {
-      if (!ctx) {
-        throw Error("The request body is empty!")
-      }
-      const user = await db.select("*").from('users').where('kc_id', ctx.kcId).timeout(1000, { cancel: true }).then((result) => result[0])
-      return user
-      // To-do
-      // Return user details such as roles and policies
-    } catch (error) {
-      ctx.status = error.status || 500
-      ctx.body = error.message
-      throw Error(error)
+    if (!ctx || !ctx.kcId) {
+      const error = new Error("Required parameters are missing.");
+      error.status = 400;
+      throw error;
     }
+    return await db.select("*").from('users').where('kc_id', ctx.kcId).timeout(1000, {cancel: true}).then((result) => result[0]);
   },
 
-  async create(ctx) {
-    const t = await postgresSeq.transaction()
-    try {
-      await auth()
-      if (!ctx) {
-        throw Error("The request body is empty!")
-      }
-      if (ctx.username && ctx.email && ctx.password) {
-        const checkUser = await User.findAndCountAll({
-          where: {
-            [Op.or]: [
-              { username: ctx.username },
-              { email: ctx.email }
-            ]
-          }
-        })
-        if (checkUser.count > 0)
-          return { user: null, status: 409, message: `"${ctx.email}" or "${ctx.username}" already exist, please try again with different credentials.` }
-        const roleId = (ctx.roleId == 0 || ctx.roleId == undefined) ? 3 : ctx.roleId
-        if (!!roleId && roleId == 0)
-          throw Error("The roleId is empty!")
-        // Insert this new user into insylva db.
-        const newUser = await User.create({
-          username: ctx.username,
-          email: ctx.email,
-          password: ctx.password
-        })
-        if (newUser.id) {
-          // Insert new user into keycloak db
-          const kcUser = await keycloakAdmin.users.create({
-            username: ctx.username,
-            email: ctx.email,
-            emailVerified: true,
-            enabled: true,
-            realm: process.env.KEYCLOAK_REALM,
-          })
-          if (kcUser.id) {
-            // Set new user's password
-            await keycloakAdmin.users.resetPassword({
-              id: kcUser.id,
-              credential: {
-                temporary: false,
-                type: 'password',
-                value: ctx.password
-              },
-              realm: process.env.KEYCLOAK_REALM,
-            })
-            const update = await User.update({
-              kc_id: kcUser.id
-            }, {
-              where: {
-                id: newUser.id
-              }
-            })
-            if (update) {
-              // User Role allocation, default user is normal-user
-              await RoleUser.create({
-                role_id: roleId,
-                kc_id: kcUser.id
-              })
-            }
-
-          }
-        } else {
-          await t.rollback()
-        }
-        await t.commit()
-        const date = new Date().toLocaleDateString()
-        const message = `[INFO]:[User ${ctx.username} is created with this email address: ${ctx.email} successfully.]:[${date}]`
-        const subject = "In-Sylva New User Added"
-        await mailService.send(process.env.IN_SYLVA_EMAIL_FROM, process.env.IN_SYLVA_EMAIL_TO, subject, "", message)
-        await botService.message(message)
-        return { user: newUser, status: 201 }
-      }
-    } catch (error) {
-      await t.rollback()
-      throw new Error(error)
+  // GET users assigned to a role
+  async getAssignedUserByRole(ctx) {
+    if (!ctx || !ctx.id) {
+      const error = new Error("Required parameters are missing.");
+      error.status = 400;
+      throw error;
     }
+    const params = { roleId: ctx.id };
+    const assignedUserByRole = await db.raw(`
+      select u.username as username,u.email as useremail, r.name as rolename from roles r
+      inner join roles_users ru on r.id = ru.role_id
+      inner join users u on ru.kc_id = u.kc_id
+      where r.id = :roleId
+    `, params);
+    return assignedUserByRole.rows;
   },
 
-  async sendMail(ctx) {
-    try {
-      if (!ctx) {
-        throw Error("The request body is empty!")
-      }
-      if (ctx.subject && ctx.message) {
-        const subject = ctx.subject
-        const message = ctx.message
-        await mailService.send(process.env.IN_SYLVA_EMAIL_FROM, ctx.email, subject, "", message)
-        await botService.message(message)
-        return { status: 201 }
-      } else {
-        throw Error("The message is missing!")
-      }
-    } catch (error) {
-      ctx.status = error.status || 500
-      ctx.body = error.message
-      throw Error(error)
+  // PUT update the user.
+  async update(ctx) {
+    if (!ctx || !ctx.id) {
+      const error = new Error("Required parameters are missing.");
+      error.status = 400;
+      throw error;
     }
-
+    await auth();
+    const userId = ctx.id
+    keycloakAdmin.setConfig({
+      realmName: process.env.KEYCLOAK_REALM
+    });
+    await keycloakAdmin.users.update(
+        { id: userId },
+        {
+          firstName: ctx.firstName,
+          lastName: ctx.lastName,
+          // email: ctx.email,
+          emailVerified: true,
+        });
+    const user = await keycloakAdmin.users.findOne({
+      id: userId, realm: process.env.KEYCLOAK_REALM,
+    });
+    await db('users').where('kc_id', userId).update({
+          firstname: ctx.firstName,
+          lastname: ctx.lastName
+        }).returning('*').then((result) => result[0]);
+    return user;
   },
 
-
-  async getAssignedUserByRole(ctx) {
-    try {
-      if (!ctx) {
-        throw Error("The request body is empty!")
-      }
-
-      const params = { roleId: ctx.id }
-
-      const assignedUserByRole = await db.raw(`
-        select u.username as username,u.email as useremail, r.name as rolename from roles r
-        inner join roles_users ru on r.id = ru.role_id
-        inner join users u on ru.kc_id = u.kc_id
-        where r.id = :roleId
-      `, params)
-
-      return assignedUserByRole.rows
-
-    } catch (error) {
-      throw new Error(error)
+  // DELETE a user
+  async delete(ctx) {
+    if (!ctx || !ctx.userId) {
+      const error = new Error("Required parameters are missing.");
+      error.status = 400;
+      throw error;
     }
-  },
-
-  async createSystemUser(ctx) {
-    try {
-      await auth()
-
-      const checkUser = await User.findAndCountAll({
-        where: {
-          [Op.or]: [
-            { username: "admin" },
-            { email: "admin@inrae.fr" }
-          ]
-        }
+    await auth();
+    const deleted = await User.destroy({
+      where: { kc_id: ctx.userId }
+    });
+    if (deleted) {
+      return await keycloakAdmin.users.del({
+        id: ctx.userId,
+        realm: process.env.KEYCLOAK_REALM
       })
+    }
+  },
 
-      if (checkUser.count)
-        return { user: null, status: 409 }
-
-      // Insert new user into keycloak db
-      const kc_user = await keycloakAdmin.users.create({
-        username: "admin",
-        email: process.env.IN_SYLVA_ADMIN_USERNAME,
-        emailVerified: true,
-        enabled: true,
-        realm: process.env.KEYCLOAK_REALM,
-      })
-      // Set new user's password
-      if (kc_user) {
-        await keycloakAdmin.users.resetPassword({
-          id: kc_user.id,
-          credential: {
-            temporary: false,
-            type: 'password',
-            value: process.env.IN_SYLVA_ADMIN_PASSWORD
-          },
-          realm: process.env.KEYCLOAK_REALM,
-        })
+  // POST create the system admin.
+  // It should be used once at system start-up.
+  async createSystemUser() {
+    await auth();
+    const checkUser = await User.findAndCountAll({
+      where: {
+        [Op.or]: [
+          { username: "admin" },
+          { email: "admin@inrae.fr" }
+        ]
       }
-
-      const pg_user = await User.create({
-        kc_id: kc_user.id,
-        username: "admin",
-        email: process.env.IN_SYLVA_ADMIN_USERNAME,
-        password: process.env.IN_SYLVA_ADMIN_PASSWORD
-      })
-
-
-      await RoleUser.create({
-        role_id: 1,
-        kc_id: kc_user.id
-      })
-
-      return { user: pg_user, status: 201 }
-    } catch (error) {
-      throw new Error(error)
+    });
+    if (checkUser.count) {
+      return { user: null, status: 409 };
+    }
+    // Insert new user into keycloak db
+    const kc_user = await keycloakAdmin.users.create({
+      username: "admin",
+      email: process.env.IN_SYLVA_ADMIN_USERNAME,
+      emailVerified: true,
+      enabled: true,
+      realm: process.env.KEYCLOAK_REALM,
+    });
+    // Set new user's password
+    if (kc_user) {
+      await keycloakAdmin.users.resetPassword({
+        id: kc_user.id,
+        credential: {
+          temporary: false,
+          type: 'password',
+          value: process.env.IN_SYLVA_ADMIN_PASSWORD
+        },
+        realm: process.env.KEYCLOAK_REALM,
+      });
     }
+    const pg_user = await User.create({
+      kc_id: kc_user.id,
+      username: "admin",
+      email: process.env.IN_SYLVA_ADMIN_USERNAME,
+      password: process.env.IN_SYLVA_ADMIN_PASSWORD
+    });
+    await RoleUser.create({
+      role_id: 1,
+      kc_id: kc_user.id
+    });
+    return { user: pg_user, status: 201 };
   },
 
-  async usersWithGroupAndRole(ctx) {
-    try {
-
-      const usersWithGroupsAndRole = await db.raw(
+  // GET Fetch all users and their group and role
+  async usersWithGroupAndRole() {
+    const usersWithGroupsAndRole = await db.raw(
         `select DISTINCT u.id, u.kc_id, u.username, u.email, 
           g.name as groupName, g.description as groupDescription, r.name as roleName, r.description as roleDescription  from users u
           inner join roles_users ru on u.kc_id = ru.kc_id
           inner join roles r on ru.role_id = r.id
           left join group_users gu on u.id = gu.user_id
-          left join groups g on g.id = gu.group_id`)
-
-      return usersWithGroupsAndRole.rows
-
-    } catch (error) {
-      throw new Error(error)
-    }
+          left join groups g on g.id = gu.group_id`);
+    return usersWithGroupsAndRole.rows;
   },
 
+  // GET Fetch a user and their group and role
   async userWithGroupAndRole(ctx) {
-    try {
-
-      const params = { userId: ctx.id }
-
-      const userWithGroupAndRole = await db.raw(
+    if (!ctx || !ctx.id) {
+      const error = new Error("Required parameters are missing.");
+      error.status = 400;
+      throw error;
+    }
+    const params = { userId: ctx.id };
+    const userWithGroupAndRole = await db.raw(
         `select DISTINCT u.id, u.kc_id, u.username, u.email, g.id as groupId,
           g.name as groupName, g.description as groupDescription, r.name as roleName, r.id as roleId, r.description as roleDescription  from users u
           inner join roles_users ru on u.kc_id = ru.kc_id
           inner join roles r on ru.role_id = r.id
           left join group_users gu on u.id = gu.user_id
           left join groups g on g.id = gu.group_id
-          where u.kc_id = :userId`, params)
-
-      return userWithGroupAndRole.rows
+          where u.kc_id = :userId`, params);
+    return userWithGroupAndRole.rows;
+  },
 
-    } catch (error) {
-      throw new Error(error)
+  // POST Email a user
+  async sendMail(ctx) {
+    if (!ctx || !ctx.subject || !ctx.message) {
+      const error = new Error("Required parameters are missing.");
+      error.status = 400;
+      throw error;
     }
-  }
+    await mailService.send(process.env.IN_SYLVA_EMAIL_FROM, ctx.email, ctx.subject, "", ctx.message);
+    await botService.message(ctx.message);
+    return {message: "Mail sent."};
+  },
 
+  // POST Reset a user password.
+  async resetPassword(ctx) {
+    if (!ctx || !ctx.email) {
+      const error = new Error("Required parameters are missing.");
+      error.status = 400;
+      throw error;
+    }
+    const t = await postgresSeq.transaction();
+    await auth();
+    const users = await keycloakAdmin.users.find({
+      email: ctx.email,
+      realm: process.env.KEYCLOAK_REALM,
+    });
+    if (!users || users.length === 0) {
+      const error = new Error("User account not found.");
+      error.status = 400;
+      throw error;
+    }
+    const user = users[0];
+    const hashedPassword = await generatePassword(10);
+    // Update user in insylva db.
+    const [updatedRowsCount, updatedRows] = await User.update({
+      password: hashedPassword,
+    }, {
+      where: {
+        kc_id: user.id,
+      },
+    });
+    if (!updatedRowsCount || updatedRowsCount <= 0) {
+      t.rollback();
+      const error = new Error("Reset password failed.");
+      error.status = 500;
+      throw error;
+    }
+    // Update user in keycloak db.
+    await keycloakAdmin.users.resetPassword({
+      id: user.id,
+      credential: {
+        temporary: false,
+        type: 'password',
+        value: password,
+      },
+      realm: process.env.KEYCLOAK_REALM,
+    });
+    await this.sendMail({...ctx, subject: "Password reset", message: `Your new password is ${password}`});
+    t.commit();
+    return {message: "Password reset successfully"};
+  },
 }
 
 module.exports = {
   create: UserService.create,
-  users: UserService.users,
   user: UserService.user,
-  delete: UserService.delete,
-  update: UserService.update,
+  users: UserService.users,
   kcId: UserService.kcId,
+  update: UserService.update,
   detail: UserService.detail,
+  delete: UserService.delete,
   getAssignedUserByRole: UserService.getAssignedUserByRole,
   createSystemUser: UserService.createSystemUser,
   usersWithGroupAndRole: UserService.usersWithGroupAndRole,
   userWithGroupAndRole: UserService.userWithGroupAndRole,
   sendMail: UserService.sendMail,
   resetPassword: UserService.resetPassword
-}
+};
diff --git a/app/middlewares/errorHandler.js b/app/middlewares/errorHandler.js
new file mode 100644
index 0000000000000000000000000000000000000000..a31ed06c7874d1bf578814a91a9a9ed0baaa2cad
--- /dev/null
+++ b/app/middlewares/errorHandler.js
@@ -0,0 +1,20 @@
+const logger = require("../utils/logger");
+
+/*
+ * Global error handler middleware
+ *
+ * - Catches and handles all errors thrown within services, handlers, and routes.
+ * - Logs error details for debugging and monitoring.
+ * - Ensures the application does not crash on unhandled errors.
+ */
+const errorHandler = async (ctx, next) => {
+    try {
+        await next();
+    } catch (err) {
+        logger.error(err.message);
+        ctx.status = err.status || 500;
+        ctx.body = { error: err.message || "Internal Server Error" };
+    }
+};
+
+module.exports = errorHandler;
diff --git a/app/models/Group.js b/app/models/Group.js
index 5966c103ae436d7f1b1540929c360734585c88ad..00c3764a9fc91fb0b015eeaa42d7aef42db7cab7 100644
--- a/app/models/Group.js
+++ b/app/models/Group.js
@@ -1,4 +1,5 @@
 'use strict'
+
 const { postgresSeq } = require('../config/db')
 const Sequelize = require('sequelize')
 const { Policy } = require('./Policy')
@@ -26,7 +27,6 @@ Group.init({
     modelName: "groups"
 })
 
-
 GroupsPolicy.init({
     group_id: {
         type: Sequelize.INTEGER, allowNull: false,
@@ -73,44 +73,8 @@ GroupUser.init({
     modelName: "group_users"
 })
 
-// Group.belongsTo(Policy, { through: GroupsPolicy, uniqueKey: "group_policy_group_id_fkey" })
-// Policy.belongsTo(Group, { through: GroupsPolicy, uniqueKey: "group_policy_policy_id_fkey" })
-
-// User.belongsTo(Group, { through: GroupUser, uniqueKey: "group_user_group_id_fkey" })
-// Group.belongsTo(User, { through: GroupUser, uniqueKey: "group_user_user_id_fkey" })
-
-/*
-Group.hasMany(GroupsPolicy)
-Policy.hasMany(GroupsPolicy)
-Group.hasMany(GroupUser)
-User.hasMany(GroupUser)
-
-GroupsPolicy.belongsToMany(Group, {
-    foreignKey: {
-        name: "group_policy_group_id_fkey"
-    }
-})
-
-GroupsPolicy.belongsToMany(Policy, {
-    foreignKey: {
-        name: "group_policy_policy_id_fkey"
-    }
-})
-
-GroupUser.belongsToMany(Group, {
-    foreignKey: {
-        name: "group_user_group_id_fkey"
-    }
-})
-
-GroupUser.belongsTo(User, {
-    foreignKey: {
-        name: "group_user_user_id_fkey"
-    }
-}) */
-
 module.exports = {
     Group,
     GroupsPolicy,
     GroupUser,
-}
\ No newline at end of file
+}
diff --git a/app/models/Policy.js b/app/models/Policy.js
index 8c4c47e00df8b447f34800d9afbda5e40916cf36..7b2a923a6adc6a84b42e4f2a87f8884cd47d2504 100644
--- a/app/models/Policy.js
+++ b/app/models/Policy.js
@@ -26,15 +26,6 @@ Policy.init(
         deferrable: Sequelize.Deferrable.INITIALLY_IMMEDIATE,
       }
     },
-    /*source_id: {
-      type: Sequelize.INTEGER,
-      allowNull: false,
-      references: {
-        model: Source,
-        key: "id",
-        deferrable: Sequelize.Deferrable.INITIALLY_IMMEDIATE,
-      },
-    },*/
   },
   {
     underscored: true,
@@ -71,7 +62,7 @@ PolicyField.init(
     sequelize: postgresSeq,
     modelName: "policy_fields",
   })
-  
+
 PolicySource.init({
   policy_id: {
     type: Sequelize.INTEGER,
@@ -99,78 +90,6 @@ PolicySource.init({
     modelName: "policy_sources",
 })
 
-// StdField.belongsTo(Policy, { through: PolicyField, foreignKey: "policy_field_policy_id_fkey", constraints: true })
-// Policy.belongsToMany(StdField, { through: PolicyField, foreignKey: "std_fields_id_fkkey", constraints: true })
-// Policy.belongsTo(StdField, { foreignKey: "std_fields_id_fkkey" })
-// StdField.belongsTo(Policy, { foreignKey: "policy_field_policy_id_fkey" })
-// Policy.belongsTo(StdField, { through: PolicyField, foreignKey: "std_fields_id_fkkey", constraints: false })
-// StdField.belongsTo(Policy, { through: PolicyField, foreignKey: "policy_field_policy_id_fkey", constraints: false })
-/*
-Policy.belongsToMany(StdField, {
-  through: PolicyField,
-  uniqueKey: "policy_field_policy_id_fkey",
-});
-
-Policy.belongsToMany(Source, {
-  through: PolicyField,
-  uniqueKey: "policy_source_id_fkey",
-}); 
-
-StdField.belongsToMany(Policy, {
-  through: PolicyField,
-  uniqueKey: "std_fields_id_fkkey",
-}); */
-
-
-class UserProfile extends Sequelize.Model { }
-
-UserProfile.init(
-  {},
-  {
-    underscored: true,
-    sequelize: postgresSeq,
-    modelName: "user_profile",
-  }
-);
-/*
-Policy.belongsToMany(StdField, {
-  through: PolicyField,
-  uniqueKey: "policy_field_policy_id_fkey",
-});
-
-Policy.belongsToMany(Source, {
-  through: PolicyField,
-  uniqueKey: "policy_source_id_fkey",
-});
-
-StdField.belongsToMany(Policy, {
-  through: PolicyField,
-  uniqueKey: "std_fields_id_fkkey",
-});*/
-
-/*
-Policy.hasMany(PolicyField)
-Source.hasMany(PolicyField)
-StdField.hasMany(PolicyField)
-
-PolicyField.belongsToMany(Policy, {
-    foreignKey: {
-        name: "policy_field_policy_id_fkey"
-    }
-})
-
-PolicyField.belongsToMany(Source, {
-    foreignKey: {
-        name: "policy_field_source_id_fkey"
-    }
-})
-
-PolicyField.hasMany(StdField, {
-    foreignKey: {
-        name: "std_fields_id_fkkey"
-    }
-}) */
-
 module.exports = {
   Policy,
   PolicyField,
diff --git a/app/models/Role.js b/app/models/Role.js
index 3d8ebfd7bdfad96f515bea51328680bf11067597..0c2a95ed884215b58dcfe081c2e3b1a9f2087e69 100644
--- a/app/models/Role.js
+++ b/app/models/Role.js
@@ -41,24 +41,6 @@ RoleUser.init({
     modelName: "roles_users"
 })
 
-// Role.belongsTo(User, { through: RoleUser, uniqueKey: "roles_users_role_id_fkey" })
-// User.belongsTo(Role, { through: RoleUser, uniqueKey: "roles_users_kc_id_fkey" })
-/*
-Role.hasMany(RoleUser)
-User.hasMany(Role)
-
-RoleUser.belongsToMany(Role, {
-    foreignKey: {
-        name: "roles_users_role_id_fkey"
-    }
-})
-RoleUser.hasMany(User, {
-    foreignKey: {
-        name: "roles_users_kc_id_fkey"
-    }
-}) */
-
-
 module.exports = {
     Role,
     RoleUser
diff --git a/app/models/StdField.js b/app/models/StdField.js
index 717378218d3c8186bb39a2fadce94282a683f787..5ae463c13d4bfeaff48edc1f8494e7ba5d9b87ae 100644
--- a/app/models/StdField.js
+++ b/app/models/StdField.js
@@ -3,7 +3,6 @@
 const { postgresSeq } = require('../config/db')
 const Sequelize = require('sequelize')
 
-
 class StdField extends Sequelize.Model { }
 
 StdField.init({
@@ -33,9 +32,3 @@ StdField.init({
 module.exports = {
     StdField
 }
-
-
-
-
-
-
diff --git a/app/models/User.js b/app/models/User.js
index 364e98e0f19879ef060216c3ba82443ba84c271e..14f18e329d7f5afe0a5620f4f9e250a3a9a21ad5 100644
--- a/app/models/User.js
+++ b/app/models/User.js
@@ -27,14 +27,11 @@ User.init({
     }
 })
 
-
 User.beforeCreate(async (user, options) => {
     const salt = bcrypt.genSaltSync()
     user.password = bcrypt.hashSync(user.password, salt)
 })
 
-
-
 module.exports = {
     User
-}
\ No newline at end of file
+}
diff --git a/app/models/UserFieldsDisplaySettings.js b/app/models/UserFieldsDisplaySettings.js
new file mode 100644
index 0000000000000000000000000000000000000000..98b7ccbcf1f40bfe21cdcfad5839109a6aa55f26
--- /dev/null
+++ b/app/models/UserFieldsDisplaySettings.js
@@ -0,0 +1,48 @@
+'use strict'
+
+const { Model, DataTypes, Deferrable} = require('sequelize');
+const { postgresSeq } = require('../config/db');
+const { User } = require('./User');
+const {StdField} = require("./StdField");
+
+class UserFieldsDisplaySettings extends Model { }
+
+UserFieldsDisplaySettings.init({
+    user_id: {
+        type: DataTypes.INTEGER,
+        allowNull: false,
+        unique: true,
+        references: {
+            model: User,
+            key: "id",
+            deferrable: Deferrable.INITIALLY_IMMEDIATE,
+        }
+    },
+    std_fields_ids: {
+        type: DataTypes.ARRAY(DataTypes.INTEGER),
+        allowNull: false,
+        references: {
+            model: StdField,
+            key: 'id',
+            deferrable: Deferrable.INITIALLY_IMMEDIATE
+        },
+    }
+}, {
+    underscored: true,
+    sequelize: postgresSeq,
+    modelName: "user_fields_display_settings"
+});
+
+// Verify if all standard fields exists in database
+UserFieldsDisplaySettings.validateStdFieldIds = async (stdFieldIds) => {
+    // Count the number of existing IDs in std_fields
+    const validIds = await StdField.count({
+        where: { id: stdFieldIds },
+    });
+    // Check if it matches the length of stdFieldIds
+    return validIds === stdFieldIds.length;
+};
+
+module.exports = {
+    UserFieldsDisplaySettings,
+};
diff --git a/app/utils/hashPass.js b/app/utils/hashPass.js
deleted file mode 100644
index 80b32c50a9e74ebb3c37a299a979983de00ea134..0000000000000000000000000000000000000000
--- a/app/utils/hashPass.js
+++ /dev/null
@@ -1,20 +0,0 @@
-'use strict'
-
-const bcrypt = require('bcrypt')
-const logger = require('winston')
-
-async function hashPass(valueToHash) {
-    const rounds = 10
-
-    try {
-        const hashedValue = await bcrypt.hash(valueToHash, rounds)
-        return hashedValue
-    } catch (err) {
-        logger.error(err)
-        throw err
-    }
-}
-
-module.exports = {
-    hashPass
-}
diff --git a/app/utils/format.js b/app/utils/logger.js
similarity index 90%
rename from app/utils/format.js
rename to app/utils/logger.js
index 9e60ff74df6be86692474a78cd24f5486a4f1634..9d10265de3c0804835c51c6e2bec19c2a53d582d 100644
--- a/app/utils/format.js
+++ b/app/utils/logger.js
@@ -4,7 +4,6 @@ const { createLogger, format, transports } = require('winston');
 const { combine, timestamp, printf, colorize, splat, label } = format;
 const path = require('path');
 
-
 const mFormat = printf((info) => {
     if (info.meta && info.meta instanceof Error) {
         return `${info.timestamp} ${info.level} ${info.message} : ${info.meta.stack}`;
@@ -12,12 +11,11 @@ const mFormat = printf((info) => {
     return `${info.timestamp} ${info.level} [${info.label}]: ${info.message}`;
 });
 
-const LOG_LEVEL = process.env.LOG_LEVEL || 'debug';
 const logger = createLogger({
     transports: [
         new (transports.Console)(
             {
-                level: LOG_LEVEL,
+                level: process.env.LOG_LEVEL || 'debug',
                 format: combine(
                     label({ label: path.basename(process.mainModule.filename) }),
                     colorize(),
@@ -29,7 +27,5 @@ const logger = createLogger({
         )
     ]
 });
-module.exports = logger;
-
-
 
+module.exports = logger;
diff --git a/app/utils/memory-store.js b/app/utils/memory-store.js
deleted file mode 100644
index b0308ce4a7c97d38772c126ddc098f7d6a054873..0000000000000000000000000000000000000000
--- a/app/utils/memory-store.js
+++ /dev/null
@@ -1,29 +0,0 @@
-function MemoryStore () {
-    this.sessions = Object.create(null);
-  }
-  
-  MemoryStore.prototype.get = function (sessionId) {
-    var sess = this.sessions[sessionId];
-    if (!sess) {
-      return;
-    }
-    sess = JSON.parse(sess);
-    if (sess.expire && sess.expire <= Date.now()) {
-      delete this.sessions[sessionId];
-      return;
-    }
-    return sess;
-  };
-  
-  MemoryStore.prototype.set = function (sessionId, session, maxAge) {
-    if (maxAge > 0) {
-      session.expire = Date.now() + maxAge;
-    }
-    this.sessions[sessionId] = JSON.stringify(session);
-  };
-  
-  MemoryStore.prototype.destroy = function (sessionId) {
-    delete this.sessions[sessionId];
-  };
-  
-  module.exports = MemoryStore;
\ No newline at end of file
diff --git a/consul.js b/consul.js
deleted file mode 100644
index 9ec9b078f891c34383e6e51c5c8c4ddbeefea2a9..0000000000000000000000000000000000000000
--- a/consul.js
+++ /dev/null
@@ -1,75 +0,0 @@
-const Consul = require("consul");
-
-class ConsulConfig {
-  constructor() {
-    //Initialize consumer
-    this.consul = new Consul({
-      host: this.ConsulIp,
-      port: this.ConsulPort,
-      promisify: true,
-    });
-
-    // Service registration and health check configuration
-    this.consul.agent.service.register(
-      {
-        name: this.ServiceName,
-        Address: this.ServiceIp,
-        port: this.ServicePort,
-        /* check: {
-                http: 'http://147.100.18.116:4000/healthcheck',
-                interval: '10s',
-                timeout: '6s', 
-            } */
-      },
-      function (err, result) {
-        if (err) {
-          console.error(err);
-          throw err;
-        }
-
-        console.log(
-          "in-sylva.gatekeeper" + "registered successfully!" + result
-        );
-      }
-    );
-  }
-
-  async getConfig(key) {
-    const result = await this.consul.kv.get(key);
-
-    if (!result) {
-      return Promise.reject(key + "does not exist");
-    }
-
-    return JSON.parse(result.Value);
-  }
-
-  //Read user configuration simple package
-  async getUserConfig(key) {
-    const result = await this.getConfig("develop/user");
-
-    if (!key) {
-      return result;
-    }
-
-    return result[key];
-  }
-
-  //Update user configuration simple package
-  async setUserConfig(key, val) {
-    const user = await this.getConfig("develop/user");
-
-    user[key] = val;
-
-    return this.consul.kv.set("develop/user", JSON.stringify(user));
-  }
-}
-
-ConsulConfig.prototype.ConsulIp = null;
-ConsulConfig.prototype.ConsulPort = null;
-ConsulConfig.prototype.ServiceIp = null;
-ConsulConfig.prototype.ServicePort = null;
-ConsulConfig.prototype.ServiceName = "in-sylva-source-manager";
-
-module.exports = ConsulConfig;
-
diff --git a/init-keycloak.js b/init-keycloak.js
index 7f769228f586ede97e48139a185ee2c83006941c..c0b75b7532be81ec8af441062797a249eb797b2b 100644
--- a/init-keycloak.js
+++ b/init-keycloak.js
@@ -1,27 +1,13 @@
 'use strict'
 
 const KeycloakConnect = require('@in-sylva/keycloak-koa-connect').default
-const bodyStore = require('@in-sylva/keycloak-koa-connect/stores/body-store').default // If this option is used, it is legal to include the value of jwt in the body
-const queryStore = require('@in-sylva/keycloak-koa-connect/stores/query-store').default // If this option is used, it is also legal to pass a token at http://a.com?jwt=token
-// var Keycloak = require('keycloak-connect');
-
-// const KeycloakConnect = require('@pixelygroup/keycloak-koa-connect').default
-// const bodyStore = require('@pixelygroup/keycloak-koa-connect').default // If this option is used, it is legal to include the value of jwt in the body
-// const queryStore = require('@pixelygroup/keycloak-koa-connect').default // If this option is used, it is also legal to pass a token at http://a.com?jwt=token
-
 const config = require('./keycloak.js')
 
-const keycloak = new KeycloakConnect({ store: [queryStore, bodyStore]}, config)
-
-/*
-var keycloak = new Keycloak({
-    store: true
-  }, {
-    clientId: config.resource,
-    serverUrl: config["auth-server-url"],
-    realm: config.realm,
-    bearerOnly: true
-  }); */ 
+// If this option is used, it is legal to include the value of jwt in the body
+const bodyStore = require('@in-sylva/keycloak-koa-connect/stores/body-store').default
+// If this option is used, it is also legal to pass a token at http://a.com?jwt=token
+const queryStore = require('@in-sylva/keycloak-koa-connect/stores/query-store').default
 
+const keycloak = new KeycloakConnect({ store: [queryStore, bodyStore]}, config)
 
-module.exports = { keycloak }
\ No newline at end of file
+module.exports = { keycloak }
diff --git a/keycloak.js b/keycloak.js
index dcfe8327656206786bb7194452a96f1f8b2720b4..2724de971a1a1053c4271d929b1eb97f70379f29 100644
--- a/keycloak.js
+++ b/keycloak.js
@@ -1,5 +1,4 @@
 module.exports = {
-
     'realm': process.env.KEYCLOAK_REALM,
     'auth-server-url': process.env.KEYCLOAK_SERVER_URL,
     "ssl-required": "none",
@@ -13,9 +12,4 @@ module.exports = {
     'bearer-only':true,
     'use-resource-role-mappings': true,
     'realm-public-key': `${process.env.KEYCLOAK_SERVER_PUBLIC_KEY}`
-    /*
-    'ssl-required':'external',
-    "public-client": true,
-    'confidential-port': 0,
-    'realm-public-key': `${process.env.KEYCLOAK_SERVER_PUBLIC_KEY}`*/
-}
\ No newline at end of file
+}
diff --git a/package.json b/package.json
index 6e9070bcf9e43ba285883646cd788e037ef5fa55..8287ebeab8802ee48e4b6b6fc640276a63968acb 100644
--- a/package.json
+++ b/package.json
@@ -27,7 +27,6 @@
     "array.prototype.flatmap": "1.2.4",
     "bcrypt": "^5.1.0",
     "bluebird": "3.7.2",
-    "consul": "^0.37.0",
     "keycloak-admin": "1.14.8",
     "keycloak-connect": "12.0.3",
     "keycloak-koa-connect": "^1.0.5",
diff --git a/server.js b/server.js
index 6f9d0ecceb7d72d73e782ce238571203463d66d4..62fdcb445d794d7468f1234e4ee2d357e1b7fe1f 100644
--- a/server.js
+++ b/server.js
@@ -1,68 +1,39 @@
 'use strict'
 
-const Koa = require('koa')
-const logger = require('winston')
-const api = require('./app/api')
-const koaLogger = require('koa-logger')
-const cors = require('koa2-cors')
+const Koa = require('koa');
+const api = require('./app/api');
+const koaLogger = require('koa-logger');
+const cors = require('koa2-cors');
 const { keycloak } = require('./init-keycloak');
-let session = require('koa-session');
-let MemoryStore = require('./app/utils/memory-store')
+const errorHandler = require('./app/middlewares/errorHandler');
 
-let store = new MemoryStore();
-
-async function responseTime(ctx, next) {
+const responseTime = async (ctx, next) => {
     const start = Date.now();
     await next();
     const ms = Date.now() - start;
     ctx.set('X-Response-Time', `${ms}ms`);
 }
 
-const app = new Koa()
+const app = new Koa();
 
-app.proxy = false
+app.use(errorHandler);
 
 const middlewares = keycloak.middleware({
     logout: '/logout',
     admin: '/',
     protected: '/protected/resource'
-})
-
+});
 middlewares.forEach(function (middleware) {
     app.use(middleware);
 })
 
+app.proxy = false;
+app.use(cors({origin: '*'}));
+app.use(koaLogger());
+app.use(responseTime);
 
-app
-    .use(cors({
-        origin: '*'
-    }))
-    /*.use(session({
-        key: 'koa:sess',
-        maxAge: 86400000,
-        renew: false,
-        store: store,
-        signed: false
-    }, app))*/
-    .use(koaLogger())
-    .use(function (ctx, next) {
-        return next().catch((err) => {
-            if (err) {
-                console.log(err)
-                ctx.status = 401
-                ctx.body = err //'Protected resource, use Authorization header to get access\n'
-            } else {
-                /* */
-            }
-        })
-    })
-    .use(api.routes())
-    .use(api.allowedMethods())
-    .use(responseTime)
-
-app.on('error', (err) => {
-    logger.error('Server error', { error: err.message })
-    throw err
-})
+// Register routes
+app.use(api.routes());
+app.use(api.allowedMethods());
 
-module.exports = app
\ No newline at end of file
+module.exports = app;
diff --git a/web.js b/web.js
index dfb191cee8796f944f2b20d6ec871215cf983588..2ed23e27beb96f00f81127637783379998dee7bd 100644
--- a/web.js
+++ b/web.js
@@ -1,33 +1,17 @@
 'use strict'
 
-const { promisify } = require('util')
-const http = require('http')
-const logger = require('winston')
-const app = require('./server')
-const config = require('./app/config/server')
+const { promisify } = require('util');
+const http = require('http');
+const app = require('./server');
+const config = require('./app/config/server');
+const logger = require("./app/utils/logger");
 
-logger.level = config.logger.level
-
-const server = http.createServer(app.callback())
-const serverListen = promisify(server.listen).bind(server)
-
-if (process.env.NODE_ENV === 'production') {
-
-    // const ConsulConfig = require('./consul');
-    // const consul = new ConsulConfig();
-    // consul.ConsulIp = process.env.CONSUL_IP
-    // consul.ConsulPort = process.env.CONSUL_PORT
-    // consul.ServiceIp = process.env.SERVICE_IP
-    // consul.ServicePort = process.env.PORT
-    // consul.ServiceName = process.env.SERVICE_NAME
-}
-
-serverListen(config.port)
-    .then(() => {
-        logger.info(`in-sylva.gatekeeper service is up and running on localhost:${config.port}`)
-    })
-    .catch((err) => {
-        logger.error(err)
-        process.exit(1)
-    })
+const server = http.createServer(app.callback());
+const serverListen = promisify(server.listen).bind(server);
 
+serverListen(config.port).then(() => {
+        logger.info(`in-sylva.gatekeeper service is up and running on localhost:${config.port}`);
+    }).catch((error) => {
+        logger.error(error);
+        process.exit(1);
+    });