이전 포스팅
2023.12.06 - [프로젝트/Github Rest API로 프로젝트 관리하기] - Github RestAPI를 통해서 Repository 정보 크롤링 및 알림 서비스 구현
필요 배경 지식
- RestAPI에 대한 개념
Prerequisite
- Typescript 기본 개발 환경 세팅
사용할 Github REST API 들
내가 사용할 Github Rest API들은 아래와 같다.
1. API rate limit
혹시나 너무 많은 rest api request를 전송 하는 것을 막기 위해서 위 함수를 이용해서 처리할 예정이다.
2. List pull requests
특정 repository의 pull request 정보를 확인하기 위해서 위의 request를 사용할 예정이다.
3. List reviews for pull requests
특정 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 기술 및 개인 개발에 대한 내용을 작성하는 블로그입니다. 많은 분들과 소통하며 의견을 나누고 싶습니다.