자, 사용자 스토리...를 만들어봅시다..ㅎㅎ
# iOS
## 모든 화면 전환에서 적용
- 서버로부터 받아올 필요가 있는 데이터는 항상 서버에 다시 요청하여 데이터를 갱신한다.
## 이슈 목록 화면
### Search Bar (iOS)
#### 기능 요구사항
- 사용자는 이슈 목록에서 원하는 이슈를 검색할 수 있어야 한다.
#### 테스트 요구사항
- 검색 중에는 검색 단어를 포함하는 Title 목록이 표시되어야 한다.
- 검색이 완료되면 이슈 목록화면으로 돌아가야 한다.
- 검색이 완료되면 조건에 해당하는 이슈 목록이 표시되어야 한다.
---
### 이슈 목록 (iOS)
#### 기능 요구사항
- 사용자는 이슈 목록을 확인할 수 있어야 한다.
- 사용자는 셀을 왼쪽으로 스와이프하면 셀을 delete 또는 close할 수 있어야 한다.
- 사용자는 셀을 선택하면 셀 상세화면으로 전환할 수 있어야 한다.
#### 테스트 요구사항
- 화면이 표시될 때 마다 이슈 목록 리스트를 서버를 통해 불러온다.
- 셀을 삭제 할 때 iid를 포함해서 서버에 이슈 삭제 요청을 한다.
- 응답 코드가 200일 경우 이슈 목록에서 해당 cell이 삭제되어야 한다.
```json
{
"iid": "[이슈 아이디]"
}
```
- 셀을 클로즈 했을 때
- 응답 코드가 200일 경우 이슈 상태 label이 closed로 변경되어야 한다.
```json
{
"title": "[이슈 타이틀]",
"content": null or "[이슈 내용]",
"author": "[이슈 작성자]",
"label": null or [
{
"name": "[레이블 이름]",
"color": "[레이블 색상]",
"desc": "[레이블 설명]"
},
...
],
"mid": null or "[마일스톤 번호]",
"assginees": null or [
{
"uid": "[유저 식별번호]",
"nickname": "[유저의 닉네임]"
},
...
]
}
```
- 셀을 선택했을 때는 상태 화면으로 전환되어야 한다.
---
### 화면 전환 (iOS)
#### 기능 요구사항
- 사용자는 선택한 화면으로 전환할 수 있어야 한다.
- Filter 버튼을 누르면 이슈 목록 필터 화면으로 전환할 수 있어야 한다.
- Edit 버튼을 누르면 다중선택 편집 화면으로 전환할 수 있어야 한다.
- 탭바 버튼을 선택하면 해당 화면(레이블 목록, 마일스톤 목록)으로 전환할 수 있어야 한다.
- [+] 버튼을 누르면 해당 새로운 이슈 생성 화면으로 전환할 수 있어야 한다.
#### 테스트 요구사항
- 선택한 화면으로 정상적인 전환이 이루어져야 한다.
---
## 다중선택 편집 화면 (iOS)
#### 기능 요구사항
- 사용자는 다중 선택을 통해 여러개의 이슈를 한번에 close 할 수 있어야 한다.
#### 테스트 요구사항
- 셀을 선택하면 체크박스에 선택 표시가되어야 한다.
- select All 을 누르면 모든 체크박스가 선택되어야 한다.
- select All 을 누른 후 버튼의 Title이 deselect All로 변경되어야 한다.
- Cancel 버튼을 누르면 데이터 변동 없이 이전 화면으로 이동되어야 한다.
- 선택 이슈 닫기 버튼을 누르면 선택 된 모든 이슈들을 서버에 close 요청한다.
- 응답 코드가 200일 경우 선택된 이슈들의 상태 label이 closed로 변경되어야 한다.
---
## 이슈 추가 화면 (iOS)
### 코멘트 작성
#### 기능 요구사항
- 사용자는 마크다운 Text를 입력할 수 있어야 한다.
- 사용자는 앨범에서 사진을 선택해 서버에 업로드 할 수 있어야 한다.
#### 테스트 요구사항
- 사용자가 앨범에서 사진을 업로드 할 경우, 서버에 이미지 업로드 요청을 해야한다.
- 응답코드가 200일 경우 서버에서 이미지 url 을 받아 마크다운 형식으로 삽입한다.
---
### 미리보기
#### 기능 요구사항
- 사용자는 코멘트에 입력한 마크다운 Text를 미리보기로 렌더링된 화면을 볼 수 있어야 한다.
#### 테스트 요구사항
- 입력된 텍스트 중에 마크다운 형식으로 입력된 Text들은 마크다운 문법을 적용하여 화면에 표시되어야 한다.
---
### 이슈 저장 버튼
#### 기능 요구사항
- 사용자는 작성한 이슈를 저장할 수 있어야 한다.
#### 테스트 요구사항
- 사진이 1개 이상 업로드 중인 경우 저장 버튼은 비활성화 되어야 한다.
- 버튼을 터치하면 서버에 이슈 생성하기 요청을 해야 한다.
- 요청이 완료되면 이슈 목록 화면으로 돌아간다.
- 응답코드가 400일 경우 실패 Toast 메시지를 표시한다.
---
## 이슈 상세 화면 (iOS)
### 이슈 정보 표시
#### 기능 요구사항
- 사용자는 이슈에 대한 정보를 볼 수 있어야 한다.
#### 테스트 요구사항
- 작성자, 제목, 오픈 여부, 이슈 번호 등이 정상적으로 표시 되어야 한다.
---
### 댓글 정보 표시
#### 기능 요구사항
- 사용자는 이슈에 달린 모든 댓글의 목록을 확인할 수 있어야 한다.
#### 테스트 요구사항
- 댓글 목록은 이슈 제목 카드 아래에 스크롤 가능한 형태로 표시되어야 한다.
### edit 버튼
#### 기능 요구사항
- 사용자가 edit 버튼 선택 시 이슈 편집 화면으로 화면이 전환되어야 한다.
#### 테스트 요구사항
- edit 누를 시 이슈 편집 화면으로 전환 되어야 한다.
---
## 이슈 세부 항목 편집 화면 (iOS)
### 담당자, 레이블, 마일 스톤 지정
#### 기능 요구사항
- 사용자는 Edit 버튼을 누르면 Assignee, Label, Milestone을 지정할 수 있어야 한다.
#### 테스트 요구사항
- Edit 버튼을 누르면 해당 정보가 목록 화면으로 표시되어야 한다.
---
### Close Issue 버튼
#### 기능 요구사항
- 사용자는 Close Issue 버튼을 누르면 해당 이슈를 close할 수 있어야 한다.
#### 테스트 요구사항
- (위에 설명한 내용과 동일하여 생략)
---
### 댓글 추가 버튼
#### 기능 요구사항
- 사용자는 댓글 추가 버튼을 눌러 댓글을 추가할 수 있어야 한다.
#### 테스트 요구사항
- 사용자가 댓글 추가를 누를 시 서버에 댓글 추가를 요청한다.
- 응답 코드가 200일 경우 댓글 목록을 새로 표시한다.
[이슈 세부 항목 편집 화면 스와이프 구현 참고 자료](https://medium.com/@sergkharauzov/make-draggable-uiviewcontroller-with-swipe-cards-using-custom-transitions-in-ios-c96f581639e0)
# 웹 화이팅
### Search Bar
#### 기능 요구사항
- 사용자는 이슈 목록에서 원하는 이슈를 검색할 수 있어야 한다.
#### 테스트 요구사항
- 검색이 완료되면 API통신을 통해 해당 검색어를 포함하는 목록을 받아온다.
- API통신이 완료되면 이슈 목록화면에 검색 결과를 표시한다.
---
### 검색어 필터링 조건 팝업
#### 기능 요구사항
- 사용자는 5가지 옵션으로 필터링 검색을 추천 받는다.
#### 테스트 요구사항
---
### 검색어 필터링 인풋 박스
#### 기능 요구사항
#### 테스트 요구사항
---
### 검색어 입력 필터링
#### 기능 요구사항
#### 테스트 요구사항
---
### 검색어 필터링 초기화 체크박스
#### 기능 요구사항
#### 테스트 요구사항
---
### 이슈 목록
#### 기능 요구사항
- 사용자는 이슈 목록을 확인할 수 있어야 한다.
#### 테스트 요구사항
- 페이지 별로 이슈를 최신순으로 10개씩 끊어서 받아온다.
- query문을 통해 해당 페이지에 맞는 이슈만을 불러온다. (ex. ?page=1)
- 페이지 갯수도 표시해 주어야 한다. ( < 1 2 3 4 5 > => 페이지가 몇개인지 )
---
### Labels, Milestone 버튼
#### 기능 요구사항
#### 테스트 요구사항
---
### New issue 버튼
#### 기능 요구사항
#### 테스트 요구사항
---
### 이슈 체크박스
#### 기능 요구사항
#### 테스트 요구사항
---
### 이슈 목록 필터링 (Author)
#### 기능 요구사항
#### 테스트 요구사항
---
### 이슈 목록 필터링 (Label)
#### 기능 요구사항
#### 테스트 요구사항
---
### 이슈 목록 필터링 (Milestones)
#### 기능 요구사항
#### 테스트 요구사항
---
### 이슈 목록 필터링 (Assignee)
#### 기능 요구사항
#### 테스트 요구사항
---
### 이슈 상세 정보 표시 (Label, Milestones, Comment 갯수)
#### 기능 요구사항
#### 테스트 요구사항
---