Skip to content

Commit

Permalink
Merge branch 'master' of https://github.com/whitem4rk/Inhabas.com-api
Browse files Browse the repository at this point in the history
…into feature/InhaBas#211
  • Loading branch information
whitem4rk committed Jan 26, 2024
2 parents 2286191 + 88a03aa commit 96bba04
Show file tree
Hide file tree
Showing 16 changed files with 290 additions and 6 deletions.
21 changes: 21 additions & 0 deletions .github/workflows/spotless-check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
name: Spotless Check

on: [push, pull_request]

jobs:
build:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v2
- name: Set up JDK 11
uses: actions/setup-java@v2
with:
java-version: '11'
distribution: 'adopt'

- name: Grant execute permission for gradlew
run: chmod +x ./gradlew

- name: Run Spotless Check
run: ./gradlew spotlessCheck
35 changes: 35 additions & 0 deletions COMMITER-INSTRUCTION.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# IBAS Commiter

## Merge 하는 방법

IBAS Project는 현재 모든 PR에 대해서 Merge Commit을 적용하기로 결정했습니다.

현재 IBAS는 초기 프로젝트이기 때문에 PR의 규모가 커지면서 개별 커밋에 대한 상세한 히스토리를 유지하기 위해 Merge Commit을 적용하기로 결정했습니다.

추후 프로젝트 규모 및 PR의 규모 변동에 따라 Merge 방식이 다시 논의될 수 있습니다. 아래 논의를 참고해주세요.

