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 @@ -2,10 +2,10 @@

import java.util.UUID;

public record CreateFolderInput(String name, UUID parentFolderId) {
public record CreateFolderInput(String ownerId, String name, UUID parentFolderId) {

public static CreateFolderInput from(String name, UUID parentFolderId) {
return new CreateFolderInput(name, parentFolderId);
public static CreateFolderInput from(String ownerdId, String name, UUID parentFolderId) {
return new CreateFolderInput(ownerdId, name, parentFolderId);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -6,34 +6,44 @@
import com.callv2.drive.domain.folder.FolderGateway;
import com.callv2.drive.domain.folder.FolderID;
import com.callv2.drive.domain.folder.FolderName;
import com.callv2.drive.domain.member.Member;
import com.callv2.drive.domain.member.MemberGateway;
import com.callv2.drive.domain.member.MemberID;
import com.callv2.drive.domain.validation.Error;
import com.callv2.drive.domain.validation.handler.Notification;

public class DefaultCreateFolderUseCase extends CreateFolderUseCase {

private final MemberGateway memberGateway;
private final FolderGateway folderGateway;

public DefaultCreateFolderUseCase(final FolderGateway folderGateway) {
public DefaultCreateFolderUseCase(final MemberGateway memberGateway, final FolderGateway folderGateway) {
this.memberGateway = memberGateway;
this.folderGateway = folderGateway;
}

@Override
public CreateFolderOutput execute(final CreateFolderInput input) {
final MemberID ownerId = MemberID.of(input.ownerId());

if (!memberGateway.existsById(ownerId))
throw NotFoundException.with(Member.class, input.ownerId().toString());

final Folder parentFolder = folderGateway
.findById(FolderID.of(input.parentFolderId()))
.orElseThrow(() -> NotFoundException.with(
Folder.class,
"Parent folder with id %s not found".formatted(input.parentFolderId().toString())));

return CreateFolderOutput.from(createFolder(FolderName.of(input.name()), parentFolder));
return CreateFolderOutput.from(createFolder(ownerId, FolderName.of(input.name()), parentFolder));
}

private Folder createFolder(final FolderName name, final Folder parentFolder) {
private Folder createFolder(final MemberID ownerId, FolderName name, final Folder parentFolder) {
final Notification notification = Notification.create();
if (parentFolder.getSubFolders().stream().anyMatch(subFolder -> subFolder.name().equals(name)))
notification.append(Error.with("Folder with the same name already exists"));

final Folder folder = notification.valdiate(() -> Folder.create(name, parentFolder));
final Folder folder = notification.valdiate(() -> Folder.create(ownerId, name, parentFolder));

if (notification.hasError())
throw ValidationException.with("Could not create Aggregate Folder", notification);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,26 +3,39 @@
import java.util.Objects;
import java.util.Optional;

import com.callv2.drive.domain.exception.NotFoundException;
import com.callv2.drive.domain.file.FileGateway;
import com.callv2.drive.domain.folder.Folder;
import com.callv2.drive.domain.folder.FolderGateway;
import com.callv2.drive.domain.member.Member;
import com.callv2.drive.domain.member.MemberGateway;
import com.callv2.drive.domain.member.MemberID;

public class DefaultGetRootFolderUseCase extends GetRootFolderUseCase {

private final MemberGateway memberGateway;
private final FolderGateway folderGateway;
private final FileGateway fileGateway;

public DefaultGetRootFolderUseCase(
final MemberGateway memberGateway,
final FolderGateway folderGateway,
final FileGateway fileGateway) {
this.memberGateway = Objects.requireNonNull(memberGateway);
this.folderGateway = Objects.requireNonNull(folderGateway);
this.fileGateway = Objects.requireNonNull(fileGateway);
}

@Override
public GetRootFolderOutput execute() {
public GetRootFolderOutput execute(final GetRootFolderInput input) {

final MemberID owner = MemberID.of(input.ownerId());

if (!memberGateway.existsById(owner))
throw NotFoundException.with(Member.class, owner.getValue().toString());

final Optional<Folder> root = folderGateway.findRoot();
final Folder folder = root.isPresent() ? root.get() : folderGateway.create(Folder.createRoot());
final Folder folder = root.isPresent() ? root.get() : folderGateway.create(Folder.createRoot(owner));
return GetRootFolderOutput.from(folder, fileGateway.findByFolder(folder.getId()));
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.callv2.drive.application.folder.retrieve.get.root;
public record GetRootFolderInput(String ownerId) {

public static GetRootFolderInput from(final String ownerId) {
return new GetRootFolderInput(ownerId);
}

}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.callv2.drive.application.folder.retrieve.get.root;

import com.callv2.drive.application.NullaryUseCase;
import com.callv2.drive.application.UseCase;

public abstract class GetRootFolderUseCase extends NullaryUseCase<GetRootFolderOutput> {
public abstract class GetRootFolderUseCase extends UseCase<GetRootFolderInput, GetRootFolderOutput> {

}
Loading