GUMGA

Treinamento

Tecnologias

  • Backend:Java, Spring, Hibernate, Jackson

 

  • Frontend:JavaScript, Angular, HTML5

 

Arquitetura Básica

Backend Java

Frontend Angular

@RestController
@RequestMapping("/api/especification")
public class EspecificationAPI extends GumgaAPI<Especification, Long> {
@RequestMapping(value="/{id}",method=RequestMethod.GET)
   public T load(@PathVariable Long id) {
      return service.view(id);
   }
   ...
}
define(['app/apiLocations'], function (APILocation) {
    IPEspecificationService.$inject = ['GumgaRest'];
    function IPEspecificationService(GumgaRest) {
        var Service = new GumgaRest(APILocation.apiLocation 
                                 + '/api/ipespecification');
        return Service;
 }
 return IPEspecificationService;
});

SEGURANÇA - CONCEITOS

SoftwareHouse

ERP

Contábil

Folha

PCP

Empresa A

Empresa B

Empresa C

Instância 1

Instância 2

Instância 3

SEGURANÇA ARQUITETURA

BackEnd

FrontEnd

Security

1

2

3

4

1 Frontend faz uma requisição a api do backend com token;

2 Backend pede autorização ao segurança;

3 Segurança autoriza e "bileta" a requisição;

4 Backend envia resposta (dados) ao frontend.

 

Multitenancy

Multitenancy

+----+----------------+-----------------------------+
| id | hierarchy_code | name                        |
+----+----------------+-----------------------------+
|  1 | 1.             | GUMGA                       |
|  8 | 8.             | Grands                      |
| 21 | 8.21.          | Grands Maringá              |
| 69 | 69.            | GUMGA Apresentação          |
| 70 | 70.            | Organização para Testes     |
| 71 | 70.71.         | SubOrganização para Teste   |
| 72 | 72.            | DB1                         |
| 73 | 72.73.         | ANY                         |
| 74 | 72.73.74.      | SUPORTE ANY                 |
| 75 | 72.73.74.75.   | FABRICA ANY                 |
| 76 | 72.76.         | GE                          |
| 77 | 72.76.77.      | IMPLANTACAO                 |
| 78 | 72.76.78.      | SUPORTE                     |
| 79 | 79.            | Magus                       |
| 80 | 80.            | Standard                    |
| 81 | 81.            | Advanced                    |
| 82 | 82.            | Enterprise                  |
+----+----------------+-----------------------------+
+----+------+---------------------+----------------------------------------+
| id | oi   | expiration          | name                                   |
+----+------+---------------------+----------------------------------------+
|  1 | 1.   | 2026-07-02 16:45:00 | Security for Gumga                     |
|  2 | 1.   | 2019-08-04 17:10:00 | Security Grands                        |
|  3 | 8.   | 2019-08-04 17:14:00 | Fashion Manager                        |
|  5 | 1.   | 2019-08-04 17:34:00 | GUMGA Softwares                        |
|  6 | 1.   | 2017-12-16 09:56:11 | Software da Gumga para Apresentação    |
|  7 | 1.   | 2017-02-25 08:31:24 | Instância de Teste                     |
|  8 | 69.  | 2019-11-01 13:22:19 | Instancia de estudo                    |
|  9 | 69.  | 2016-09-02 13:09:17 | br.com.gumga.thingcollection           |
| 10 | 69.  | 2019-01-05 14:07:52 | Cobrança                               |
| 11 | 69.  | 2019-03-28 00:00:00 | br.com.gumga.apresentacao.apresentacao |
+----+------+---------------------+----------------------------------------+

Multitenancy

+----+----------------+-----------------------------+
| id | oi             | cor                         |
+----+----------------+-----------------------------+
|  1 | 1.             | AZUL                        |
|  2 | 8.             | VERDE                       |
|  3 | 8.21.          | AMARELO                     |
|  4 | 70.            | VERMELHO                    |
|  5 | NULL           | BRANCO                      |
+----+----------------+-----------------------------+

Transparente para o desenvolvedor

TOKEN findAll()
1L1E1475609580127O1.I AZUL, BRANCO
1L1E1475609580127O8.I VERDE, AMARELO, BRANCO
1L1E1475609580127O8.21.I AMARELO, BRANCO
1L1E1475609580127O70.I VERMELHO,BRANCO

GUMGA ARCHETYPE

  • Estrutura padrão do projeto;
  • Projeto dividido em módulos para evitar acoplamento;
  • Configurações iniciais;
  • Achetype maven;
  • Projeto público e permite especializações por empresa;

GUMGA ARCHETYPE

Módulos

  • DOMAIN;
  • APPLICATION;
  • API;
  • PRESENTATION;
  • INFRASTRUCTURE;
  • GATEWAY;

Módulo INFRASTRUCTURE

package br.com.empresa.infrastructure.config;

@Configuration
@ComponentScan(basePackages = {"br.com.empresa", "gumga.framework"})
@EnableJpaRepositories(repositoryFactoryBeanClass = GumgaRepositoryFactoryBean.class, basePackages = {"br.com.empresa", "gumga.framework"})
@EnableTransactionManagement(proxyTargetClass = true)
public class Application {

    @Bean
    public static PropertyPlaceholderConfigurer dataConfigPropertyConfigurer() {
        PropertyPlaceholderConfigurer configurer = new PropertyPlaceholderConfigurer();
        configurer.setSearchSystemEnvironment(true);
        return configurer;
    }

    @Bean
    public static DataSource dataSource() {
        GumgaQueryParserProvider.defaultMap = GumgaQueryParserProvider.getOracleLikeMap();
        HikariConfig config = new HikariConfig();

        config.setDataSourceClassName("com.mysql.jdbc.jdbc2.optional.MysqlDataSource");
        config.addDataSourceProperty("url", "jdbc:mysql://localhost:3306/piloto?zeroDateTimeBehavior=convertToNull");
        config.addDataSourceProperty("user", "root");
        config.addDataSourceProperty("password", "senha");
//        config.setDataSourceClassName("org.h2.jdbcx.JdbcDataSource");
//        config.addDataSourceProperty("url", "jdbc:h2:mem:test;MVCC=true");
//        config.addDataSourceProperty("user", "sa");
//        config.addDataSourceProperty("password", "sa");
        config.setMaximumPoolSize(20);

        config.setIdleTimeout(30000L);
        config.setInitializationFailFast(true);

        return new HikariDataSource(config);
    }

