Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,13 @@
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletRequest;

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestBody;

@Tag(name = "auth", description = "인증 API")
public interface AuthControllerDocs {

@Operation(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag;

@Tag(name = "documents", description = "문서 API")
@Tag(name = "documents", description = "파일 API")
public interface DocumentControllerDocs {

@Operation(
Expand Down Expand Up @@ -119,7 +119,7 @@ ResponseEntity<SuccessResponse<DocumentsGetResponse>> getDocuments(
) @PathVariable long teamId,
@Parameter(
name = "folderId",
description = "조회할 폴더 id",
description = "조회할 폴더 id (최상단은 비워두기)",
in = ParameterIn.QUERY,
example = "1"
) @RequestParam Long folderId
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,26 +12,26 @@

@Builder(access = PRIVATE)
public record DocumentsGetResponse(
List<DocumentGetResponse> documents
List<DocumentInfoGetResponse> documents
) {

public static DocumentsGetResponse from(final List<Document> documents) {
return DocumentsGetResponse.builder()
.documents(documents.stream().map(DocumentGetResponse::from).toList())
.documents(documents.stream().map(DocumentInfoGetResponse::from).toList())
.build();
}

@Builder(access = PRIVATE)
private record DocumentGetResponse(
private record DocumentInfoGetResponse(
long documentId,
@NonNull String name,
@NonNull String url,
double capacity,
@NonNull LocalDateTime createdTime
) {

public static DocumentGetResponse from(final Document document) {
return DocumentGetResponse.builder()
public static DocumentInfoGetResponse from(final Document document) {
return DocumentInfoGetResponse.builder()
.documentId(document.getId())
.name(document.getFileName())
.url(document.getFileUrl())
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.tiki.server.drive.controller;

import static com.tiki.server.common.dto.SuccessResponse.success;
import static com.tiki.server.drive.message.SuccessMessage.SUCCESS_GET_DRIVE;

import java.security.Principal;

import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;

import com.tiki.server.common.dto.SuccessResponse;
import com.tiki.server.drive.controller.docs.DriveControllerDocs;
import com.tiki.server.drive.dto.DriveGetResponse;
import com.tiki.server.drive.service.DriveService;

import lombok.RequiredArgsConstructor;

@RestController
@RequiredArgsConstructor
@RequestMapping("api/v1")
public class DriveController implements DriveControllerDocs {

private final DriveService driveService;

@ResponseStatus(HttpStatus.OK)
@GetMapping("/teams/{teamId}/drive")
public SuccessResponse<DriveGetResponse> getDrive(
final Principal principal,
@PathVariable final long teamId,
@RequestParam(required = false) final Long folderId
) {
long memberId = Long.parseLong(principal.getName());
DriveGetResponse response = driveService.getDrive(memberId, teamId, folderId);
return success(SUCCESS_GET_DRIVE.getMessage(), response);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package com.tiki.server.drive.controller.docs;

import java.security.Principal;

import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;

import com.tiki.server.common.dto.ErrorResponse;
import com.tiki.server.common.dto.SuccessResponse;
import com.tiki.server.drive.dto.DriveGetResponse;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.enums.ParameterIn;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag;

@Tag(name = "drive", description = "드라이브 API")
public interface DriveControllerDocs {

@Operation(
summary = "드라이브 조회",
description = "드라이브 뷰를 조회한다.",
responses = {
@ApiResponse(responseCode = "200", description = "성공"),
@ApiResponse(
responseCode = "4xx",
description = "클라이언트(요청) 오류",
content = @Content(schema = @Schema(implementation = ErrorResponse.class))),
@ApiResponse(
responseCode = "500",
description = "서버 내부 오류",
content = @Content(schema = @Schema(implementation = ErrorResponse.class)))}
)
SuccessResponse<DriveGetResponse> getDrive(
@Parameter(hidden = true) Principal principal,
@Parameter(
name = "teamId",
description = "팀 id",
in = ParameterIn.PATH,
required = true,
example = "1"
) @PathVariable long teamId,
@Parameter(
name = "folderId",
description = "조회할 폴더 id (최상단은 비워두기)",
in = ParameterIn.QUERY,
example = "1"
) @RequestParam Long folderId
);
}
68 changes: 68 additions & 0 deletions src/main/java/com/tiki/server/drive/dto/DriveGetResponse.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
package com.tiki.server.drive.dto;

import static lombok.AccessLevel.PRIVATE;

import java.time.LocalDateTime;
import java.util.List;

import com.tiki.server.document.entity.Document;
import com.tiki.server.folder.entity.Folder;

import lombok.Builder;
import lombok.NonNull;

@Builder(access = PRIVATE)
public record DriveGetResponse(
List<DocumentGetResponse> documents,
List<FolderGetResponse> folders
) {

public static DriveGetResponse of(final List<Document> documents, final List<Folder> folders) {
return DriveGetResponse.builder()
.documents(documents.stream().map(DocumentGetResponse::from).toList())
.folders(folders.stream().map(FolderGetResponse::from).toList())
.build();
}

@Builder(access = PRIVATE)
private record DocumentGetResponse(
long documentId,
@NonNull String name,
@NonNull String url,
double capacity,
@NonNull LocalDateTime createdTime,
@NonNull String type
) {

public static DocumentGetResponse from(final Document document) {
return DocumentGetResponse.builder()
.documentId(document.getId())
.name(document.getFileName())
.url(document.getFileUrl())
.capacity(document.getCapacity())
.createdTime(document.getCreatedAt())
.type("document")
.build();
}
}

@Builder(access = PRIVATE)
private record FolderGetResponse(
long folderId,
@NonNull String name,
@NonNull LocalDateTime createdTime,
@NonNull String path,
@NonNull String type
) {

private static FolderGetResponse from(Folder folder) {
return FolderGetResponse.builder()
.folderId(folder.getId())
.name(folder.getName())
.createdTime(folder.getCreatedAt())
.path(folder.getPath())
.type("folder")
.build();
}
}
}
13 changes: 13 additions & 0 deletions src/main/java/com/tiki/server/drive/message/SuccessMessage.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.tiki.server.drive.message;

import lombok.Getter;
import lombok.RequiredArgsConstructor;

@Getter
@RequiredArgsConstructor
public enum SuccessMessage {

SUCCESS_GET_DRIVE("드라이브 조회 성공");

private final String message;
}
52 changes: 52 additions & 0 deletions src/main/java/com/tiki/server/drive/service/DriveService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package com.tiki.server.drive.service;

import static com.tiki.server.folder.constant.Constant.ROOT_PATH;

import java.util.List;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.tiki.server.document.adapter.DocumentFinder;
import com.tiki.server.document.entity.Document;
import com.tiki.server.drive.dto.DriveGetResponse;
import com.tiki.server.folder.adapter.FolderFinder;
import com.tiki.server.folder.entity.Folder;
import com.tiki.server.memberteammanager.adapter.MemberTeamManagerFinder;

import lombok.RequiredArgsConstructor;

@Service
@RequiredArgsConstructor
@Transactional(readOnly = true)
public class DriveService {

private final MemberTeamManagerFinder memberTeamManagerFinder;
private final DocumentFinder documentFinder;
private final FolderFinder folderFinder;

public DriveGetResponse getDrive(final long memberId, final long teamId, final Long folderId) {
memberTeamManagerFinder.findByMemberIdAndTeamId(memberId, teamId);
List<Document> documents = documentFinder.findByTeamIdAndFolderId(teamId, folderId);
Folder folder = getFolder(teamId, folderId);
String path = getChildFolderPath(folder);
List<Folder> folders = folderFinder.findByTeamIdAndPath(teamId, path);
return DriveGetResponse.of(documents, folders);
}

private Folder getFolder(final long teamId, final Long folderId) {
if (folderId == null) {
return null;
}
Folder folder = folderFinder.findById(folderId);
folder.validateTeamId(teamId);
return folder;
}

private String getChildFolderPath(final Folder folder) {
if (folder == null) {
return ROOT_PATH;
}
return folder.getChildPath();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@

import com.tiki.server.common.dto.ErrorResponse;
import com.tiki.server.common.dto.SuccessResponse;
import com.tiki.server.document.dto.response.DeletedDocumentsGetResponse;
import com.tiki.server.folder.dto.request.FolderCreateRequest;
import com.tiki.server.folder.dto.request.FolderNameUpdateRequest;
import com.tiki.server.folder.dto.response.FolderCreateResponse;
Expand All @@ -22,7 +21,9 @@
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag;

@Tag(name = "folders", description = "폴더 API")
public interface FolderControllerDocs {

@Operation(
Expand All @@ -45,11 +46,12 @@ ResponseEntity<SuccessResponse<FoldersGetResponse>> getFolders(
name = "teamId",
description = "팀 id",
in = ParameterIn.PATH,
required = true,
example = "1"
) @PathVariable long teamId,
@Parameter(
name = "folderId",
description = "조회할 폴더 id",
description = "조회할 폴더 id (최상단은 비워두기)",
in = ParameterIn.QUERY,
example = "1"
) @RequestParam Long folderId
Expand All @@ -75,11 +77,12 @@ ResponseEntity<SuccessResponse<FolderCreateResponse>> createFolder(
name = "teamId",
description = "팀 id",
in = ParameterIn.PATH,
required = true,
example = "1"
) @PathVariable long teamId,
@Parameter(
name = "folderId",
description = "생성할 폴더가 속할 폴더 id",
description = "생성할 폴더가 속할 폴더 id (최상단은 비워두기)",
in = ParameterIn.QUERY,
example = "1"
) @RequestParam Long folderId,
Expand All @@ -106,6 +109,7 @@ ResponseEntity<SuccessResponse<?>> updateFolderName(
name = "teamId",
description = "팀 id",
in = ParameterIn.PATH,
required = true,
example = "1"
) @PathVariable long teamId,
@Parameter(
Expand Down Expand Up @@ -137,6 +141,7 @@ ResponseEntity<?> delete(
name = "teamId",
description = "팀 id",
in = ParameterIn.PATH,
required = true,
example = "1"
) @PathVariable long teamId,
@Parameter(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,25 +12,25 @@

@Builder(access = PRIVATE)
public record FoldersGetResponse(
List<FolderGetResponse> folders
List<FolderInfoGetResponse> folders
) {

public static FoldersGetResponse from(List<Folder> folders) {
return FoldersGetResponse.builder()
.folders(folders.stream().map(FolderGetResponse::from).toList())
.folders(folders.stream().map(FolderInfoGetResponse::from).toList())
.build();
}

@Builder(access = PRIVATE)
private record FolderGetResponse(
private record FolderInfoGetResponse(
long id,
@NonNull String name,
@NonNull LocalDateTime createdTime,
@NonNull String path
) {

private static FolderGetResponse from(Folder folder) {
return FolderGetResponse.builder()
private static FolderInfoGetResponse from(Folder folder) {
return FolderInfoGetResponse.builder()
.id(folder.getId())
.name(folder.getName())
.createdTime(folder.getCreatedAt())
Expand Down
Loading
Loading