git4pipi/sql/ReadableRepos.sql
2021-06-18 20:04:37 +02:00

44 lines
1.2 KiB
PL/PgSQL

CREATE OR REPLACE FUNCTION git."ReadableRepos" (
gituserid integer
)
RETURNS table(
ID integer,
path character varying(255),
name character varying(255),
owner character varying(255),
description character varying,
groupeID integer,
logoUrl character varying(255)
)
LANGUAGE plpgsql
AS $code$
BEGIN
RETURN QUERY
/* user.repo */
SELECT repos.*
FROM git.perms
JOIN git.repos ON "repoID"=repos."ID"
WHERE "accessType">='READ' AND "userID"=gituserid
UNION
/* groupe.repo */
SELECT repos.*
FROM git.perms
JOIN git.repos ON "repoID"=repos."ID"
JOIN git.appartenances ON appartenances."groupeID"=-perms."userID"
WHERE "accessType">='READ' AND appartenances."utilisateurID"=gituserid
UNION
/* user.repoGroup */
SELECT repos.*
FROM git.perms
JOIN git.repos ON "repoID"=-repos."groupeID"
WHERE "accessType">='READ' AND "userID"=gituserid
UNION
/* groupe.repoGroupe */
SELECT repos.*
FROM git.perms
JOIN git.appartenances ON appartenances."groupeID"=-perms."userID"
JOIN git.repos ON "repoID"=-repos."groupeID"
WHERE "accessType">='READ' AND "userID"=gituserid;
END
$code$