improved account controller

This commit is contained in:
2019-04-03 23:29:25 +02:00
parent eb332461aa
commit 91b967f008
3 changed files with 60 additions and 28 deletions

View File

@ -1,8 +1,8 @@
-- Database generated with pgModeler (PostgreSQL Database Modeler). -- Database generated with pgModeler (PostgreSQL Database Modeler).
-- pgModeler version: 0.9.1 -- pgModeler version: 0.9.2-beta
-- PostgreSQL version: 10.0 -- PostgreSQL version: 9.6
-- Project Site: pgmodeler.io -- Project Site: pgmodeler.io
-- Model Author: Joern Muehlencord -- Model Author: ---
-- Database creation must be done outside a multicommand file. -- Database creation must be done outside a multicommand file.
@ -17,8 +17,8 @@
-- --
-- object: public.config | type: TABLE -- -- object: public.config | type: TABLE --
-- DROP TABLE IF EXISTS public.config CASCADE; DROP TABLE IF EXISTS public.config CASCADE;
CREATE TABLE public.config( CREATE TABLE public.config (
application uuid NOT NULL, application uuid NOT NULL,
config_key varchar(100) NOT NULL, config_key varchar(100) NOT NULL,
config_key_account uuid NOT NULL, config_key_account uuid NOT NULL,
@ -30,8 +30,8 @@ CREATE TABLE public.config(
-- ddl-end -- -- ddl-end --
-- object: public.application_role | type: TABLE -- -- object: public.application_role | type: TABLE --
-- DROP TABLE IF EXISTS public.application_role CASCADE; DROP TABLE IF EXISTS public.application_role CASCADE;
CREATE TABLE public.application_role( CREATE TABLE public.application_role (
id uuid NOT NULL, id uuid NOT NULL,
application uuid NOT NULL, application uuid NOT NULL,
role_name character varying(80) NOT NULL, role_name character varying(80) NOT NULL,
@ -43,8 +43,8 @@ CREATE TABLE public.application_role(
-- ddl-end -- -- ddl-end --
-- object: public.account | type: TABLE -- -- object: public.account | type: TABLE --
-- DROP TABLE IF EXISTS public.account CASCADE; DROP TABLE IF EXISTS public.account CASCADE;
CREATE TABLE public.account( CREATE TABLE public.account (
id uuid NOT NULL, id uuid NOT NULL,
username character varying(32) NOT NULL, username character varying(32) NOT NULL,
emailaddress character varying(200) NOT NULL, emailaddress character varying(200) NOT NULL,
@ -62,8 +62,8 @@ CREATE TABLE public.account(
-- ddl-end -- -- ddl-end --
-- object: public.account_history | type: TABLE -- -- object: public.account_history | type: TABLE --
-- DROP TABLE IF EXISTS public.account_history CASCADE; DROP TABLE IF EXISTS public.account_history CASCADE;
CREATE TABLE public.account_history( CREATE TABLE public.account_history (
id uuid NOT NULL, id uuid NOT NULL,
account_id uuid NOT NULL, account_id uuid NOT NULL,
message character varying(200), message character varying(200),
@ -77,8 +77,8 @@ CREATE TABLE public.account_history(
-- ddl-end -- -- ddl-end --
-- object: public.account_role | type: TABLE -- -- object: public.account_role | type: TABLE --
-- DROP TABLE IF EXISTS public.account_role CASCADE; DROP TABLE IF EXISTS public.account_role CASCADE;
CREATE TABLE public.account_role( CREATE TABLE public.account_role (
account uuid NOT NULL, account uuid NOT NULL,
account_role uuid NOT NULL, account_role uuid NOT NULL,
CONSTRAINT pk_account_role PRIMARY KEY (account,account_role) CONSTRAINT pk_account_role PRIMARY KEY (account,account_role)
@ -87,8 +87,8 @@ CREATE TABLE public.account_role(
-- ddl-end -- -- ddl-end --
-- object: public.application_permission | type: TABLE -- -- object: public.application_permission | type: TABLE --
-- DROP TABLE IF EXISTS public.application_permission CASCADE; DROP TABLE IF EXISTS public.application_permission CASCADE;
CREATE TABLE public.application_permission( CREATE TABLE public.application_permission (
id uuid NOT NULL, id uuid NOT NULL,
application uuid NOT NULL, application uuid NOT NULL,
permission_name character varying(80) NOT NULL, permission_name character varying(80) NOT NULL,
@ -100,8 +100,8 @@ CREATE TABLE public.application_permission(
-- ddl-end -- -- ddl-end --
-- object: public.role_permission | type: TABLE -- -- object: public.role_permission | type: TABLE --
-- DROP TABLE IF EXISTS public.role_permission CASCADE; DROP TABLE IF EXISTS public.role_permission CASCADE;
CREATE TABLE public.role_permission( CREATE TABLE public.role_permission (
application_role uuid NOT NULL, application_role uuid NOT NULL,
role_permission uuid NOT NULL, role_permission uuid NOT NULL,
CONSTRAINT pk_role_permission_role_permission_name PRIMARY KEY (application_role,role_permission) CONSTRAINT pk_role_permission_role_permission_name PRIMARY KEY (application_role,role_permission)
@ -110,8 +110,8 @@ CREATE TABLE public.role_permission(
-- ddl-end -- -- ddl-end --
-- object: public.mail_template | type: TABLE -- -- object: public.mail_template | type: TABLE --
-- DROP TABLE IF EXISTS public.mail_template CASCADE; DROP TABLE IF EXISTS public.mail_template CASCADE;
CREATE TABLE public.mail_template( CREATE TABLE public.mail_template (
template_name character varying(40) NOT NULL, template_name character varying(40) NOT NULL,
template_value text NOT NULL, template_value text NOT NULL,
CONSTRAINT mail_template_pk PRIMARY KEY (template_name) CONSTRAINT mail_template_pk PRIMARY KEY (template_name)
@ -120,8 +120,8 @@ CREATE TABLE public.mail_template(
-- ddl-end -- -- ddl-end --
-- object: public.application | type: TABLE -- -- object: public.application | type: TABLE --
-- DROP TABLE IF EXISTS public.application CASCADE; DROP TABLE IF EXISTS public.application CASCADE;
CREATE TABLE public.application( CREATE TABLE public.application (
id uuid NOT NULL, id uuid NOT NULL,
application_name varchar(200) NOT NULL, application_name varchar(200) NOT NULL,
CONSTRAINT application_pk PRIMARY KEY (id) CONSTRAINT application_pk PRIMARY KEY (id)
@ -129,15 +129,15 @@ CREATE TABLE public.application(
); );
-- ddl-end -- -- ddl-end --
-- -- object: uuid-ossp | type: EXTENSION -- -- -- object: "uuid-ossp" | type: EXTENSION --
-- -- DROP EXTENSION IF EXISTS uuid-ossp CASCADE; -- -- DROP EXTENSION IF EXISTS "uuid-ossp" CASCADE;
-- CREATE EXTENSION uuid-ossp -- CREATE EXTENSION "uuid-ossp"
-- WITH SCHEMA public; -- WITH SCHEMA public;
-- -- ddl-end -- -- -- ddl-end --
-- --
-- object: public.account_login | type: TABLE -- -- object: public.account_login | type: TABLE --
-- DROP TABLE IF EXISTS public.account_login CASCADE; DROP TABLE IF EXISTS public.account_login CASCADE;
CREATE TABLE public.account_login( CREATE TABLE public.account_login (
id uuid NOT NULL DEFAULT uuid_generate_v4(), id uuid NOT NULL DEFAULT uuid_generate_v4(),
account uuid NOT NULL, account uuid NOT NULL,
account_password varchar(200) NOT NULL, account_password varchar(200) NOT NULL,
@ -157,6 +157,20 @@ CREATE TABLE public.account_login(
); );
-- ddl-end -- -- 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 -- -- object: config_key_account_fk | type: CONSTRAINT --
-- ALTER TABLE public.config DROP CONSTRAINT IF EXISTS config_key_account_fk CASCADE; -- 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) 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; ON DELETE NO ACTION ON UPDATE NO ACTION;
-- ddl-end -- -- 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 --

View File

@ -78,7 +78,7 @@ public abstract class AbstractController<T> {
if (Updateable.class.isAssignableFrom(entity.getClass())) { if (Updateable.class.isAssignableFrom(entity.getClass())) {
Updateable updateable = (Updateable) entity; Updateable updateable = (Updateable) entity;
applyUpdateableChanges(updateable, true); applyUpdateableChanges(updateable, true);
} }
em.persist(entity); em.persist(entity);
return entity; return entity;
} }
@ -90,7 +90,7 @@ public abstract class AbstractController<T> {
if (Updateable.class.isAssignableFrom(entity.getClass())) { if (Updateable.class.isAssignableFrom(entity.getClass())) {
Updateable updateable = (Updateable) entity; Updateable updateable = (Updateable) entity;
applyUpdateableChanges(updateable, false); applyUpdateableChanges(updateable, false);
} }
return em.merge(entity); return em.merge(entity);
} }
@ -101,6 +101,11 @@ public abstract class AbstractController<T> {
em.remove(attach(entity)); em.remove(attach(entity));
} }
@Lock(LockType.READ)
public T find(Object id) {
return em.find(entityClass, id);
}
@Lock(LockType.READ) @Lock(LockType.READ)
public List<T> findAll() { public List<T> findAll() {
return findAll(new ArrayList<>()); return findAll(new ArrayList<>());

View File

@ -33,7 +33,11 @@ import java.util.Date;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.ejb.Lock;
import javax.ejb.LockType;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.inject.Inject; import javax.inject.Inject;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
import javax.persistence.NoResultException; 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) { public AccountEntity getAccountEntity(String userName, boolean loadRoles) {
StringBuilder queryBuilder = new StringBuilder(); StringBuilder queryBuilder = new StringBuilder();
queryBuilder.append("SELECT a FROM AccountEntity a "); queryBuilder.append("SELECT a FROM AccountEntity a ");