    @Bean
    @Autowired
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource) {
        HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();

        Properties properties = new Properties();
        properties.put("eclipselink.weaving", "false");
  //      properties.put("hibernate.hbm2ddl.auto", "update");
//        properties.put("hibernate.dialect", "org.hibernate.dialect.H2Dialect");

        properties.put("hibernate.hbm2ddl.auto", "update");
        properties.put("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");
        properties.put("hibernate.ejb.naming_strategy", "org.hibernate.cfg.EJB3NamingStrategy");
        //properties.put("hibernate.show_sql", "true");
        //properties.put("hibernate.format_sql", "true");
        properties.put("hibernate.connection.charSet", "UTF-8");
        properties.put("hibernate.connection.characterEncoding", "UTF-8");
        properties.put("hibernate.connection.useUnicode", "true");
        properties.put("hibernate.jdbc.batch_size", "50");

        LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
        factory.setJpaVendorAdapter(vendorAdapter);
        factory.setPackagesToScan("gumga.framework.domain","br.com.empresa");
        factory.setDataSource(dataSource);

        factory.setJpaProperties(properties);
        factory.afterPropertiesSet();

        return factory;
    }

    @Bean
    @Autowired
    public PlatformTransactionManager transactionManager(EntityManagerFactory emf) {
        return new JpaTransactionManager(emf);
    }

}

Módulo INFRASTRUCTURE

package br.com.empresa.infrastructure.config;

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = {"br.com.empresa.presentation.web", "gumga.framework"})
@Import(Application.class)
public class WebConfig extends WebMvcConfigurerAdapter implements WebApplicationInitializer {

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

    private MappingJackson2HttpMessageConverter jacksonConverter() {
        ObjectMapper mapper = new ObjectMapper();
        mapper.registerModule(new Hibernate4Module());
        mapper.registerModule(new JodaModule());
        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
        mapper.setDateFormat(new ISO8601DateFormat());
        mapper.setVisibility(PropertyAccessor.ALL, Visibility.NONE);
        mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);

        MappingJackson2HttpMessageConverter jacksonConverter = new MappingJackson2HttpMessageConverter();
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        jacksonConverter.setObjectMapper(mapper);

        return jacksonConverter;
    }

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.add(jacksonConverter());
        super.configureMessageConverters(converters);
    }

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        servletContext.setInitParameter("javax.servlet.jsp.jstl.fmt.localizationContext", "messages");
        EnumSet<DispatcherType> dispatcherTypes = EnumSet.of(DispatcherType.REQUEST, DispatcherType.FORWARD);
        CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
        characterEncodingFilter.setEncoding("UTF-8");
        characterEncodingFilter.setForceEncoding(true);
        FilterRegistration.Dynamic characterEncoding = servletContext.addFilter("characterEncoding", characterEncodingFilter);
        characterEncoding.addMappingForUrlPatterns(dispatcherTypes, true, "/*");
    }

    @Bean
    public static MethodValidationPostProcessor methodValidationPostProcessor(LocalValidatorFactoryBean validator) {
        final MethodValidationPostProcessor methodValidationPostProcessor = new MethodValidationPostProcessor();
        methodValidationPostProcessor.setValidator(validator);
        return methodValidationPostProcessor;
    }

    @Bean
    public static LocalValidatorFactoryBean validator() {
        return new LocalValidatorFactoryBean();
    }

    @Bean
    public static CommonsMultipartResolver multipartResolver() {
        CommonsMultipartResolver resolver = new CommonsMultipartResolver();
        resolver.setMaxUploadSize(1024 * 1024 * 1024);
        return resolver;
    }

    @Bean
    public GumgaRequestFilter gumgaRequestFilter() {
        return new GumgaRequestFilter("br.com.empresa.piloto");
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(gumgaRequestFilter()); 
    }

}

Módulo INFRASTRUCTURE

package br.com.empresa.infrastructure.config;

import gumga.framework.core.GumgaValues;
import org.springframework.stereotype.Component;

@Component
public class ApplicationConstants implements GumgaValues {

    @Override
    public String getGumgaSecurityUrl() {
        return "http://www.gumga.com.br/security-api/publicoperations";
    }

    @Override
    public boolean isLogActive() {
        return true;
    }

}

Módulo DOMAIN

/*
 * Gerado automaticamente por GUMGAGenerator em 09/05/2015 10:39:00
 */
package br.com.gumga.security.domain.model.institutional;

import gumga.framework.domain.GumgaModel;
import gumga.framework.domain.domains.*;
import java.io.Serializable;
import java.util.*;
import javax.persistence.*;
import org.hibernate.annotations.Columns;
import org.hibernate.envers.Audited;

//@GumgaMultitenancy // Os usuários são compartilhados
@SequenceGenerator(name = GumgaModel.SEQ_NAME, sequenceName = "SEQ_USER")
//@Indexed
@Audited
@Entity
@Table(name = "gum_use")
public class User extends GumgaModel<Long> implements Serializable {

    //@Field //Descomente para ser utilizado na busca multientidades
    private String name;
    @Column(unique = true)
    private String login;
    private String password;

    private GumgaBoolean status;

    @Columns(columns = {
        @Column(name = "picture_name"),
        @Column(name = "picture_size"),
        @Column(name = "picture_type"),
        @Column(name = "picture_bytes", length = 50 * 1024 * 1024)
    })

    private GumgaImage picture;

    @ManyToMany
    private Set<Organization> organizations;

    public User() {
        this.status = new GumgaBoolean(true);
    }

    public User(String name, String login, String password, Set<Organization> organizations) {
        this.name = name;
        this.login = login;
        this.password = password;
        this.organizations = organizations;
        this.status = new GumgaBoolean(true);
    }

    public GumgaImage getPicture() {
        return picture;
    }