- [PR Merge 방식에 대한 논의](https://github.com/InhaBas/Inhabas.com-api/issues/188)

### Merge 할 때 아래의 절차를 따라주세요

1. **Create a Merge Commit** 선택

![select merge commit](docs/images/commiter-instruction01-select-merge-commit.png)

2. **Merge pull request** 선택
![select merge pull request](docs/images/commitor-instruction02-select-merge-pull-request.png)

3. Commit 제목, 본문 아래와 같이 수정, **Confirm merge** 선택
![select merge pull request](docs/images/commitor-instruction03-modify-title-body.png)

> **NOTE:** IBAS Project의 Commit convention은 다음과 같습니다.
>
>```jsx
>[feature/#67] 대댓글 UI 추가 // header : [branch name] + title
>
>- 대댓글 컴포넌트 생성 // body
>- 댓글 컴포넌트에 대댓글 컴포넌트 달 수 있게 변경
>
>resolves: #67 // footer
>see also: #56, #49
>```
105 changes: 105 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
# How to Contribute

## 기여하는 방법

### 1. 새로운 브렌치 만들기

IBAS Project를 로컬 환경에 설치하면 기본적으로 master / main 이라는 브렌치에서 시작합니다. 이 곳, master / main 브렌치에서 직접 개발하는 것이 아니라 새로운 브렌치를 만들어서 작업합니다.

- 터미널에서 새로운 브렌치를 만듭니다.

```jsx
git checkout -b branchName
```

### 2. 새로운 브렌치에서 파일 수정하기

이제 새로운 브렌치에서 프로젝트를 수정합니다.

수정이 끝나면 다음의 과정을 수행하세요:

- git add .

```jsx
git add .
```

(수정사항들 git에 추가하는 명령어)

- git commit -m"커밋메세지"

```jsx
git commit -m"커밋메세지"
```

(git에 추가된 수정사항들을 묶어서 “커밋메세지”라는 이름으로 저장)

> IBAS Project의 Commit convention은 다음과 같습니다.
>
>```jsx
>[feature/#67] 대댓글 UI 추가
>```
>

- git push

```jsx
git push origin branchName
```

(“커밋메세지”라는 이름으로 저장된 수정사항들을 원격 저장소에 보내기)

### 3.PR올리기

수정후 push가 완료되면 IBAS Project로 들어갑니다(아래 링크 참고).

백엔드: [GitHub - InhaBas/Inhabas.com-api](https://github.com/InhaBas/Inhabas.com-api)

프론트엔드: [GitHub - InhaBas/Inhabas.com-front](https://github.com/InhaBas/inhabas.com-front)

git push가 제대로 이루어졌다면 IBAS 백엔드,프론트엔드 깃허브로 갔을 때 PR을 생성하라는 알림이 새로 생깁니다.

### 4.PR이 Merge되면 브렌치 삭제하기

PR이 성공적으로 오픈소스의 master 브렌치에 Merge되면 PR용으로 작업했던 브렌치를 삭제해야 합니다.

로컬환경에서 main 혹은 master 브렌치로 이동 후 오픈소스의 터미널에서

1. `git branch -D branchName` (로컬 브렌치 삭제)

2. `git push origin --delete branchName` (깃허브 브렌치 삭제)

입력해서 깔끔하게 브렌치를 삭제해야 합니다.

---

## 프로젝트 원본이랑 동기화 시키기- git pull

### 방법1

개발 작업을 하면서 프로젝트 원본이랑 충돌이 일어날 수 있기 때문에 프로젝트 원본에 수정사항이 생기면 주기적으로

```jsx
git pull upstream master
```

을 입력해서 프로젝트 원본이랑 동기화 시킵니다.

### 방법2(추천)

1. 깃허브에서 작업하는 브렌치로 이동

2. 프로젝트 위치의 터미널에서 `git pull origin 작업하는 브렌치이름` 입력

### 주의해야할 점!(다른 브렌치로 이동하는경우)

1. 한 브렌치에서 다른 브렌치로 이동하기 전에는 무조건 git commit을 해야 합니다.
2. 다른 브렌치로 이동하면 오른쪽 아래 생기는 Reload 버튼을 꼭 눌러줘야 합니다.(intelliJ 경우)

## PR 올릴 때 주의사항

PR을 제출할 때는 다음 가이드라인을 따라야 합니다:

- Style Convention을 참고하세요.
[STYLE-CONVENTION.md](STYLE-CONVENTION.md)
- 작성한 코드가 기존 코드 스타일을 준수하고 있는지 확인해야 합니다.
31 changes: 31 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# IBAS (Inha Bigdata Analysis Society)

![main logo of IBAS](docs/images/logo_purple.png)

IBAS는 인하대학교의 빅데이터 학술동아리 입니다. 주로 데이터 분석 및 머신러닝 같은 데이터 관련 분야를 탐구하며, 웹 개발과 데이터 엔지니어링에 중점을 둔 IBAS 개발팀이 있어, 다양한 IT 분야에서의 활동을 지향하고 있습니다.

## IBAS Project

IBAS 개발팀은 동아리의 활동과 비전을 온라인에 효과적으로 전달하기 위해 웹 페이지를 운영하고 있습니다. IBAS 웹페이지는 회원들과의 소통을 강화하고 외부에 동아리의 활동을 알리는 플랫폼으로 활용되고 있습니다.

[IBAS 웹페이지 바로가기](https://www.inhabas.com/)

### Style Convention

IBAS Project는 코드 품질과 가독성을 유지하기 위해 일관된 스타일 규약을 따르고 있습니다. 기여하기 전 아래 문서를 참고해주세요.

[STYLE-CONVENTION.md](STYLE-CONVENTION.md)

### IBAS에 기여하기

IBAS에 소속된 회원이라면 누구든지 이 프로젝트에 기여할 수 있습니다.

아래 기여 가이드라인을 확인하고 기여해주세요.

1. PR올리는 경우

[CONTRIBUTING.md](CONTRIBUTING.md)

2. PR Merge 하는 경우

[COMMITER-INSTRUCTION.md](COMMITER-INSTRUCTION.md)
43 changes: 43 additions & 0 deletions STYLE-CONVENTION.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@

# IBAS Project Style Convention

이 문서는 IBAS Project의 Style Convention에 대해 설명하는 문서입니다. IBAS Project는 코드 품질과 가독성을 유지하기 위해 일관된 스타일 규약을 따릅니다. 이러한 스타일 규약을 통해 프로젝트 참여자들이 명확하고 일관된 방식으로 코드를 작성할 수 있으며, 협업과 코드 유지 관리를 용이하게 할 수 있습니다.

## IBAS Style Convention 논의사항

IBAS Project의 주요한 Style Convention은 깃허브 Issue를 통해 논의되고 정해집니다. 프로젝트의 모든 멤버가 스타일 결정에 참여하고 의견을 제시할 수 있습니다.

- [import 시 * 와일드카드 사용여부 논의](https://github.com/InhaBas/Inhabas.com-api/issues/187)
- [PR Merge 방식에 대한 논의](https://github.com/InhaBas/Inhabas.com-api/issues/188)
- [JUnit / AssertJ 채택 논의](https://github.com/InhaBas/Inhabas.com-api/issues/165)

## Documentation style

IBAS Project의 기본 스타일은 [Google Developer Documentation Style Guide](https://developers.google.com/style)를 따르고 있습니다.

## Google Developer Document Style 적용

### Backend

#### 포멧 적용

1. 구글 스타일 깃허브에서 스타일 다운로드

- IntelliJ: [intellij-java-google-style.xml](https://github.com/google/styleguide/blob/gh-pages/intellij-java-google-style.xml)

- Eclipse: [eclipse-java-google-style.xml](https://github.com/google/styleguide/blob/gh-pages/eclipse-java-google-style.xml)

2. IDE에서 스타일 포멧 적용

#### 코드 스타일 교정

구글 코드 스타일에 맞게 코드 스타일 변경하는 명령어.

프로젝트 경로 터미널에서 아래 명령어 입력.

- 리눅스: `./gradlew spotlessApply`
- 윈도우: `.\gradlew spotlessApply`

### Frontend

prittier 이용해서 구글 스타일 컨벤션 적용.
26 changes: 26 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,32 @@ plugins {
id 'org.springframework.boot' version '2.6.1'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java-library'
id 'com.diffplug.spotless' version '6.13.0'
}

spotless {
java {
// 모든 Java 소스 파일에 포맷팅 규칙 적용
target("**/*.java")
// google 자바 포맷 적용
googleJavaFormat()
// 불필요한 임포트 제거
removeUnusedImports()
// 마지막줄 New Line 처리
endWithNewline()
// 공백 제거
trimTrailingWhitespace()
//임포트 순서 정리
importOrder(
"java",
"javax",
"lombok",
"org.springframework",
"",
"org.junit",
"com.guide"
)
}
}

springBoot {
Expand Down
Empty file added docs/back-end/back-end.md
Empty file.
Empty file added docs/fornt-end/front-end.md
Empty file.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/images/logo_purple.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,22 @@
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.context.annotation.Profile;

@Configuration
@Profile({"dev", "local", "test", "integration_test"})
public class S3Config {

@Value("${cloud.aws.credentials.access-key}")
@Value("${cloud.aws.credentials.accessKey}")
private String accessKey;
@Value("${cloud.aws.credentials.secret-key}")
@Value("${cloud.aws.credentials.secretKey}")
private String secretKey;
@Value("${cloud.aws.region.static}")
private String region;

@Bean
@Primary
public AmazonS3Client amazonS3Client() {
BasicAWSCredentials awsCredentials = new BasicAWSCredentials(accessKey, secretKey);
return (AmazonS3Client) AmazonS3ClientBuilder.standard()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
package com.inhabas.api.domain.file.usecase;

import com.amazonaws.services.s3.model.S3ObjectInputStream;
import org.springframework.web.multipart.MultipartFile;

public interface S3Service {

String uploadS3File(MultipartFile multipartFile);
String uploadS3File(MultipartFile multipartFile, String dirName);

S3ObjectInputStream downloadS3File(String dirName);

void deleteS3File(String fileUrl);

}
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,10 @@ public class S3ServiceImpl implements S3Service{
private final AmazonS3Client s3Client;

@Override
public String uploadS3File(MultipartFile multipartFile) {
public String uploadS3File(MultipartFile multipartFile, String dirName) {

String fileName = dirName + "_" + multipartFile.getOriginalFilename();

String fileName = multipartFile.getOriginalFilename();
try {
String contentType = getContentType(fileName);

Expand All @@ -41,6 +42,19 @@ public String uploadS3File(MultipartFile multipartFile) {
return s3Client.getUrl(bucket, fileName).toString();
}

@Override
public S3ObjectInputStream downloadS3File(String dirName) {

S3Object s3Object = s3Client.getObject(new GetObjectRequest(bucket, dirName));
return s3Object.getObjectContent();

}

@Override
public void deleteS3File(String fileUrl) {
s3Client.deleteObject(new DeleteObjectRequest(bucket, fileUrl));
}

private String getContentType(String fileName) throws IOException {

String ext = getExtension(fileName);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
public class PolicyTerm extends BaseEntity {

@Id
@GeneratedValue
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@ManyToOne(fetch = FetchType.LAZY, optional = false)
Expand Down

0 comments on commit 96bba04

Please sign in to comment.