feat: 新增贡献者勋章

This commit is contained in:
tim
2025-08-10 02:02:36 +08:00
parent c6e88792a3
commit 9462c284d6
5 changed files with 42 additions and 10 deletions

View File

@@ -4,6 +4,7 @@ import com.openisle.model.ContributorConfig;
import com.openisle.repository.ContributorConfigRepository;
import jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
@@ -12,10 +13,11 @@ import org.springframework.web.client.RestTemplate;
import java.util.List;
import java.util.Map;
@Slf4j
@Service
@RequiredArgsConstructor
public class ContributorService {
private static final String OWNER = "OpenIsle";
private static final String OWNER = "nagisa77";
private static final String REPO = "OpenIsle";
private final ContributorConfigRepository repository;
@@ -34,12 +36,23 @@ public class ContributorService {
private long fetchContributionLines(String githubId) {
try {
String url = String.format("https://api.github.com/repos/%s/%s/stats/contributors", OWNER, REPO);
ResponseEntity<List> response = restTemplate.getForEntity(url, List.class);
List<Map<String, Object>> body = response.getBody();
if (body == null) {
ResponseEntity<?> response = restTemplate.getForEntity(url, Object.class);
// 检查是否为202GitHub有时会返回202表示正在生成统计数据
if (response.getStatusCodeValue() == 202) {
log.warn("GitHub API 返回202统计数据正在生成中githubId: {}", githubId);
return 0;
}
for (Map<String, Object> item : body) {
Object body = response.getBody();
if (!(body instanceof List)) {
// 不是List类型直接返回0
return 0;
}
List<?> listBody = (List<?>) body;
for (Object itemObj : listBody) {
if (!(itemObj instanceof Map)) continue;
Map<String, Object> item = (Map<String, Object>) itemObj;
Map<String, Object> author = (Map<String, Object>) item.get("author");
if (author != null && githubId.equals(author.get("login"))) {
List<Map<String, Object>> weeks = (List<Map<String, Object>>) item.get("weeks");
@@ -59,7 +72,8 @@ public class ContributorService {
return total;
}
}
} catch (Exception ignored) {
} catch (Exception e) {
log.warn(e.getMessage());
}
return 0;
}