    public void setPicture(GumgaImage picture) {
        this.picture = picture;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Set<Organization> getOrganizations() {
        return organizations == null ? new HashSet<>() : organizations;
    }

    public void removeOrganization(Organization organization) {
        if(this.organizations == null) {
            this.organizations = new HashSet<>();
        }

        this.organizations.remove(organization);
    }

    public void setOrganizations(Set<Organization> organizations) {
        this.organizations = organizations;
    }

    public GumgaBoolean getStatus() {
        return status;
    }

    public void setStatus(GumgaBoolean status) {
        this.status = status;
    }

    public void addOrganization(Organization organization) {
        if(this.organizations == null) {
            this.organizations = new HashSet<>();
        }

        this.organizations.add(organization);
    }

}


Módulo DOMAIN

package gumga.framework.domain;

@MappedSuperclass
public abstract class GumgaModel<ID extends Serializable> implements GumgaIdable<ID>, Serializable {

    public static final String SEQ_NAME = "SEQ";
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator = SEQ_NAME)
    protected ID id;

    @org.hibernate.annotations.Index(name = "oi_index")
    protected GumgaOi oi;

    public GumgaModel() {
        Class classe = this.getClass();
        if (classe.isAnnotationPresent(GumgaMultitenancy.class)) {
            String oc = GumgaThreadScope.organizationCode.get();
            if (oc == null) {
                GumgaMultitenancy tenancy = this.getClass().getAnnotation(GumgaMultitenancy.class);
                oc = tenancy.publicMarking().getMark();
            }
            oi = new GumgaOi(oc);
        }
    }

    public GumgaModel(GumgaOi oi) {
        this.oi = oi;
    }

    public ID getId() {
        return id;
    }

    public GumgaOi getOi() {
        return oi;
    }

    @Override
    public String toString() {
        return ToStringBuilder.reflectionToString(this);
    }

    @Override
    public int hashCode() {
        int hash = 7;
        if (id == null) {
            return super.hashCode();
        }
        hash = 29 * hash + Objects.hashCode(this.id);
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final GumgaModel<?> other = (GumgaModel<?>) obj;

        if (!Objects.equals(this.id, other.id)) {
            return false;
        }
        return true;
    }

}

Módulo APPLICATION

package br.com.gumga.security.application.repository;

import br.com.gumga.security.domain.model.institutional.Organization;
import br.com.gumga.security.domain.model.institutional.User;
import gumga.framework.domain.repository.GumgaCrudRepository;
import java.util.List;
import java.util.Optional;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

public interface OrganizationRepository extends GumgaCrudRepository<Organization, Long> {

    public Organization findByHierarchyCode(String hierarchyCode);

    public Organization findByName(String name);
    
    List<Organization> findByHierarchyCodeStartingWith(String hierarchyCode);
    
    

}

Módulo APPLICATION

public interface GumgaCrudRepository<T, ID extends Serializable> extends JpaRepository<T, ID>, GumgaRepository<T, ID> {

    SearchResult<T> search(QueryObject query);

    Pesquisa<T> search();

    SearchResult<T> search(String hql, Map<String, Object> params);

    SearchResult<T> search(String hql, Map<String, Object> params, int max, int first);

    List<GumgaObjectAndRevision> listOldVersions(ID id);

    <A> SearchResult<A> advancedSearch(String selectQueryWithoutWhere, String countObjt, String ordenationId, QueryObject whereQuery);

    Object genericFindOne(Class clazz, Object id);

    SearchResult<T> findAllWithTenancy();

}

Módulo APPLICATION

package br.com.gumga.security.application.service;


import br.com.gumga.security.application.repository.OrganizationRepository;
import br.com.gumga.security.application.service.utils.QueryObjectLikeDecorator;
import br.com.gumga.security.domain.model.institutional.Organization;
import gumga.framework.application.GumgaService;
import gumga.framework.core.QueryObject;
import gumga.framework.core.SearchResult;
import gumga.framework.domain.domains.GumgaBoolean;
import java.util.List;
import java.util.Set;
import javax.transaction.Transactional;
import org.hibernate.Hibernate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class OrganizationService extends GumgaService<Organization, Long> {

    private OrganizationRepository repository;

    @Autowired
    public OrganizationService(OrganizationRepository repository) {
        super(repository);
        this.repository = repository;
    }

    @Transactional
    public Organization loadOrganizationFat(Long id) {
        Organization obj = repository.findOne(id);
        Hibernate.initialize(obj.getSubOrganizations());
        loadRecursively(obj.getSubOrganizations());
        return obj;
    }

    private void loadRecursively(Set<Organization> subOrganizations) {
        for (Organization subOrganization : subOrganizations) {
            Hibernate.initialize(subOrganization.getSubOrganizations());
            loadRecursively(subOrganization.getSubOrganizations());
        }
    }

    @Override
    public void beforeSave(Organization organization) {
        organization.setMainOrganization(new GumgaBoolean(true));
    }

    @Override
    public void afterSave(Organization organization) {
        setHierarchyCodeRecursively(organization, "");
    }

    @Override
    public void afterUpdate(Organization organization) {
        setHierarchyCodeRecursively(organization, "");
    }

    private void setHierarchyCodeRecursively(Organization organization, String parentCode) {
        organization.setHierarchyCode(parentCode + organization.getId() + ".");

        for (Organization o : organization.getSubOrganizations()) {
            setHierarchyCodeRecursively(o, organization.getHierarchyCode());
        }
    }

    public Organization findParent(Organization organization) {
        if (organization==null){
            return null;
        }
        int lastIndexOf = organization.getHierarchyCode().substring(0, organization.getHierarchyCode().lastIndexOf('.')).lastIndexOf('.');
        
        if (lastIndexOf == -1) {
            return null;
        }
        String parentHierarchyCode = organization.getHierarchyCode().substring(0, lastIndexOf + 1);
    
        Organization parent = repository.findByHierarchyCode(parentHierarchyCode);
        return parent;
    }

    public Organization findByName(String name) {
        return repository.findByName(name);
    }

    public Organization findByOi(String oi) {
        return repository.findByHierarchyCode(oi);
    }

    @Override
    public SearchResult<Organization> pesquisa(QueryObject query) {
        //A busca simples nao utiliza operador like.
        //Temos entao que forcar a geracao do AQ
        return repository.search(new QueryObjectLikeDecorator(query).build());
    }

    @Transactional
    public List<Organization> suborganizations(Long id) {
        Organization obj = repository.findOne(id);
        List<Organization> result = repository.findByHierarchyCodeStartingWith(obj.getHierarchyCode());
        return result;
    }

    public Organization getOperationByID(Long id) {
        return this.repository.findOne(id);
    }

}

