From cb40b62d5977cead1eb7e47f9bf8d2614a2923ea Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Micha=C3=ABl=20Minelli?= <michael@minelli.me>
Date: Fri, 13 Oct 2023 15:34:14 +0200
Subject: [PATCH] Add SharedGitlabManager

---
 config/SharedConfig.ts          |  8 ++++++++
 managers/SharedGitlabManager.ts | 24 ++++++++++++++++++++++++
 2 files changed, 32 insertions(+)
 create mode 100644 managers/SharedGitlabManager.ts

diff --git a/config/SharedConfig.ts b/config/SharedConfig.ts
index 29c55a2..cbcb181 100644
--- a/config/SharedConfig.ts
+++ b/config/SharedConfig.ts
@@ -3,11 +3,19 @@ class SharedConfig {
 
     public readonly logsFolder: string;
 
+    public gitlab: {
+        apiURL: string
+    };
+
 
     constructor() {
         this.production = process.env.NODE_ENV === 'production';
 
         this.logsFolder = process.env.LOGS_FOLDER || '';
+
+        this.gitlab = {
+            apiURL: process.env.GITLAB_API_URL || ''
+        };
     }
 }
 
diff --git a/managers/SharedGitlabManager.ts b/managers/SharedGitlabManager.ts
new file mode 100644
index 0000000..a3a0020
--- /dev/null
+++ b/managers/SharedGitlabManager.ts
@@ -0,0 +1,24 @@
+import axios          from 'axios';
+import GitlabPipeline from '../types/Gitlab/GitlabPipeline';
+import GitlabRoute    from '../types/Gitlab/GitlabRoute';
+import SharedConfig   from '../config/SharedConfig';
+
+
+class GitlabManager {
+    private getApiUrl(route: GitlabRoute): string {
+        return `${ SharedConfig.gitlab.apiURL }${ route }`;
+    }
+
+    async getRepositoryPipelines(repoId: number, branch: string = 'main'): Promise<Array<GitlabPipeline>> {
+        const response = await axios.get<Array<GitlabPipeline>>(this.getApiUrl(GitlabRoute.REPOSITORY_PIPELINES).replace('{{id}}', String(repoId)), {
+            params: {
+                ref: branch
+            }
+        });
+
+        return response.data;
+    }
+}
+
+
+export default new GitlabManager();
-- 
GitLab