Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: 프로젝트 문서 docs로 이전 #572

Merged
merged 16 commits into from
Jul 9, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
name: 공식 문서 배포

on:
push:
branches:
- develop
permissions:

defaults:
run:
working-directory: docs contents: write

jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: 3.9.x
- run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV
- uses: actions/cache@v3
with:
key: mkdocs-material-${{ env.cache_id }}
path: .cache
clear-keys: |
mkdocs-material-
- run: pip install mkdocs-material
- run: mkdocs gh-deploy --force
7 changes: 7 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
# 💻 기술 스택
![typescript](https://img.shields.io/badge/TypeScript-^4.5.5-3178C6?logo=TypeScript) ![Express](https://img.shields.io/badge/Express-^4.17.2-000000?logo=Express) ![jest](https://img.shields.io/badge/Jest-^27.5.1-C21325?logo=Jest) ![.ENV](https://img.shields.io/badge/.ENV-^2.3.3-ECD53F?logo=.ENV) ![MySQL2](https://img.shields.io/badge/MySQL2-^2.3.3-4479A1?logo=MySQL) ![docker-compose](https://img.shields.io/badge/docker--compose-v2-2496ED?logo=Docker) ![swagger](https://img.shields.io/badge/swagger-3.x-85EA2D?logo=swagger)

# 🗒 ERD (Updated at 2022.10.26)
# 🗄️ERD (Updated at 2022.10.26)
![erd_backend](https://user-images.githubusercontent.com/50291995/198007446-0259fd24-1b8a-4d40-a2b8-cb8cce2bddc2.png)

# 💡 기능 관련 건의
Expand Down
1 change: 1 addition & 0 deletions docs/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/site
47 changes: 47 additions & 0 deletions docs/docs/convention.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# Commit 전략

## commit의 기준

- commit은 아래 커밋 타입에 맞게 commit들을 분리한다.

## commit의 타입

- FEAT: 기능을 추가 또는 수정
- ENV: 개발 환경을 추가 또는 수정 (eslint 변경, dockerfile 변경 등)
- FIX: 버그를 해결
- DOCS: 문서를 수정 ([README.md](http://readme.md/) 변경, swagger)
- STYLE: 코드 스타일 변경 (prettier, npm run lint 등)
- REFACT: 코드를 리팩토링, 기능은 같고 코드가 변경
- TEST: 테스트 코드를 추가 또는 수정
- MERGE: 풀 리퀘스트 머지할 경우
- CHORE: 단순오타
- WIP: working in process 아직 작업중인 내용

## commit 예시

```
ex)
FIX: 모델 validation 오류 수정

- Book title 제목 default 값 추가
- User intra 최소 길이 0으로 변경

ex)
FEAT: 로그인 기능 추가

- auth/ api 추가

ex)
TEST: bookController 테스트 코드 추가

- 책 제목에 대한 유효성 테스트 추가
```

## 네이밍
**변수명, 함수명, 칼럼명, 파일명**은 **camelCase**를 사용한다.
**클래스명, 타입명**은 **PascalCase**를 사용한다.
**테이블명**은 **snake_case**를 사용한다.

## ts파일의 import
(*).service.ts 파일을 import할 때는 카멜케이스로 (*)Service라고 import한다.
e.g.) users.service.ts를 import할 경우 `import * as usersService from ../users/users.service.ts`같이 적는다.
130 changes: 130 additions & 0 deletions docs/docs/error.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
# 에러 코드 (Error code)
## Common Error Code (0번대)
|Error Code|Constant Name|Description|
|:----------:|:-------------|:-----------|
|0| UNKNOWN_ERROR |unknown error|
|1| QUERY_EXECUTION_FAILED |executeQuery SQL 에러|
|2| INVALID_INPUT |유효하지 않은 인자 (req , param, body에 잘못된 인자가 들어왔을 때)|
|42| CLIENT_AUTH_FAILED |Client authentication failed due to unknown client, no client authentication included, or unsupported authentication method.|

---

## Auth Error Code (100번대)
|Error Code|Constant Name|Description|
|:----------:|:-------------|:-----------|
|100| NO_AUTHORIZATION |권한이 없을때|
|101| NO_USER |해당 토큰의 유저가 DB에 없을때|
|102| NO_TOKEN |토큰이 발급되지 않았을때|
|103| NO_INPUT |로그인시 ID, PW 파라미터가 없을때|
|104| WRONG_PASSWORD |비밀번호가 일치하지 않을때(로그인 실패)|
|105| ALREADY_AUTHENTICATED |이미 인증된 회원의 경우(또 인증할 경우)|
|107| NO_ID |해당 ID가 존재하지 않을때(로그인 실패)|
|108| EXPIRATION_TOKEN |토큰이 만료되었을 경우|
|109| TOKEN_NOT_VALID |토큰이 유효하지 않을때|
|110| NON_AFFECTED |UPDATE 실패|
|111| ANOTHER_ACCOUNT_AUTHENTICATED |다른 계정에 이미 42 intra가 연동되어 있는 경우 <br/> (105번은 이미 인증된 회원인 경우이고 111번은 42 계정을 다른 계정에 또 연결하는 경우)|
|112| ACCESS_DENIED |42 API 사용에 대해 동의를 하지 않았을 경우|

---

## User Error Code (200번대)
|Error Code|Constant Name|Description|
|:----------:|:-------------|:-----------|
|203| EMAIL_OVERLAP |email 중복. (이미 있는 email 로 가입)|
|204| NICKNAME_OVERLAP |nickname 중복. (이미 있는 nickname 입력)|
|205| INVALIDATE_PASSWORD |잘못된 password 형식|
|206| INVALID_ROLE |유효하지 않은 role 값입니다.|
|207| SLACK_OVERLAP |슬랙 ID가 중복|
|208| INTRA_AUTHENTICATE_SUCCESS |42 인증 완료 ( 에러 메세지는 아닌데, 인증 완료시 Front한테 상태값을 전달해서 메세지를 띄우기 위한 코드 입니다 )|

---

## Books Error Code (300번대)
|Error Code|Constant Name|Description|
|:----------:|:-------------|:-----------|
|301| SLACKID_OVERLAP | 슬랙 ID가 중복됨 |
|302| NO_ISBN | 네이버 Open API에서 ISBN검색 결과가 없음 |
|303| ISBN_SEARCH_FAILED | 국립중앙 도서관 API에서 ISBN 검색이 실패 |
|304| NO_BOOK_INFO_ID | book_info table에 존재하지 않는 ID를 조회하려고 함 |
|305| CALL_SIGN_OVERLAP |등록하려는 callSign는 이미 있는 callSign임|
|306| INVALID_CALL_SIGN |유효하지 않는 callsign|
|307| NO_BOOK_ID |없는 BOOK_ID를 조회하려고 함|
|308| FAIL_CREATE_BOOK_BY_UNEXPECTED | 예상치 못한 에러로 책 정보 insert에 실패함 |
|309| INVALID_CATEGORY_ID | 보내준 카테고리 ID에 해당하는 callsign을 찾을 수 없음 |
|310| ISBN_SEARCH_FAILED_IN_NAVER | 네이버 Open API에서 ISBN검색 자체가 실패함 |
|311| INVALID_PUBDATE_FORNAT | 입력한 pubdate가 알맞은 형식이 아님. 기대하는 형식 "20220807" |
|312| FAIL_PATCH_BOOK_BY_UNEXPECTED | 예상치 못한 에러로 bookInfo patch 가 실패함 |
|313| NO_BOOK_INFO_DATA | 입력한 data가 없음(적어도 하나의 데이터는 필수) |

---

## Lendings Error Code (400번대)
|Error Code|Constant Name|Description|
|:----------:|:-------------|:-----------|
|401| NO_USER_ID | 유저 없음 |
|402| NO_PERMISSION | 권환 없음 |
|403| LENDING_OVERLOAD |2권 이상 대출|
|404| LENDING_OVERDUE |연체 중|
|405| ON_LENDING |대출 중|
|406| ON_RESERVATION |예약된 책|
|407| LOST_BOOK |분실된 책|
|408| DAMAGED_BOOK |파손된 책|
|410| NONEXISTENT_LENDING |존재하지 않는 대출|
|411| ALREADY_RETURNED |이미 반납 처리된 대출|

---

## Reservation Error Code (500번대)
|Error Code|Constant Name|Description|
|:----------:|:-------------|:-----------|
|501| INVALID_INFO_ID |book_info_id가 유효하지 않음|
|502| AT_PENALTY |대출 제한 중|
|503| NOT_LENDED |대출 가능|
|504| ALREADY_RESERVED |이미 예약 중|
|505| ALREADY_LENDED |이미 대출 중|
|506| MORE_THAN_TWO_RESERVATIONS |두 개 이상 예약 중|
|507| NO_MATCHING_USER |해당 유저 아님|
|508| RESERVATION_NOT_EXIST |예약 ID 존재하지 않음|
|509| NOT_RESERVED |예약 상태가 아님|

---

## Likes (600번대)
|Error Code|Constant Name|Description|
|:----------:|:-------------|:-----------|
|601| INVALID_INFO_ID_LIKES | bookInfoId가 유효하지 않음 |
|602| ALREADY_LIKES | 좋아요 데이터가 이미 존재함 |
|603| NONEXISTENT_LIKES | bookInfoId가 유효하지 않음 |

---

## history (700번대)
|Error Code|Constant Name|Description|
|:----------:|:-------------|:-----------|
|700| UNAUTHORIZED | 사서권한이 없는 사람이 모든 대출/반납 기록을 조회하려고함 |


---

### reviews (800번대)
|Error Code|Constant Name|Description|
|:----------:|:-------------|:-----------|
|800| INVALID_INPUT_REVIEWS | 유효하지 않은 양식의 reviews |
|801| UNAUTHORIZED_REVIEWS | reviews를 수정/삭제할 권한이 없음 |
|804| NOT_FOUND_REVIEWS | 존재하지 않는 reviewsId |
|805| DISABLED_REVIEWS | Disabled 된 review |
|810| INVALID_INPUT_REVIEWS_ID | 유효하지 않은 양식의 reviewsId |
|811| INVALID_INPUT_REVIEWS_CONTENT | 유효하지 않은 양식의 reviews content |

---

### tags (900번대)
|Error Code|Constant Name|Description|
|:----------:|:-------------|:-----------|
|900| INVALID_INPUT_TAGS | 유효하지 않은 양식의 tags |
|901| UNAUTHORIZED_TAGS | tags를 수정/삭제할 권한이 없음 |
|902| ALREADY_EXISTING_TAGS | 이미 존재하는 내용의 태그 |
|904| NOT_FOUND_TAGS | 존재하지 않는 tagId |
|910| INVALID_INPUT_TAG_ID | 유효하지 않은 양식의 tagId |

---
18 changes: 18 additions & 0 deletions docs/docs/gitflow.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Git Flow Strategy

## `main` 브랜치
- 완성된 기능들이 들어있는 가장 최신의 브랜치입니다. develop 브랜치에서만 푸시를 받습니다.

## `develop` 브랜치
- 개발중인 기능들이 이슈 단위로 완료되어 들어오는 브랜치입니다. issue 브랜치에서 푸시를 받습니다.

## issue 브랜치 (eg. `42-issue-추가`)
- 개별 이슈에 대한 개발이 진행되는 브랜치입니다.
- 이슈에서 create_branch 기능을 이용하여 자동으로 생성합시다.
- 여러 이슈로 이루어진 이슈는 여러 이슈를 가진 이슈로 묶어 Umbrella issue 로 관리합니다. [이슈 전략 페이지로 링크]
- 이슈를 해결한 후 pull request 를 생성합니다.
- 리뷰를 받은 후 **_squash merge_** 로 develop 브랜치에 merge 합니다.


## 개인 브랜치
둘 이상의 인원이 하나의 issue 브랜치에서 작업할 경우에 `issue/23_jolim`같은 방식으로 이름지어서 푸시합니다.
7 changes: 7 additions & 0 deletions docs/docs/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Welcome to Jiphyeonjeon Dev

## 문서 추가하는 방법
- docs 폴더 아래에 파일을 추가한다. 파일명은 영어로 한다.
- 반드시 # 으로 제목을 추가한다. 목차의 이름이 된다. 한글로 해도 된다.
- 로컬에서 어떻게 보일지 테스트해보고 싶으면 mkdocs 를 설치해서 실행해보면 된다.
- 디렉토리 내부에 파일을 만들수도 있다. 단 디렉토리 이름은 영어로 해야 한다.
16 changes: 16 additions & 0 deletions docs/docs/issue_strategy.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# 이슈 전략

## 여러 이슈를 관리하는 이슈 ☂️
- 제목에 :open_unbrella: 라는 ☂️ 모양의 이모지를 붙이고 label 도 umbrella 이슈로 설정해주세요
- 하나의 이슈는 하나의 풀 리퀘스트로 만들어지는데, 규모가 큰 이슈의 경우 umbrella 이슈로 묶어서 관리합니다.
- umbrella 이슈 내부에서 체크리스트에 이슈를 링킹할 수 있습니다.
- 링킹하는 방법은 `- [ ] #'이슈번호'` 를 입력하면 링크할 수 있습니다.
- 여러 이슈를 묶은 이슈는 issue 페이지 우측 하단의 pin 기능을 활용하여 쉽게 찾아가도록 합시다.


## 개별 이슈
- 개별 이슈의 이름은 자유롭게 설정합니다. 그리고 어떤 이슈인지 자세히 명세하도록 합니다.
- 개별 이슈마다 브랜치 생성은 깃허브 우측의 브랜치 자동생성 기능을 이용하도록 합시다.
- **_개별 이슈들은 각각 브랜치 안에서 관리하고 squash merge 를 이용해서 develop 브랜치에 pull request 를 날리도록 합시다!_**

[참고: 415 이슈](https://github.com/jiphyeonjeon-42/backend/issues/415)
19 changes: 19 additions & 0 deletions docs/docs/usage.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# How to use Mkdocs
### 로컬에서 정적 페이지 빌드
1. working directory의 루트 디렉토리에 docs/ 생성
2. mkdocs 설치 (mkdocs 공식문서 참조)
3. 프로젝트 생성 `mkdocs new [프로젝트 이름]`
4. 빌드 `mkdocs build`
- site 디렉토리에 정적 페이지 생성
5. 실행 `mkdocs run`

### github 에 정적 페이지 배포법
... 로컬에서 정적 페이지 빌드하는 것까지는 똑같은데
1. `mkdocs gh-pages` 명령을 내리면 소속된 레포지토리의 gh-pages 디렉토리에 정적 사이트를 배포해버림
2. github -> setting -> github pages 에 branch 를 gh-pages

### github 에 정적 페이지 자동 배포
앞에서 알아본 배포법은 직접 빌드하고 배포까지 해야 한다. 매우 귀찮음.
github action 을 통해 특정 트리거가 발생하면 자동으로 빌드 - 배포를 하도록 만들 수 있음.
이를 위해서는 .github/workflows/ 디렉토리에 .yml 파일 작성 ( github action 을 작동시킬 파일 ) 해야한다.
yml 의 예시는.. 디렉토리 참조.
8 changes: 8 additions & 0 deletions docs/mkdocs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
site_name: 집현전 문서
theme:
name: material
language: ko

extra:
static_dirs:
- docs/image