Módulo APPLICATION

package gumga.framework.application;

import gumga.framework.application.service.AbstractGumgaService;
import gumga.framework.core.GumgaIdable;
import gumga.framework.core.QueryObject;
import gumga.framework.core.SearchResult;
import gumga.framework.domain.GumgaObjectAndRevision;
import gumga.framework.domain.GumgaServiceable;
import gumga.framework.domain.repository.GumgaCrudRepository;
import java.io.Serializable;
import java.util.List;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@Scope("prototype")
public abstract class GumgaService<T extends GumgaIdable<ID>, ID extends Serializable> extends AbstractGumgaService<T, ID> implements GumgaServiceable<T> {

    public GumgaService(GumgaCrudRepository<T, ID> repository) {
        super(repository);
    }

    public void beforePesquisa(QueryObject query) {
    }

    public void afterPesquisa(SearchResult<T> result) {
    }

    @Transactional(readOnly = true)
    public SearchResult<T> pesquisa(QueryObject query) {
        beforePesquisa(query);
        SearchResult<T> result = repository.search(query);
        afterPesquisa(result);
        return result;
    }

    public void beforeView(ID id) {
    }

    public void afterView(T entity) {
    }

    @Transactional(readOnly = true)
    public T view(ID id) {
        beforeView(id);
        T entity = repository.findOne(id);
        loadGumgaCustomFields(entity);
        afterView(entity);

        return entity;
    }

    @Transactional(readOnly = true)
    public Object genercView(Class clazz, ID id) {
        Object entity = repository.genericFindOne(clazz, id);
        return entity;
    }

    public void beforeDelete(T entity) {
    }

    public void afterDelete() {
    }

    @Transactional
    public void delete(T resource) {
        beforeDelete(resource);
        repository.delete(resource);
        if (gces != null) {
            gces.deleteCustomFields(resource);
        }
        afterDelete();
    }

    private void beforeSaveOrUpdate(T entity, boolean isNew) {
        if (isNew) {
            beforeSave(entity);
        } else {
            beforeUpdate(entity);
        }
    }

    private void afterSaveOrUpdate(T entity, boolean isNew) {
        if (isNew) {
            afterSave(entity);
        } else {
            afterUpdate(entity);
        }
    }

    public void beforeSave(T entity) {
    }

    public void beforeUpdate(T entity) {
    }

    public void afterSave(T entity) {
    }

    public void afterUpdate(T entity) {
    }

    @Transactional
    public T save(T resource) {
        boolean isNew = (resource.getId() == null);

        beforeSaveOrUpdate(resource, isNew);
        T entity = repository.save(resource);
        if (gces != null) {
            gces.saveCustomFields(resource);
        }
        afterSaveOrUpdate(entity, isNew);

        return entity;
    }

    public void forceFlush() {
        repository.flush();
    }

    @Transactional(readOnly = true)
    public List<GumgaObjectAndRevision> listOldVersions(ID id) {
        List<GumgaObjectAndRevision> oldVersions = repository.listOldVersions(id);
        return oldVersions;
    }

}

Módulo API

package br.com.gumga.security.api;

import br.com.gumga.security.application.repository.UserRepository;
import br.com.gumga.security.application.service.OrganizationService;
import br.com.gumga.security.domain.model.institutional.Organization;
import br.com.gumga.security.domain.model.institutional.User;
import com.wordnik.swagger.annotations.ApiOperation;
import gumga.framework.application.GumgaService;
import gumga.framework.application.GumgaTempFileService;
import gumga.framework.core.SearchResult;
import gumga.framework.domain.domains.GumgaImage;
import gumga.framework.presentation.GumgaAPI;
import gumga.framework.presentation.RestResponse;
import java.io.IOException;
import java.util.List;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

@RestController
@RequestMapping("/api/organization")
public class OrganizationAPI extends GumgaAPI<Organization, Long> {

    @Autowired
    private GumgaTempFileService gumgaTempFileService;

    @Autowired
    private UserRepository userRepository;

    @Autowired
    public OrganizationAPI(GumgaService<Organization, Long> service) {
        super(service);
    }

    @ApiOperation(value = "loadOrganizationFat", notes = "Carrega a organização e suas sub-organizações.")
    @Override
    public Organization load(@PathVariable Long id) {
        return ((OrganizationService) service).loadOrganizationFat(id);
    }

    @ApiOperation(value = "logoUpload", notes = "Faz o upload da logo da organização.")
    @RequestMapping(method = RequestMethod.POST, value = "/logo")
    public String logoUpload(@RequestParam MultipartFile logo) throws IOException {
        GumgaImage gi = new GumgaImage();
        gi.setBytes(logo.getBytes());
        gi.setMimeType(logo.getContentType());
        gi.setName(logo.getName());
        gi.setSize(logo.getSize());

        String fileName = gumgaTempFileService.create(gi);
        return fileName;
    }

    @ApiOperation(value = "logoDelete", notes = "Deleta a logo da organização.")
    @RequestMapping(method = RequestMethod.DELETE, value = "/logo/{fileName}")
    public String logoDelete(@PathVariable String fileName) {
        return gumgaTempFileService.delete(fileName);
    }

    @ApiOperation(value = "logoGet", notes = "Retorna os bytes da logo.")
    @RequestMapping(method = RequestMethod.GET, value = "/logo/{fileName}")
    public byte[] logoGet(@PathVariable(value = "fileName") String fileName) {
        return gumgaTempFileService.find(fileName).getBytes();
    }

    @Transactional
    @ApiOperation(value = "save", notes = "Salva a organização associando sua logo.")
    @RequestMapping(method = RequestMethod.POST)
    public RestResponse<Organization> save(@RequestBody @Valid Organization organization, BindingResult result) {
        System.out.println("novo "+organization.getMainUser().getLogin());
        if (organization.getLogo() != null) {
            organization.setLogo((GumgaImage) gumgaTempFileService.find(organization.getLogo().getName()));
        }
        return super.save(organization, result);
    }

