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

[BE] 이슈 전체 조회 API 구현 #22

Open
wants to merge 100 commits into
base: team-12
Choose a base branch
from
Open
Changes from 4 commits
Commits
Show all changes
100 commits
Select commit Hold shift + click to select a range
e2b1d06
Chore: .gitignore 업데이트
kyupid Jun 9, 2021
09b57c2
[#11] Feat: 깃헙 Oauth로 AccessToken 받아오기
kyupid Jun 9, 2021
f9a01cd
[#11] Add: 깃헙 서버에 AccessToken 을 담은 요청
kyupid Jun 10, 2021
d16d1dd
[#11] Add: 깃헙에 AccessToken을 가지고 요청하고 응답으로 커스텀 객체로 유저정보를 받음
kyupid Jun 10, 2021
730ad1e
[#11] Feat: Oauth 통해서 JWT 발급
kyupid Jun 10, 2021
facf310
[#14] Feat: 모든 api에 대한 Interceptor 적용
kyupid Jun 10, 2021
4f7c1b3
[#14] Feat: Interceptor를 통해서 JWT 분석 후 특정 API로 데이터를 가져옴
kyupid Jun 10, 2021
f716cbb
프로젝트 세팅 및 로그인 구현
MJbae Jun 10, 2021
c0f4dd7
Chore: build.gradle 커밋
kyupid Jun 11, 2021
18bfbd7
[#27] Feat: 이슈 전체 조회 API 구현 & 테스트
kyupid Jun 11, 2021
0fe9b1c
Add: 스키마, 데이터 초기화
kyupid Jun 11, 2021
e7be315
Merge pull request #29 from kyu-kim-kr/BE/feature
MJbae Jun 13, 2021
91301f3
[#27] Add: 예제 데이터 추가
kyupid Jun 13, 2021
760198c
[#27] 이슈 전체 조회 API 구현 중 문제
kyupid Jun 14, 2021
2e9fc29
Chore: gradle 관련 파일 업로드
kyupid Jun 14, 2021
c644bc9
Chore: 메인 클래스
kyupid Jun 14, 2021
7552c48
Add: 유저 정보 받아서 DTO로 넣기
kyupid Jun 14, 2021
22ebdf6
Merge branch 'BE/kyu' into BE/feature
kyupid Jun 14, 2021
8798b86
Add: User 도메인에 기본 생성자 추가
kyupid Jun 14, 2021
e0f7bd1
Add: Issue 도메인에 List<Label> 추가
kyupid Jun 14, 2021
177feb9
[#27] Fix: RowMapper 사용 방식 수정
kyupid Jun 14, 2021
12fcaee
[#27] Add: Milestone 도메인, 레포지토리 추가
kyupid Jun 14, 2021
ad330fa
[#27] Add: IssueDto에 MilestoneTitle 가져오기
kyupid Jun 14, 2021
ac8d2c2
[#27] Add: JsonPropery 어노테이션 추가
kyupid Jun 14, 2021
fe62345
[#27] Add: Label 도메인, 레포지토리 추가
kyupid Jun 14, 2021
60d36ee
chore: 프로젝트 설정
Jun 14, 2021
fbd6b43
chore: 인터셉터 및 gitignore 설정
Jun 15, 2021
c103033
test: 이슈 전체조회 테스트 구현
Jun 15, 2021
c78e135
test: 테스트 목적의 issue 객체에 대해 클래스 분리
Jun 15, 2021
08297a4
test: IssueController에 대한 테스트 구현
Jun 15, 2021
bf95de8
test: test 환경에 InterceptorConfig 추가
Jun 15, 2021
0e5348d
[#27] Feat: 이슈 전체 조회 API 구현
kyupid Jun 15, 2021
5a6e344
Merge pull request #39 from kyu-kim-kr/BE/feature
kyupid Jun 15, 2021
68fe97e
feat: 이슈 생성 구현부 중 labels 제외한 부분 구현
Jun 17, 2021
91d1ed4
feat: 이슈 전체 조회 요청에 labels와 number 부분 추가
Jun 17, 2021
27eadfd
feat: 담당자와 작성자에 대해 배열 형태로 IssueDto에 전달
Jun 17, 2021
0f5fede
chore: 불필요한 매개변수 제거
Jun 17, 2021
f2c83a3
feat: 로그인 시 로그인유저가 로그인 테이블에 없다면 자동으로 저장하는 로직 추가
Jun 18, 2021
d7c78e2
feat: 이슈 조건에 따른 검색 기능 구현
Jun 18, 2021
489f44e
feat: CORS 처리
Jun 18, 2021
ce34b95
feat: 이슈 조회 시 closed 속성 추가
Jun 18, 2021
b17b0b0
chore: 초기 데이터 추가
Jun 18, 2021
20c58ab
feat: textColor -> fontLight으로 수정
Jun 18, 2021
7522308
fix: OAuth 적용에 따른 CORS 허용부 수정
Jun 19, 2021
9212948
feat: iOS 로그인 부분 구현
Jun 19, 2021
9eb8baf
[#58] Feat: 이슈 수정 API
kyupid Jun 20, 2021
868f1fd
[#59] Feat: 이슈 삭제, 클로즈여부 API
kyupid Jun 20, 2021
4318f07
[#60] Feat: 이슈 상세 정보 API
kyupid Jun 20, 2021
ca62bcc
[#61] Feat: 오픈/클로즈 이슈 카운트 API
kyupid Jun 20, 2021
c31e6ba
[#66] Feat: 마일스톤 전체 조회 API
kyupid Jun 20, 2021
61b2525
[#66] Feat: 마일스톤 삭제 API
kyupid Jun 21, 2021
7cbc132
[#66] Feat: 마일스톤 수정 API
kyupid Jun 21, 2021
ec01c3f
[#66] Feat: 마일스톤 생성 API
kyupid Jun 21, 2021
54ec4cb
Merge pull request #62 from kyu-kim-kr/BE/feat-create-issue
MJbae Jun 21, 2021
417a024
Merge pull request #63 from kyu-kim-kr/BE/feat-edit-issue
MJbae Jun 21, 2021
71a2b82
Merge pull request #64 from kyu-kim-kr/BE/feat-detail-issue
MJbae Jun 21, 2021
da32c06
Merge pull request #65 from kyu-kim-kr/BE/feat-count-issue
MJbae Jun 21, 2021
494dc5b
Merge pull request #69 from kyu-kim-kr/BE/feat-milestone
MJbae Jun 21, 2021
88753f3
[#66] Feat: 마일스톤 closed 조건에 따른 전체 조회 API
kyupid Jun 21, 2021
df0c797
Merge pull request #70 from kyu-kim-kr/BE/feat-milestone
kyupid Jun 21, 2021
84f97f5
[#67] Feat: 라벨 전체 조회 API
kyupid Jun 21, 2021
cb5373d
[#67] Feat: 라벨 생성 API
kyupid Jun 21, 2021
15e6510
[#67] Change: label.color_code 의 유니크 속성을 지움
kyupid Jun 21, 2021
cd32735
Fix: null data 처리 in Issue
Jun 21, 2021
98c83f1
[#67] Feat: 라벨 수정 API
kyupid Jun 21, 2021
18a8b1b
[#67] Feat: 라벨 삭제 API
kyupid Jun 21, 2021
a414db6
Merge branch 'BE/feature' into BE/feat-label
kyupid Jun 21, 2021
4960faa
Merge pull request #71 from kyu-kim-kr/BE/feat-label
kyupid Jun 21, 2021
324c893
fix: UserDto 미생성에 따라 Entity와 Domain의 혼용 발생과 그에 따른 에러 발생
Jun 22, 2021
ada07b9
feat: 이슈별 코멘트 조회 기능 구현
Jun 22, 2021
a5a381e
feat: 유저별 코멘트 조회 기능 구현
Jun 22, 2021
a09a82f
[#85] Feat: 오픈/클로즈 마일스톤 API
kyupid Jun 22, 2021
75b6330
[#86] Fix: 로그인 DB 중복 데이터 검사 로직
kyupid Jun 22, 2021
6683d81
feat: 코멘트 생성 구현
Jun 22, 2021
839a61e
feat: 코멘트 수정 기능 구현
Jun 22, 2021
975221b
feat: 코멘트 삭제 기능 구현
Jun 22, 2021
1a836b8
Feat: 담당자/작성자 조회
kyupid Jun 22, 2021
a68fb63
Merge pull request #87 from kyu-kim-kr/kyu/temp
kyupid Jun 22, 2021
e2ad46d
Merge pull request #88 from kyu-kim-kr/BE/feat-comment
kyupid Jun 22, 2021
98b7982
[#91] Fix/Add: 2021.06.22 회의 후 수정 사항
kyupid Jun 22, 2021
be874db
Fix: iOS OAuth 로그인 문제 해결
Jun 23, 2021
a4c1700
fix: 이슈 상세 조회에서 author_id -> author 객체로 수정
Jun 23, 2021
9412568
fix: issue 조회 시, issueRepository에서 엔티티 가져올 때 deleted = false 조건 추가
Jun 24, 2021
108e06a
Fix: 이슈 조회 내림차순
kyupid Jun 24, 2021
1669738
[#113] Feat: 이미지 업로드 API
kyupid Jun 24, 2021
59628a0
Merge pull request #114 from kyu-kim-kr/kyu/temp-image
kyupid Jun 24, 2021
0e6d406
Merge pull request #122 from kyupid/BE/feature
kyupid Jun 27, 2021
43856a4
Fix: 초기화 데이터 라벨 색상 변경
kyupid Jun 29, 2021
17505c3
Fix/Add: 테스트 삭제, 필요한 테스트 추가
kyupid Jun 29, 2021
2d6027c
Fix bug: 날짜 매핑하지 못하는 문제 해결
kyupid Jun 29, 2021
afc8cc7
Feat: 이모지 상태 전체 조회
kyupid Jun 30, 2021
e8abfe5
Merge pull request #129 from kyupid/kyu/feature/get-emojis-status
kyupid Jun 30, 2021
554de00
Rename: 변수이름 명확히 하기 위해 수정
kyupid Jul 1, 2021
9d68098
[#127] Feat: 이모지 달기 구현
kyupid Jul 1, 2021
5a429d0
Merge pull request #133 from kyupid/kyu/feature/emoji
kyupid Jul 1, 2021
1c481d5
[#136] Remove: 필요없는 코드/주석 제거
kyupid Jul 2, 2021
8339e42
[#136] Fix: 이미지 업로드 리턴타입 수정
kyupid Jul 2, 2021
c5be3dd
[FE 요청사항] Fix: 이슈 상제조회시 유저,라벨,마일스톤에 id도 응답하도록 수정
kyupid Jul 2, 2021
c367cdd
Merge pull request #138 from kyupid/kyu/rebase
MJbae Jul 2, 2021
ec2fc48
Merge pull request #146 from kyupid/BE/feature
kyupid Jul 2, 2021
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
8 changes: 0 additions & 8 deletions be/src/main/java/com/issuetracker/config/CorsFilter.java
Original file line number Diff line number Diff line change
@@ -31,12 +31,4 @@ public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
chain.doFilter(req, res);
}
}

public void init(FilterConfig filterConfig) {
// not needed
}

public void destroy() {
//not needed
}
}
Original file line number Diff line number Diff line change
@@ -19,7 +19,6 @@ public IssueController(IssueService issueService) {

@GetMapping
public List<IssueDto> viewAllIssues(IssueSearchCondition searchCondition) {
// return issueService.getAllIssues();
return issueService.searchIssuesByConditions(searchCondition);
}

Original file line number Diff line number Diff line change
@@ -4,6 +4,8 @@
import com.issuetracker.domain.Label;

public class LabelForIssueDetailDto {
private Long id;

private String title;

@JsonProperty("color_code")
@@ -12,13 +14,17 @@ public class LabelForIssueDetailDto {
@JsonProperty("font_light")
private boolean fontLight;


public LabelForIssueDetailDto(String title, String colorCode, boolean fontLight) {
public LabelForIssueDetailDto(Long id, String title, String colorCode, boolean fontLight) {
this.id = id;
this.title = title;
this.colorCode = colorCode;
this.fontLight = fontLight;
}

public Long getId() {
return id;
}

public String getTitle() {
return title;
}
@@ -33,6 +39,7 @@ public boolean isFontLight() {

public static LabelForIssueDetailDto of(Label label) {
return new LabelForIssueDetailDto(
label.getId(),
label.getTitle(),
label.getColorCode(),
label.isFontLight()
Original file line number Diff line number Diff line change
@@ -3,6 +3,8 @@
import com.fasterxml.jackson.annotation.JsonProperty;

public class MilestoneForIssueDetailDto {
private Long id;

private String title;

@JsonProperty("opened_issue_count")
@@ -11,20 +13,26 @@ public class MilestoneForIssueDetailDto {
@JsonProperty("closed_issue_count")
private Integer closedIssueCount;

public MilestoneForIssueDetailDto(String title, Integer openedIssueCount, Integer closedIssueCount) {
public MilestoneForIssueDetailDto(Long id, String title, Integer openedIssueCount, Integer closedIssueCount) {
this.id = id;
this.title = title;
this.openedIssueCount = openedIssueCount;
this.closedIssueCount = closedIssueCount;
}

public static MilestoneForIssueDetailDto of(String title, Integer openedIssueCount, Integer closedIssueCount) {
public static MilestoneForIssueDetailDto of(Long id, String title, Integer openedIssueCount, Integer closedIssueCount) {
return new MilestoneForIssueDetailDto(
id,
title,
openedIssueCount,
closedIssueCount
);
}

public Long getId() {
return id;
}

public String getTitle() {
return title;
}
2 changes: 0 additions & 2 deletions be/src/main/java/com/issuetracker/oauth/LoginController.java
Original file line number Diff line number Diff line change
@@ -17,7 +17,6 @@ public class LoginController {

private Logger logger = LoggerFactory.getLogger(LoginController.class);
private final Oauth oauthUtil;
// TODO: 추후 서비스 로직 분리 시 가져갈 것
private final UserRepository userRepository;

public LoginController(Oauth oauthUtil, UserRepository userRepository) {
@@ -33,7 +32,6 @@ public JwtDto login(@RequestParam String client, @RequestParam String code) {
String secretId = null;
String redirectUri = null;

// TODO: iOS 파트 추가//
if (client.equals("ios")) {
accessTokenUri = oauthUtil.getUriForAccesTokenIos(code);
clientId = oauthUtil.getClientIdIos();
Original file line number Diff line number Diff line change
@@ -44,13 +44,6 @@ public void save(Issue issue) {
issue.getMilestoneId(),
issue.getAuthorUserId(),
issue.getNumber());

// TODO: issue에 딸려있는 Label insert 로직 추
// String queryForLabel = "insert into label (id, title, description, color_code, text_code) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
// jdbcTemplate.update(query, issue.getId(),
// issue.getTitle(),
// issue.getDescription(),
// issue.getAssignee()
}

public long simpleSave(Issue issue) {
@@ -62,7 +55,6 @@ public long simpleSave(Issue issue) {


public List<Label> findAllLabelsByIssueId(Long issueId) {
System.out.println(issueId);
String query = "select lbl.id, lbl.title, lbl.description, lbl.color_code, lbl.font_light\n" +
"from issue iss\n" +
"inner join issue_has_label\n" +
@@ -205,4 +197,10 @@ public void deleteIssueIdsConnectedByLabelId(Long id) {
String query = "delete from issue_has_label where label_id = ?";
jdbcTemplate.update(query, id);
}

// public Long findIssueIdByMilestoneId(Long milestoneId) {
// String query = "select id from issue where milestone_id = ?";
// System.out.println(milestoneId);
// return jdbcTemplate.queryForObject(query, Long.class, milestoneId);
// }
}
Original file line number Diff line number Diff line change
@@ -15,7 +15,6 @@
@Repository
public class UserRepository {

Logger logger = LoggerFactory.getLogger(UserRepository.class);
private final JdbcTemplate jdbcTemplate;

public UserRepository(DataSource dataSource) {
@@ -28,7 +27,6 @@ public List<User> findAll() {
}

public User findOneById(Long userId) {
logger.info("User Id :{}", userId);
String query = "select id, name, avatar_url\n" +
"from user\n" +
"where id = ?";
@@ -41,10 +39,8 @@ public void save(User user) {
}

public boolean hasSameUserId(Long userId) {
logger.info("User Id :{}", userId);
String query = "select exists (select id from user where id = ?) as success";
return jdbcTemplate.queryForObject(query, Boolean.class, userId);
// return null;
}

public List<User> findAllAuthors() {
4 changes: 2 additions & 2 deletions be/src/main/java/com/issuetracker/s3/ImageService.java
Original file line number Diff line number Diff line change
@@ -28,7 +28,7 @@ public class ImageService {
@Value("${cloud.aws.s3.bucket.url}")
private String defaultUrl;

public String upload(MultipartFile file) throws IOException {
public ImageUrlResponseDto upload(MultipartFile file) throws IOException {
ObjectMetadata data = new ObjectMetadata();
data.setContentType(file.getContentType());
data.setContentLength(file.getSize());
@@ -44,7 +44,7 @@ public String upload(MultipartFile file) throws IOException {
s3client.putObject(bucket, imageName, file.getInputStream(), data);

String urlForMarkdown = defaultUrl + "/" + imageName;
return urlForMarkdown;
return new ImageUrlResponseDto(urlForMarkdown);
}

private String getImageName(MultipartFile file) {
16 changes: 16 additions & 0 deletions be/src/main/java/com/issuetracker/s3/ImageUrlResponseDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.issuetracker.s3;

import com.fasterxml.jackson.annotation.JsonProperty;

public class ImageUrlResponseDto {
@JsonProperty("image_url")
private String imageUrl;

public ImageUrlResponseDto(String imageUrl) {
this.imageUrl = imageUrl;
}

public String getImageUrl() {
return imageUrl;
}
}
6 changes: 2 additions & 4 deletions be/src/main/java/com/issuetracker/s3/UploadController.java
Original file line number Diff line number Diff line change
@@ -17,9 +17,7 @@ public UploadController(ImageService imageService) {
}

@PostMapping("/api/images")
public String upload(@RequestParam("image") MultipartFile file) throws IOException {
return imageService.upload(file); // S3 bucket의 static/ 폴더를 지정한 것.
public ImageUrlResponseDto upload(@RequestParam("image") MultipartFile file) throws IOException {
return imageService.upload(file);
}


}
Original file line number Diff line number Diff line change
@@ -6,6 +6,7 @@
import com.issuetracker.dto.ResponseStatusDto;
import com.issuetracker.repository.EmojisStatusRepository;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;
11 changes: 2 additions & 9 deletions be/src/main/java/com/issuetracker/service/IssueService.java
Original file line number Diff line number Diff line change
@@ -33,13 +33,6 @@ public IssueService(IssueRepository issueRepository, UserRepository userReposito
this.commentRepository = commentRepository;
}

// public List<IssueDto> getAllIssues() {
// return issueRepository.findAllIssues().stream()
// .map(issue -> IssueDto.of(issue, issueRepository.findMilestoneTitleByIssueId(issue.getId()), issueRepository.findAllLabelsByIssueId(issue.getId()),
// userRepository.findOneById(issue.getAuthorUserId()), userRepository.findOneById(issue.getAssignee())))
// .collect(Collectors.toList());
// }

public ResponseStatusDto saveIssue(IssueRequestDto requestDto, User author) {
int lastNumOfIssues = issueRepository.findAllIssues().size();

@@ -75,9 +68,9 @@ public IssueDetailDto searchIssueDetailByIssueId(Long id) {
Issue issue = issueRepository.findIssueByIssueId(id);

MilestoneForIssueDetailDto milestoneDto = null;
logger.info("마일스톤아이디: {}", issue.getMilestoneId());
if (issue.getMilestoneId() != 0) {
milestoneDto = MilestoneForIssueDetailDto.of(
issue.getMilestoneId(),
milestoneRepository.findMilestoneByMilestoneId(issue.getMilestoneId()),
issueRepository.countOpenedIssuesByMilestoneId(issue.getMilestoneId()),
issueRepository.countClosedIssuesByMilestoneId(issue.getMilestoneId())
@@ -93,7 +86,7 @@ public IssueDetailDto searchIssueDetailByIssueId(Long id) {

UserDto assignee = null;
if (issue.getAssignee() != 0) {
UserDto.of(userRepository.findOneById(issue.getAssignee()));
assignee = UserDto.of(userRepository.findOneById(issue.getAssignee()));
}

if (assignee == null) {
3 changes: 0 additions & 3 deletions be/src/main/java/com/issuetracker/util/Oauth.java
Original file line number Diff line number Diff line change
@@ -29,9 +29,6 @@ public Oauth(Environment environment) {
public static final String ALGORITHM_SECRET = "jwt.algorithm.secret";
public static final String ISSUER = "jwt.issuer";

private String access_token;


public String getClientIdIos() {
return environment.getProperty(CLIENT_ID_iOS);
}