mirror of
https://github.com/nagisa77/OpenIsle.git
synced 2026-02-23 06:30:48 +08:00
feat: 新增贡献者勋章
This commit is contained in:
@@ -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);
|
||||
|
||||
// 检查是否为202,GitHub有时会返回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;
|
||||
}
|
||||
|
||||
@@ -73,7 +73,7 @@ public class MedalService {
|
||||
medals.add(postMedal);
|
||||
|
||||
ContributorMedalDto contributorMedal = new ContributorMedalDto();
|
||||
contributorMedal.setIcon("https://openisle-1307107697.cos.ap-guangzhou.myqcloud.com/assert/icons/achi_contributor.png");
|
||||
contributorMedal.setIcon("https://openisle-1307107697.cos.ap-guangzhou.myqcloud.com/assert/icons/achi_coder.png");
|
||||
contributorMedal.setTitle("贡献者");
|
||||
contributorMedal.setDescription("对仓库贡献超过1行代码");
|
||||
contributorMedal.setType(MedalType.CONTRIBUTOR);
|
||||
|
||||
Reference in New Issue
Block a user