![Repository 정보 크롤링 및 알림 서비스 구현 요구사항 정리하기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzTEDe%2FbtsBGGKVMwg%2Fg2hK0aeXlSytz8xQIukt4K%2Fimg.png)
이전 포스팅
2023.12.06 - [프로젝트/Github Rest API로 프로젝트 관리하기] - Github RestAPI를 통해서 Repository 정보 크롤링 및 알림 서비스 구현
필요 배경 지식
- RestAPI에 대한 개념
Prerequisite
- Typescript 기본 개발 환경 세팅
사용할 Github REST API 들
내가 사용할 Github Rest API들은 아래와 같다.
1. API rate limit
Rate limit - GitHub Docs
Status: 200 { "resources": { "core": { "limit": 5000, "used": 1, "remaining": 4999, "reset": 1691591363 }, "search": { "limit": 30, "used": 12, "remaining": 18, "reset": 1691591091 }, "graphql": { "limit": 5000, "used": 7, "remaining": 4993, "reset": 16915
docs.github.com
혹시나 너무 많은 rest api request를 전송 하는 것을 막기 위해서 위 함수를 이용해서 처리할 예정이다.
2. List pull requests
Pulls - GitHub Docs
Status: 201 { "url": "https://api.github.com/repos/octocat/Hello-World/pulls/1347", "id": 1, "node_id": "MDExOlB1bGxSZXF1ZXN0MQ==", "html_url": "https://github.com/octocat/Hello-World/pull/1347", "diff_url": "https://github.com/octocat/Hello-World/pull/134
docs.github.com
특정 repository의 pull request 정보를 확인하기 위해서 위의 request를 사용할 예정이다.
3. List reviews for pull requests
Pull request reviews - GitHub Docs
Status: 200 [ { "url": "https://api.github.com/repos/octocat/Hello-World/pulls/comments/1", "pull_request_review_id": 42, "id": 10, "node_id": "MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDEw", "diff_hunk": "@@ -16,33 +16,40 @@ public class Connection : IConnecti
docs.github.com
특정 pull request의 정보를 확인하기 위해서 위의 request를 사용할 예정이다.
현재의 요구사항 정리하기
아래 요구사항을 만족하는 DB의 설계가 필요하다
1. 리뷰/PR 정보를 확인하고 싶은 Repository의 정보를 DB에 추가할 수 있도록 해야함.
2. 리뷰/PR의 특정 사용자에 대한 정보를 정리하고 싶기에 해당 유저 데이터도 추가할 수 있어야 함.
(추가로, 회사의 내부 github과 연계를 위해서는 사내/사외의 정보를 둘 다 담을 수 있어야한다.)
3. 구독하려는 데이터들을 잘 활용할 수 있는 DB 구조가 필요하다.
- pull request 정보를 담고 있는 테이블이 필요함.
- review 현황정보를 담고 있는 테이블이 필요함.
- 이를 사용할 유저 정보를 담고 있는 테이블이 필요함.
- repository 정보를 담고 있는 테이블이 필요함.
정도로 요약할 수 있겠다.
테이블 구조 세부 구현
실제로 이렇게 될지는 모르겠지만 일단은 내가 계획하고 있는 DB 테이블 참조 구조는 다음과 같이 될것 같다.
Primary Key는 빨간색으로 표시했다.
유저 정보
유저 이름 (not null) | 깃허브 계정 (not null, unique ) | 회사 계정 (not null) | 사내 깃 계정 | 팀/모듈 이름 (not null) |
Repository 정보
Repository 이름 (not null) | Repository ID (SERIAL ID, primary) | 사내/사외 여부 (not null) | (API 베이스 주소) |
사내/사외의 Github Rest API가 다르기 때문에 repository 정보 DB에 사내/사외 여부를 추가해야한다.
다만, true/false 보단 git 사외 github/ 사내 github / 사내 bitbucket 등의 구분으로 해줘야할 듯.
추가로, 모두 비슷한 API를 사용한다면 API 베이스 주소도 기록해주면 좋긴할듯
일단 아닐 가능성이 있으니 해당 컬럼은 추가하지 않을예정이다.
Pull request 정보
Repository 이름 (혹은 ID) | PR 이름 | PR ID | PR Author | base branch |
CI/CD까지 포함이라면 추가적인 정보가 필요할 수 있을것 같은데 그것까지는 필요 없을것 같아서 해당 정보는 추가하지 않을 예정이다.
Review 현황 정보
PR 이름 혹은 ID | 리뷰어 이름 (github ID) | Repository ID 혹은 이름 | 리뷰 상태 |
이정도가 필요할듯하다.
테이블들은 겹치는 Column명의 경우 서로를 참조한다고 생각하면 될것같다.
아래와 같이 init.sql 파일을 만들어 주었다.
PostgreSQL init.sql 파일
-- base tables for the app
create table users (
name varchar(50) not null,
github_id varchar(50) not null unique,
company_id varchar(50) not null,
company_github_id varchar(50),
team_name varchar(50) not null,
primary key (name, company_id)
);
create table repos (
id serial primary key,
name varchar(50) not null,
is_internal boolean not null
-- base_url varchar(50) not null
);
create table prs (
repo_id integer not null,
pr_name varchar(50) not null,
pr_id integer not null,
author varchar(50) not null,
base_branch varchar(50) not null,
foreign key (repo_id) references repos(id),
primary key (repo_id, pr_id)
);
create table reviews (
pr_id integer not null,
reviewer varchar(50) not null,
repo_id integer not null,
status varchar(50) not null,
foreign key (pr_id) references prs(id),
foreign key (repo_id) references repos(id),
primary key (pr_id, reviewer, repo_id)
);
위와 같이 작성해서 DB deploy시에 initialize 할 수 있도록 했다.
'프로젝트 > Github Rest API로 프로젝트 리뷰 대시보드 구성하기' 카테고리의 다른 글
mattermost deploy 및 봇 사용해보기 (1) | 2024.01.07 |
---|---|
NodeJS Express를 통해서 API 서버 구축 및 DB 업데이트 하기 (0) | 2023.12.25 |
Grafana 리뷰 대시 보드 구성 - Panel 에 변수 추가하기 (0) | 2023.12.22 |
Grafana에서 DB 조작하기 (0) | 2023.12.18 |
Github RestAPI를 통해서 Repository 정보 크롤링 및 알림 서비스 구현 (0) | 2023.12.06 |
개발 및 IT 관련 포스팅을 작성 하는 블로그입니다.
IT 기술 및 개인 개발에 대한 내용을 작성하는 블로그입니다. 많은 분들과 소통하며 의견을 나누고 싶습니다.