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

Feature/chung step4 #11

Merged
merged 21 commits into from
May 12, 2024
Merged

Feature/chung step4 #11

merged 21 commits into from
May 12, 2024

Conversation

kochungcheon
Copy link

@kochungcheon kochungcheon commented Feb 28, 2024

구현 기능

폴더 요약

폴더 요약에는 다음 정보가 담겨 있습니다

  1. 폴더 명
    • 사용자가 설정한 폴더 명을 폴더 요약 API 요청 시 보냅니다
  2. 생성 날짜
    • 생성 날짜는 최초 생성 시 반영되며 변경 되지 않습니다
  3. 수정 날짜
    • 수정 날짜의 경우, 하위 폴더의 과업이 발생하면 바뀌게 됩니다

루트 폴더 요약

루트 폴더 요약에는 다음 정보가 담겨 있습니다

  1. 루트 폴더 pk
  2. 폴더 이름
    • 사용자가 설정한 폴더 명을 API 요청 시 보냅니다
  3. 가용 용량
    • 폴더 총 용량으로 현재 프로젝트에서는 2GB 로 고정입니다
  4. 사용 용량
    • 스토리지 사용 용량이고 전달 단위는 GB (소수점 6째 자리에서 반올림)로 클라이언트에 전달합니다.
  5. 여유 용량
    • API 요청 시 마다 계산(가용 용량 - 사용 용량)해서 클라이언트에게 전달합니다.

루트 폴더를 만든 이유

  1. 루트 폴더는 최상위 폴더이자 상품으로 가용 용량에 대한 정보를 지니고 있습니다. 가용 용량은 하위 파일의 수정 때마다, 변경이 되어야합니다. 그렇기에 일반 폴더와 테이블을 분리하여 관리하고자 하였습니다. 루트 폴더 테이블에서만 찾으면 되서 불필요한 데이터를 찾지 않아도 되기 때문입니다.

루트 폴더 메타데이터

image

  • 필드 설명
    id : pk
    origianlFolderName : 사용자가 루트 폴더에 설정한 이름입니다
    storedFolderName : 서버에 저장될 루트 폴더의 이름입니다 UUID + 날짜로 만들어집니다.
    availableSpace : 가용 공간입니다. 현재 프로젝트에선, 2GB로 고정되어있습니다.
    usedSpace : 폴더에 업로드된 파일 총 용량입니다

  • 메서드 설명
    storedName : 서버에 저장될 폴더 명을 생성합니다. UUID + 날짜로 생성합니다
    increaseUsedSpace : 사용 용량을 증가 시킵니다. 루트 폴더 하위에 파일 업로드 과업이 발생할 시 호출 됩니다. 가용 용량을 초과하는 업로드가 발생하게 될 시, EXCEEDED_CAPACITY(HttpStatus.INSUFFICIENT_STORAGE, "더 이상 업로드 할 수 없습니다") 를 던집니다
    decreaseUsedSpace : 사용 용량을 줄입니다. 파일 및 폴더 삭제 과업이 발생할 시 호출됩니다. 사용 용량 보다 더 많이 줄이게 될 경우 INVALID_OPERATION(HttpStatus.BAD_REQUEST, "사용 중인 공간보다 많은 공간은 해제할 수 없습니다")를 던집니다
    calRemainSpace : 잔여 용량을 계산 합니다. 루트 폴더 요약 API 요청 시 호출됩니다.

  • 인덱스
    조회 로직에 인덱스를 걸었습니다

@Table(indexes = {
    @Index(name = "index_id_ownerId", columnList = "id, ownerId"),
    @Index(name = "index_storedFolderName", columnList = "storedFolderName"),
    @Index(name = "index_ownerId_originalFolderName", columnList = "ownerId, originalFolderName")
})

기존 코드 변경 사항

MetadataType 제거

파일, 폴더를 구분 하던 MetadataType을 제거 했습니다. DBMS 에서 파일과 폴더는 서로 다른 테이블에서 관리되기 때문에, 별도로 구분을 더 할 필요는 없다는 판단이였습니다.

MINE 타입 도입 (FileType)

파일을 비디오, 오디오, 도큐먼트, 이미지, 그 외로 분류 하였습니다.

@kochungcheon kochungcheon added the enhancement New feature or request label Feb 28, 2024
@kochungcheon kochungcheon self-assigned this Feb 28, 2024
 - Cast one of the operands of this multiplication operation to a long
>> - Folder 에 있던 Type 을 삭제하였습니다. 테> 블을 통해 폴더와 파일이 식별 되기에 Type으로 한번 더 구분하는 것은 메모리 낭비라 판단 되서 입니다.
>> - File 은 기존 File 로 통칭 했던 것에서 이미지, 비디오, 오디오, 도큐먼트 그리고 그외로 분류하였습니다
Copy link
Member

@VSFe VSFe left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

논리 자체는 되게 괜찮은 논리였던 것 같습니다.
온라인으로 설명했던 부분 반영해서 수정하시고, 다음 Step 진행하시면 됩니다~

}

@GetMapping
@ResponseStatus(HttpStatus.NO_CONTENT)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

statusCode 좀 이상하네요

@Column(nullable = false)
private Long uploaderId;
private Long parentId;
private BigDecimal sizeInBytes;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Long

public void uploadFile(MultipartFile file, Long userId, Long parentId) {
String basePath = folderService.findPathBy();
@Value("${file.buffer}")
private int bufferSize;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Long

public static FileDeleteRequest of(long fileId, long userId) {
return new FileDeleteRequest(fileId, userId);
}
@NotNull(message = "파일 id는 null 될 수 없습니다") long fileId,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Validation을 넣을거면 @Positive도 넣는게 좋지 않나 싶어요

Copy link

sonarcloud bot commented May 12, 2024

@kochungcheon kochungcheon merged commit 0415c16 into base/chung May 12, 2024
2 checks passed
@kochungcheon kochungcheon deleted the feature/chung_step4 branch May 12, 2024 15:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants