From eee6441541c3b2f6e0a77434b8496f7c64ab8b5e Mon Sep 17 00:00:00 2001 From: Jerry Laruba Festus Date: Sun, 22 Dec 2024 06:27:18 +0300 Subject: [PATCH] Updated Contributors Page and API Endpoint With Metadata Support --- .../java/com/openelements/issues/ApiEndpoint.java | 15 +++++++++++---- src/main/resources/static/contributors.html | 15 +++++++++------ src/main/resources/static/index.html | 8 ++++++++ 3 files changed, 28 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/openelements/issues/ApiEndpoint.java b/src/main/java/com/openelements/issues/ApiEndpoint.java index 89c59cc..d2269ee 100644 --- a/src/main/java/com/openelements/issues/ApiEndpoint.java +++ b/src/main/java/com/openelements/issues/ApiEndpoint.java @@ -14,6 +14,9 @@ import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; +import java.util.Set; +import java.util.stream.Collectors; + @RestController @CrossOrigin public class ApiEndpoint { @@ -22,12 +25,16 @@ public class ApiEndpoint { private final GitHubCache issueCache; - public ApiEndpoint(@NonNull final GitHubCache issueCache) { - this.issueCache = Objects.requireNonNull(issueCache, "issueCache must not be null"); + public ApiEndpoint(final GitHubCache issueCache) { + this.issueCache = issueCache; } - @Deprecated(forRemoval = true) - private record OldIssueResponse(@NonNull String title, @NonNull String link, @NonNull String org, @NonNull String repo, @NonNull String imageUrl, @NonNull String identifier, boolean isAssigned, boolean isClosed, @NonNull List labels, @NonNull List languageTags) { + @GetMapping("/api/v2/contributors") + public Set getContributors() { + log.info("Getting contributors with additional metadata"); + return issueCache.getContributors().stream() + .peek(contributor -> log.debug("Contributor: {}", contributor)) + .collect(Collectors.toUnmodifiableSet()); } /** diff --git a/src/main/resources/static/contributors.html b/src/main/resources/static/contributors.html index 8e1fcb3..2829705 100644 --- a/src/main/resources/static/contributors.html +++ b/src/main/resources/static/contributors.html @@ -28,8 +28,10 @@

Contributors

async function fetchContributors() { const response = await fetch('/api/v2/contributors'); - const contributors = await response.json(); - return contributors; + if (!response.ok) { + throw new Error('Failed to fetch contributors'); + } + return response.json(); } // Function to render issues into the table @@ -41,9 +43,10 @@

Contributors

const listItem = document.createElement('li'); listItem.classList.add('flex', 'justify-center'); listItem.innerHTML = ` -
+
Avatar of ${contributor.userName} - ${contributor.userName} + ${contributor.userName} + ${contributor.contributions} Contributions
`; @@ -55,14 +58,14 @@

Contributors

document.addEventListener('DOMContentLoaded', async () => { const loadingElement = document.getElementById('loading'); const listElement = document.getElementById('contributors-list'); - let contributors = []; try { - contributors = await fetchContributors(); + const contributors = await fetchContributors(); renderContributors(contributors); loadingElement.classList.add('hidden'); listElement.classList.remove('hidden'); } catch (error) { loadingElement.textContent = 'Failed to load data. Please try again later.'; + console.error(error); } }); diff --git a/src/main/resources/static/index.html b/src/main/resources/static/index.html index cab450b..7f0e794 100644 --- a/src/main/resources/static/index.html +++ b/src/main/resources/static/index.html @@ -9,6 +9,14 @@
+

Welcome to OpenElements

+

Explore our contributors and projects.

+ +

Good First Issues