moto6 / issue-tracker Goto Github PK
View Code? Open in Web Editor NEWThis project forked from codesquad-members-2021/issue-tracker
그룹프로젝트 #5
This project forked from codesquad-members-2021/issue-tracker
그룹프로젝트 #5
:)
: Apple,Github 로그인 합병 (1차 머지)
: 중복 인터페이스 합병
: Native KeyChain 사용
: SceneDelegate에서 로그인 정보 확인
: TabBarViewControllerInfo에 필요한 정보추가(롤로와 협의해서 더 좋은 방안을 의논해보고 수정하기)
탭바 Item의 계정Image를 제외하고는 모두 systemName으로 사용
isAccountImage를 사용해 계정탭바에서는 avartarURL을 전달해줌
Apple에서는 avartarURL이 존재하지 않으므로 대신 UIImage(systemName: "person.circle")으로 대체하기.
해당 코드
private struct TabBarViewControllerInfo {
let title: String
let image: UIImage?
let isAccountImage: Bool
let type: UIViewController.Type
init(title: String, imageName: String, isAccountImage: Bool, type: UIViewController.Type) {
self.title = title
self.type = type
self.isAccountImage = isAccountImage
if self.isAccountImage {
//Apple에서는 계정이미지가 없기때문에 "person.circle" 넣는다.
guard let url = URL(string: imageName) else {
self.image = UIImage(systemName: "person.circle")
return
}
let imagedata = try? Data(contentsOf: url)
self.image = UIImage(data: imagedata!)!.resizedImage(size: CGSize(width: 19.666, height: 19.0))
}else {
self.image = UIImage(systemName: "person.circle")
}
}
}
Oauth 로그인 페이지
Oauth User 정보
GET: http://3.34.122.67/api/login/web?code={$code}
GET: http://3.34.122.67/api/login/ios?code={$code}
Response Body
{
"jwt": "String",
"avatarUrl": "String",
"loginId": "String"
}
로그인 (Oauth) 애플 연동
-선택- 회원가입
-선택- 로그인 (일반)
라벨 http://3.34.122.67/api/labels
전체보기 GET: http://3.34.122.67/api/labels
Response Body
{
"data" :[
{
"name":"String",
"content":"String",
"color_code":"String"
},
{
"name":"String",
"content":"String",
"color_code":"String"
}
]
}
라벨 추가 POST: http://3.34.122.67/api/labels
Request Body
{
"name":"String",
"content":"String",
"color_code":"String"
}
삭제 DELETE: http://3.34.122.67/api/labels
편집 PUT: http://3.34.122.67/api/labels/{$labelId}
Request Body
{
"name":"String",
"content":"String",
"color_code":"String"
}
마일스톤 http://3.34.122.67/api/milestones
전체보기 GET: http://3.34.122.67/api/milestones
{
"data" :[
{
"name":"String",
"due_date":"String (yyyy-MM-dd hh:MM)",
"description":"String"
},
{
"name":"String",
"due_date":"String",
"description":"String"
}
]
}
추가POST: http://3.34.122.67/api/milestones
삭제DELETE: http://3.34.122.67/api/milestones
편집PUT: http://3.34.122.67/api/milestones/{$milstoneId}
{
"name":"String",
"due_date":"String (yyyy-MM-dd hh:MM)",
"description":"String"
}
이슈 < 핵심! http://3.34.122.67/api/issues
GET: http://3.34.122.67/api/issues
GET: /assigness
GET: /labels
GET: /milestone
POST:
DELETE:
PUT:
PUT: /status
PUT: /milestone
PUT: /labels
PUT: /assigness
router page: /issuedetail
common component
{isClosed && <Comment type="CLOSE" />}
API
PATCH 해당 이슈 담당자/레이블/마일스톤 정보 실시간 수정API
POST로 첨부된 파일 보내기 + response로 url 받아오기API
POST 댓글 등록API
DELETE + /issuelist로 리다이렉트해당 URL : https://avatars.githubusercontent.com/u/52390975?v=4
하드코딩을 통해 사이즈를 조절했다.
folder
API
변동시 바로 PATCHAPI
이슈 선택시 "상태 수정" 버튼 렌더 + 선택이슈 일괄 open, closeAPI
이슈 등록 / 파일 첨부API
이슈 CRUD앱 전반 통틀어 빈 공간을 터치해도 키보드가 내려가지 않는 현상을 고칠 필요가 있습니다.
View 구성
기능 구현
마지막 4번째 스택에들어가는 Custom UIView가 제대로 적용이 안된다. 일단은 네트워크부터하기
작업한 기능
마일스톤 추가,삭제,수정관련 기능 추가
편집과 삭제 순서 변경 (마일스톤만 해당)
마일스톤 완료일 포맷에 맞는지 체크함에 따라 라벨 색상을 변경해야 하는데 MultipleLineInputStackView에서는 foreach() 안에서 라벨을 생성해서 해당 라벨 색상을 변경할 수 없음.
따라서 큰 틀을 바꾸진 않았고 index를 체크해서 itmes[2] 이면 추가로 만든 커스텀 라벨을 추가하고, 포맷에 맞게 해당 라벨 색을 변경하도록 바꿈
더 괜찮은 리팩토링이 있는지 아직 확인이 되지않았음
Originally posted by @JacksonPk in #68 (comment)
Updated
로그아웃 이후에 다시 로그인 할 경우 이 현상이 발생
다시 실행시키면 자동으로 IssueTrackerTabBarController로 간다.(Scene에서 처리해서 그런듯)
쿠키가 존재하지 않는경우 : 최초에는 소셜로그인 이후 다음페이지 자동전환가능.
쿠키가 존재하는경우 : "Warning: Attempt to present <> on while a presentation is in progress!"
다시 클릭하면 전환은 된다.
Keychain을 통해 로그인된 jwt가 존재한다면 처음에 로그인페이지를 보여주지 않고 메인화면부터 보여주게 하기.
definesPresentationContext = true 하면
로그인 뷰에서 열었던 webView의 최상단 root view로 가게 한 다음 present가 적용이 된다.
이것으로 사용자가 로그아웃하고 재 로그인 할 때 쿠키가 남아있어서 자동적으로 화면전환이 용이하다.
위의 방식이 되질 않아서 loginInfo가 저장된 상태로 다시 Save()를 해서 생기는 문제.
keyChainServer.read()를 통해서 이미 저장되어있는지 확인을 한다.
내 계정
탭에서 유저 이름을 가져오지 못하는 문제-> OOOViewController를 생성하는 과정에서 바로 LoginInfo를 넣어줄 수 있도록, Creator 객체에 LoginInfo를 전달하는 것으로 수정
#17
라벨 http://3.34.122.67/api/labels
전체보기 GET: http://3.34.122.67/api/labels
Response Body
{
"data": [
{
"id": "Long",
"name": "String",
"content": "String",
"color_code": "String",
}
],
"msg": "String"
}
라벨 추가 POST: http://3.34.122.67/api/labels
Request Body
{
"name":"String",
"content":"String",
"color_code":"String"
}
삭제 DELETE: http://3.34.122.67/api/labels/{@labelId}
편집 PUT: http://3.34.122.67/api/labels/{@labelId}
Request Body
{
"name":"String",
"content":"String",
"color_code":"String"
}
router-page
common component
띄어쓰기 포함 22자
따위 렌더링API
POST 완료 버튼 클릭시 이슈 등록하기API
POST 첨부된 파일 보내기 + response로 받은 url Body에 넣어주기(마크다운형식)API
GET 담당자 / 레이블 / 마일스톤 목록 가져오기추가구현사항
markdown parser레이블 수정 시엔 기존 이슈 반영이 되는데 삭제하는 경우엔 반영이 되지 않는 것 같습니다!
API
GET 라벨 목록API
POST PATCH DELETE 라벨 추가 편집 삭제 버튼
기획서 링크()
하위태스크
[ ] css작업
[ ] ui컴포넌트 개발
[ ] 커스텀훅 개발
예상시간
8h
이슈
기획서와 완료되지 않은 상태.
구디가 좀 피곤한 느낌.
아무개 예비군훈련(ㅠ.ㅠ)
API
GET 현재 이슈 목록 가져오기API
PATCH Open/Closed)API
GETGET: http://3.34.122.67/api/issues
{
"data": [
{
"issueNumber": 1,
"title": "[BE] Issue 등록",
"status": true,
"author": {
"id": 5,
"name": "Starve",
"imageUrl": "https://avatars.githubusercontent.com/u/69128652?v=4"
},
"assignees": [],
"labels": [],
"milestone": {
"id": 4,
"title": "코드스쿼드 과정"
},
"created_date": "2021-06-22 07:19"
},
{
"issueNumber": 2,
"title": "[BE] Issue 등록",
"status": false,
"author": {
"id": 5,
"name": "Starve",
"imageUrl": "https://avatars.githubusercontent.com/u/69128652?v=4"
},
"assignees": [
{
"id": 1,
"name": "JINSEO PARK",
"imageUrl": "https://avatars.githubusercontent.com/u/52390975?v=4"
}
],
"labels": [
{
"id": 1,
"name": "documentation",
"colorCode": "#84e6b1"
}
],
"milestone": {
"id": 4,
"title": "코드스쿼드 과정"
},
"created_date": "2021-06-22 07:21"
}
],
"error": null
}
상세 보기 GET: http://3.34.122.67/api/issues/{issueId}
{
"data": {
"issueNumber": 1,
"title": "[BE] Issue 등록",
"status": true,
"author": {
"id": 5,
"name": "Starve",
"imageUrl": "https://avatars.githubusercontent.com/u/69128652?v=4"
},
"assignees": [],
"labels": [],
"milestone": {
"id": 4,
"title": "코드스쿼드 과정",
"totalIssueCount": 5,
"openIssueCount": 4
},
"comment": [
{
"id": 1,
"description": "코멘트",
"writer": {
"id": 5,
"name": "Starve",
"imageUrl": "https://avatars.githubusercontent.com/u/69128652?v=4"
},
"created_date": "2021-06-22 07:19"
}
],
"created_date": "2021-06-22 07:19"
},
"error": null
}
추가 POST: http://3.34.122.67/api/issues
Request Body
{
"title" : "String",
"comment" : "String",
"assigneeIds" : ["int"],
"labelIds" : ["int"],
"milestoneId" : "int"
}
삭제
DELETE: http://3.34.122.67/api/issues/{issueId}
DELETE: http://3.34.122.67/api/issues/{issueId}/milestone
DELETE: http://3.34.122.67/api/issues/{issueId}/label
DELETE: http://3.34.122.67/api/issues/{issueId}/assignee
편집 PUT: http://3.34.122.67/api/issues/{issueId}
타이틀 수정 PUT: http://3.34.122.67/api/issues/{issueId}/title
Request Body
{
"title" : "String"
}
마일스톤 수정 PUT: http://3.34.122.67/api/issues/{issueId}/milestone
Request Body
{
"milestoneId" : "int"
}
라벨 수정PUT: http://3.34.122.67/api/issues/{issueId}/label
Request Body
{
"labelIds" : ["int"],
}
담당자 수정PUT: http://3.34.122.67/api/issues/{issueId}/assignee
Request Body
{
"assigneeIds" : ["int"]
}
이슈 닫기 PUT: http://3.34.122.67/api/issues/close
이슈 열기 PUT: http://3.34.122.67/api/issues/open
Request Body
{
"issueId" : [2]
}
코멘트 추가
POST: http://3.34.122.67/api/issues/{issueId}
Requset Body
{
"description":"String"
}
코멘트 수정
PUT: http://3.34.122.67/api/comments/{commentId}
Requset Body
{
"description":"String"
}
코멘트 삭제
DELETE: http://3.34.122.67/api/comments/{commentId}
s
, labels
GET
PUT
GET
POST
GET
PUT
PUT
PUT
PUT
POST
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.