    @Transactional
    @ApiOperation(value = "update", notes = "Atualiza a organização e sua logo.")
    @RequestMapping(value = "/{id}", method = RequestMethod.PUT, consumes = "application/json")
    public RestResponse<Organization> update(@PathVariable("id") Long id,
            @Valid @RequestBody Organization obj, BindingResult result) {
        if (obj.getMainUser()!=null){
            User mainUser=userRepository.findOne(obj.getMainUser().getId());
            if (mainUser==null){
                mainUser=obj.getMainUser();
                userRepository.save(mainUser);
            }
            if (!mainUser.getOrganizations().contains(obj)){
                mainUser.getOrganizations().add(obj);
            }
        }
        else{
            throw new RuntimeException("É obrigatório selecionar um usuário principal");
        }

        if (obj.getLogo() != null) {
            if ("null".equals(obj.getLogo().getName())) {
                obj.setLogo(null);
            } else if (obj.getLogo().getSize() == 0) {
                obj.setLogo((GumgaImage) gumgaTempFileService.find(obj.getLogo().getName()));
            }
        }
        RestResponse<Organization> toReturn = super.update(id, obj, result);
        toReturn.setData(null);
        return toReturn;
    }

    @ApiOperation(value = "suborganizations", notes = "Retorna as suborganizações da organização informada")
    @RequestMapping(method = RequestMethod.GET, value = "/suborganizations/{id}")
    public SearchResult<Organization> suborganizations(@PathVariable(value = "id") Long id) {
        List<Organization> suborganizations = ((OrganizationService) service).suborganizations(id);
        return new SearchResult<Organization>(0, suborganizations.size(), suborganizations.size(), suborganizations);

    }

}

Módulo API

package br.com.gumga.security.api;

import br.com.gumga.security.application.repository.UserRepository;
import br.com.gumga.security.application.service.OrganizationService;
import br.com.gumga.security.domain.model.institutional.Organization;
import br.com.gumga.security.domain.model.institutional.User;
import com.wordnik.swagger.annotations.ApiOperation;
import gumga.framework.application.GumgaService;
import gumga.framework.application.GumgaTempFileService;
import gumga.framework.core.SearchResult;
import gumga.framework.domain.domains.GumgaImage;
import gumga.framework.presentation.GumgaAPI;
import gumga.framework.presentation.RestResponse;
import java.io.IOException;
import java.util.List;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

@RestController
@RequestMapping("/api/organization")
public class OrganizationAPI extends GumgaAPI<Organization, Long> {

    @Autowired
    private GumgaTempFileService gumgaTempFileService;

    @Autowired
    private UserRepository userRepository;

    @Autowired
    public OrganizationAPI(GumgaService<Organization, Long> service) {
        super(service);
    }

    @ApiOperation(value = "loadOrganizationFat", notes = "Carrega a organização e suas sub-organizações.")
    @Override
    public Organization load(@PathVariable Long id) {
        return ((OrganizationService) service).loadOrganizationFat(id);
    }

    @ApiOperation(value = "logoUpload", notes = "Faz o upload da logo da organização.")
    @RequestMapping(method = RequestMethod.POST, value = "/logo")
    public String logoUpload(@RequestParam MultipartFile logo) throws IOException {
        GumgaImage gi = new GumgaImage();
        gi.setBytes(logo.getBytes());
        gi.setMimeType(logo.getContentType());
        gi.setName(logo.getName());
        gi.setSize(logo.getSize());

        String fileName = gumgaTempFileService.create(gi);
        return fileName;
    }

    @ApiOperation(value = "logoDelete", notes = "Deleta a logo da organização.")
    @RequestMapping(method = RequestMethod.DELETE, value = "/logo/{fileName}")
    public String logoDelete(@PathVariable String fileName) {
        return gumgaTempFileService.delete(fileName);
    }

    @ApiOperation(value = "logoGet", notes = "Retorna os bytes da logo.")
    @RequestMapping(method = RequestMethod.GET, value = "/logo/{fileName}")
    public byte[] logoGet(@PathVariable(value = "fileName") String fileName) {
        return gumgaTempFileService.find(fileName).getBytes();
    }

    @Transactional
    @ApiOperation(value = "save", notes = "Salva a organização associando sua logo.")
    @RequestMapping(method = RequestMethod.POST)
    public RestResponse<Organization> save(@RequestBody @Valid Organization organization, BindingResult result) {
        System.out.println("novo "+organization.getMainUser().getLogin());
        if (organization.getLogo() != null) {
            organization.setLogo((GumgaImage) gumgaTempFileService.find(organization.getLogo().getName()));
        }
        return super.save(organization, result);
    }

    @Transactional
    @ApiOperation(value = "update", notes = "Atualiza a organização e sua logo.")
    @RequestMapping(value = "/{id}", method = RequestMethod.PUT, consumes = "application/json")
    public RestResponse<Organization> update(@PathVariable("id") Long id,
            @Valid @RequestBody Organization obj, BindingResult result) {
        if (obj.getMainUser()!=null){
            User mainUser=userRepository.findOne(obj.getMainUser().getId());
            if (mainUser==null){
                mainUser=obj.getMainUser();
                userRepository.save(mainUser);
            }
            if (!mainUser.getOrganizations().contains(obj)){
                mainUser.getOrganizations().add(obj);
            }
        }
        else{
            throw new RuntimeException("É obrigatório selecionar um usuário principal");
        }

        if (obj.getLogo() != null) {
            if ("null".equals(obj.getLogo().getName())) {
                obj.setLogo(null);
            } else if (obj.getLogo().getSize() == 0) {
                obj.setLogo((GumgaImage) gumgaTempFileService.find(obj.getLogo().getName()));
            }
        }
        RestResponse<Organization> toReturn = super.update(id, obj, result);
        toReturn.setData(null);
        return toReturn;
    }

