-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
118 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,118 @@ | ||
# file-shield | ||
# 파일 확장자 차단 | ||
|
||
## 요구 사항 | ||
|
||
### 확장자 목록 조회 | ||
|
||
- 고정/커스텀 확장자 목록을 조회할 수 있어야 합니다. | ||
|
||
### 고정 확장자 차단 | ||
|
||
- 고정 확장자를 차단할 수 있습니다. | ||
|
||
### 고정 확장자 차단 해제 | ||
|
||
- 고정 확장자 차단을 해제할 수 있습니다. | ||
|
||
### 커스텀 확장자 차단 (생성) | ||
|
||
- 커스텀 확장자를 추가해서 차단할 수 있습니다. | ||
|
||
### 커스텀 확장자 차단 해제 (삭제) | ||
|
||
- 커스텀 확장자를 삭제해서 차단을 해제할 수 있습니다. | ||
|
||
## API 명세 | ||
|
||
### 확장자 목록 조회 | ||
|
||
``` | ||
PATCH /api/v1/file-extensions | ||
``` | ||
|
||
> Response | ||
| Name | Type | Description | | ||
|------------------------------|---------|-------------| | ||
| fixidExtention.extensionId | Number | 확장자 ID | | ||
| fixidExtention.extension | String | 확장자 | | ||
| fixidExtention.isBlocked | Boolean | 차단 여부 | | ||
| customExtensions.extensionId | Number | 확장자 ID | | ||
| customExtensions.extension | String | 확장자 | | ||
| customExtensions.isBlocked | Boolean | 차단 여부 | | ||
|
||
### 고정 확장자 차단 | ||
|
||
``` | ||
PATCH /api/v1/file-extensions/{{extensionId}}/fixed-block | ||
``` | ||
|
||
### 고정 확장자 차단 해제 | ||
|
||
``` | ||
PATCH /api/v1/file-extensions/{{extensionId}}/fixed-unblock | ||
``` | ||
|
||
### 커스텀 확장자 차단 (생성) | ||
|
||
``` | ||
POST /api/v1/file-extensions/custom-block | ||
``` | ||
|
||
> Request | ||
| Name | Type | Description | Required | | ||
|-----------|--------|-------------|----------| | ||
| extension | String | 확장자 | Y | | ||
|
||
> Response | ||
| Name | Type | Description | | ||
|-------------|--------|-------------| | ||
| extensionId | Number | 확장자 ID | | ||
|
||
### 커스텀 확장자 차단 해제 (삭제) | ||
|
||
``` | ||
DELETE /api/v1/file-extensions/{{extensionId}}/custom-unblock | ||
``` | ||
|
||
## 에러 코드 | ||
|
||
| API | Code | Message | Description | | ||
|-----------------|------|-------------------------------|-----------------| | ||
| 커스텀 확장자 차단 (생성) | 400 | InvalidInputException | 확장자가 올바르지 않습니다. | | ||
| | 409 | ExtensionDuplicationException | 확장자가 이미 존재합니다. | | ||
|
||
## 프로젝트 구조 | ||
|
||
외부 변경에 유연하게 대처하기 위해 멀티 모듈 구성의 헥사고날 아키텍처를 적용하였습니다. | ||
외부 요소에 의존하지 않고 도메인 계층에 집중할 수 있도록 하였습니다. | ||
|
||
### 계층 구조 | ||
|
||
- Application | ||
- 비즈니스 로직과 유즈케이스를 구현하는 계층입니다. | ||
- 도메인 모델과 상호작용하며 핵심 비즈니스 규칙을 수행합니다. | ||
- Domain | ||
- 핵심 도메인 모델과 비즈니스 규칙을 정의하는 계층입니다. | ||
- 소프트웨어의 핵심 로직이 위치합니다. | ||
- infrastructure | ||
- 외부 시스템과의 통합, 데이터베이스 접근 등을 담당하는 계층입니다. | ||
- Application 계층의 요청에 따라 외부와의 연동을 처리합니다. | ||
- Presentation | ||
- 사용자와의 상호작용을 담당하는 계층입니다. | ||
- 사용자의 요청을 처리하고 응답을 반환하는 역할을 수행합니다. | ||
- Bootstrap | ||
- 애플리케이션의 초기화와 설정을 담당하며, 프로젝트의 시작점입니다. | ||
- 의존성 주입, 환경 설정 등을 처리하여 전체 애플리케이션을 설정합니다. | ||
|
||
## 개발 환경 | ||
|
||
- Java 17 | ||
- Spring Boot 3.2.1 | ||
- Gradle | ||
- JPA | ||
- H2 | ||
|
||
![file-extension-ss](https://github.com/sa46lll/file-shield/assets/62706048/65f8414b-b9fd-4d7a-b87b-2d55e6c8a369) |