Nouveau script générant le cgitrc. Avec des jolies fonctions sql.

This commit is contained in:
Mysaa Java
2021-06-17 01:12:14 +02:00
parent 760b2cd08a
commit dbfdab99e6
5 changed files with 214 additions and 1 deletions
+59
View File
@@ -0,0 +1,59 @@
CREATE OR REPLACE FUNCTION git."AccessType" (
gituserid integer,
gitrepo character varying
)
RETURNS git.gitrepoaccesstype
LANGUAGE plpgsql
AS $code$
DECLARE
selectedrepo git.gitrepoaccesstype;
BEGIN
/* user.repo */
SELECT MAX("accessType")
INTO selectedrepo
FROM git.perms
JOIN git.repos ON "repoID"=repos."ID"
WHERE repos.path=gitrepo AND "userID"=gituserid;
RETURN selectedrepo;
IF selectedrepo != NULL
THEN RETURN selectedrepo;
END IF;
/* groupe.repo */
SELECT MAX('accessType')
INTO selectedrepo
FROM git.perms
JOIN git.repos ON repoID=repos."ID"
JOIN git.appartenances ON appartenances."groupeID"=-perms."userID"
WHERE repos.path=gitrepo AND appartenances.utilisateurID=gituserid;
IF selectedrepo != NULL
THEN RETURN selectedrepo;
END IF;
/* user.repoGroup */
SELECT MAX('accessType')
INTO selectedrepo
FROM git.perms
JOIN git.repos ON repoID=-repos."groupeID"
WHERE repos.path=gitrepo AND userID=gituserid;
IF selectedrepo != NULL
THEN RETURN selectedrepo;
END IF;
/* groupe.repoGroupe */
SELECT MAX('accessType')
INTO selectedrepo
FROM git.perms
JOIN git.appartenances ON appartenances."groupeID"=-perms."userID"
JOIN git.repos ON "repoID"=-repos."groupeID"
WHERE repos.path=gitrepo AND userID=gituserid;
RETURN selectedRepo;
END
$code$
+43
View File
@@ -0,0 +1,43 @@
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$