57 lines
1.5 KiB
TypeScript
57 lines
1.5 KiB
TypeScript
import db from "../../db";
|
|
import { ProjectRecordModel } from "../../db/project";
|
|
import service from "../../service";
|
|
|
|
/**
|
|
* 填充项目信息
|
|
*/
|
|
const fillProj = async (project: ProjectRecordModel) => {
|
|
const projDetail = await service.gitlab.fetchProjectDetails(
|
|
project.project_id
|
|
);
|
|
if (!projDetail) {
|
|
return project;
|
|
}
|
|
const useFulParams: Partial<ProjectRecordModel> = {
|
|
...project,
|
|
avatar_url: projDetail.avatar_url,
|
|
description: projDetail.description,
|
|
name: projDetail.name,
|
|
path_with_namespace: projDetail.path_with_namespace,
|
|
web_url: projDetail.web_url,
|
|
};
|
|
return await db.project.update(project.id, useFulParams);
|
|
};
|
|
|
|
/**
|
|
* 获取到当前所有的项目列表
|
|
* 并把信息不全的项目送给fillProj填充内容
|
|
*/
|
|
const getFullProjList = async () => {
|
|
const fullList = await db.project.getFullList();
|
|
// 把信息不全的项目送过去填充
|
|
const filledProjList = await Promise.all(
|
|
fullList.filter((v) => !v.name).map((item) => fillProj(item))
|
|
);
|
|
// 合并成完整数据
|
|
const filledFullProjList = fullList
|
|
.filter((v) => v.name)
|
|
.concat(filledProjList);
|
|
return filledFullProjList;
|
|
};
|
|
|
|
const getFullProjectMap = (fullProjList: ProjectRecordModel[]) => {
|
|
const fullProjectMap: Record<string, string> = {};
|
|
fullProjList.forEach((item) => {
|
|
fullProjectMap[item.project_id] = item.id;
|
|
});
|
|
return fullProjectMap;
|
|
};
|
|
|
|
const manageProject = {
|
|
getFullProjList,
|
|
getFullProjectMap,
|
|
};
|
|
|
|
export default manageProject;
|