Skip to content

Commit

Permalink
added Mapper
Browse files Browse the repository at this point in the history
  • Loading branch information
7ubi committed Aug 14, 2024
1 parent b07ffdf commit 79bdc25
Show file tree
Hide file tree
Showing 14 changed files with 198 additions and 148 deletions.
3 changes: 3 additions & 0 deletions indexcards-docu/indexcards-docu.iml
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
<component name="CheckStyle-IDEA-Module" serialisationVersion="2">
<option name="activeLocationsIds" />
</component>
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$" />
Expand Down
177 changes: 102 additions & 75 deletions indexcards/pom.xml
Original file line number Diff line number Diff line change
@@ -1,82 +1,109 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.x7ubi</groupId>
<artifactId>indexcards</artifactId>
<version>1.0.0</version>
<name>indexcards</name>
<description>Index Cards project for Spring Boot</description>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.x7ubi</groupId>
<artifactId>indexcards</artifactId>
<version>1.0.0</version>
<name>indexcards</name>
<description>Index Cards project for Spring Boot</description>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.9.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.200</version>
<scope>test</scope>
</dependency>
</dependencies>
<dependency>
<groupId>org.modelmapper</groupId>
<artifactId>modelmapper</artifactId>
<version>2.4.4</version>
</dependency>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.5.5.Final</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.9.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.200</version>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<source>11</source>
<target>11</target>
<annotationProcessorPaths>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.5.5.Final</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>

</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.x7ubi.indexcards.mapper;

import com.x7ubi.indexcards.models.IndexCard;
import com.x7ubi.indexcards.request.indexcard.CreateIndexCardRequest;
import com.x7ubi.indexcards.response.indexcard.IndexCardResponse;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.ReportingPolicy;

import java.util.List;