    @ApiOperation(value = "suborganizations", notes = "Retorna as suborganizações da organização informada")
    @RequestMapping(method = RequestMethod.GET, value = "/suborganizations/{id}")
    public SearchResult<Organization> suborganizations(@PathVariable(value = "id") Long id) {
        List<Organization> suborganizations = ((OrganizationService) service).suborganizations(id);
        return new SearchResult<Organization>(0, suborganizations.size(), suborganizations.size(), suborganizations);

    }

}

Módulo API

@RestController
public abstract class GumgaAPI<T extends GumgaIdable<ID>, ID extends Serializable> extends AbstractGumgaAPI<T> {
	
	public GumgaAPI(GumgaService<T, ID> service) {
		super(service);
	}
	
}


@RestController
public abstract class AbstractGumgaAPI<T> extends AbstractNoDeleteGumgaAPI<T> {

    protected GumgaServiceable<T> service;

    public AbstractGumgaAPI(GumgaServiceable<T> service) {
        super(service);
        this.service = service;
    }

    @GumgaSwagger
    @Transactional
    @ResponseStatus(value = HttpStatus.OK)
    @ApiOperation(value = "delete", notes = "Deleta objeto com o id correspondente.")
    @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
    public RestResponse<T> delete(@PathVariable Long id) {
        T entity = service.view(id);
        service.delete(entity);
        return new RestResponse<>(getEntityDeletedMessage(entity));
    }

    public void setService(GumgaServiceable<T> service) {
        this.service = service;
        super.setService(service);
    }

}


@RestController
public abstract class AbstractNoDeleteGumgaAPI<T> extends
        AbstractReadOnlyGumgaAPI<T> {

    protected GumgaWritableServiceable<T> service;

    public AbstractNoDeleteGumgaAPI(GumgaWritableServiceable<T> service) {
        super(service);
        this.service = service;
    }

    @GumgaSwagger
    @Transactional
    @ApiOperation(value = "save", notes = "Salva o objeto correspodente.")
    @RequestMapping(method = RequestMethod.POST)
    public RestResponse<T> save(@RequestBody @Valid T model, BindingResult result) {
        beforeSave(model);
        T entity = saveOrCry(model, result);
        return new RestResponse<>(entity, getEntitySavedMessage(entity));
    }

    @GumgaSwagger
    @Transactional
    @ApiOperation(value = "update", notes = "Atualiza o objeto pelo id correspondente.")
    @RequestMapping(value = "/{id}", method = RequestMethod.PUT, consumes = "application/json")
    public RestResponse<T> update(@PathVariable("id") Long id,
            @Valid @RequestBody T model, BindingResult result) {
        beforeUpdate(id, model);
        T entity = saveOrCry(model, result);
        return new RestResponse<>(entity, getEntityUpdateMessage(entity));
    }

    private T saveOrCry(T model, BindingResult result) {
        if (result.hasErrors()) {
            throw new InvalidEntityException(result);
        }

        return service.save(model);
    }

    @Override
    public void setService(GumgaServiceable<T> service) {
        this.service = service;
        super.setService(service);
    }

    protected void beforeSave(T model) {

    }

    protected void beforeUpdate(Long id, T model) {

    }

    @Transactional
    @RequestMapping(value = "tags", method = RequestMethod.POST)
    public void saveAll(@RequestBody TagsTo tags) {
        for (GumgaTag tag : tags.tags) {
            tag.setObjectType(clazz().getCanonicalName());
        }
        tags.tags.stream().forEach(t -> gts.save(t));
    }

}

class TagsTo {

    public List<GumgaTag> tags;

    public List<GumgaTag> getTags() {
        return tags;
    }

    public void setTags(List<GumgaTag> tags) {
        this.tags = tags;
    }

}


@RestController
public abstract class AbstractReadOnlyGumgaAPI<T> extends AbstractProtoGumgaAPI<T> {

    protected GumgaReadableServiceable<T> service;
    @Autowired
    protected GumgaUserDataService guds;
    @Autowired
    protected GumgaTagDefinitionService gtds;
    @Autowired
    protected GumgaTagService gts;

    public AbstractReadOnlyGumgaAPI(GumgaReadableServiceable<T> service) {
        this.service = service;
    }

    @GumgaSwagger
    @Transactional
    @ApiOperation(value = "search", notes = "Faz uma pesquisa pela query informada através do objeto QueryObjet, os atributos são aq, q, start, pageSize, sortField, sortDir e searchFields.")
    @RequestMapping(method = RequestMethod.GET)
    public SearchResult<T> pesquisa(QueryObject query) {
        SearchResult<T> pesquisa = service.pesquisa(query);
        return new SearchResult<>(query, pesquisa.getCount(), pesquisa.getValues());
    }

    @Transactional
    @ApiOperation(value = "saveQuery", notes = "Salva a consulta avançada.")
    @RequestMapping(value = "saq", method = RequestMethod.POST)
    public String save(@RequestBody @Valid QueryToSave qts,
            BindingResult result) {
        String key = "aq;" + qts.getPage() + ";" + qts.getName();
        String userLogin = GumgaThreadScope.login.get();
        GumgaUserData gud = guds.findByUserLoginAndKey(userLogin, key);
        if (gud == null) {
            gud = new GumgaUserData();
            gud.setUserLogin(userLogin);
            gud.setKey(key);
            gud.setDescription(qts.getName());
        }
        gud.setValue(qts.getData());
        guds.save(gud);
        return "OK";
    }

    @GumgaSwagger
    @Transactional
    @ApiOperation(value = "load", notes = "Carrega entidade pelo id informado.")
    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
    public T load(@PathVariable Long id) {
        return service.view(id);
    }

    @Transactional
    @ApiOperation(value = "listOldVersions", notes = "Mostra versões anteriores do objeto.")
    @RequestMapping(value = "listoldversions/{id}", method = RequestMethod.GET)
    public List<GumgaObjectAndRevision> listOldVersions(@PathVariable Long id) {
        return service.listOldVersions(id);
    }

    public void setService(GumgaServiceable<T> service) {
        this.service = service;
    }

