Add SQL query for insert citizen with user
This commit is contained in:
@@ -11,9 +11,10 @@ import fr.dcproject.entity.Citizen as CitizenEntity
|
||||
class Citizen(override var requester: Requester) : RepositoryI<CitizenEntity> {
|
||||
override val entityName = CitizenEntity::class
|
||||
|
||||
fun findById(id: UUID): CitizenEntity? {
|
||||
val function = requester.getFunction("find_citizen_by_id")
|
||||
return function.selectOne("id" to id)
|
||||
fun findById(id: UUID, withUser: Boolean = false): CitizenEntity? {
|
||||
return requester
|
||||
.getFunction(if (withUser) "find_citizen_by_id_with_user" else "find_citizen_by_id")
|
||||
.selectOne("id" to id)
|
||||
}
|
||||
|
||||
fun find(
|
||||
@@ -38,4 +39,10 @@ class Citizen(override var requester: Requester) : RepositoryI<CitizenEntity> {
|
||||
.getFunction("upsert_citizen")
|
||||
.selectOne("resource" to citizen)
|
||||
}
|
||||
|
||||
fun createWithUser(citizen: CitizenEntity): CitizenEntity? {
|
||||
return requester
|
||||
.getFunction("insert_citizen_with_user")
|
||||
.selectOne("resource" to citizen)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
create or replace function find_citizen_by_id_with_user(in id uuid, out resource json) language plpgsql as
|
||||
$$
|
||||
declare
|
||||
_id alias for id;
|
||||
begin
|
||||
select to_json(t) into resource
|
||||
from (
|
||||
select
|
||||
z.*,
|
||||
u as "user"
|
||||
from citizen as z
|
||||
join "user" u on z.user_id = u.id
|
||||
where z.id = _id
|
||||
) as t;
|
||||
end;
|
||||
$$;
|
||||
|
||||
-- drop function if exists find_citizen_by_id_with_user(uuid, inout json);
|
||||
@@ -0,0 +1,31 @@
|
||||
create or replace function insert_citizen_with_user(inout resource json)
|
||||
language plpgsql as
|
||||
$$
|
||||
declare
|
||||
new_id uuid;
|
||||
inserted_user json;
|
||||
begin
|
||||
select insert_user(resource->'user') into inserted_user;
|
||||
|
||||
insert into citizen (id, name, birthday, user_id, vote_annonymous, follow_annonymous)
|
||||
select
|
||||
coalesce(id, uuid_generate_v4()),
|
||||
name,
|
||||
birthday,
|
||||
(inserted_user->>'id')::uuid,
|
||||
coalesce(vote_annonymous, true),
|
||||
coalesce(follow_annonymous, true)
|
||||
from json_populate_record(null::citizen, resource)
|
||||
on conflict (id) do update set
|
||||
name = excluded.name,
|
||||
birthday = excluded.birthday,
|
||||
user_id = excluded.user_id,
|
||||
vote_annonymous = excluded.vote_annonymous,
|
||||
follow_annonymous = excluded.follow_annonymous
|
||||
returning id into new_id;
|
||||
|
||||
select find_citizen_by_id_with_user(new_id) into resource;
|
||||
end;
|
||||
$$;
|
||||
|
||||
-- drop function if exists create_citizen_with_user(inout json);
|
||||
Reference in New Issue
Block a user