package com.lemans.auth.users import com.lemans.services.LemansService import grails.transaction.Transactional @Transactional(readOnly = true) class UserService extends LemansService { private static final String USER_ID_CLAUSE = 'userId = :userId' private static final String USER_PROFILE_SQL = '{CALL spGetUserProfile(@domainId=?, @dealerCode=?, @userName =?)}' /** * Gets a DomainUser profile as XML. * * @param domain id * @param dealerCode * @param userName * * @return XML profile */ String userProfileXml(int domain, String dealerCode, String userName) { String userProfileXml = '' sql().query(USER_PROFILE_SQL, [domain, dealerCode, userName]) { rs -> while (rs.next()) { userProfileXml = rs.getString(1) } } userProfileXml } /** * Find User by id. * * @param criteria containing id * * @return Map with List of results */ Map findUserById(Map criteria) { List clauses = [USER_ID_CLAUSE] if (criteria.dealerCode) { clauses << 'dealerCode = :dealerCode' } dqx(criteria).executeOneFrom('dbo.vwUser', clauses) } /** * Reads a User by userId. * * @param id userId * * @return User or null */ User readUser(Integer id) { User.read(id) } /** * Find DomainUser by id and domainId. * * @param criteria containing id and domain * * @return Map with List of results */ Map findDomainUserById(Map criteria) { dqx(criteria).executeOneFrom('dbo.vwDomainUser', ['domainId = :domain', USER_ID_CLAUSE]) } /** * Find Users. * * @param criteria containing optional dealerCode, userName, emailAddress, firstName, or lastName * * @return Map with List of results */ Map findUsers(Map criteria) { criteria.sorting = criteria.sorting ?: 'userName ASC' dqx(criteria).executeFrom('dbo.vwUser', userClauses(criteria)) } /** * Find DomainUsers. * * @param criteria containing domain and optional filters permission and role * * @return Map with List of results */ Map findDomainUsers(Map criteria) { String view if (criteria.permission) { view = 'dbo.vwDomainUserPermission' } else if (criteria.role || criteria.roleName) { view = 'dbo.vwDomainUserRole' } else { view = 'dbo.vwDomainUser' } dqx(criteria).executeFrom(view, domainUserClauses(criteria)) } /** * Finds UserPermissions inherited from Roles. * * @param criteria containing optional userId * * @return Map with List of results */ Map findUserPermissionsFromRoles(Map criteria) { dqx(criteria).executeFrom('dbo.vwUserPermission', userClauses(criteria)) } /** * Find UserTypes. * * @param criteria * * @return Map with results List and totalRecords */ Map findUserTypes(Map criteria) { dqx(criteria).executeFrom('dbo.vwUserType') } /** * Find UserType by id. * * @param criteria with id * * @return Map with results List and totalRecords */ Map findUserTypeById(Map criteria) { dqx(criteria).executeOneFrom('dbo.vwUserType', ['userTypeId = :id']) } /** * Reads a UserType by userTypeId. * * @param id userTypeId * * @return UserType or null */ UserType readUserType(Integer id) { UserType.read(id) } private List userClauses(Map criteria) { List clauses = [] if (criteria.userId) { clauses << USER_ID_CLAUSE } if (criteria.userName) { clauses << 'userName = :userName' } if (criteria.firstName) { clauses << 'firstName = :firstName' } if (criteria.lastName) { clauses << 'lastName = :lastName' } if (criteria.dealerCode) { clauses << 'dealerCode = :dealerCode' } if (criteria.emailAddress) { clauses << 'emailAddress = :emailAddress' } if (criteria.permissionName) { clauses << 'permissionName = :permissionName' } clauses } private List domainUserClauses(Map criteria) { List clauses = ['domainId = :domain'] if (criteria.dealerCode) { clauses << 'dealerCode = :dealerCode' } if (criteria.userName) { clauses << 'userName = :userName' } if (criteria.permission) { clauses << 'permissionId = :permission' } if (criteria.role) { clauses << 'roleId = :role' } if (criteria.roleName) { clauses << 'roleName = :roleName' } clauses } }