From 1861bdfe74fb4f819b0b5c3f4d3fb9cfe4f1c081 Mon Sep 17 00:00:00 2001 From: qvalentin Date: Fri, 22 Apr 2022 11:22:46 +0200 Subject: [PATCH] Add add Link usecase --- .../src/main/java/link/LinkIdGenerator.java | 8 ++++ .../src/main/java/link/LinkUseCase.java | 44 +++++++++++++++++++ .../java/category/CategoryRepository.java | 15 +++++-- .../java/exeptions/CategroyDoesNotExist.java | 8 ++++ 4 files changed, 72 insertions(+), 3 deletions(-) create mode 100644 2-Application/src/main/java/link/LinkIdGenerator.java create mode 100644 2-Application/src/main/java/link/LinkUseCase.java create mode 100644 3-Domain/src/main/java/exeptions/CategroyDoesNotExist.java diff --git a/2-Application/src/main/java/link/LinkIdGenerator.java b/2-Application/src/main/java/link/LinkIdGenerator.java new file mode 100644 index 0000000..d5edc19 --- /dev/null +++ b/2-Application/src/main/java/link/LinkIdGenerator.java @@ -0,0 +1,8 @@ +package link; + +import category.CategoryId; + +public interface LinkIdGenerator { + + LinkId generateId(); +} diff --git a/2-Application/src/main/java/link/LinkUseCase.java b/2-Application/src/main/java/link/LinkUseCase.java new file mode 100644 index 0000000..2d12a7c --- /dev/null +++ b/2-Application/src/main/java/link/LinkUseCase.java @@ -0,0 +1,44 @@ +package link; + +import category.CategoryName; +import category.CategoryRepository; +import tag.TaggingUseCase; +import user.Username; + +import java.util.Set; +import java.util.stream.Collectors; + +public class LinkUseCase { + + private final LinkRepository linkRepository; + private final CategoryRepository categoryRepository; + private final TaggingUseCase taggingUseCase; + private final LinkIdGenerator linkIdGenerator; + + public LinkUseCase(LinkRepository linkRepository, + CategoryRepository categoryRepository, + TaggingUseCase taggingUseCase, + LinkIdGenerator linkIdGenerator) { + this.linkRepository = linkRepository; + this.categoryRepository = categoryRepository; + this.taggingUseCase = taggingUseCase; + this.linkIdGenerator = linkIdGenerator; + } + + public void addLink(LinkUrl url, Set categoryNames, Username creator) { + + OnlineCheck.of(url); + + var categoryIds = categoryNames.stream().map(categoryRepository::getIdByName).collect(Collectors.toSet()); + + var tags = taggingUseCase.getTagsFor(url); + + var id = linkIdGenerator.generateId(); + + var link = new Link(id, creator, url, categoryIds, tags); + + linkRepository.add(link); + + } + +} diff --git a/3-Domain/src/main/java/category/CategoryRepository.java b/3-Domain/src/main/java/category/CategoryRepository.java index a858394..f7089b6 100644 --- a/3-Domain/src/main/java/category/CategoryRepository.java +++ b/3-Domain/src/main/java/category/CategoryRepository.java @@ -1,9 +1,10 @@ package category; import abstraction.CustomSet; -import abstraction.PersistenceAdapter; import abstraction.CustomSetPersistenceDecorator; +import abstraction.PersistenceAdapter; import exeptions.CategoryAlreadyExists; +import exeptions.CategroyDoesNotExist; import exeptions.NonUniqueId; import java.util.Optional; @@ -11,7 +12,6 @@ import java.util.Set; public class CategoryRepository { - final private CustomSet categories; public CategoryRepository(PersistenceAdapter categoryPersistenceAdapter) { @@ -22,11 +22,19 @@ public class CategoryRepository { return categories.stream().filter(category -> category.getName().equals(name)).findFirst(); } + public CategoryId getIdByName(CategoryName name) { + + return getByName(name) + .orElseThrow(() -> new CategroyDoesNotExist("A Category with name " + name + " does not exits. You must create it first.")) + .getId(); + + } + public Optional getById(CategoryId id) { return categories.stream().filter(category -> category.getId().equals(id)).findFirst(); } - public Set getAll(){ + public Set getAll() { return categories.getSet(); } @@ -37,6 +45,7 @@ public class CategoryRepository { /** * Check for duplicates with the domain rules + * * @param category */ private void checkDuplicates(Category category) { diff --git a/3-Domain/src/main/java/exeptions/CategroyDoesNotExist.java b/3-Domain/src/main/java/exeptions/CategroyDoesNotExist.java new file mode 100644 index 0000000..5bafb54 --- /dev/null +++ b/3-Domain/src/main/java/exeptions/CategroyDoesNotExist.java @@ -0,0 +1,8 @@ +package exeptions; + +public class CategroyDoesNotExist extends RuntimeException { + + public CategroyDoesNotExist(String message) { + super(message); + } +}