    @ApiOperation(value = "queryByKeyPrefix", notes = "Retorna os associados do usuário a uma chave.")
    @RequestMapping(value = "gumgauserdata/{prefix}", method = RequestMethod.GET)
    public SearchResult<GumgaUserData> queryByKeyPrefix(@PathVariable String prefix) {
        return ((GumgaUserDataService) guds).searchByKeyPrefix(prefix);

    }

    @Transactional
    @RequestMapping(method = RequestMethod.GET, value = "tags")
    public SearchResult<GumgaTagDefinition> listAllTags(QueryObject query) {
        SearchResult<GumgaTagDefinition> pesquisa = gtds.pesquisa(query);
        return new SearchResult<>(query, pesquisa.getCount(), pesquisa.getValues());
    }

    @Transactional
    @RequestMapping(method = RequestMethod.GET, value = "tags/{objectId}")
    public List<GumgaTag> listTagsOfEspecificObject(@PathVariable("objectId") Long objectId) {

        List<GumgaTag> tags = gts.findByObjectTypeAndObjectId(clazz().getCanonicalName(), objectId);
        for (GumgaTag tag : tags) {
            Hibernate.initialize(tag.getValues());
        }
        return tags;
    }

}

Módulo API - SEED 1/2

package br.com.gumga.security.seed;

import gumga.framework.application.GumgaLoggerService;
import gumga.framework.domain.seed.AppSeed;
import java.io.IOException;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;

@Component
public class Seed implements ApplicationListener<ContextRefreshedEvent> {

    @Autowired
    private MinimumSeed securitySeed;

    @Autowired
    private GumgaLoggerService gumgaLoggerService;

    private AtomicBoolean started = new AtomicBoolean(false);