@Mapper(
componentModel = "spring",
unmappedTargetPolicy = ReportingPolicy.IGNORE
)
public interface IndexCardMapper {

List<IndexCardResponse> mapToResponses(List<IndexCard> indexCards);

@Mapping(target = "question", expression = "java(String.valueOf(java.nio.charset.StandardCharsets.UTF_8.decode(java.nio.ByteBuffer.wrap(indexCard.getQuestion()))))")
@Mapping(target = "answer", expression = "java(String.valueOf(java.nio.charset.StandardCharsets.UTF_8.decode(java.nio.ByteBuffer.wrap(indexCard.getAnswer()))))")
IndexCardResponse mapToResponse(IndexCard indexCard);

@Mapping(target = "question", expression = "java(java.nio.charset.StandardCharsets.UTF_8.encode(createIndexCardRequest.getQuestion()).array())")
@Mapping(target = "answer", expression = "java(java.nio.charset.StandardCharsets.UTF_8.encode(createIndexCardRequest.getAnswer()).array())")
IndexCard mapRequestToIndexCard(CreateIndexCardRequest createIndexCardRequest);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.x7ubi.indexcards.mapper;

import com.x7ubi.indexcards.models.Project;
import com.x7ubi.indexcards.request.project.CreateProjectRequest;
import com.x7ubi.indexcards.response.project.ProjectResponse;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.ReportingPolicy;

import java.util.List;

@Mapper(
componentModel = "spring",
unmappedTargetPolicy = ReportingPolicy.IGNORE,
uses = {IndexCardMapper.class}
)
public interface ProjectMapper {

List<ProjectResponse> mapToResponse(List<Project> projects);

@Mapping(source = "indexCards", target = "indexCardResponses")
ProjectResponse mapToResponse(Project project);

Project mapRequestToProject(CreateProjectRequest createProjectRequest);
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.x7ubi.indexcards.error.ErrorMessage;
import com.x7ubi.indexcards.exceptions.EntityCreationException;
import com.x7ubi.indexcards.exceptions.EntityNotFoundException;
import com.x7ubi.indexcards.mapper.IndexCardMapper;
import com.x7ubi.indexcards.repository.IndexCardAssessmentRepo;
import com.x7ubi.indexcards.repository.IndexCardRepo;
import com.x7ubi.indexcards.repository.ProjectRepo;
Expand All @@ -18,11 +19,14 @@ public class AbstractIndexCardService {

protected final IndexCardAssessmentRepo indexCardAssessmentRepo;

protected final IndexCardMapper indexCardMapper;

public AbstractIndexCardService(
ProjectRepo projectRepo, IndexCardRepo indexCardRepo, IndexCardAssessmentRepo indexCardAssessmentRepo) {
ProjectRepo projectRepo, IndexCardRepo indexCardRepo, IndexCardAssessmentRepo indexCardAssessmentRepo, IndexCardMapper indexCardMapper) {
this.projectRepo = projectRepo;
this.indexCardRepo = indexCardRepo;
this.indexCardAssessmentRepo = indexCardAssessmentRepo;
this.indexCardMapper = indexCardMapper;
}

protected void getProjectNotFoundError(long id) throws EntityNotFoundException {
Expand All @@ -40,6 +44,7 @@ protected void getIndexCardNotFoundError(Long id) throws EntityNotFoundException
}
}

@Deprecated
protected void getIndexCardCreationErrors(CreateIndexCardRequest createIndexCardRequest) throws EntityCreationException {
if (createIndexCardRequest.getQuestion().length() > 500) {
logger.error(ErrorMessage.IndexCards.INDEXCARD_QUESTION_TOO_LONG);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.x7ubi.indexcards.service.indexcard;

import com.x7ubi.indexcards.exceptions.EntityNotFoundException;
import com.x7ubi.indexcards.mapper.IndexCardMapper;
import com.x7ubi.indexcards.models.IndexCard;
import com.x7ubi.indexcards.models.Project;
import com.x7ubi.indexcards.repository.IndexCardAssessmentRepo;
Expand All @@ -12,25 +13,22 @@
import org.springframework.stereotype.Service;

import javax.transaction.Transactional;
import java.nio.charset.StandardCharsets;

@Service
public class CreateIndexCardService extends AbstractIndexCardService {

private final Logger logger = LoggerFactory.getLogger(CreateIndexCardService.class);

CreateIndexCardService(
ProjectRepo projectRepo, IndexCardRepo indexCardRepo, IndexCardAssessmentRepo indexCardAssessmentRepo) {
super(projectRepo, indexCardRepo, indexCardAssessmentRepo);
ProjectRepo projectRepo, IndexCardRepo indexCardRepo, IndexCardAssessmentRepo indexCardAssessmentRepo, IndexCardMapper indexCardMapper) {
super(projectRepo, indexCardRepo, indexCardAssessmentRepo, indexCardMapper);
}

@Transactional
public void createIndexCard(CreateIndexCardRequest createIndexCardRequest) throws EntityNotFoundException {
this.getProjectNotFoundError(createIndexCardRequest.getProjectId());

IndexCard indexCard
= new IndexCard(StandardCharsets.UTF_8.encode(createIndexCardRequest.getQuestion()).array(),
StandardCharsets.UTF_8.encode(createIndexCardRequest.getAnswer()).array());
IndexCard indexCard = this.indexCardMapper.mapRequestToIndexCard(createIndexCardRequest);

this.indexCardRepo.save(indexCard);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.x7ubi.indexcards.service.indexcard;

import com.x7ubi.indexcards.exceptions.EntityNotFoundException;
import com.x7ubi.indexcards.mapper.IndexCardMapper;
import com.x7ubi.indexcards.models.IndexCard;
import com.x7ubi.indexcards.models.Project;
import com.x7ubi.indexcards.repository.IndexCardAssessmentRepo;
Expand All @@ -14,8 +15,8 @@
@Service
public class DeleteIndexCardService extends AbstractIndexCardService {
public DeleteIndexCardService(
ProjectRepo projectRepo, IndexCardRepo indexCardRepo, IndexCardAssessmentRepo indexCardAssessmentRepo) {
super(projectRepo, indexCardRepo, indexCardAssessmentRepo);
ProjectRepo projectRepo, IndexCardRepo indexCardRepo, IndexCardAssessmentRepo indexCardAssessmentRepo, IndexCardMapper indexCardMapper) {
super(projectRepo, indexCardRepo, indexCardAssessmentRepo, indexCardMapper);
}

@Transactional
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.x7ubi.indexcards.service.indexcard;

import com.x7ubi.indexcards.exceptions.EntityNotFoundException;
import com.x7ubi.indexcards.mapper.IndexCardMapper;
import com.x7ubi.indexcards.models.IndexCard;
import com.x7ubi.indexcards.models.IndexCardAssessment;
import com.x7ubi.indexcards.repository.IndexCardAssessmentRepo;
Expand All @@ -20,8 +21,8 @@ public class IndexCardAssessmentService extends AbstractIndexCardService {
private final Logger logger = LoggerFactory.getLogger(IndexCardAssessmentService.class);

public IndexCardAssessmentService(
ProjectRepo projectRepo, IndexCardRepo indexCardRepo, IndexCardAssessmentRepo indexCardAssessmentRepo) {
super(projectRepo, indexCardRepo, indexCardAssessmentRepo);
ProjectRepo projectRepo, IndexCardRepo indexCardRepo, IndexCardAssessmentRepo indexCardAssessmentRepo, IndexCardMapper indexCardMapper) {
super(projectRepo, indexCardRepo, indexCardAssessmentRepo, indexCardMapper);
}

@Transactional
Expand Down
Loading

0 comments on commit 79bdc25

Please sign in to comment.