diff --git a/README.md b/README.md index 6fcb5a302..27a54d47a 100644 --- a/README.md +++ b/README.md @@ -26,10 +26,37 @@ Faça um ***Fork*** deste repositório e abra um ***Pull Request***, **com seu n ----- -### Diferenciais +### Propósito -- Criar um frontend para realizar a busca com uma UX elaborada -- Criar uma solução de autenticação entre o frontend e o backend -- Ter um desempenho elevado num conjunto de dados muito grande -- Utilizar o Docker +Manter o fork com a implementação da customização da imagem do wildfly (com admin definido) com datasource configurado para o postgresql. +### Como efetuar o teste + +- 1 + - Criar a imagem do postgres colocando os arquivos: users.csv (baixado pelo link), modelo.sql e Dockerfile (no diretório postgres do projeto) em um diretório específico da máquina host. + - Entrar no diretório criado e executar o comando: "docker build -t postgres-picpay-user:1.0 .". + - O docker criará a imagem postgres-picpay-user com a tag 1.0 a partir da imagem oficial do postgres. + - A imagem será preparada para criar um schema chamado "picpay" na criação do contêiner e também serão criadas as tabelas, assim como, ocorrerá a importação do arquivo csv. + - Para criar o contêiner execute o comando: "docker run --name dbtest -e POSTGRES_PASSWORD=picpay -d -p 5432:5432 postgres-picpay-user:1.0" + - Atenção: este processo será bem demorado visto que o container estará importando o arquivo csv. Pode ser verificado o andando rodando o comando "docker exec [containerID] ps aux|grep postgre". A saída do comando ps mostrará o processo responsável pela cópia dos dados. Continue verificando a saída do comando até que o processo não apareça mais, indicando seu término de execução. + +- 2 + - Criei uma imagem no docker hub para o Application Server com a aplicação implantada e tudo configurado. Basta seguir os passos a seguir para montar o ambiente para o teste. + +## Baixar a imagem do Wildfly + +- sudo docker pull rodrigopim/wildfly-admin-jdbc-postgresql + +## Criação do contêiner + +- sudo docker run -p 8080:8080 -p 9990:9990 -it --name appServer rodrigopim/wildfly-admin-jdbc-postgresql + +## Configurações adicionais (comunicação entre os contêineres) + +- sudo docker network create --driver=bridge wildfly-network-postgresql +- sudo docker network connect wildfly-network-postgresql dbtest +- sudo docker network connect wildfly-network-postgresql appServer + +## Agora basta acessar o navegador indicando o caminho: + +http://localhost:8080/ApiRestTestPicPay-1.0-SNAPSHOT/ e seguir a orientação de uso. diff --git a/nb-configuration.xml b/nb-configuration.xml new file mode 100644 index 000000000..d9ff0a8c6 --- /dev/null +++ b/nb-configuration.xml @@ -0,0 +1,20 @@ + + + + + + 1.7-web + WildFly + ide + + diff --git a/pom.xml b/pom.xml new file mode 100644 index 000000000..c72abbb8e --- /dev/null +++ b/pom.xml @@ -0,0 +1,97 @@ + + + 4.0.0 + + br.com.apiresttestpicpay + ApiRestTestPicPay + 1.0-SNAPSHOT + war + + ApiRestTestPicPay + + + ${project.build.directory}/endorsed + UTF-8 + + + + + com.google.code.gson + gson + 2.8.5 + + + org.hibernate + hibernate-entitymanager + 4.3.1.Final + provided + + + org.jboss.weld + weld-api + 2.4.Final + provided + + + org.hibernate + hibernate-jpamodelgen + 5.2.6.Final + + + javax + javaee-web-api + 7.0 + provided + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.1 + + 1.7 + 1.7 + + ${endorsed.dir} + + + + + org.apache.maven.plugins + maven-war-plugin + 2.3 + + false + + + + org.apache.maven.plugins + maven-dependency-plugin + 2.6 + + + validate + + copy + + + ${endorsed.dir} + true + + + javax + javaee-endorsed-api + 7.0 + jar + + + + + + + + + diff --git a/postgres/Dockerfile b/postgres/Dockerfile new file mode 100644 index 000000000..3075c717c --- /dev/null +++ b/postgres/Dockerfile @@ -0,0 +1,3 @@ +FROM postgres +COPY users.csv /tmp/ +COPY modelo.sql /docker-entrypoint-initdb.d/ diff --git a/postgres/modelo.sql b/postgres/modelo.sql new file mode 100644 index 000000000..9f2ca55bd --- /dev/null +++ b/postgres/modelo.sql @@ -0,0 +1,439 @@ +create schema picpay; + +CREATE TABLE IF NOT EXISTS picpay.users ( + ID varchar(255) CONSTRAINT ID PRIMARY KEY, + NOME varchar(255), + USERNAME varchar(255) +); + +CREATE TABLE IF NOT EXISTS PICPAY.PRIORIDADE1 ( + ID VARCHAR(255) PRIMARY KEY REFERENCES picpay.users(ID) +); + +CREATE TABLE IF NOT EXISTS PICPAY.PRIORIDADE2 ( + ID VARCHAR(255) PRIMARY KEY REFERENCES picpay.users(ID) +); + +COPY picpay.users(id, nome, username) +FROM '/tmp/users.csv' DELIMITER ',' CSV HEADER; + +INSERT INTO picpay.prioridade1 +VALUES +('fba0be35-7111-43c5-8111-b326360da4d0'), +('7354ff5e-cc72-4cc7-a8d0-279f3349c52b'), +('4096545a-3d93-476d-9a25-ae486a12a720'), +('c9a749fb-2213-47a7-b56d-ebcad7f02bdf'), +('328edd8c-5a54-453a-a9a8-694a4d46e898'), +('1bec9b05-3641-4fe5-8d6f-43835dbafc47'), +('d542a5b1-fb3b-44c7-92d0-64b89565a93e'), +('f7754e98-121d-447f-80c7-a246b1250141'), +('c0c9aa83-ddc4-4088-84ba-095402ea7f16'), +('ceaa2306-41c1-413d-875f-e99bc2e908be'), +('8f065ff7-6fb7-4373-9fb4-3e5daa7d802e'), +('c72710fb-0a47-4c0f-b906-1abe3da9c4ef'), +('277c3e15-c275-4f6c-8345-f2010c58bfac'), +('add2607d-6ada-44c9-a89a-eecc5c225c4f'), +('1a2093a9-0bdb-43c7-acf3-f2d2decb9f25'), +('766c9e3e-5baf-40ac-9455-db6f55dec9e5'), +('636b8bac-2d38-4a59-acdf-14fa4f165d31'), +('8f934250-2d8e-4f2e-a316-d0bbc177cfb8'), +('7d30aad3-ea80-400f-878f-130f2944695a'), +('049dc170-b13f-41bd-b822-6889a3619c91'), +('230b6cd8-7463-424a-b5f5-e3c181a870bc'), +('99b1705c-f1c6-4535-bf22-da2d541c797c'), +('4bc2fb42-7610-47e2-8574-0e7ef9bc6503'), +('2943dfeb-6542-4269-86d9-ce3d97f99c5b'), +('a30e39fb-7684-4886-8247-09cda8c7a469'), +('05815a4b-1571-48c0-80d7-ab290e69b767'), +('f8f92179-d36a-4c37-9c15-72af4a7932eb'), +('a8a2ffa7-c7ee-4747-af94-bafc453ee6e5'), +('e83736a1-a908-46e8-b235-987c8e261cd4'), +('3a03df17-1153-435f-8bf9-904b27faae46'), +('9758d6c4-40dc-4138-8b1a-ef999cf1c540'), +('ef108646-a30c-495f-ab32-0ac1052c57fe'), +('4217eb38-f6b2-48c5-bf25-3ca8a9462385'), +('52f3cd9f-f01b-46ed-8bb4-dde64028da06'), +('7a880f89-d2e6-4fa2-b377-a559d25e516c'), +('af2b0d62-748d-40e7-ad6a-77c7872d59fc'), +('f4b9b827-8221-436b-adaa-3115aec3c26b'), +('6d81db15-2f3f-4122-9ae8-1c2dc1350e60'), +('2923fdfe-9455-4758-9225-08abd60b6a58'), +('1b658968-2326-4532-a3c6-df59815a3a4b'), +('e84a504b-29fc-48fe-aed7-95bca464d1c1'), +('c475c9ae-e561-4bc2-a719-6c6f0c1fa2dc'), +('0bea8a99-f178-4cfe-9170-6ee1620a2720'), +('7fb422d3-965c-4dfd-946c-aa76b393e2f3'), +('805015db-9eaa-44fa-be36-c01099f2025c'), +('3173ca97-7ee8-4001-a4f3-234e5a541679'), +('874134ce-a930-40fb-8a6e-8614af78fccd'), +('cbb5586d-a3ae-4d74-b373-6cc273a797a6'), +('c7727e41-13c2-42fa-b388-3ade3eac53dd'), +('960b225c-48d4-413a-8584-f71163cb4f98'), +('cb8080d9-eafb-4261-ab5e-ba0a4b7b4c50'), +('0a28b0ca-73c0-40b7-9502-e685ba47a6f4'), +('b3954c82-05db-4016-a2d3-38ac632477f7'), +('24630f58-5d96-42d6-bc9f-8fb90007bfbc'), +('c3908d8d-c76b-4ee1-8210-6f141a3dc852'), +('40d76306-6824-498e-9b9c-88369a539cde'), +('706f761f-f847-4e6f-a057-92b7d293ab40'), +('6a63b532-7b1d-468a-90f6-bbb48546f581'), +('30904389-92c8-4711-8eb7-ba0e8c7dc220'), +('bfc1fde7-731a-4cbd-a9e8-3d05a8a3d155'), +('70e4208d-1d45-450c-873a-5cd445b7c792'), +('b0a8d02a-2f18-43ad-948c-8cff49bede40'), +('adcf617b-333e-4e72-9155-a51b0c6ed2bd'), +('a84cef6c-54f6-4dc6-b4f4-afb35fed1923'), +('128af6cc-a7db-4a62-90c4-889848cd3c06'), +('2f423f40-dbbb-45fc-9f89-79b891838c6c'), +('24d9f7b5-9419-443c-8a4d-8a7334aebe90'), +('714effca-4ddb-4f23-a28c-10359e17e6ac'), +('5a0c015b-4c23-44bb-9cea-00b32c40481b'), +('20276d68-7ad6-4dc6-beeb-c0520650a66f'), +('b4d231c3-18ca-41dd-b73e-37f536988fc1'), +('ebd96f97-f4a6-41e6-9f8a-96a060a73b74'), +('ce8887b4-317a-4975-9857-46e40bd1657d'), +('de7bc1f1-039a-49ca-afda-7a3a5d4bfe02'), +('2427ffe5-479c-49de-8a47-1644fae77ca5'), +('a7d48fe0-a037-4230-a546-3fe804b245a4'), +('cd4491ef-89f5-4e9c-ad4c-76f9d3ead1f8'), +('5dd17a55-7233-4ad7-bdb1-61bc8a27ab7e'), +('ff1adc5d-c411-4c9e-9d8b-26cebd17e7be'), +('e9f6340f-1327-49d5-8bcf-43646e6c2194'), +('45868a33-058c-41b8-9a23-b23253ae6216'), +('2a43e34f-1afc-4610-8f99-f58a3cf19631'), +('0252ce83-b1e7-4d1e-ac4b-b0322dfdaead'), +('a3f77b6e-9170-409b-921a-0b2c2894c296'), +('a4079877-a08d-4db3-80cc-fe23cb90b10a'), +('a4312fa0-860f-44a2-b4ba-3026714cd72f'), +('189453fc-011b-4ea4-a964-f2b0479e1ce6'), +('27128444-55d4-4aff-8c74-bded3563a8dc'), +('a596bc4d-a0cd-4607-ae64-61d3c043ccdf'), +('7f58ae38-adfa-4b4e-9f42-b4f9ff448255'), +('3c1bc731-f7cb-46a1-b90a-47eea1f80623'), +('0c00d00f-4183-4c17-b6cf-fa41420c86af'), +('d6f6ec2b-6d24-4e6b-8591-87725c380e6c'), +('9202652f-1b29-42a0-b3f6-b607045e7d4a'), +('152bfd83-88a3-4786-95d5-a7b263fa4449'), +('bcdd8bd7-7967-4ac0-ad10-eb67e5c3238e'), +('55a8afd7-50b5-48b4-8287-8f22d8ef0a65'), +('a0cd9cb6-288b-4fd3-bc14-54fac89755e8'), +('0a92a468-79ff-4334-94db-d5212ec515da'), +('156ed6eb-7777-4b85-8516-fabce190921d'), +('632b0f74-5ada-408c-85c4-7b127683b954'), +('3403fc1a-9560-41db-84d1-ffb337e73aa3'), +('f2effce6-7c1d-4b70-842d-f39ace03972e'), +('10f54225-07af-4c04-bb0f-c4d25bc4ce4b'), +('ad9be504-26f3-4d08-95aa-c2cc26869a26'), +('64894fc5-2dc3-4311-86a4-917d9068fa75'), +('64bb9706-4d5f-4b61-9167-e0ee0bf2c51f'); + +INSERT INTO picpay.prioridade2 +VALUES +('a6a80da2-de32-48ed-b131-cd1f922d7cfa'), +('e8ce0d26-08da-4b04-8f66-bec320b72b99'), +('55b4575a-c02f-4c7a-8811-a8ee30a5f597'), +('de730e99-c6a8-47af-9904-bfbaf5c1581c'), +('ea9d2d2c-6f3c-42aa-be87-c5df99caf3d0'), +('cb627c9c-344a-4b10-b83f-39323912beda'), +('98a58620-390b-4c12-be56-34acf9ff1884'), +('80d41c6f-e231-4d36-8225-f93029226e82'), +('329cde61-af32-400e-856e-d310f27d785f'), +('2d2e57f3-5553-4968-8f69-1d4a4642e21c'), +('4154c7af-64ae-4de0-827e-1e366ceb06fe'), +('c4d43627-53df-432f-85c1-01705d71071e'), +('389b926e-9b0a-4ec3-8de5-a887b84793fa'), +('4c3d45cb-fbaf-4781-ab53-ce98b55f6714'), +('46983191-3efe-4b94-bccd-6d6f411c02d0'), +('c51f4734-6e30-456b-8f75-086c3437e578'), +('b695c5a6-6ae0-46b9-a48f-6e8f27a160a1'), +('f142b48b-ea21-437a-ae4f-cdd75fbc3b8a'), +('af98d04a-6f50-4192-941f-490c21f76158'), +('0911698b-2753-47d9-9513-3993b5d04e33'), +('c3e6ac87-0301-40e3-b54f-22c6c3990fb3'), +('3c97ab03-0acc-49d8-b26a-96533de3718f'), +('f1c01392-84e0-4dc5-9ab5-cf66c94f5b0f'), +('669a1345-6d8c-428e-8eed-af1e989942fa'), +('252b7528-c8ee-4c73-be56-0cf2e30eedc5'), +('1970802a-90ce-4e76-901e-94ca346f1e47'), +('934086ee-0ed3-492c-b455-66af01befd43'), +('6326df59-5acc-4323-8080-c99a2cca668e'), +('4bec5e4b-83c7-4dfe-a406-c020ad88e752'), +('5dda7d1c-0e95-43a7-9dc2-11008c53ae01'), +('367d5e0c-cfb9-4431-be5b-22fdf6c4c23a'), +('3697a2c2-f3e5-4001-8c54-9f4047ff75d5'), +('286e35d7-6731-46d4-8364-371729782704'), +('860768c0-b5f3-46c5-bb1b-2c462ca6db34'), +('365df9cc-062e-485b-ba8a-cc708cbed4ff'), +('7240d2a9-ba4e-4d0b-842c-d51762e67308'), +('47d81586-4026-4793-bcf1-0244328dad04'), +('9b559f2a-bb07-4a44-aa5c-5bd6fe12ede2'), +('b0db3f6a-c012-45e6-a601-6861adc46f9b'), +('cc504a00-6b6e-4431-80a4-d8ee34afd0c5'), +('387dbdf0-9509-4785-ab5a-57b1fcc17564'), +('dd0f60f0-ca01-4512-b782-66f18979b14a'), +('8020a295-553b-4cd3-82e5-18bef53b2137'), +('99b1c71f-a9e6-43ee-8a6c-6daf1cbd6819'), +('26c37802-1a41-4f33-8d66-1b8c779e12b3'), +('02f903f3-9fb7-45ed-9c49-cf92634088cf'), +('4a872afa-653a-40aa-958e-40b0e6e1e055'), +('aa72ca86-d4ce-4b65-9a9e-439ac64feca2'), +('6306ea46-9cec-4f66-8277-09c15f85bca3'), +('6238db81-8f61-4b5e-8294-71e210f7e424'), +('9c138ccc-ecc5-40dc-8269-11e9f676e45e'), +('02014677-032f-48eb-89a9-6e0a4074fa50'), +('55dc062b-22c3-4cf3-8d0b-a6b97c97970a'), +('460fe931-8835-443a-8a9f-c9f6ced9665b'), +('136381a0-78f8-4d73-aa94-55893cc7bede'), +('223797ef-56a9-43c9-ac7b-29e4c721fd4f'), +('d54d03cd-d164-4f13-8f2a-defa9fec031f'), +('8c3f73db-4cb7-4e51-a24b-9b2644278d06'), +('487bd2b3-f7de-45d2-8c49-b9bd7f2e25ef'), +('b84ee64d-2f80-43a8-9d19-7b69e8907b9c'), +('06fafc64-67a5-4452-ace7-a951ab849b77'), +('6093869b-2675-4b91-88f9-41c0e690584f'), +('361b190f-2a5e-449c-a235-91cc7715afca'), +('61dcdc8e-6e45-480a-9af4-2bf686899680'), +('fe24c279-dc07-4389-9fea-97cea22ea42f'), +('9122471e-7da8-427d-96e9-e560d4bee6b6'), +('6cc718bc-a3cb-4015-b685-72aa1f2a36fe'), +('ed776d02-4f38-45f2-bd72-de09c5098729'), +('64cf7ba5-0256-42ad-998b-8135849226b8'), +('3c2318f5-48f9-4d5f-b334-12330080f5f6'), +('57e3d315-1373-452e-832f-fcbce5184600'), +('cc214ff7-6e3e-4820-9b73-ca20da69bd94'), +('293db107-5536-40ea-b8d9-dfb9244f4500'), +('c042df02-e315-49c8-993a-025261821f7c'), +('787722ad-965c-412c-9a5c-5839059c79eb'), +('14082775-408e-4e00-a038-08fdb02a8036'), +('404a3495-3908-4528-92e3-7dfa97732902'), +('6a4a8ac3-c6d2-4d84-8255-3c4bf8ad755e'), +('df536db6-1f84-45cb-95a4-86cb6665383c'), +('749af096-cae9-4c2b-a5c2-1453dd19a980'), +('0e5fa699-a7cb-46e9-a133-8e945656d509'), +('c24d78c7-ed7e-49dc-9e62-71b5b582ac65'), +('4bb1e65c-412c-4f1a-92bf-c30cc07ff197'), +('66531019-3a18-4e61-86ec-0919337f97c5'), +('4ee7a795-0eeb-45e0-b67f-4e7a27ae18f6'), +('a0a9fb37-662c-4ad3-969b-8a949a164b0d'), +('c3c4f5d1-d3c1-423f-89b2-352a6de3009e'), +('73eb6848-744e-4738-a4fc-f49b7ae67745'), +('1ca054b9-a8a5-4f0a-ae0e-64f29dc2df2d'), +('6203aa39-5ee7-4469-9bd3-a825f904c8c0'), +('ebe22f7b-e718-41af-8a5b-e6e5c22e5998'), +('77dfb4db-336e-4d5d-b589-a8e79d8e0f56'), +('e2b7ca87-b351-4759-a727-64ccdbf96c00'), +('c1a08f8b-6daf-4e36-86ef-a4489ecf0adb'), +('ebc748f9-6a08-46a1-81ba-bf6b35d7ee6b'), +('357c27f1-dec6-48dc-bfaa-befe051b40f9'), +('520d1eaa-6572-4749-ad2b-a459cb709849'), +('202e119f-fdd7-4bda-9e78-55879cfc10a7'), +('2b7e71ee-8cb1-4888-b56f-89a925551358'), +('b8c5b054-e501-4240-9c12-5f41c194f278'), +('36958e6c-4d4a-4c0b-841c-a9a6b1b1ae17'), +('fa0234fb-840d-4cd7-b723-a72121b53716'), +('7c0758e4-d7e3-440a-8ed0-a090b120a06d'), +('65c34357-5801-4f73-b596-c78b08a791c5'), +('a92fa490-dba9-4d31-98b5-1f3d6fb93975'), +('35de4172-fccb-4f71-9f42-f6df1972ae6e'), +('32d1178b-ee98-4391-b6cf-00027ed9b934'), +('e1622cb3-4574-4085-adb0-57113807e33a'), +('995f6323-a880-44a7-a756-6b47cbf9d147'), +('0160e03d-3030-4e23-8785-298b01a6656a'), +('c3bb8b2d-433d-41b0-a935-83ea4977789c'), +('c259fab3-60c5-457c-86b6-a6714def01d7'), +('6ba4a2e5-bfdc-481d-90e7-c8875a997d28'), +('1bc95188-e843-45e7-b4a1-71aee29d864d'), +('27d9c917-21ae-4edb-bb94-3321c583428d'), +('77ae4daa-6c2f-4064-b251-88279b82b577'), +('8b42abce-bc5e-45e1-a8d8-a041ca0cf33d'), +('05931d60-7301-4e93-aab6-45ef34006721'), +('449bcd35-f2c4-4211-91bd-2010a3968a47'), +('99c80098-66ad-4966-a17f-5e65a75da4e8'), +('fc23472e-9af8-418e-b0f7-bc0964a7dd4b'), +('46bec514-0b97-4a1d-8a3c-b4d15b4f8209'), +('c8c43388-96be-4e9b-bf6a-774170f991e5'), +('d4fa2a5f-408e-48a7-9490-c5bd4382e8fe'), +('dec5699a-17f7-4e5c-a9bd-f724e257ebd6'), +('c48ec50d-fe5a-4c67-a366-a49b2ea4b1ca'), +('0c129140-b6e8-4314-b9e5-041b7072d583'), +('9e31a4b7-257e-48d2-a62c-db15b029282d'), +('b186cc91-0449-4caf-a31c-f964c0ae68e8'), +('6a4c60a4-8674-469f-8c3a-8700b67733ee'), +('26dedf2f-0f03-450b-99be-2df1f6aaebf8'), +('95f59c19-be83-46a5-abea-4a7bd014477f'), +('7f4e9dbd-8200-468e-9500-74ada2728678'), +('1f376047-7212-47f2-91a4-53bccbce0787'), +('c21ab96f-856c-4601-9862-faed92c88b44'), +('770f9a0c-3cb2-4f29-a590-26f47fd4bec2'), +('b472de54-5b43-4c61-a1a9-3080b8801c4d'), +('1aa1c271-a7cc-4909-9446-ea0fa9d3493a'), +('21243674-ccdc-45e3-81c7-d6d60da984c4'), +('a53c363e-0bd7-41e4-a5e6-a648be5ef6a1'), +('621e99e0-fa21-47bd-9051-a096b6a891ab'), +('ebc3510f-a01b-44a0-9a20-ca759c6c28d6'), +('795c69ed-fc7d-442c-bb7b-2a4335422fde'), +('0fb90986-3a38-485c-ba52-617bc2a58030'), +('aa9c304d-7862-4fe0-a8c0-14f3d26005bb'), +('67dae8e1-239c-4d0b-9375-9506707d7db8'), +('050e5fe5-6650-4ed7-9bd1-c5fae8af21ca'), +('5f807341-a460-4b36-ad22-d57f249ddbb0'), +('6be92eb1-f10a-4c89-b2cf-2cf1a512b529'), +('328852e4-fed1-4646-bc1b-38ef9508cd4d'), +('061c4f03-7dfe-44e6-860c-72aa5440aea4'), +('2890d2d4-9182-42e7-8e5e-2715688ebf11'), +('fafa2ad2-8ca5-44ca-9ebf-be9b7e5aae03'), +('8e94128e-49bb-43d4-b414-de93f6871fe8'), +('a73f8976-f1a8-4989-ab89-19235acaebb5'), +('54e0d9e9-efae-46e1-bd44-3090b3cc0add'), +('d411cd8d-c449-42fb-8040-a8a794c07b6a'), +('d0382606-bc22-4ca8-948a-bbe06976d378'), +('20ebe517-29f1-410b-9b66-7ee90081edc2'), +('66730e7d-267a-4aba-98b6-f765975d5c26'), +('79e4cdc0-d33d-494e-b468-37ffe998131b'), +('3235a26b-d787-458e-a954-4a0320a9581f'), +('44735197-1fd5-4298-b75c-33805b94a2b7'), +('b6c37409-d480-47f4-aa8f-fdab32e0e906'), +('82031ed6-b2bb-477d-b61f-6e3c53924e6a'), +('7aeed43a-4efd-4b49-8cab-43456632a24b'), +('46b94093-e69b-44ae-ab6f-80f945ddadd5'), +('2ad0940b-fea7-43c7-8667-969ae34c749a'), +('c4499f56-3a69-47b8-9795-fbb7cb6795a9'), +('ace397f1-568b-4c07-8b7d-04faef5f3e14'), +('32773547-767d-49cc-a668-bd3822c1c25d'), +('890eac67-4a71-47e3-93bb-8fdbb56254f1'), +('0c2af121-5c9a-42e7-af68-7a4e1e00f882'), +('a731a7e9-d67f-4c3e-90f6-5569b3d950ea'), +('fe7ce910-0e8f-43e5-ae22-93aaf692f35c'), +('3a6bcd06-6568-4510-9bc6-878ed36e9178'), +('c8f45582-52b0-4808-9450-0f3eb9476bec'), +('13e3ff5e-c460-4111-871f-e40bb1e0ee9b'), +('04613a0c-7a26-4167-8161-419e1b196447'), +('d70d0f7f-9fb5-46e6-aaf9-15b5c084367d'), +('56ee5fa6-da30-47e8-9b5c-196ccfeefe7a'), +('8cc06d65-899c-4862-a6f5-ed70d83eded8'), +('b547d482-389e-411b-b392-8bb875f7f81f'), +('a1d89008-4c0e-415c-befb-1eb24376bae5'), +('c7db775a-9f7a-4976-8251-c27e05e9013c'), +('1937ab75-601a-4133-837a-ece4266bf539'), +('eec187df-e560-4311-ba35-428a564a5169'), +('2245b578-9062-412a-977a-f6f58d572522'), +('c7c8d1df-6c34-4481-ae65-b20913f51dcd'), +('2f624fbe-7526-4162-8753-44f813ba2f0c'), +('2afc4cf9-f6fc-4920-8990-f4d40974b515'), +('3edb184d-a685-430c-84c5-936f7c879803'), +('28d779af-c51e-4168-888e-4be0a1b10c48'), +('a5716c26-4bf6-4397-ae62-3cece051f100'), +('8fc4589f-b821-4b2d-b00a-9831f22bafe8'), +('c359786d-1f3b-4064-b430-6b6184a59708'), +('0f59d0c5-147a-44a6-93d0-d659c895391e'), +('16e4d481-09d5-4163-aeda-4048924b3a53'), +('a2a2dc75-59dd-47f7-8bbe-51d2de12d69d'), +('0d7b2db3-176d-46f0-9356-4682965f2b80'), +('3a3137c8-08c5-4654-a867-09f6a891554d'), +('780640aa-12b5-4ef2-b9ab-d64df6142d5c'), +('df5b1b98-f3a9-4002-9505-ef758df49e0b'), +('49e6f375-3acd-4de8-ab42-1c308aa0af09'), +('eaffcbba-9537-42c7-b854-df39bc97cb77'), +('2252e7c0-2e06-4ca8-b651-3157bf1a33c6'), +('109320ab-daa9-43e8-b84e-09be36ad8d87'), +('48a42495-afce-4696-87d0-5b76b78dbbe5'), +('86db546d-dfa3-4643-a77b-a53b2a7a55b0'), +('b99caaff-5499-4d2a-b40f-67d5ec16ea23'), +('c6c19088-3784-426a-8f0d-7acf3a848977'), +('06a86f0e-dd6e-46d2-b980-27af0fc75e72'), +('52eef971-d447-493c-8768-71b6dded88ee'), +('cf401e32-f9c1-4009-8f6c-b0b738991886'), +('1777130b-e03c-4a6a-af24-a378a28048ef'), +('9d00d4d0-d5f5-4fe8-81fa-9f2d71c56656'), +('3c80ad2c-53c7-4c9d-ad64-b8a9e1c922db'), +('73861d9c-cafd-45a3-b057-cfe4e94efa0d'), +('ebe90236-ba84-4ca3-b2a1-0b168e9f1dbd'), +('e13fc9ad-0340-4c98-b99e-e353b194e920'), +('d0e4de3f-2bb0-429c-b1dd-4eebe9fd7df7'), +('12f6f8bd-925e-4944-8ec9-754d300c6bb6'), +('30e80def-c31d-4705-aa07-b54b3643a99e'), +('bb260e4c-ecc1-4bcc-b278-c6f4af318f90'), +('b7aa01f5-bdf1-4433-80e9-75eb28fa698d'), +('2523bcce-696d-42d6-8b82-1f96e268d230'), +('7d85cd83-f3b6-4035-9f52-303d2c4f79e6'), +('59be63a5-3078-4a8d-aec0-e40047060d4b'), +('7e3ab6f4-eb02-491b-8715-48302c93bad1'), +('252bc161-205d-4c0f-a243-1fc66165d316'), +('9855fc79-1a55-4337-a7a3-3f63323f3aaa'), +('ec9037e9-d8fd-450b-aa6e-84daf8c455b1'), +('d405b166-2de7-4575-86f2-276cca0a763d'), +('d783cdef-c55f-45d0-8691-c6511fa3e544'), +('2c647d96-0374-4970-ab4a-3ff0ca89cf9d'), +('4a7fd2d3-7bd8-4ae4-880e-3617f8f175b3'), +('3ea8322d-f6b9-4a05-a219-f00499407c5b'), +('1290ea16-8fb8-4dbf-b7fb-0a436df779f9'), +('abdf4f0d-9165-4e68-bd44-485428da9fc4'), +('dab6a718-03ef-4167-9e19-ae61c5334a29'), +('66886f32-c31b-49d5-928b-12a63c10549d'), +('77953b62-b100-42f1-93b3-59e71514f441'), +('22ab94ce-b8e2-403e-8441-5be79687e2c7'), +('500b8ff5-4bb6-4c21-af1b-cbfcfa518e95'), +('008d55f7-4cef-4ce1-8709-3f83c8bbcfeb'), +('8a79f5c7-d693-4739-9f76-b30d62fc9954'), +('a6648e48-ce72-4fb4-9bab-e54fcd7f4d42'), +('0bb34b3a-2b5a-4b04-8aaa-09f6b584f767'), +('67e12fcd-e1be-4dda-802d-470642dd71e9'), +('97fecef8-18c4-42f9-92c9-d525d27292f0'), +('4c2c8c93-45b2-4b26-8b9a-11f015feee09'), +('51f25713-7a45-4049-9f3a-82db9226e0c5'), +('c9842fae-755f-4bf3-826a-726735049950'), +('0c6ef4f6-bfdd-486a-949a-38ae02f7fb91'), +('e143a3c3-e4fc-4e13-85c6-21c3493b3bbd'), +('7798f429-c59c-4f10-bc59-85656ccaa0bf'), +('0cbcd046-0099-4883-b0ae-75d05e30a1fa'), +('55565b96-27d5-4234-97d0-2f2633b80157'), +('cd9a3fae-74fc-4389-91a1-c6142588aa40'), +('bdcc6177-5217-4e3d-83d1-592e86195021'), +('02bbc288-f190-48e2-8b62-8fc2f88f2c61'), +('51b10cbf-6cb5-4ac5-99d7-0e52085857c5'), +('4d933bd3-4202-4376-8f85-6eebd23af668'), +('b4e82b1c-1d4b-444b-8e18-2e0073880de0'), +('76ecd4d1-dad5-4a00-adaf-47d9240df6ca'), +('f30ca053-a1ae-46ac-80bb-8a6ea56eaf22'), +('aa13fda7-7833-4302-8bd7-64fea17d7b6e'), +('a795ac7b-e2f1-4e88-ba00-40a8157ed806'), +('c034eae7-9a36-4d5d-87b6-9e64285deee2'), +('36212d74-9d6c-42f0-8307-ea94b8d6a504'), +('2d70a50f-d4ee-4bf2-8301-73c655f4faec'), +('52151f53-8a06-4a3b-b1bf-231cf41bbe9b'), +('a1aaefac-f42c-493e-8116-34be9ec60f3f'), +('38d89476-cdaf-4a7a-9ccc-72903d88cb23'), +('c2d547c0-02a8-417b-97e0-0bd2566362a9'), +('db94d39d-c703-4651-a29f-d4ac08938f07'), +('4d36aed7-a353-44c2-b4f4-6e50cc5f2da2'), +('418e44e8-f7bd-4348-90c2-fb44086bf6ae'), +('91cc59a6-ecb2-4009-86e1-e796c8b03165'), +('4e72fe55-e77a-4b12-ae1f-b88c8916f515'), +('a71e2d09-ee44-44d2-82dc-e3b0b36a4f23'), +('701d8d22-e251-4481-a88e-a6b229e9e547'), +('7e2f5732-8c0f-4de7-8cb5-d49a37b5f053'), +('603c2b8b-a1b8-4980-a0f2-8b9b2ce4bc32'), +('7033f59d-e2b1-4e4e-91e8-2e9fe4e6b086'), +('a7337c93-4230-48c3-8c3c-25aaa425b725'), +('18072a9e-4e6b-4c79-8604-6a681fc2a00b'), +('f56b092f-724a-4c82-a62e-8a9665ce7260'), +('c0fd8dad-54a9-43e4-8958-8150780c150a'), +('44623059-9b7e-4258-9796-75258267f804'), +('0b7fdff0-388e-419d-80aa-abfaa19398a9'), +('f4a02a4e-1146-4dd0-8bc2-f007740b33d7'), +('0b83778a-eada-46ed-be7d-d20a2caa8a99'), +('911fc945-0b68-48f2-9516-87ab84205f45'), +('d58aba9f-398f-492a-93fb-c69a33a7130c'), +('b4222ec0-2692-4a29-8bf9-28b5c477ca42'), +('b6d811a8-729c-41c8-8b72-4e16c485de90'), +('36c6873d-c9c9-4a26-841e-bb9a3b77e510'), +('2dd5bdbe-71de-4ae7-b3ce-15e2f26256c3'), +('a13264cd-f234-49ae-89d8-0ca3055ced07'), +('63e924af-3aa6-4db0-8402-932a74fabafa'), +('2c1ac0d2-b796-4c23-9f6c-e86bb546bed3'), +('3280898a-d58f-4707-82ec-4c4b2f2cb8c5'), +('056d324e-cf2d-4e7d-93fe-17401383d9ee'), +('e5e1f9bf-628a-4a16-be50-82100d10c745'), +('b2b14b84-6bdc-4a54-81e7-5fbe25f2c41b'), +('919d269c-09f4-4ec3-971a-00433bec409f'), +('8fab32b1-d575-405e-bdb7-8ac0cc3cb886'); diff --git a/src/main/java/br/com/apiresttestpicpay/model/Prioridade1.java b/src/main/java/br/com/apiresttestpicpay/model/Prioridade1.java new file mode 100644 index 000000000..54ca08e02 --- /dev/null +++ b/src/main/java/br/com/apiresttestpicpay/model/Prioridade1.java @@ -0,0 +1,96 @@ +/* + * 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.apiresttestpicpay.model; + +import java.io.Serializable; +import java.util.Objects; +import javax.persistence.Basic; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.NamedQueries; +import javax.persistence.NamedQuery; +import javax.persistence.OneToOne; +import javax.persistence.Table; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import javax.xml.bind.annotation.XmlRootElement; + +/** + * + * @author rsilva + */ +@Entity +@Table(name = "prioridade1") +@XmlRootElement +@NamedQueries({ + @NamedQuery(name = "Prioridade1.findAll", query = "SELECT p FROM Prioridade1 p") + , @NamedQuery(name = "Prioridade1.findById", query = "SELECT p FROM Prioridade1 p WHERE p.id = :id")}) +public class Prioridade1 implements Serializable { + + private static final long serialVersionUID = 1L; + @Id + @Basic(optional = false) + @NotNull + @Size(min = 1, max = 255) + @Column(name = "id") + private String id; + @JoinColumn(name = "id", referencedColumnName = "id", insertable = false, updatable = false) + @OneToOne(optional = false) + private Users users; + + public Prioridade1() { + } + + public Prioridade1(String id) { + this.id = id; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public Users getUsers() { + return users; + } + + public void setUsers(Users users) { + this.users = users; + } + + @Override + public int hashCode() { + int hash = 0; + hash += (id != null ? id.hashCode() : 0); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final Prioridade1 other = (Prioridade1) obj; + return Objects.equals(this.id, other.id); + } + + @Override + public String toString() { + return "br.com.apiresttestpicpay.model.Prioridade1[ id=" + id + " ]"; + } + +} diff --git a/src/main/java/br/com/apiresttestpicpay/model/Prioridade2.java b/src/main/java/br/com/apiresttestpicpay/model/Prioridade2.java new file mode 100644 index 000000000..cd3246e37 --- /dev/null +++ b/src/main/java/br/com/apiresttestpicpay/model/Prioridade2.java @@ -0,0 +1,96 @@ +/* + * 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.apiresttestpicpay.model; + +import java.io.Serializable; +import java.util.Objects; +import javax.persistence.Basic; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.NamedQueries; +import javax.persistence.NamedQuery; +import javax.persistence.OneToOne; +import javax.persistence.Table; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import javax.xml.bind.annotation.XmlRootElement; + +/** + * + * @author rsilva + */ +@Entity +@Table(name = "prioridade2") +@XmlRootElement +@NamedQueries({ + @NamedQuery(name = "Prioridade2.findAll", query = "SELECT p FROM Prioridade2 p") + , @NamedQuery(name = "Prioridade2.findById", query = "SELECT p FROM Prioridade2 p WHERE p.id = :id")}) +public class Prioridade2 implements Serializable { + + private static final long serialVersionUID = 1L; + @Id + @Basic(optional = false) + @NotNull + @Size(min = 1, max = 255) + @Column(name = "id") + private String id; + @JoinColumn(name = "id", referencedColumnName = "id", insertable = false, updatable = false) + @OneToOne(optional = false) + private Users users; + + public Prioridade2() { + } + + public Prioridade2(String id) { + this.id = id; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public Users getUsers() { + return users; + } + + public void setUsers(Users users) { + this.users = users; + } + + @Override + public int hashCode() { + int hash = 0; + hash += (id != null ? id.hashCode() : 0); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final Prioridade2 other = (Prioridade2) obj; + return Objects.equals(this.id, other.id); + } + + @Override + public String toString() { + return "br.com.apiresttestpicpay.model.Prioridade2[ id=" + id + " ]"; + } + +} diff --git a/src/main/java/br/com/apiresttestpicpay/model/Users.java b/src/main/java/br/com/apiresttestpicpay/model/Users.java new file mode 100644 index 000000000..0194d34e3 --- /dev/null +++ b/src/main/java/br/com/apiresttestpicpay/model/Users.java @@ -0,0 +1,154 @@ +/* + * 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.apiresttestpicpay.model; + +import com.google.gson.annotations.Expose; +import java.io.Serializable; +import java.util.Objects; +import javax.persistence.Basic; +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.NamedQueries; +import javax.persistence.NamedQuery; +import javax.persistence.OneToOne; +import javax.persistence.Table; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import javax.xml.bind.annotation.XmlRootElement; + +/** + * + * @author rsilva + */ +@Entity +@Table(name = "users") +@XmlRootElement +@NamedQueries({ + @NamedQuery(name = "Users.findAll", query = "SELECT u FROM Users u") + , @NamedQuery(name = "Users.findById", query = "SELECT u FROM Users u WHERE u.id = :id") + , @NamedQuery(name = "Users.findByNome", query = "SELECT u FROM Users u WHERE u.nome = :nome") + , @NamedQuery(name = "Users.findByUsername", query = "SELECT u FROM Users u WHERE u.username = :username")}) +public class Users implements Serializable, Comparable { + + private static final long serialVersionUID = 1L; + @Id + @Basic(optional = false) + @NotNull + @Size(min = 1, max = 255) + @Column(name = "id") + @Expose + private String id; + @Size(max = 255) + @Column(name = "nome") + @Expose + private String nome; + @Size(max = 255) + @Column(name = "username") + @Expose + private String username; + @OneToOne(cascade = CascadeType.ALL, mappedBy = "users") + private Prioridade1 prioridade1; + @OneToOne(cascade = CascadeType.ALL, mappedBy = "users") + private Prioridade2 prioridade2; + + public Users() { + } + + public Users(String id) { + this.id = id; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getNome() { + return nome; + } + + public void setNome(String nome) { + this.nome = nome; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public Prioridade1 getPrioridade1() { + return prioridade1; + } + + public void setPrioridade1(Prioridade1 prioridade1) { + this.prioridade1 = prioridade1; + } + + public Prioridade2 getPrioridade2() { + return prioridade2; + } + + public void setPrioridade2(Prioridade2 prioridade2) { + this.prioridade2 = prioridade2; + } + + public boolean hasPrioridade1() { + return this.prioridade1 != null; + } + + public boolean hasPrioridade2() { + return this.prioridade2 != null; + } + + @Override + public int hashCode() { + int hash = 0; + hash += (id != null ? id.hashCode() : 0); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final Users other = (Users) obj; + return Objects.equals(this.id, other.id); + } + + @Override + public String toString() { + return "br.com.apiresttestpicpay.model.Users[ id=" + id + " ]"; + } + + @Override + public int compareTo(Users other) { + if (this.hasPrioridade1()) { + return 1; + } else { + if (this.hasPrioridade2()) { + return 0; + } else { + return -1; + } + } + } + +} diff --git a/src/main/java/br/com/apiresttestpicpay/model/Usuario.java b/src/main/java/br/com/apiresttestpicpay/model/Usuario.java new file mode 100644 index 000000000..f5ab072f7 --- /dev/null +++ b/src/main/java/br/com/apiresttestpicpay/model/Usuario.java @@ -0,0 +1,80 @@ +/* + * 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.apiresttestpicpay.model; + +import java.io.Serializable; +import java.util.Objects; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; + +/** + * + * @author rsilva + */ +@Entity(name = "users") +public class Usuario implements Serializable { + + private static final long serialVersionUID = 1L; + @Id + private String id; + @Column + private String nome; + @Column + private String username; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getNome() { + return nome; + } + + public void setNome(String nome) { + this.nome = nome; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + @Override + public int hashCode() { + int hash = 7; + return hash; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final Usuario other = (Usuario) obj; + return Objects.equals(this.id, other.id); + } + + + @Override + public String toString() { + return "br.com.apiresttestpicpay.model.Usuario[ id=" + id + " ]"; + } + +} diff --git a/src/main/java/br/com/apiresttestpicpay/service/EntityManagerProducer.java b/src/main/java/br/com/apiresttestpicpay/service/EntityManagerProducer.java new file mode 100644 index 000000000..b3053412f --- /dev/null +++ b/src/main/java/br/com/apiresttestpicpay/service/EntityManagerProducer.java @@ -0,0 +1,30 @@ +/* + * 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.apiresttestpicpay.service; + +import javax.enterprise.context.ApplicationScoped; +import javax.enterprise.context.RequestScoped; +import javax.enterprise.inject.Produces; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; + +/** + * + * @author guita + */ +@ApplicationScoped +public class EntityManagerProducer { + + @PersistenceContext(unitName="picpayPU") + private EntityManager entityManager; + + @Produces + @RequestScoped + public EntityManager getEntityManager() { + return entityManager; + } + +} diff --git a/src/main/java/br/com/apiresttestpicpay/service/UsersSrv.java b/src/main/java/br/com/apiresttestpicpay/service/UsersSrv.java new file mode 100644 index 000000000..d29d41bc7 --- /dev/null +++ b/src/main/java/br/com/apiresttestpicpay/service/UsersSrv.java @@ -0,0 +1,137 @@ +/* + * 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.apiresttestpicpay.service; + +import br.com.apiresttestpicpay.model.Prioridade1; +import br.com.apiresttestpicpay.model.Prioridade1_; +import br.com.apiresttestpicpay.model.Prioridade2; +import br.com.apiresttestpicpay.model.Prioridade2_; +import br.com.apiresttestpicpay.model.Users; +import br.com.apiresttestpicpay.model.Users_; +import java.io.Serializable; +import java.util.List; +import javax.ejb.Stateless; +import javax.inject.Inject; +import javax.persistence.EntityManager; +import javax.persistence.Query; +import javax.persistence.criteria.CriteriaBuilder; +import javax.persistence.criteria.CriteriaQuery; +import javax.persistence.criteria.Predicate; +import javax.persistence.criteria.Root; +import javax.persistence.criteria.Subquery; + +/** + * + * @author rsilva + */ +@Stateless +public class UsersSrv implements Serializable { + + @Inject + protected EntityManager em; + + public List findUsersEntities() { + return findUsersEntities(true, -1, -1, null); + } + + public List findUsersEntities(int maxResults, int firstResult, String term) { + return findUsersEntities(false, maxResults, firstResult, term); + } + + private List findUsersEntities(boolean all, int maxResults, int firstResult, String term) { + Query q = em.createQuery(createCriteria(term, false, true, false)); + if (!all) { + q.setMaxResults(maxResults); + q.setFirstResult(firstResult); + } + List resultQuery = q.getResultList(); + + if (resultQuery.size() < maxResults) { + q = em.createQuery(createCriteria(term, false, false, true)); + if (!all) { + q.setMaxResults(maxResults - resultQuery.size()); + q.setFirstResult(firstResult + resultQuery.size()); + } + resultQuery.addAll(q.getResultList()); + } + + if (resultQuery.size() < maxResults) { + q = em.createQuery(createCriteria(term, false, false, false)); + if (!all) { + q.setMaxResults(maxResults - resultQuery.size()); + q.setFirstResult(firstResult + resultQuery.size()); + } + resultQuery.addAll(q.getResultList()); + } + + return resultQuery; + } + + public Users findUsers(String id) { + return em.find(Users.class, id); + } + + public int getUsersCount(String term) { + Query q; + int count = 0; + + q = em.createQuery(createCriteria(term, true, true, false)); + count += ((Long) q.getSingleResult()).intValue(); + + q = em.createQuery(createCriteria(term, true, false, true)); + count += ((Long) q.getSingleResult()).intValue(); + + q = em.createQuery(createCriteria(term, true, false, false)); + count += ((Long) q.getSingleResult()).intValue(); + + return count; + } + + public CriteriaQuery createCriteria(String term, boolean count, boolean prio1, boolean prio2) { + CriteriaBuilder cb = em.getCriteriaBuilder(); + CriteriaQuery cq = cb.createQuery(); + + Root from = cq.from(Users.class); + + Subquery subQueryP1 = cq.subquery(Prioridade1.class); + Root fromP1 = subQueryP1.from(Prioridade1.class); + subQueryP1.select(fromP1); + subQueryP1.where(cb.and(cb.equal(from.get(Users_.id), fromP1.get(Prioridade1_.id)))); + + Subquery subQueryP2 = cq.subquery(Prioridade2.class); + Root fromP2 = subQueryP2.from(Prioridade2.class); + subQueryP2.select(fromP2); + subQueryP2.where(cb.and(cb.equal(from.get(Users_.id), fromP2.get(Prioridade2_.id)))); + + Predicate predicate = cb.and(); + if (term != null) { + predicate = cb.and(predicate, cb.like(from.get(Users_.nome), "%" + term + "%")); + predicate = cb.or(predicate, cb.like(from.get(Users_.username), "%" + term.toLowerCase().trim() + "%")); + } + if (prio1) { + predicate = cb.and(predicate, cb.exists(subQueryP1)); + } else { + predicate = cb.and(predicate, cb.not(cb.exists(subQueryP1))); + } + if (prio2) { + predicate = cb.and(predicate, cb.exists(subQueryP2)); + } else { + predicate = cb.and(predicate, cb.not(cb.exists(subQueryP2))); + } + + cq.where(predicate); + + if (count) { + cq.select(cb.count(from)); + } else { + cq.select(from); + cq.orderBy(cb.asc(from.get(Users_.prioridade1))).orderBy(cb.asc(from.get(Users_.prioridade2))).orderBy(cb.asc(from.get(Users_.nome))); + } + + return cq; + } + +} diff --git a/src/main/java/br/com/apiresttestpicpay/service/exceptions/IllegalOrphanException.java b/src/main/java/br/com/apiresttestpicpay/service/exceptions/IllegalOrphanException.java new file mode 100644 index 000000000..5cc87be4a --- /dev/null +++ b/src/main/java/br/com/apiresttestpicpay/service/exceptions/IllegalOrphanException.java @@ -0,0 +1,20 @@ +package br.com.apiresttestpicpay.service.exceptions; + +import java.util.ArrayList; +import java.util.List; + +public class IllegalOrphanException extends Exception { + private List messages; + public IllegalOrphanException(List messages) { + super((messages != null && messages.size() > 0 ? messages.get(0) : null)); + if (messages == null) { + this.messages = new ArrayList(); + } + else { + this.messages = messages; + } + } + public List getMessages() { + return messages; + } +} diff --git a/src/main/java/br/com/apiresttestpicpay/service/exceptions/NonexistentEntityException.java b/src/main/java/br/com/apiresttestpicpay/service/exceptions/NonexistentEntityException.java new file mode 100644 index 000000000..d01a189e8 --- /dev/null +++ b/src/main/java/br/com/apiresttestpicpay/service/exceptions/NonexistentEntityException.java @@ -0,0 +1,10 @@ +package br.com.apiresttestpicpay.service.exceptions; + +public class NonexistentEntityException extends Exception { + public NonexistentEntityException(String message, Throwable cause) { + super(message, cause); + } + public NonexistentEntityException(String message) { + super(message); + } +} diff --git a/src/main/java/br/com/apiresttestpicpay/service/exceptions/PreexistingEntityException.java b/src/main/java/br/com/apiresttestpicpay/service/exceptions/PreexistingEntityException.java new file mode 100644 index 000000000..d6c8afaf0 --- /dev/null +++ b/src/main/java/br/com/apiresttestpicpay/service/exceptions/PreexistingEntityException.java @@ -0,0 +1,10 @@ +package br.com.apiresttestpicpay.service.exceptions; + +public class PreexistingEntityException extends Exception { + public PreexistingEntityException(String message, Throwable cause) { + super(message, cause); + } + public PreexistingEntityException(String message) { + super(message); + } +} diff --git a/src/main/java/br/com/apiresttestpicpay/service/exceptions/RollbackFailureException.java b/src/main/java/br/com/apiresttestpicpay/service/exceptions/RollbackFailureException.java new file mode 100644 index 000000000..0b4e25363 --- /dev/null +++ b/src/main/java/br/com/apiresttestpicpay/service/exceptions/RollbackFailureException.java @@ -0,0 +1,10 @@ +package br.com.apiresttestpicpay.service.exceptions; + +public class RollbackFailureException extends Exception { + public RollbackFailureException(String message, Throwable cause) { + super(message, cause); + } + public RollbackFailureException(String message) { + super(message); + } +} diff --git a/src/main/java/br/com/apiresttestpicpay/ws/BuscaUsuarioRS.java b/src/main/java/br/com/apiresttestpicpay/ws/BuscaUsuarioRS.java new file mode 100644 index 000000000..f9d984b8b --- /dev/null +++ b/src/main/java/br/com/apiresttestpicpay/ws/BuscaUsuarioRS.java @@ -0,0 +1,139 @@ +/* + * 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.apiresttestpicpay.ws; + +import br.com.apiresttestpicpay.service.UsersSrv; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import java.math.BigDecimal; +import java.math.RoundingMode; +import javax.inject.Inject; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.UriInfo; +import javax.ws.rs.Produces; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.core.MediaType; + +/** + * REST Web Service + * + * @author rsilva + */ +@Path("buscaUsuario") +public class BuscaUsuarioRS { + + private static final int PAGE_SIZE = 15; + + @Context + private UriInfo context; + + @Inject + private UsersSrv service; + + private Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); + + private static final String JSON_MSG = "{\"Mensagem\": \"Nenhum registro para exibir!\" , \"uso\": \"buscaUsuario/[termo da busca]/[pagina]\" }"; + + /** + * Creates a new instance of BuscaUsuarioResource + */ + public BuscaUsuarioRS() { + } + + /** + * Retrieves representation of an instance of + br.com.apiresttestpicpay.ws.BuscaUsuarioRS + * + * @param term + * @param page + * @return an instance of java.lang.String + */ + @GET + @Path("{term}/{page}") + @Produces(MediaType.APPLICATION_JSON) + public String getJson1(@PathParam("term") String term, + @PathParam("page") int page) { + int count = service.getUsersCount(term); + + int firstAndPages[] = determineFirstByPage(count, page); + + StringBuilder json = new StringBuilder(""); + if (firstAndPages[0] + 1 > 0) { + json.append(gson.toJson(service.findUsersEntities(PAGE_SIZE, firstAndPages[0], term))); + insertHead(json, term, page, firstAndPages[1], count); + } else { + json.append(JSON_MSG); + } + + return json.toString(); + } + + @GET + @Path("{term}") + @Produces(MediaType.APPLICATION_JSON) + public String getJson2(@PathParam("term") String term) { + int count = service.getUsersCount(term); + + int firstAndPages[] = determineFirstByPage(count, 1); + + StringBuilder json = new StringBuilder(""); + if (firstAndPages[0] + 1 > 0) { + json.append(gson.toJson(service.findUsersEntities(PAGE_SIZE, firstAndPages[0], term))); + insertHead(json, term, 1, firstAndPages[1], count); + } else { + json.append(JSON_MSG); + } + + return json.toString(); + } + + @GET + @Produces(MediaType.APPLICATION_JSON) + public String getJson3() { + int count = service.getUsersCount(null); + + int firstAndPages[] = determineFirstByPage(count, 1); + + StringBuilder json = new StringBuilder(""); + json.append(JSON_MSG); + + return json.toString(); + } + + private int[] determineFirstByPage(int count, int page) { + BigDecimal bd1 = new BigDecimal(count).setScale(12); + BigDecimal bd2 = new BigDecimal(PAGE_SIZE).setScale(12); + + + BigDecimal tempPages = bd1.divide(bd2, 12, RoundingMode.HALF_UP); + + int intPages = tempPages.intValue(); + + double restPage = tempPages.doubleValue() - intPages; + if (restPage > 0) { + intPages++; + } + + if (intPages < page || page > intPages) { + return new int[]{-1}; + } + + return new int[]{page * PAGE_SIZE - PAGE_SIZE, intPages}; + + } + + private void insertHead(StringBuilder json, String search, int page, int numPages, int count) { + json.insert(0, "{\"term_search\": \"" + search + + "\", \"page_size\": " + PAGE_SIZE + + ", \"page\": " + page + + ", \"total_pages\": " + numPages + + ", \"count\": " + count + + ", \"items\": ").append("}"); + } + +} diff --git a/src/main/java/br/com/apiresttestpicpay/ws/config/ApplicationConfig.java b/src/main/java/br/com/apiresttestpicpay/ws/config/ApplicationConfig.java new file mode 100644 index 000000000..095caa1d2 --- /dev/null +++ b/src/main/java/br/com/apiresttestpicpay/ws/config/ApplicationConfig.java @@ -0,0 +1,35 @@ +/* + * 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.apiresttestpicpay.ws.config; + +import java.util.Set; +import javax.ws.rs.core.Application; + +/** + * + * @author rsilva + */ +@javax.ws.rs.ApplicationPath("ws") +public class ApplicationConfig extends Application { + + @Override + public Set> getClasses() { + Set> resources = new java.util.HashSet<>(); + addRestResourceClasses(resources); + return resources; + } + + /** + * Do not modify addRestResourceClasses() method. + * It is automatically populated with + * all resources defined in the project. + * If required, comment out calling this method in getClasses(). + */ + private void addRestResourceClasses(Set> resources) { + resources.add(br.com.apiresttestpicpay.ws.BuscaUsuarioRS.class); + } + +} diff --git a/src/main/resources/META-INF/jboss-deployment-structure.xml b/src/main/resources/META-INF/jboss-deployment-structure.xml new file mode 100644 index 000000000..d84de0b70 --- /dev/null +++ b/src/main/resources/META-INF/jboss-deployment-structure.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/META-INF/persistence.xml b/src/main/resources/META-INF/persistence.xml new file mode 100644 index 000000000..6fa524c61 --- /dev/null +++ b/src/main/resources/META-INF/persistence.xml @@ -0,0 +1,14 @@ + + + + java:/PostgresDS + org.hibernate.ejb.HibernatePersistence + false + + + + + + + + diff --git a/src/main/webapp/WEB-INF/beans.xml b/src/main/webapp/WEB-INF/beans.xml new file mode 100644 index 000000000..2777559c2 --- /dev/null +++ b/src/main/webapp/WEB-INF/beans.xml @@ -0,0 +1,6 @@ + + + diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 000000000..538953c9b --- /dev/null +++ b/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,19 @@ + + + + API Rest do teste na Picpay + Api Rest + + + 30 + + + + + index.html + + + diff --git a/src/main/webapp/index.html b/src/main/webapp/index.html new file mode 100644 index 000000000..887778321 --- /dev/null +++ b/src/main/webapp/index.html @@ -0,0 +1,21 @@ + + + + + API REST + + + + + Teste Backend + + + Utilização: .../ws/buscaUsuario/[termo da busca]/[pagina] + + + +
+ Utilização: .../ws/buscaUsuario/[termo da busca]/[pagina] +