    public void onApplicationEvent(ContextRefreshedEvent event) {
        if (started.get()) {
            return;
        }
        started.set(true);
        gumgaLoggerService.logToFile("Start ", 1);
        for (AppSeed seed : seeds()) {
            try {
                seed.loadSeed();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
        gumgaLoggerService.logToFile("End ", 2);

    }

    private List<AppSeed> seeds() {
        List<AppSeed> list = new LinkedList<>();
        list.add(securitySeed);
        return list;
    }

}

Módulo API - SEED 2/2

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.gumga.security.seed;

import br.com.gumga.security.application.service.GumgaTokenService;
import br.com.gumga.security.application.service.InstanceService;
import br.com.gumga.security.application.service.OrganizationService;
import br.com.gumga.security.application.service.RoleService;
import br.com.gumga.security.application.service.SoftwareService;
import br.com.gumga.security.application.service.UserService;
import br.com.gumga.security.domain.model.instance.AddRemove;
import br.com.gumga.security.domain.model.instance.Instance;
import br.com.gumga.security.domain.model.instance.OperationEspecification;
import br.com.gumga.security.domain.model.instance.Role;
import br.com.gumga.security.domain.model.institutional.GumgaToken;
import br.com.gumga.security.domain.model.institutional.Organization;
import br.com.gumga.security.domain.model.institutional.User;
import br.com.gumga.security.domain.model.softwarehouse.Operation;
import br.com.gumga.security.domain.model.softwarehouse.Software;
import gumga.framework.core.GumgaThreadScope;
import gumga.framework.domain.domains.GumgaBoolean;
import gumga.framework.domain.domains.GumgaURL;
import gumga.framework.domain.seed.AppSeed;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashSet;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

/**
 *
 * @author munif
 */
@Component
public class MinimumSeed implements AppSeed {

    @Autowired
    private OrganizationService organizationService;
    @Autowired
    private UserService userService;
    @Autowired
    private GumgaTokenService gumgaTokenService;
    @Autowired
    private SoftwareService softwareService;
    @Autowired
    private InstanceService instanceService;
    @Autowired
    private RoleService roleService;

    @Override
    public void loadSeed() throws IOException {

        if (semGumga()) {
            System.out.println("SEGURANCA SEM NADA - RODANDO SEED");
            createGumga();
            createGumgaUser();
            createSecurity();
            createSecurityForGumga();
        } else {
            System.out.println("SEGURANCA COM DADOS");
        }

    }

    @Transactional
    public void createGumga() {
        Organization gumga = new Organization("GUMGA", new HashSet<>(), true);
        organizationService.save(gumga);
    }

    @Transactional
    public void createGumgaUser() {
        Organization gumga = organizationService.findByName("GUMGA");
        GumgaThreadScope.organizationCode.set(gumga.getHierarchyCode()); // MELHORAR O SEED PARA QUE pegue o ID DA GUMGA
        GumgaThreadScope.organization.set(gumga.getName());
        User gumgaUser = new User("GumgaAdmin", "gumga@gumga.com.br", "qwe123", new HashSet<>(Arrays.asList(gumga)));
        gumgaUser.setStatus(new GumgaBoolean(true));
        userService.save(gumgaUser);
        gumga.setMainUser(gumgaUser);
        organizationService.save(gumga);
    }

    @Transactional
    public void createSecurity() {
        Organization gumga = organizationService.findByName("GUMGA");
        GumgaThreadScope.organizationCode.set(gumga.getHierarchyCode()); // MELHORAR O SEED PARA QUE pegue o ID DA GUMGA
        GumgaThreadScope.organization.set(gumga.getName());
        Software security = new Software();
        Operation all = new Operation("Todas as operações", "Permite executar todas as operações", "ALL_OPERATIONS");
        Operation manager = new Operation("Manager Operations", "Permite executar todas as operações", "MANAGER_OPERATIONS");
        Operation softwarehouse = new Operation("Softwarehouse Operations", "Permite executar todas as operações", "SOFTWAREHOUSE_OPERATIONS");
        security.setDefaultTokenDuration(3600l);
        security.setName("br.com.gumga.security");
        security.setUrl(new GumgaURL("http://www.gumga.com.br/security"));
        security.setOperations(new HashSet<>());
        security.getOperations().add(all);
        security.getOperations().add(manager);
        security.getOperations().add(softwarehouse);
        security.setRoot(Boolean.TRUE);
        softwareService.save(security);
    }

    @Transactional
    public void createSecurityForGumga() {
        Organization gumga = organizationService.findByName("GUMGA");
        GumgaThreadScope.organizationCode.set(gumga.getHierarchyCode());
        GumgaThreadScope.organization.set(gumga.getName());
        System.out.println("-------->" + GumgaThreadScope.organization.get() + " " + GumgaThreadScope.organizationCode.get());
        Software security = softwareService.findByName("br.com.gumga.security");
        System.out.println("---------->" + security.getName());
        User gumgaUser = userService.searchForLogin("gumga@gumga.com.br");
        System.out.println("----->" + gumgaUser.getLogin());
        GumgaToken eterno = new GumgaToken("Token Eterno Gumga", System.currentTimeMillis(), Long.MAX_VALUE, "eterno", gumgaUser);
        eterno.setLongo(Boolean.TRUE);
        eterno.setOrganization(gumga);
        gumgaTokenService.save(eterno);

        Instance securityParaGumga = new Instance("Security for Gumga", new HashSet<>(),
                gumga, new Date(System.currentTimeMillis() + 1000l * 60 * 60 * 24 * 3650));
        securityParaGumga.getSoftwares().add(security);
        instanceService.save(securityParaGumga);
        Role saRole = new Role("SecurityAdministrator", new HashSet<>(Arrays.asList(new User[]{gumgaUser})), securityParaGumga);
        saRole.setEspecifications(new ArrayList<>());
        System.out.println("------->" + security.getOperations());
        for (Operation operation : security.getOperations()) {
            OperationEspecification operationEspecification = new OperationEspecification(AddRemove.ADD, operation, "Permição para " + operation.getDescription(), saRole);
            //operationEspecification.setRole(saRole);
            saRole.getEspecifications().add(operationEspecification);
        }
        roleService.save(saRole);
    }

    private boolean semGumga() {
        Organization gumga = organizationService.findByName("GUMGA");
        return gumga == null;
    }

}

API - Chamada

GET http://40.78.60.84/security-api/api/user?pageSize=10&start=0 

Host: 40.78.60.84
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:44.0) Gecko/20100101 Firefox/44.0
Accept: application/json, text/plain, */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
gumgaToken: 1L1E1475609580127O1.I
Referer: http://40.78.60.84/security/
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache

API - Resposta

{

    "pageSize": 10,
    "count": 27,
    "start": 0,
    "values": [
        {
            "id": 1,
            "oi": null,
            "name": "GumgaAdmin",
            "login": "gumga@gumga.com.br",
            "password": "iOpp/mkwiKTSJ6JYM9LgHwCWpjDiZpDkZMmjpQ==",
            "status": {
                "value": true
            },
            "internalCode": null,
            "picture": null,
            "organizations": null
        },
        {
            "id": 2,
            "oi": null,
            "name": "Cesar GRANDS",
            "login": "cesar@grands.com.br",
            "password": "zCnz0fZ9XcRvQ8Rb7Fl7cgbPZ+Ra2rWtUMuSvA==",
            "status": {
                "value": true
            },
            "internalCode": null,
            "picture": null,
            "organizations": null
        },
        {
            "id": 3,
            "oi": null,
            "name": "Cesar GUMGA",
            "login": "cesar@gumga.com.br",
            "password": "hoWQIf/Jh8yRK24L7kztShnzLNvfRcXl1ljQAw==",
            "status": {
                "value": true
            },
            "internalCode": null,
            "picture": null,
            "organizations": null
        },
        {
            "id": 4,
            "oi": null,
            "name": "Parceiro GRANDS",
            "login": "parceiro@grands.co",
            "password": "5wizeqybi28iztBKbKG93AoAjc4Whf8EYYhIKA==",
            "status": {
                "value": true
            },
            "internalCode": null,
            "picture": null,
            "organizations": null
        },
        {
            "id": 5,
            "oi": null,
            "name": "Marcelo Brenzan GRANDS",
            "login": "marcelobrenzan@gmail.com",
            "password": "5LblLpN7i3WivTeDJ2U7qHS4PtvElC+vh1kExQ==",
            "status": {
                "value": true
            },
            "internalCode": null,
            "picture": null,
            "organizations": null
        },
        {
            "id": 6,
            "oi": null,
            "name": "Rafael Mangolin GRANDS",
            "login": "rbmangolin@gmail.com",
            "password": "bDxx3UBNxVBKPqUxPs1M/JXCiUmVMS5dUvTwPQ==",
            "status": {
                "value": true
            },
            "internalCode": null,
            "picture": null,
            "organizations": null
        },
        {
            "id": 7,
            "oi": null,
            "name": "Felipe S GUMGA",
            "login": "felipe@gumga.com.br",
            "password": "hPcS/tjMTPrKD9cequNZR6lAW/2GwmIHQoFo5w==",
            "status": {
                "value": true
            },
            "internalCode": "11301",
            "picture": {
                "name": "picture",
                "size": 5242,
                "mimeType": "image/jpeg",
                "bytes": "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"
            },
            "organizations": null
        },
        {
            "id": 8,
            "oi": null,
            "name": "Augusto GUMGA",
            "login": "augusto@gumga.com.br",
            "password": "/Z0qMjZdb6txTtjNPrF8XAI+7JD7ITpgUNJ+Aw==",
            "status": {
                "value": true
            },
            "internalCode": null,
            "picture": null,
            "organizations": null
        },
        {
            "id": 9,
            "oi": null,
            "name": "Munif GUMGA",
            "login": "munif@gumga.com.br",
            "password": "pCufxtZ06Qwntb6/A70DjvTwDh5t4eky2M3aTw==",
            "status": {
                "value": true
            },
            "internalCode": "10500",
            "picture": {
                "name": "picture",
                "size": 8648,
                "mimeType": "image/jpeg",
                "bytes": "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"
            },
            "organizations": null
        },
        {
            "id": 10,
            "oi": null,
            "name": "Guilherme GUMGA",
            "login": "guilherme@gumga.com.br",
            "password": "AJZB0Sz5xUvDPZC3lqKjZW/cfZJPl7MmV5xRCg==",
            "status": {
                "value": true
            },
            "internalCode": "11101",
            "picture": {
                "name": "picture",
                "size": 5773,
                "mimeType": "image/jpeg",
                "bytes": "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"
            },
            "organizations": null
        }
    ]

}

API - Swagger

Made with Slides.com