From 91b967f008cc9a3a05babe5b5ceabd7cbf2a2a6a Mon Sep 17 00:00:00 2001 From: jomu Date: Wed, 3 Apr 2019 23:29:25 +0200 Subject: [PATCH] improved account controller --- account/sql/account.sql | 73 ++++++++++++------- .../account/business/AbstractController.java | 9 ++- .../account/control/AccountControl.java | 6 ++ 3 files changed, 60 insertions(+), 28 deletions(-) diff --git a/account/sql/account.sql b/account/sql/account.sql index d7d1b95..869fc22 100644 --- a/account/sql/account.sql +++ b/account/sql/account.sql @@ -1,8 +1,8 @@ -- Database generated with pgModeler (PostgreSQL Database Modeler). --- pgModeler version: 0.9.1 --- PostgreSQL version: 10.0 +-- pgModeler version: 0.9.2-beta +-- PostgreSQL version: 9.6 -- Project Site: pgmodeler.io --- Model Author: Joern Muehlencord +-- Model Author: --- -- Database creation must be done outside a multicommand file. @@ -17,8 +17,8 @@ -- -- object: public.config | type: TABLE -- --- DROP TABLE IF EXISTS public.config CASCADE; -CREATE TABLE public.config( +DROP TABLE IF EXISTS public.config CASCADE; +CREATE TABLE public.config ( application uuid NOT NULL, config_key varchar(100) NOT NULL, config_key_account uuid NOT NULL, @@ -30,8 +30,8 @@ CREATE TABLE public.config( -- ddl-end -- -- object: public.application_role | type: TABLE -- --- DROP TABLE IF EXISTS public.application_role CASCADE; -CREATE TABLE public.application_role( +DROP TABLE IF EXISTS public.application_role CASCADE; +CREATE TABLE public.application_role ( id uuid NOT NULL, application uuid NOT NULL, role_name character varying(80) NOT NULL, @@ -43,8 +43,8 @@ CREATE TABLE public.application_role( -- ddl-end -- -- object: public.account | type: TABLE -- --- DROP TABLE IF EXISTS public.account CASCADE; -CREATE TABLE public.account( +DROP TABLE IF EXISTS public.account CASCADE; +CREATE TABLE public.account ( id uuid NOT NULL, username character varying(32) NOT NULL, emailaddress character varying(200) NOT NULL, @@ -62,8 +62,8 @@ CREATE TABLE public.account( -- ddl-end -- -- object: public.account_history | type: TABLE -- --- DROP TABLE IF EXISTS public.account_history CASCADE; -CREATE TABLE public.account_history( +DROP TABLE IF EXISTS public.account_history CASCADE; +CREATE TABLE public.account_history ( id uuid NOT NULL, account_id uuid NOT NULL, message character varying(200), @@ -77,8 +77,8 @@ CREATE TABLE public.account_history( -- ddl-end -- -- object: public.account_role | type: TABLE -- --- DROP TABLE IF EXISTS public.account_role CASCADE; -CREATE TABLE public.account_role( +DROP TABLE IF EXISTS public.account_role CASCADE; +CREATE TABLE public.account_role ( account uuid NOT NULL, account_role uuid NOT NULL, CONSTRAINT pk_account_role PRIMARY KEY (account,account_role) @@ -87,8 +87,8 @@ CREATE TABLE public.account_role( -- ddl-end -- -- object: public.application_permission | type: TABLE -- --- DROP TABLE IF EXISTS public.application_permission CASCADE; -CREATE TABLE public.application_permission( +DROP TABLE IF EXISTS public.application_permission CASCADE; +CREATE TABLE public.application_permission ( id uuid NOT NULL, application uuid NOT NULL, permission_name character varying(80) NOT NULL, @@ -100,8 +100,8 @@ CREATE TABLE public.application_permission( -- ddl-end -- -- object: public.role_permission | type: TABLE -- --- DROP TABLE IF EXISTS public.role_permission CASCADE; -CREATE TABLE public.role_permission( +DROP TABLE IF EXISTS public.role_permission CASCADE; +CREATE TABLE public.role_permission ( application_role uuid NOT NULL, role_permission uuid NOT NULL, CONSTRAINT pk_role_permission_role_permission_name PRIMARY KEY (application_role,role_permission) @@ -110,8 +110,8 @@ CREATE TABLE public.role_permission( -- ddl-end -- -- object: public.mail_template | type: TABLE -- --- DROP TABLE IF EXISTS public.mail_template CASCADE; -CREATE TABLE public.mail_template( +DROP TABLE IF EXISTS public.mail_template CASCADE; +CREATE TABLE public.mail_template ( template_name character varying(40) NOT NULL, template_value text NOT NULL, CONSTRAINT mail_template_pk PRIMARY KEY (template_name) @@ -120,8 +120,8 @@ CREATE TABLE public.mail_template( -- ddl-end -- -- object: public.application | type: TABLE -- --- DROP TABLE IF EXISTS public.application CASCADE; -CREATE TABLE public.application( +DROP TABLE IF EXISTS public.application CASCADE; +CREATE TABLE public.application ( id uuid NOT NULL, application_name varchar(200) NOT NULL, CONSTRAINT application_pk PRIMARY KEY (id) @@ -129,15 +129,15 @@ CREATE TABLE public.application( ); -- ddl-end -- --- -- object: uuid-ossp | type: EXTENSION -- --- -- DROP EXTENSION IF EXISTS uuid-ossp CASCADE; --- CREATE EXTENSION uuid-ossp +-- -- object: "uuid-ossp" | type: EXTENSION -- +-- -- DROP EXTENSION IF EXISTS "uuid-ossp" CASCADE; +-- CREATE EXTENSION "uuid-ossp" -- WITH SCHEMA public; -- -- ddl-end -- -- -- object: public.account_login | type: TABLE -- --- DROP TABLE IF EXISTS public.account_login CASCADE; -CREATE TABLE public.account_login( +DROP TABLE IF EXISTS public.account_login CASCADE; +CREATE TABLE public.account_login ( id uuid NOT NULL DEFAULT uuid_generate_v4(), account uuid NOT NULL, account_password varchar(200) NOT NULL, @@ -157,6 +157,20 @@ CREATE TABLE public.account_login( ); -- ddl-end -- +-- object: public.api_key | type: TABLE -- +DROP TABLE IF EXISTS public.api_key CASCADE; +CREATE TABLE public.api_key ( + id uuid NOT NULL, + account uuid NOT NULL, + api_key varchar(200) NOT NULL, + issued_on timestamptz NOT NULL DEFAULT timezone('utc'::text, now()), + expiration smallint, + expires_on timestamptz NOT NULL, + CONSTRAINT api_key_pk PRIMARY KEY (id) + +); +-- ddl-end -- + -- object: config_key_account_fk | type: CONSTRAINT -- -- ALTER TABLE public.config DROP CONSTRAINT IF EXISTS config_key_account_fk CASCADE; ALTER TABLE public.config ADD CONSTRAINT config_key_account_fk FOREIGN KEY (config_key_account) @@ -227,4 +241,11 @@ REFERENCES public.account (id) MATCH FULL ON DELETE NO ACTION ON UPDATE NO ACTION; -- ddl-end -- +-- object: api_key_account_fk | type: CONSTRAINT -- +-- ALTER TABLE public.api_key DROP CONSTRAINT IF EXISTS api_key_account_fk CASCADE; +ALTER TABLE public.api_key ADD CONSTRAINT api_key_account_fk FOREIGN KEY (account) +REFERENCES public.account (id) MATCH FULL +ON DELETE NO ACTION ON UPDATE NO ACTION; +-- ddl-end -- + diff --git a/account/src/main/java/de/muehlencord/shared/account/business/AbstractController.java b/account/src/main/java/de/muehlencord/shared/account/business/AbstractController.java index 67373a5..084287d 100644 --- a/account/src/main/java/de/muehlencord/shared/account/business/AbstractController.java +++ b/account/src/main/java/de/muehlencord/shared/account/business/AbstractController.java @@ -78,7 +78,7 @@ public abstract class AbstractController { if (Updateable.class.isAssignableFrom(entity.getClass())) { Updateable updateable = (Updateable) entity; applyUpdateableChanges(updateable, true); - } + } em.persist(entity); return entity; } @@ -90,7 +90,7 @@ public abstract class AbstractController { if (Updateable.class.isAssignableFrom(entity.getClass())) { Updateable updateable = (Updateable) entity; applyUpdateableChanges(updateable, false); - } + } return em.merge(entity); } @@ -101,6 +101,11 @@ public abstract class AbstractController { em.remove(attach(entity)); } + @Lock(LockType.READ) + public T find(Object id) { + return em.find(entityClass, id); + } + @Lock(LockType.READ) public List findAll() { return findAll(new ArrayList<>()); diff --git a/account/src/main/java/de/muehlencord/shared/account/business/account/control/AccountControl.java b/account/src/main/java/de/muehlencord/shared/account/business/account/control/AccountControl.java index 0f98dc9..c891223 100644 --- a/account/src/main/java/de/muehlencord/shared/account/business/account/control/AccountControl.java +++ b/account/src/main/java/de/muehlencord/shared/account/business/account/control/AccountControl.java @@ -33,7 +33,11 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; import javax.ejb.EJB; +import javax.ejb.Lock; +import javax.ejb.LockType; import javax.ejb.Stateless; +import javax.ejb.TransactionAttribute; +import javax.ejb.TransactionAttributeType; import javax.inject.Inject; import javax.persistence.EntityManager; import javax.persistence.NoResultException; @@ -106,6 +110,8 @@ public class AccountControl implements Serializable { } + @Lock(LockType.READ) + @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) public AccountEntity getAccountEntity(String userName, boolean loadRoles) { StringBuilder queryBuilder = new StringBuilder(); queryBuilder.append("SELECT a FROM AccountEntity a ");