From 1615f8e71d29e802921d5d200bee8178304bb1dc Mon Sep 17 00:00:00 2001 From: albertprofe Date: Fri, 10 Jan 2025 10:02:32 +0100 Subject: [PATCH 01/21] create Word class and controller --- backend/pronunciationAppBack/pom.xml | 7 ++++++ .../java/dev/pronunciationAppBack/Word.java | 22 +++++++++++++++++++ .../pronunciationAppBack/WordController.java | 16 ++++++++++++++ .../pronunciationAppBack/WordRepository.java | 4 ++++ 4 files changed, 49 insertions(+) create mode 100644 backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/Word.java create mode 100644 backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/WordController.java create mode 100644 backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/WordRepository.java diff --git a/backend/pronunciationAppBack/pom.xml b/backend/pronunciationAppBack/pom.xml index 5963cf3b7..577a0d000 100644 --- a/backend/pronunciationAppBack/pom.xml +++ b/backend/pronunciationAppBack/pom.xml @@ -34,6 +34,13 @@ org.springframework.boot spring-boot-starter-data-jpa + + org.projectlombok + lombok + 1.18.36 + provided + + org.springframework.boot spring-boot-starter-web diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/Word.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/Word.java new file mode 100644 index 000000000..4f886f901 --- /dev/null +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/Word.java @@ -0,0 +1,22 @@ +package dev.pronunciationAppBack; + + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class Word { + + private String id; + private String wordName; + private String definition; + private String phoneticSpelling; + private String sentence; + private boolean isActive; + private int level; + + +} diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/WordController.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/WordController.java new file mode 100644 index 000000000..0bd68fcf6 --- /dev/null +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/WordController.java @@ -0,0 +1,16 @@ +package dev.pronunciationAppBack; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class WordController { + + @GetMapping("/hello") + public String hello() { + return "hello Emiliano, are you sleeping?"; + } + + + +} diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/WordRepository.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/WordRepository.java new file mode 100644 index 000000000..cd3839d7e --- /dev/null +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/WordRepository.java @@ -0,0 +1,4 @@ +package dev.pronunciationAppBack; + +public class WordRepository { +} From 55f09b94658a24f91c4077690a15ef904b3e716e Mon Sep 17 00:00:00 2001 From: albertprofe Date: Fri, 10 Jan 2025 10:12:49 +0100 Subject: [PATCH 02/21] add repository and application.properties --- .../dev/pronunciationAppBack/WordRepository.java | 5 ++++- .../src/main/resources/application.properties | 13 +++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/WordRepository.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/WordRepository.java index cd3839d7e..75ce5865a 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/WordRepository.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/WordRepository.java @@ -1,4 +1,7 @@ package dev.pronunciationAppBack; -public class WordRepository { + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface WordRepository extends JpaRepository { } diff --git a/backend/pronunciationAppBack/src/main/resources/application.properties b/backend/pronunciationAppBack/src/main/resources/application.properties index edb9ea0d2..c3f9fb911 100644 --- a/backend/pronunciationAppBack/src/main/resources/application.properties +++ b/backend/pronunciationAppBack/src/main/resources/application.properties @@ -1 +1,14 @@ spring.application.name=pronunciationAppBack + +# H2 DATABASE SERVER +spring.datasource.driverClassName=org.h2.Driver +spring.jpa.database-platform=org.hibernate.dialect.H2Dialect +spring.h2.console.enabled=true + +# H2 IN MEMORY +spring.datasource.url=jdbc:h2:mem:testdb +spring.datasource.username=sa +spring.datasource.password= + +# DDL OPTIONS: create-drop, create, update, none, validate +#spring.jpa.hibernate.ddl-auto=create-drop \ No newline at end of file From 17056d0abe0bc8298c9108a89a72c6899c4f3e81 Mon Sep 17 00:00:00 2001 From: albertprofe Date: Fri, 10 Jan 2025 11:26:48 +0100 Subject: [PATCH 03/21] create controller word method get all words --- backend/pronunciationAppBack/pom.xml | 4 +- .../java/dev/pronunciationAppBack/Word.java | 90 +++++++++++++++++-- .../pronunciationAppBack/WordController.java | 20 +++++ .../pronunciationAppBack/WordRepository.java | 2 +- 4 files changed, 105 insertions(+), 11 deletions(-) diff --git a/backend/pronunciationAppBack/pom.xml b/backend/pronunciationAppBack/pom.xml index 577a0d000..68220ba2e 100644 --- a/backend/pronunciationAppBack/pom.xml +++ b/backend/pronunciationAppBack/pom.xml @@ -37,10 +37,8 @@ org.projectlombok lombok - 1.18.36 - provided + true - org.springframework.boot spring-boot-starter-web diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/Word.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/Word.java index 4f886f901..567bbecc4 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/Word.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/Word.java @@ -1,15 +1,12 @@ package dev.pronunciationAppBack; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@NoArgsConstructor -@AllArgsConstructor +@Entity public class Word { + @Id private String id; private String wordName; private String definition; @@ -18,5 +15,84 @@ public class Word { private boolean isActive; private int level; + public Word() {} + + public Word(String id, String wordName, String definition, String phoneticSpelling, String sentence, boolean isActive, int level) { + this.id = id; + this.wordName = wordName; + this.definition = definition; + this.phoneticSpelling = phoneticSpelling; + this.sentence = sentence; + this.isActive = isActive; + this.level = level; + } + + public String getId() { + return id; + } + + public String getWordName() { + return wordName; + } + + public String getDefinition() { + return definition; + } + + public String getPhoneticSpelling() { + return phoneticSpelling; + } + + public String getSentence() { + return sentence; + } + + public boolean isActive() { + return isActive; + } + + public int getLevel() { + return level; + } + + public void setId(String id) { + this.id = id; + } + + public void setWordName(String wordName) { + this.wordName = wordName; + } + + public void setDefinition(String definition) { + this.definition = definition; + } + + public void setPhoneticSpelling(String phoneticSpelling) { + this.phoneticSpelling = phoneticSpelling; + } + + public void setSentence(String sentence) { + this.sentence = sentence; + } + + public void setActive(boolean active) { + isActive = active; + } + + public void setLevel(int level) { + this.level = level; + } + @Override + public String toString() { + return "Word{" + + "id='" + id + '\'' + + ", wordName='" + wordName + '\'' + + ", definition='" + definition + '\'' + + ", phoneticSpelling='" + phoneticSpelling + '\'' + + ", sentence='" + sentence + '\'' + + ", isActive=" + isActive + + ", level=" + level + + '}'; + } } diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/WordController.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/WordController.java index 0bd68fcf6..60f737461 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/WordController.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/WordController.java @@ -1,16 +1,36 @@ package dev.pronunciationAppBack; + +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + + +import static org.antlr.v4.runtime.tree.xpath.XPath.findAll; @RestController public class WordController { + + @Autowired + public WordRepository wordRepository; + @GetMapping("/hello") public String hello() { return "hello Emiliano, are you sleeping?"; } + @GetMapping("/words") + public List getWords() { + // + List words = wordRepository.findAll(); + System.out.println("Number of words: " + words.size()); + for (Word word : words) { + System.out.println("Word: " + word); + } + return words; + } } diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/WordRepository.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/WordRepository.java index 75ce5865a..96dfed39a 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/WordRepository.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/WordRepository.java @@ -1,7 +1,7 @@ package dev.pronunciationAppBack; - import org.springframework.data.jpa.repository.JpaRepository; + public interface WordRepository extends JpaRepository { } From 4116bbdcc01552eb4b39276ce88ed8d8bb62bab3 Mon Sep 17 00:00:00 2001 From: albertprofe Date: Fri, 10 Jan 2025 12:11:19 +0100 Subject: [PATCH 04/21] spring boot rest controller docs --- .../CreateSpringBootproject.md | 0 .../create project/create-spring-boot.png | Bin 0 -> 82204 bytes .../git checkout \n-b.png" | Bin 0 -> 81207 bytes ...nunciationAppBack-v0.0-project-structure.png | Bin .../start-spring-io-create-project.png | Bin ...pronunciationAppBack-v0.0-api-rest-words.png | Bin 0 -> 32132 bytes .../pronunciationAppBack-v0.0-db-2.png | Bin 0 -> 53171 bytes .../resources/pronunciationAppBack-v0.0-db.png | Bin 0 -> 35452 bytes 8 files changed, 0 insertions(+), 0 deletions(-) rename backend/resources/{ => create project}/CreateSpringBootproject.md (100%) create mode 100644 backend/resources/create project/create-spring-boot.png create mode 100644 "backend/resources/create project/git checkout \n-b.png" rename backend/resources/{ => create project}/pronunciationAppBack-v0.0-project-structure.png (100%) rename backend/resources/{ => create project}/start-spring-io-create-project.png (100%) create mode 100644 backend/resources/pronunciationAppBack-v0.0-api-rest-words.png create mode 100644 backend/resources/pronunciationAppBack-v0.0-db-2.png create mode 100644 backend/resources/pronunciationAppBack-v0.0-db.png diff --git a/backend/resources/CreateSpringBootproject.md b/backend/resources/create project/CreateSpringBootproject.md similarity index 100% rename from backend/resources/CreateSpringBootproject.md rename to backend/resources/create project/CreateSpringBootproject.md diff --git a/backend/resources/create project/create-spring-boot.png b/backend/resources/create project/create-spring-boot.png new file mode 100644 index 0000000000000000000000000000000000000000..415b8d1dd2e9739ca563a3007f6b2583fa6785bf GIT binary patch literal 82204 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

%^Npy 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 KQ!Pf?h5sM1-W0t6 literal 0 HcmV?d00001 diff --git "a/backend/resources/create project/git checkout \n-b.png" "b/backend/resources/create project/git checkout \n-b.png" new file mode 100644 index 0000000000000000000000000000000000000000..7230e9fdd6ac9dac20524fe717e2d6b02729bef0 GIT binary patch literal 81207 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%0DMNw-9nw{s~i3 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 PF7Rb-am2im=uP<#<-Lxd literal 0 HcmV?d00001 diff --git a/backend/resources/pronunciationAppBack-v0.0-project-structure.png b/backend/resources/create project/pronunciationAppBack-v0.0-project-structure.png similarity index 100% rename from backend/resources/pronunciationAppBack-v0.0-project-structure.png rename to backend/resources/create project/pronunciationAppBack-v0.0-project-structure.png diff --git a/backend/resources/start-spring-io-create-project.png b/backend/resources/create project/start-spring-io-create-project.png similarity index 100% rename from backend/resources/start-spring-io-create-project.png rename to backend/resources/create project/start-spring-io-create-project.png diff --git a/backend/resources/pronunciationAppBack-v0.0-api-rest-words.png b/backend/resources/pronunciationAppBack-v0.0-api-rest-words.png new file mode 100644 index 0000000000000000000000000000000000000000..43e002693c30e9ebfa5387c9adad3ba9640a7400 GIT binary patch literal 32132 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 L$`rqOANYR(vgl+T literal 0 HcmV?d00001 diff --git a/backend/resources/pronunciationAppBack-v0.0-db.png b/backend/resources/pronunciationAppBack-v0.0-db.png new file mode 100644 index 0000000000000000000000000000000000000000..2a496ab0a88b3d9af1537d29054101bc337a6556 GIT binary patch literal 35452 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 Date: Fri, 10 Jan 2025 12:15:32 +0100 Subject: [PATCH 05/21] renaming files --- .../create project/create-spring-boot-b.png | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename "backend/resources/create project/git checkout \n-b.png" => backend/resources/create project/create-spring-boot-b.png (100%) diff --git "a/backend/resources/create project/git checkout \n-b.png" b/backend/resources/create project/create-spring-boot-b.png similarity index 100% rename from "backend/resources/create project/git checkout \n-b.png" rename to backend/resources/create project/create-spring-boot-b.png From 5cbb18b168788855a2c95ba62692c8c8e361d0dc Mon Sep 17 00:00:00 2001 From: albertprofe Date: Fri, 10 Jan 2025 12:15:44 +0100 Subject: [PATCH 06/21] renaming files --- ...iationAppBack-v0.0-spring-io-create-project.png} | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename backend/resources/create project/{start-spring-io-create-project.png => pronunciationAppBack-v0.0-spring-io-create-project.png} (100%) diff --git a/backend/resources/create project/start-spring-io-create-project.png b/backend/resources/create project/pronunciationAppBack-v0.0-spring-io-create-project.png similarity index 100% rename from backend/resources/create project/start-spring-io-create-project.png rename to backend/resources/create project/pronunciationAppBack-v0.0-spring-io-create-project.png From 60de2e287bc81dd6a15d1c110aa3e610704af747 Mon Sep 17 00:00:00 2001 From: AlberteMB Date: Wed, 15 Jan 2025 13:36:50 +0100 Subject: [PATCH 07/21] refactoring, service --- .idea/pronunciationApp.iml | 9 +++ backend/.idea/.gitignore | 3 + backend/.idea/backend.iml | 9 +++ backend/.idea/compiler.xml | 21 +++++++ backend/.idea/encodings.xml | 6 ++ backend/.idea/jarRepositories.xml | 20 +++++++ backend/.idea/misc.xml | 14 +++++ backend/.idea/modules.xml | 8 +++ backend/.idea/vcs.xml | 6 ++ .../{ => controller}/WordController.java | 7 +-- .../{ => model}/Word.java | 60 +++---------------- .../{ => repository}/WordRepository.java | 3 +- .../service/WordServiceImpl.java | 59 ++++++++++++++++++ .../service/WordServiceInterface.java | 12 ++++ .../src/main/resources/application.properties | 11 +++- 15 files changed, 189 insertions(+), 59 deletions(-) create mode 100644 .idea/pronunciationApp.iml create mode 100644 backend/.idea/.gitignore create mode 100644 backend/.idea/backend.iml create mode 100644 backend/.idea/compiler.xml create mode 100644 backend/.idea/encodings.xml create mode 100644 backend/.idea/jarRepositories.xml create mode 100644 backend/.idea/misc.xml create mode 100644 backend/.idea/modules.xml create mode 100644 backend/.idea/vcs.xml rename backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/{ => controller}/WordController.java (83%) rename backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/{ => model}/Word.java (54%) rename backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/{ => repository}/WordRepository.java (60%) create mode 100644 backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/WordServiceImpl.java create mode 100644 backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/WordServiceInterface.java diff --git a/.idea/pronunciationApp.iml b/.idea/pronunciationApp.iml new file mode 100644 index 000000000..d6ebd4805 --- /dev/null +++ b/.idea/pronunciationApp.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/backend/.idea/.gitignore b/backend/.idea/.gitignore new file mode 100644 index 000000000..26d33521a --- /dev/null +++ b/backend/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/backend/.idea/backend.iml b/backend/.idea/backend.iml new file mode 100644 index 000000000..d6ebd4805 --- /dev/null +++ b/backend/.idea/backend.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/backend/.idea/compiler.xml b/backend/.idea/compiler.xml new file mode 100644 index 000000000..f2bc3d24e --- /dev/null +++ b/backend/.idea/compiler.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/backend/.idea/encodings.xml b/backend/.idea/encodings.xml new file mode 100644 index 000000000..2c53f5a37 --- /dev/null +++ b/backend/.idea/encodings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/backend/.idea/jarRepositories.xml b/backend/.idea/jarRepositories.xml new file mode 100644 index 000000000..712ab9d98 --- /dev/null +++ b/backend/.idea/jarRepositories.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/backend/.idea/misc.xml b/backend/.idea/misc.xml new file mode 100644 index 000000000..3534a7794 --- /dev/null +++ b/backend/.idea/misc.xml @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/backend/.idea/modules.xml b/backend/.idea/modules.xml new file mode 100644 index 000000000..e066844ef --- /dev/null +++ b/backend/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/backend/.idea/vcs.xml b/backend/.idea/vcs.xml new file mode 100644 index 000000000..6c0b86358 --- /dev/null +++ b/backend/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/WordController.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/WordController.java similarity index 83% rename from backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/WordController.java rename to backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/WordController.java index 60f737461..09b387836 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/WordController.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/WordController.java @@ -1,14 +1,13 @@ -package dev.pronunciationAppBack; +package dev.pronunciationAppBack.controller; +import dev.pronunciationAppBack.model.Word; +import dev.pronunciationAppBack.repository.WordRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; - -import static org.antlr.v4.runtime.tree.xpath.XPath.findAll; - @RestController public class WordController { diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/Word.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/Word.java similarity index 54% rename from backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/Word.java rename to backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/Word.java index 567bbecc4..eec0cbccc 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/Word.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/Word.java @@ -1,8 +1,14 @@ -package dev.pronunciationAppBack; +package dev.pronunciationAppBack.model; import jakarta.persistence.Entity; import jakarta.persistence.Id; +import lombok.*; +@Getter +@Setter +@Data +//@AllArgsConstructor +//@NoArgsConstructor @Entity public class Word { @@ -27,62 +33,10 @@ public Word(String id, String wordName, String definition, String phoneticSpelli this.level = level; } - public String getId() { - return id; - } - - public String getWordName() { - return wordName; - } - - public String getDefinition() { - return definition; - } - - public String getPhoneticSpelling() { - return phoneticSpelling; - } - - public String getSentence() { - return sentence; - } - - public boolean isActive() { - return isActive; - } - - public int getLevel() { - return level; - } - - public void setId(String id) { - this.id = id; - } - - public void setWordName(String wordName) { - this.wordName = wordName; - } - - public void setDefinition(String definition) { - this.definition = definition; - } - - public void setPhoneticSpelling(String phoneticSpelling) { - this.phoneticSpelling = phoneticSpelling; - } - - public void setSentence(String sentence) { - this.sentence = sentence; - } - public void setActive(boolean active) { isActive = active; } - public void setLevel(int level) { - this.level = level; - } - @Override public String toString() { return "Word{" + diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/WordRepository.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/repository/WordRepository.java similarity index 60% rename from backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/WordRepository.java rename to backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/repository/WordRepository.java index 96dfed39a..9d4d49d27 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/WordRepository.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/repository/WordRepository.java @@ -1,5 +1,6 @@ -package dev.pronunciationAppBack; +package dev.pronunciationAppBack.repository; +import dev.pronunciationAppBack.model.Word; import org.springframework.data.jpa.repository.JpaRepository; diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/WordServiceImpl.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/WordServiceImpl.java new file mode 100644 index 000000000..cdd076d93 --- /dev/null +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/WordServiceImpl.java @@ -0,0 +1,59 @@ +package dev.pronunciationAppBack.service; + +import dev.pronunciationAppBack.model.Word; +import dev.pronunciationAppBack.repository.WordRepository; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.List; +import java.util.UUID; + +public class WordServiceImpl implements WordServiceInterface{ + @Autowired + private WordRepository wordRepository; + + @Override + public List getAllWord() { + return wordRepository.findAll(); + } + + @Override + public Word createWord(Word word) { + word.setId(UUID.randomUUID().toString()); + return wordRepository.save(word); + } + + @Override + public Word getWordById(String id) { + return wordRepository.findById(id).orElse(null); + } + + @Override + public Word updateWord(String id, Word wordDetails) { + Word word = wordRepository.findById(id).orElse(null); + if (word != null) { + word.setWordName(wordDetails.getWordName()); + word.setDefinition(wordDetails.getDefinition()); + word.setPhoneticSpelling(wordDetails.getPhoneticSpelling()); + word.setSentence(wordDetails.getSentence()); + word.setActive(wordDetails.isActive()); + word.setLevel(wordDetails.getLevel()); + return wordRepository.save(word); + } + return null; + } + + @Override + public boolean deleteWord(String id) { + if (wordRepository.existsById(id)){ + wordRepository.deleteById(id); + return true; + } + System.out.println("ID doesn't exist!"); + return false; + } + + @Override + public long countWords() { + return wordRepository.count(); + } +} diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/WordServiceInterface.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/WordServiceInterface.java new file mode 100644 index 000000000..bbf0c5c1e --- /dev/null +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/WordServiceInterface.java @@ -0,0 +1,12 @@ +package dev.pronunciationAppBack.service; +import java.util.List; +import dev.pronunciationAppBack.model.Word; + +public interface WordServiceInterface { + List getAllWord(); + Word createWord(Word word); + Word getWordById(String id); + Word updateWord(String id, Word wordDetails); + boolean deleteWord(String id); + long countWords(); +} diff --git a/backend/pronunciationAppBack/src/main/resources/application.properties b/backend/pronunciationAppBack/src/main/resources/application.properties index c3f9fb911..2bfb21e74 100644 --- a/backend/pronunciationAppBack/src/main/resources/application.properties +++ b/backend/pronunciationAppBack/src/main/resources/application.properties @@ -11,4 +11,13 @@ spring.datasource.username=sa spring.datasource.password= # DDL OPTIONS: create-drop, create, update, none, validate -#spring.jpa.hibernate.ddl-auto=create-drop \ No newline at end of file +#spring.jpa.hibernate.ddl-auto=create-drop + +spring.datasource.url=jdbc:postgresql://localhost:5432/pronunciation_db +spring.datasource.username=albertemb +spring.datasource.password=1234 +spring.datasource.driver-class-name=org.postgresql.Driver + +# Configuración de JPA/Hibernate +spring.jpa.hibernate.ddl-auto=update +spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect From 8afa2944e0dee0d1d4a43676a1eaf032efbc3115 Mon Sep 17 00:00:00 2001 From: AlberteMB Date: Wed, 15 Jan 2025 13:37:35 +0100 Subject: [PATCH 08/21] unversioned files --- .idea/.gitignore | 3 +++ .idea/misc.xml | 14 ++++++++++++++ .idea/modules.xml | 8 ++++++++ .idea/vcs.xml | 6 ++++++ 4 files changed, 31 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 000000000..26d33521a --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 000000000..87ad010fe --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 000000000..63287a14d --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 000000000..35eb1ddfb --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file From d9d1926e31dcde7d0e294a37d98058ca2e69ad9d Mon Sep 17 00:00:00 2001 From: AlberteMB Date: Thu, 16 Jan 2025 12:01:02 +0100 Subject: [PATCH 09/21] Only @Data in Word, app.proper --- backend/.idea/compiler.xml | 1 + .../java/dev/pronunciationAppBack/model/Word.java | 2 -- .../src/main/resources/application.properties | 12 ++++++------ 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/backend/.idea/compiler.xml b/backend/.idea/compiler.xml index f2bc3d24e..564a55468 100644 --- a/backend/.idea/compiler.xml +++ b/backend/.idea/compiler.xml @@ -2,6 +2,7 @@ + diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/Word.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/Word.java index eec0cbccc..c9e4183de 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/Word.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/Word.java @@ -4,8 +4,6 @@ import jakarta.persistence.Id; import lombok.*; -@Getter -@Setter @Data //@AllArgsConstructor //@NoArgsConstructor diff --git a/backend/pronunciationAppBack/src/main/resources/application.properties b/backend/pronunciationAppBack/src/main/resources/application.properties index 2bfb21e74..ac8a526be 100644 --- a/backend/pronunciationAppBack/src/main/resources/application.properties +++ b/backend/pronunciationAppBack/src/main/resources/application.properties @@ -1,14 +1,14 @@ spring.application.name=pronunciationAppBack # H2 DATABASE SERVER -spring.datasource.driverClassName=org.h2.Driver -spring.jpa.database-platform=org.hibernate.dialect.H2Dialect -spring.h2.console.enabled=true +#spring.datasource.driverClassName=org.h2.Driver +#spring.jpa.database-platform=org.hibernate.dialect.H2Dialect +#spring.h2.console.enabled=true # H2 IN MEMORY -spring.datasource.url=jdbc:h2:mem:testdb -spring.datasource.username=sa -spring.datasource.password= +#spring.datasource.url=jdbc:h2:mem:testdb +#spring.datasource.username=sa +#spring.datasource.password= # DDL OPTIONS: create-drop, create, update, none, validate #spring.jpa.hibernate.ddl-auto=create-drop From 64347fe3668db69b07d647bd2a7f3b492750de07 Mon Sep 17 00:00:00 2001 From: AlberteMB Date: Thu, 16 Jan 2025 13:52:02 +0100 Subject: [PATCH 10/21] adding gitignore --- backend/pronunciationAppBack/.gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/backend/pronunciationAppBack/.gitignore b/backend/pronunciationAppBack/.gitignore index 549e00a2a..aad394d07 100644 --- a/backend/pronunciationAppBack/.gitignore +++ b/backend/pronunciationAppBack/.gitignore @@ -18,6 +18,8 @@ target/ *.iws *.iml *.ipr +.idea/ + ### NetBeans ### /nbproject/private/ @@ -31,3 +33,4 @@ build/ ### VS Code ### .vscode/ + From 357c5d59423e784c3b0a7b973c39492294c93778 Mon Sep 17 00:00:00 2001 From: AlberteMB Date: Thu, 16 Jan 2025 13:53:04 +0100 Subject: [PATCH 11/21] tracking file --- .gitignore | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..aad394d07 --- /dev/null +++ b/.gitignore @@ -0,0 +1,36 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr +.idea/ + + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + From 577e28853aea01074df2f3fb4ee0dd36a197f7bf Mon Sep 17 00:00:00 2001 From: AlberteMB Date: Wed, 5 Feb 2025 12:19:12 +0100 Subject: [PATCH 12/21] user, repository, services --- .../controller/UserController.java | 5 ++ .../controller/WordController.java | 11 +++- .../dev/pronunciationAppBack/model/User.java | 43 ++++++++++++++ .../dev/pronunciationAppBack/model/Word.java | 21 ++++--- .../repository/UserRepository.java | 9 +++ .../repository/WordRepository.java | 4 +- .../service/UserServiceImpl.java | 57 +++++++++++++++++++ .../service/UserServiceInterface.java | 17 ++++++ .../service/WordServiceImpl.java | 7 ++- .../service/WordServiceInterface.java | 8 ++- 10 files changed, 163 insertions(+), 19 deletions(-) create mode 100644 backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/UserController.java create mode 100644 backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/User.java create mode 100644 backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/repository/UserRepository.java create mode 100644 backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserServiceImpl.java create mode 100644 backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserServiceInterface.java diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/UserController.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/UserController.java new file mode 100644 index 000000000..2a40df065 --- /dev/null +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/UserController.java @@ -0,0 +1,5 @@ +package dev.pronunciationAppBack.controller; + +public class UserController { + +} diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/WordController.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/WordController.java index 09b387836..b9ad7c106 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/WordController.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/WordController.java @@ -4,20 +4,25 @@ import dev.pronunciationAppBack.model.Word; import dev.pronunciationAppBack.repository.WordRepository; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; +@RequestMapping("/api/v1/words") @RestController public class WordController { + @Value("${endpoint.url.words}") + private String endpointUrlWords; @Autowired public WordRepository wordRepository; - @GetMapping("/hello") - public String hello() { - return "hello Emiliano, are you sleeping?"; + @GetMapping("/show-endpoint") + public String showEndPointWords() { + return "The Words endpoint URL is: " + endpointUrlWords; } @GetMapping("/words") diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/User.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/User.java new file mode 100644 index 000000000..d609c35dc --- /dev/null +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/User.java @@ -0,0 +1,43 @@ +package dev.pronunciationAppBack.model; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; +import java.util.UUID; + +@AllArgsConstructor +@NoArgsConstructor +@Data +@Entity +@Table(name = "USER") +public class User { + @Id + private String id; + private String name; + private String email; + + @JsonIgnore + @OneToMany(mappedBy = "userMapped", cascade = CascadeType.ALL, + fetch = FetchType.LAZY) + private List wordsMapped; + + public User(String id,String name, String email) { + this.id = id; + this.name = name; + this.email = email; + } + + @Override + public String toString() { + return "Customer{" + + "id='" + id + '\'' + + "name: " + name + "\n" + + "email: " + email + "\n" + + '}'; + } + +} diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/Word.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/Word.java index c9e4183de..1b01db1ef 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/Word.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/Word.java @@ -1,12 +1,15 @@ package dev.pronunciationAppBack.model; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import jakarta.persistence.*; import lombok.*; +import java.util.UUID; + @Data -//@AllArgsConstructor -//@NoArgsConstructor +@AllArgsConstructor +@NoArgsConstructor @Entity public class Word { @@ -19,7 +22,11 @@ public class Word { private boolean isActive; private int level; - public Word() {} + @JsonIgnore + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + @JsonIgnoreProperties("wordsMapped") + private User userMapped; public Word(String id, String wordName, String definition, String phoneticSpelling, String sentence, boolean isActive, int level) { this.id = id; @@ -31,10 +38,6 @@ public Word(String id, String wordName, String definition, String phoneticSpelli this.level = level; } - public void setActive(boolean active) { - isActive = active; - } - @Override public String toString() { return "Word{" + diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/repository/UserRepository.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/repository/UserRepository.java new file mode 100644 index 000000000..743891158 --- /dev/null +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/repository/UserRepository.java @@ -0,0 +1,9 @@ +package dev.pronunciationAppBack.repository; + +import dev.pronunciationAppBack.model.User; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.UUID; + +public interface UserRepository extends JpaRepository { +} diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/repository/WordRepository.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/repository/WordRepository.java index 9d4d49d27..0ec8cd7b9 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/repository/WordRepository.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/repository/WordRepository.java @@ -3,6 +3,8 @@ import dev.pronunciationAppBack.model.Word; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.UUID; -public interface WordRepository extends JpaRepository { + +public interface WordRepository extends JpaRepository { } diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserServiceImpl.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserServiceImpl.java new file mode 100644 index 000000000..c48478d33 --- /dev/null +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserServiceImpl.java @@ -0,0 +1,57 @@ +package dev.pronunciationAppBack.service; + +import dev.pronunciationAppBack.model.User; +import dev.pronunciationAppBack.repository.UserRepository; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.List; +import java.util.UUID; + +public class UserServiceImpl implements UserServiceInterface { + + @Autowired + private UserRepository userRepository; + + @Override + public List getAllUsers() { + return userRepository.findAll(); + } + + @Override + public User createUser(User user) { + user.setId(UUID.randomUUID().toString()); + return userRepository.save(user); + } + + @Override + public User getUserById(UUID id) { + return userRepository.findById(id).orElse(null); + } + + @Override + public User updateUser(UUID id, User userDetails) { + User user = userRepository.findById(id).orElse(null); + if (user != null) { + user.setName(userDetails.getName()); + user.setEmail(userDetails.getEmail()); + return userRepository.save(user); + } + return null; + } + + @Override + public boolean deleteUser(UUID id) { + if (userRepository.existsById(id)){ + userRepository.deleteById(id); + System.out.println("Deleted successfully!"); + return true; + } + System.out.println("ID doesn't exist!"); + return false; + } + + @Override + public long countUsers() { + return userRepository.count(); + } +} diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserServiceInterface.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserServiceInterface.java new file mode 100644 index 000000000..a952ca976 --- /dev/null +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserServiceInterface.java @@ -0,0 +1,17 @@ +package dev.pronunciationAppBack.service; + +import dev.pronunciationAppBack.model.User; + +import java.util.List; +import java.util.UUID; + + +public interface UserServiceInterface { + + List getAllUsers(); + User createUser(User user); + User getUserById(UUID id); + User updateUser(UUID id, User userDetails); + boolean deleteUser(UUID id); + long countUsers(); +} diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/WordServiceImpl.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/WordServiceImpl.java index cdd076d93..a8429e0a7 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/WordServiceImpl.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/WordServiceImpl.java @@ -23,12 +23,12 @@ public Word createWord(Word word) { } @Override - public Word getWordById(String id) { + public Word getWordById(UUID id) { return wordRepository.findById(id).orElse(null); } @Override - public Word updateWord(String id, Word wordDetails) { + public Word updateWord(UUID id, Word wordDetails) { Word word = wordRepository.findById(id).orElse(null); if (word != null) { word.setWordName(wordDetails.getWordName()); @@ -43,9 +43,10 @@ public Word updateWord(String id, Word wordDetails) { } @Override - public boolean deleteWord(String id) { + public boolean deleteWord(UUID id) { if (wordRepository.existsById(id)){ wordRepository.deleteById(id); + System.out.println("Deleted successfully!"); return true; } System.out.println("ID doesn't exist!"); diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/WordServiceInterface.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/WordServiceInterface.java index bbf0c5c1e..f314b5d0d 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/WordServiceInterface.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/WordServiceInterface.java @@ -1,12 +1,14 @@ package dev.pronunciationAppBack.service; import java.util.List; +import java.util.UUID; + import dev.pronunciationAppBack.model.Word; public interface WordServiceInterface { List getAllWord(); Word createWord(Word word); - Word getWordById(String id); - Word updateWord(String id, Word wordDetails); - boolean deleteWord(String id); + Word getWordById(UUID id); + Word updateWord(UUID id, Word wordDetails); + boolean deleteWord(UUID id); long countWords(); } From 6a6c8cc28369e04e8dbb0111c8ff5478eca5d113 Mon Sep 17 00:00:00 2001 From: AlberteMB Date: Wed, 5 Feb 2025 13:33:34 +0100 Subject: [PATCH 13/21] UserController, WordController --- .../controller/UserController.java | 90 +++++++++++++++++++ .../controller/WordController.java | 86 +++++++++++++++--- ...ServiceInterface.java => UserService.java} | 2 +- .../service/UserServiceImpl.java | 2 +- ...ServiceInterface.java => WordService.java} | 4 +- .../service/WordServiceImpl.java | 5 +- 6 files changed, 171 insertions(+), 18 deletions(-) rename backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/{UserServiceInterface.java => UserService.java} (89%) rename backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/{WordServiceInterface.java => WordService.java} (89%) diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/UserController.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/UserController.java index 2a40df065..9e66e5cc5 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/UserController.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/UserController.java @@ -1,5 +1,95 @@ package dev.pronunciationAppBack.controller; +import dev.pronunciationAppBack.model.User; +import dev.pronunciationAppBack.repository.UserRepository; +import dev.pronunciationAppBack.service.UserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import org.springframework.http.HttpHeaders; + +import java.util.Date; +import java.util.List; +import java.util.UUID; + +@RequestMapping("/api/v1/users") +@RestController public class UserController { + @Value("${endpoint.url.users}") + private String endpointUrlUsers; + + @Autowired + private UserRepository userRepository; + + @Autowired + private UserService userService; + + @GetMapping("/show-endpoint") + public String showEndPointUsers() { + return "The Users endpoint URL is: " + endpointUrlUsers; + } + + @GetMapping("/allUsers") + public ResponseEntity> getAllUsers() { + List users = userRepository.findAll(); + HttpHeaders headers = getCommonHeaders("Get all users"); + System.out.println("Number of users: " + users.size()); + if (users.isEmpty()) { + return new ResponseEntity<>(headers, HttpStatus.NOT_FOUND); + } else { + return new ResponseEntity<>(users, headers, HttpStatus.OK); + } + } + + @PostMapping + public ResponseEntity createUser(@RequestBody User user) { + User createdUser = userService.createUser(user); + HttpHeaders headers = getCommonHeaders("Create a new user"); + return createdUser != null + ? new ResponseEntity<>(createdUser, headers, HttpStatus.CREATED) + : new ResponseEntity<>(headers, HttpStatus.BAD_REQUEST); + } + + @PutMapping("/{id}") + public ResponseEntity updateUser(@PathVariable("id") UUID id, @RequestBody User user) { + User updatedUser = userService.updateUser(id, user); + HttpHeaders headers = getCommonHeaders("Update a user"); + return updatedUser != null + ? new ResponseEntity<>(updatedUser, headers, HttpStatus.OK) + : new ResponseEntity<>(headers, HttpStatus.NOT_FOUND); + } + + @DeleteMapping("/{id}") + public ResponseEntity deleteUser(@PathVariable("id") UUID id) { + boolean deleted = userService.deleteUser(id); + HttpHeaders headers = getCommonHeaders("Delete a user"); + return deleted + ? new ResponseEntity<>(headers, HttpStatus.OK) + : new ResponseEntity<>(headers, HttpStatus.NOT_FOUND); + } + + @GetMapping("/{id}") + public ResponseEntity getUserById(@PathVariable("id") UUID id) { + User user = userService.getUserById(id); + HttpHeaders headers = getCommonHeaders("Get a user"); + return user != null + ? new ResponseEntity<>(user, headers, HttpStatus.OK) + : new ResponseEntity<>(headers, HttpStatus.NOT_FOUND); + } + + private HttpHeaders getCommonHeaders(String description) { + HttpHeaders headers = new HttpHeaders(); + headers.add("description", description); + headers.add("content-type", "application/json"); + headers.add("date", new Date().toString()); + headers.add("server", "H2 Database"); + headers.add("version", "1.0.0"); + headers.add("user-count", String.valueOf(userService.countUsers())); + headers.add("object", "users"); + + return headers; + } } diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/WordController.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/WordController.java index b9ad7c106..3c80a054e 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/WordController.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/WordController.java @@ -3,12 +3,19 @@ import dev.pronunciationAppBack.model.Word; import dev.pronunciationAppBack.repository.WordRepository; +import dev.pronunciationAppBack.service.WordService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; + + + +import java.util.Date; import java.util.List; +import java.util.UUID; @RequestMapping("/api/v1/words") @RestController @@ -20,21 +27,76 @@ public class WordController { @Autowired public WordRepository wordRepository; + @Autowired + public WordService wordService; + @GetMapping("/show-endpoint") public String showEndPointWords() { return "The Words endpoint URL is: " + endpointUrlWords; } - @GetMapping("/words") - public List getWords() { - // - List words = wordRepository.findAll(); - System.out.println("Number of words: " + words.size()); - for (Word word : words) { - System.out.println("Word: " + word); - } - return words; + @GetMapping("/allWords") + public ResponseEntity> getAllWords() { + + List words = wordRepository.findAll(); + HttpHeaders headers = getCommonHeaders("Get all customers"); + System.out.println("Number of words: " + words.size()); + for (Word word : words) { + System.out.println("Word: " + word); + } + return !words.isEmpty() + ? new ResponseEntity<>(words, headers, HttpStatus.OK) + : new ResponseEntity<>(headers, HttpStatus.NOT_FOUND); + + } + + @PostMapping + public ResponseEntity createWord(@RequestBody Word word) { + Word createdWord = wordService.createWord(word); + HttpHeaders headers = getCommonHeaders("Create a new word"); + return createdWord != null + ? new ResponseEntity<>(createdWord, headers, HttpStatus.CREATED) + : new ResponseEntity<>(headers, HttpStatus.BAD_REQUEST); + } + + @PutMapping("/{id}") + public ResponseEntity updateWord(@PathVariable("id") UUID id, @RequestBody Word word) { + Word updatedWord = wordService.updateWord(id, word); + HttpHeaders headers = getCommonHeaders("Update a word"); + return updatedWord != null + ? new ResponseEntity<>(updatedWord, headers, HttpStatus.OK) + : new ResponseEntity<>(headers, HttpStatus.NOT_FOUND); + } + + @DeleteMapping("/{id}") + public ResponseEntity deleteWord(@PathVariable("id") UUID id) { + boolean deleted = wordService.deleteWord(id); + HttpHeaders headers = getCommonHeaders("Delete a word"); + return deleted + ? new ResponseEntity<>(headers, HttpStatus.OK) + : new ResponseEntity<>(headers, HttpStatus.NOT_FOUND); + } + + @GetMapping("/{id}") + public ResponseEntity getWordById(@PathVariable("id") UUID id) { + Word word = wordService.getWordById(id); + HttpHeaders headers = getCommonHeaders("Get a word"); + return word != null + ? new ResponseEntity<>(word, headers, HttpStatus.OK) + : new ResponseEntity<>(headers, HttpStatus.NOT_FOUND); + } + + private HttpHeaders getCommonHeaders(String description) { + HttpHeaders headers = new HttpHeaders(); + headers.add("description", description); + headers.add("content-type", "application/json"); + headers.add("date", new Date().toString()); + headers.add("server", "H2 Database"); + headers.add("version", "1.0.0"); + headers.add("word-count", String.valueOf(wordService.countWords())); + headers.add("object", "words"); + return headers; } } diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserServiceInterface.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserService.java similarity index 89% rename from backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserServiceInterface.java rename to backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserService.java index a952ca976..faf68c48b 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserServiceInterface.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserService.java @@ -6,7 +6,7 @@ import java.util.UUID; -public interface UserServiceInterface { +public interface UserService { List getAllUsers(); User createUser(User user); diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserServiceImpl.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserServiceImpl.java index c48478d33..86f9fae50 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserServiceImpl.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserServiceImpl.java @@ -7,7 +7,7 @@ import java.util.List; import java.util.UUID; -public class UserServiceImpl implements UserServiceInterface { +public class UserServiceImpl implements UserService { @Autowired private UserRepository userRepository; diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/WordServiceInterface.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/WordService.java similarity index 89% rename from backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/WordServiceInterface.java rename to backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/WordService.java index f314b5d0d..07ff51ae0 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/WordServiceInterface.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/WordService.java @@ -4,11 +4,13 @@ import dev.pronunciationAppBack.model.Word; -public interface WordServiceInterface { +public interface WordService { List getAllWord(); Word createWord(Word word); Word getWordById(UUID id); Word updateWord(UUID id, Word wordDetails); boolean deleteWord(UUID id); + long countWords(); + } diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/WordServiceImpl.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/WordServiceImpl.java index a8429e0a7..3592b43d7 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/WordServiceImpl.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/WordServiceImpl.java @@ -7,9 +7,9 @@ import java.util.List; import java.util.UUID; -public class WordServiceImpl implements WordServiceInterface{ +public class WordServiceImpl implements WordService { @Autowired - private WordRepository wordRepository; + private static WordRepository wordRepository; @Override public List getAllWord() { @@ -53,7 +53,6 @@ public boolean deleteWord(UUID id) { return false; } - @Override public long countWords() { return wordRepository.count(); } From 50db1ddffc0780e81d67d00a0b23af8e556ef77d Mon Sep 17 00:00:00 2001 From: AlberteMB Date: Wed, 5 Feb 2025 14:04:27 +0100 Subject: [PATCH 14/21] faker, tests added not tested --- backend/pronunciationAppBack/pom.xml | 5 ++ .../dev/pronunciationAppBack/model/User.java | 21 +++++--- .../service/UserServiceImpl.java | 5 +- .../utilities/UserFakerGenerator.java | 35 +++++++++++++ .../src/main/resources/application.properties | 26 +++++----- .../UserControllerIntegrationTest.java | 49 +++++++++++++++++++ .../UserServiceUnitTest.java | 37 ++++++++++++++ 7 files changed, 158 insertions(+), 20 deletions(-) create mode 100644 backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/utilities/UserFakerGenerator.java create mode 100644 backend/pronunciationAppBack/src/test/java/dev/pronunciationAppBack/UserControllerIntegrationTest.java create mode 100644 backend/pronunciationAppBack/src/test/java/dev/pronunciationAppBack/UserServiceUnitTest.java diff --git a/backend/pronunciationAppBack/pom.xml b/backend/pronunciationAppBack/pom.xml index 68220ba2e..7a9177a85 100644 --- a/backend/pronunciationAppBack/pom.xml +++ b/backend/pronunciationAppBack/pom.xml @@ -70,6 +70,11 @@ spring-boot-starter-test test + + com.github.javafaker + javafaker + 1.0.2 + diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/User.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/User.java index d609c35dc..6f47e1cfd 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/User.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/User.java @@ -6,6 +6,7 @@ import lombok.Data; import lombok.NoArgsConstructor; +import java.time.LocalDate; import java.util.List; import java.util.UUID; @@ -17,27 +18,35 @@ public class User { @Id private String id; - private String name; + private String userName; private String email; + private String password; + private boolean active; + private LocalDate createdAt; @JsonIgnore @OneToMany(mappedBy = "userMapped", cascade = CascadeType.ALL, fetch = FetchType.LAZY) private List wordsMapped; - public User(String id,String name, String email) { + public User(String id,String name, String email, String password, boolean active, LocalDate createdAt) { this.id = id; - this.name = name; + this.userName = name; + this.password = password; this.email = email; + this.active = active; + this.createdAt = createdAt; } @Override public String toString() { return "Customer{" + "id='" + id + '\'' + - "name: " + name + "\n" + - "email: " + email + "\n" - + '}'; + "name: " + userName + "\n" + + "email: " + email + "\n" + + "active: " + active + "\n" + + "created at: " + createdAt + "\n" + + '}'; } } diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserServiceImpl.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserServiceImpl.java index 86f9fae50..2e2a8fc37 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserServiceImpl.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserServiceImpl.java @@ -32,8 +32,11 @@ public User getUserById(UUID id) { public User updateUser(UUID id, User userDetails) { User user = userRepository.findById(id).orElse(null); if (user != null) { - user.setName(userDetails.getName()); + user.setUserName(userDetails.getUserName()); user.setEmail(userDetails.getEmail()); + user.setPassword(userDetails.getPassword()); + user.setActive(userDetails.isActive()); + user.setCreatedAt(userDetails.getCreatedAt()); return userRepository.save(user); } return null; diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/utilities/UserFakerGenerator.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/utilities/UserFakerGenerator.java new file mode 100644 index 000000000..5bae480ab --- /dev/null +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/utilities/UserFakerGenerator.java @@ -0,0 +1,35 @@ +package dev.pronunciationAppBack.utilities; + +import com.github.javafaker.Faker; +import dev.pronunciationAppBack.model.User; +import org.springframework.stereotype.Component; + +import java.time.LocalDate; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +@Component +public class UserFakerGenerator { + + private final Faker faker = new Faker(); + + public User generateRandomUser() { + + User user = new User(); + user.setUserName(faker.name().username()); + user.setEmail(faker.internet().emailAddress()); + user.setPassword(faker.internet().password()); + user.setActive(faker.bool().bool()); + user.setCreatedAt(LocalDate.now()); + + // Additional fields if needed + return user; + } + + public List generateUsers(int count) { + return IntStream.range(0, count) + .mapToObj(i -> generateRandomUser()) + .collect(Collectors.toList()); + } +} \ No newline at end of file diff --git a/backend/pronunciationAppBack/src/main/resources/application.properties b/backend/pronunciationAppBack/src/main/resources/application.properties index ac8a526be..19ae7e072 100644 --- a/backend/pronunciationAppBack/src/main/resources/application.properties +++ b/backend/pronunciationAppBack/src/main/resources/application.properties @@ -1,23 +1,23 @@ spring.application.name=pronunciationAppBack # H2 DATABASE SERVER -#spring.datasource.driverClassName=org.h2.Driver -#spring.jpa.database-platform=org.hibernate.dialect.H2Dialect -#spring.h2.console.enabled=true +spring.datasource.driverClassName=org.h2.Driver +spring.jpa.database-platform=org.hibernate.dialect.H2Dialect +spring.h2.console.enabled=true # H2 IN MEMORY -#spring.datasource.url=jdbc:h2:mem:testdb -#spring.datasource.username=sa -#spring.datasource.password= +spring.datasource.url=jdbc:h2:mem:testdb +spring.datasource.username=sa +spring.datasource.password= # DDL OPTIONS: create-drop, create, update, none, validate -#spring.jpa.hibernate.ddl-auto=create-drop +spring.jpa.hibernate.ddl-auto=create-drop -spring.datasource.url=jdbc:postgresql://localhost:5432/pronunciation_db -spring.datasource.username=albertemb -spring.datasource.password=1234 -spring.datasource.driver-class-name=org.postgresql.Driver +#spring.datasource.url=jdbc:postgresql://localhost:5432/pronunciation_db +#spring.datasource.username=albertemb +#spring.datasource.password=1234 +#spring.datasource.driver-class-name=org.postgresql.Driver # Configuración de JPA/Hibernate -spring.jpa.hibernate.ddl-auto=update -spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect +#spring.jpa.hibernate.ddl-auto=update +#spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect diff --git a/backend/pronunciationAppBack/src/test/java/dev/pronunciationAppBack/UserControllerIntegrationTest.java b/backend/pronunciationAppBack/src/test/java/dev/pronunciationAppBack/UserControllerIntegrationTest.java new file mode 100644 index 000000000..81032f97a --- /dev/null +++ b/backend/pronunciationAppBack/src/test/java/dev/pronunciationAppBack/UserControllerIntegrationTest.java @@ -0,0 +1,49 @@ +package dev.pronunciationAppBack; + +import com.fasterxml.jackson.databind.ObjectMapper; +import dev.pronunciationAppBack.model.User; +import dev.pronunciationAppBack.repository.UserRepository; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.RequestBuilder; +import org.springframework.test.web.servlet.ResultMatcher; + +import static java.nio.file.Paths.get; +import static org.springframework.mock.http.server.reactive.MockServerHttpRequest.post; +import static org.springframework.test.web.client.match.MockRestRequestMatchers.content; +import static org.springframework.test.web.client.match.MockRestRequestMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@SpringBootTest +@AutoConfigureMockMvc +class UserControllerIntegrationTest { + @Autowired + private MockMvc mockMvc; + + @Autowired + private UserRepository userRepository; + + @Test + void testGetAllUsers() throws Exception { + mockMvc.perform((RequestBuilder) get("/api/users")) + .andExpect(status().isOk()) + .andExpect((ResultMatcher) content().contentType(MediaType.APPLICATION_JSON)); + } + + @Test + void testCreateUser() throws Exception { + User user = new User(); + user.setUserName("newUser"); + user.setEmail("newuser@example.com"); + + mockMvc.perform((RequestBuilder) post("/api/users") + .contentType(MediaType.APPLICATION_JSON) + .contentType(MediaType.valueOf(new ObjectMapper().writeValueAsString(user)))) + .andExpect(status().isOk()) + .andExpect((ResultMatcher) jsonPath("$.username").value("newuser")); + } +} diff --git a/backend/pronunciationAppBack/src/test/java/dev/pronunciationAppBack/UserServiceUnitTest.java b/backend/pronunciationAppBack/src/test/java/dev/pronunciationAppBack/UserServiceUnitTest.java new file mode 100644 index 000000000..c2bf8cad2 --- /dev/null +++ b/backend/pronunciationAppBack/src/test/java/dev/pronunciationAppBack/UserServiceUnitTest.java @@ -0,0 +1,37 @@ +package dev.pronunciationAppBack; + +import dev.pronunciationAppBack.model.User; +import dev.pronunciationAppBack.repository.UserRepository; +import dev.pronunciationAppBack.service.UserService; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import static org.mockito.ArgumentMatchers.any; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +class UserServiceUnitTest { + @Mock + private UserRepository userRepository; + + @InjectMocks + private UserService userService; + + @Test + void testCreateUser() { + User user = new User(); + user.setUserName("testuser"); + + when(userRepository.save(any(User.class))).thenReturn(user); + + User createdUser = userService.createUser(user); + + assertNotNull(createdUser); + assertEquals("testuser", createdUser.getUserName()); + } +} \ No newline at end of file From 30b95d09f0934af40b93fe2bc82ec361cb19fea8 Mon Sep 17 00:00:00 2001 From: AlberteMB Date: Thu, 6 Feb 2025 11:37:13 +0100 Subject: [PATCH 15/21] Issues with Lombok --- backend/pronunciationAppBack/pom.xml | 8 +--- .../controller/UserController.java | 6 +-- .../controller/WordController.java | 6 +-- .../dev/pronunciationAppBack/model/User.java | 14 ++----- .../dev/pronunciationAppBack/model/Word.java | 12 ++---- .../repository/UserRepository.java | 3 +- .../repository/WordRepository.java | 2 +- .../service/UserService.java | 6 +-- .../service/UserServiceImpl.java | 32 ++++++++++----- .../service/WordService.java | 9 ++--- .../service/WordServiceImpl.java | 40 +++++++++++++------ .../src/main/resources/application.properties | 2 +- 12 files changed, 73 insertions(+), 67 deletions(-) diff --git a/backend/pronunciationAppBack/pom.xml b/backend/pronunciationAppBack/pom.xml index 7a9177a85..6efee594e 100644 --- a/backend/pronunciationAppBack/pom.xml +++ b/backend/pronunciationAppBack/pom.xml @@ -34,11 +34,6 @@ org.springframework.boot spring-boot-starter-data-jpa - - org.projectlombok - lombok - true - org.springframework.boot spring-boot-starter-web @@ -63,7 +58,8 @@ org.projectlombok lombok - true + 1.18.30 + provided org.springframework.boot diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/UserController.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/UserController.java index 9e66e5cc5..a356f9150 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/UserController.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/UserController.java @@ -54,7 +54,7 @@ public ResponseEntity createUser(@RequestBody User user) { } @PutMapping("/{id}") - public ResponseEntity updateUser(@PathVariable("id") UUID id, @RequestBody User user) { + public ResponseEntity updateUser(@PathVariable("id") String id, @RequestBody User user) { User updatedUser = userService.updateUser(id, user); HttpHeaders headers = getCommonHeaders("Update a user"); return updatedUser != null @@ -63,7 +63,7 @@ public ResponseEntity updateUser(@PathVariable("id") UUID id, @RequestBody } @DeleteMapping("/{id}") - public ResponseEntity deleteUser(@PathVariable("id") UUID id) { + public ResponseEntity deleteUser(@PathVariable("id") String id) { boolean deleted = userService.deleteUser(id); HttpHeaders headers = getCommonHeaders("Delete a user"); return deleted @@ -72,7 +72,7 @@ public ResponseEntity deleteUser(@PathVariable("id") UUID id) { } @GetMapping("/{id}") - public ResponseEntity getUserById(@PathVariable("id") UUID id) { + public ResponseEntity getUserById(@PathVariable("id") String id) { User user = userService.getUserById(id); HttpHeaders headers = getCommonHeaders("Get a user"); return user != null diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/WordController.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/WordController.java index 3c80a054e..51e69c261 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/WordController.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/WordController.java @@ -60,7 +60,7 @@ public ResponseEntity createWord(@RequestBody Word word) { } @PutMapping("/{id}") - public ResponseEntity updateWord(@PathVariable("id") UUID id, @RequestBody Word word) { + public ResponseEntity updateWord(@PathVariable("id") String id, @RequestBody Word word) { Word updatedWord = wordService.updateWord(id, word); HttpHeaders headers = getCommonHeaders("Update a word"); return updatedWord != null @@ -69,7 +69,7 @@ public ResponseEntity updateWord(@PathVariable("id") UUID id, @RequestBody } @DeleteMapping("/{id}") - public ResponseEntity deleteWord(@PathVariable("id") UUID id) { + public ResponseEntity deleteWord(@PathVariable("id") String id) { boolean deleted = wordService.deleteWord(id); HttpHeaders headers = getCommonHeaders("Delete a word"); return deleted @@ -78,7 +78,7 @@ public ResponseEntity deleteWord(@PathVariable("id") UUID id) { } @GetMapping("/{id}") - public ResponseEntity getWordById(@PathVariable("id") UUID id) { + public ResponseEntity getWordById(@PathVariable("id") String id) { Word word = wordService.getWordById(id); HttpHeaders headers = getCommonHeaders("Get a word"); return word != null diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/User.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/User.java index 6f47e1cfd..542f5119a 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/User.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/User.java @@ -2,9 +2,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import jakarta.persistence.*; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; +import lombok.*; import java.time.LocalDate; import java.util.List; @@ -15,6 +13,8 @@ @Data @Entity @Table(name = "USER") +@Getter +@Setter public class User { @Id private String id; @@ -29,14 +29,6 @@ public class User { fetch = FetchType.LAZY) private List wordsMapped; - public User(String id,String name, String email, String password, boolean active, LocalDate createdAt) { - this.id = id; - this.userName = name; - this.password = password; - this.email = email; - this.active = active; - this.createdAt = createdAt; - } @Override public String toString() { diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/Word.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/Word.java index 1b01db1ef..990c5b121 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/Word.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/Word.java @@ -11,6 +11,9 @@ @AllArgsConstructor @NoArgsConstructor @Entity +@Table(name = "WORDS") +@Getter +@Setter public class Word { @Id @@ -28,15 +31,6 @@ public class Word { @JsonIgnoreProperties("wordsMapped") private User userMapped; - public Word(String id, String wordName, String definition, String phoneticSpelling, String sentence, boolean isActive, int level) { - this.id = id; - this.wordName = wordName; - this.definition = definition; - this.phoneticSpelling = phoneticSpelling; - this.sentence = sentence; - this.isActive = isActive; - this.level = level; - } @Override public String toString() { diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/repository/UserRepository.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/repository/UserRepository.java index 743891158..05477528b 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/repository/UserRepository.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/repository/UserRepository.java @@ -3,7 +3,6 @@ import dev.pronunciationAppBack.model.User; import org.springframework.data.jpa.repository.JpaRepository; -import java.util.UUID; -public interface UserRepository extends JpaRepository { +public interface UserRepository extends JpaRepository { } diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/repository/WordRepository.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/repository/WordRepository.java index 0ec8cd7b9..fa84d8e8c 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/repository/WordRepository.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/repository/WordRepository.java @@ -6,5 +6,5 @@ import java.util.UUID; -public interface WordRepository extends JpaRepository { +public interface WordRepository extends JpaRepository { } diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserService.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserService.java index faf68c48b..81ce1f51c 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserService.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserService.java @@ -10,8 +10,8 @@ public interface UserService { List getAllUsers(); User createUser(User user); - User getUserById(UUID id); - User updateUser(UUID id, User userDetails); - boolean deleteUser(UUID id); + User getUserById(String id); + User updateUser(String id, User userDetails); + boolean deleteUser(String id); long countUsers(); } diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserServiceImpl.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserServiceImpl.java index 2e2a8fc37..b2dff32ed 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserServiceImpl.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserServiceImpl.java @@ -3,10 +3,11 @@ import dev.pronunciationAppBack.model.User; import dev.pronunciationAppBack.repository.UserRepository; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; import java.util.List; -import java.util.UUID; +@Service public class UserServiceImpl implements UserService { @Autowired @@ -19,31 +20,42 @@ public List getAllUsers() { @Override public User createUser(User user) { - user.setId(UUID.randomUUID().toString()); + return userRepository.save(user); } @Override - public User getUserById(UUID id) { + public User getUserById(String id) { return userRepository.findById(id).orElse(null); } @Override - public User updateUser(UUID id, User userDetails) { + public User updateUser(String id, User userDetails) { User user = userRepository.findById(id).orElse(null); if (user != null) { - user.setUserName(userDetails.getUserName()); - user.setEmail(userDetails.getEmail()); - user.setPassword(userDetails.getPassword()); - user.setActive(userDetails.isActive()); - user.setCreatedAt(userDetails.getCreatedAt()); + if (userDetails.getUserName() != null) { + user.setUserName(userDetails.getUserName()); + } + + if (userDetails.getEmail() != null) { + user.setEmail(userDetails.getEmail()); + } + if (userDetails.getPassword() != null) { + user.setPassword(userDetails.getPassword()); + } + if (userDetails.isActive()) { + user.setActive(userDetails.isActive()); + } + if (userDetails.getCreatedAt() != null){ + user.setCreatedAt(userDetails.getCreatedAt()); + } return userRepository.save(user); } return null; } @Override - public boolean deleteUser(UUID id) { + public boolean deleteUser(String id) { if (userRepository.existsById(id)){ userRepository.deleteById(id); System.out.println("Deleted successfully!"); diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/WordService.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/WordService.java index 07ff51ae0..fb0f44cc6 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/WordService.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/WordService.java @@ -5,12 +5,11 @@ import dev.pronunciationAppBack.model.Word; public interface WordService { - List getAllWord(); + List getAllWords(); Word createWord(Word word); - Word getWordById(UUID id); - Word updateWord(UUID id, Word wordDetails); - boolean deleteWord(UUID id); - + Word getWordById(String id); + Word updateWord(String id, Word wordDetails); + boolean deleteWord(String id); long countWords(); } diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/WordServiceImpl.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/WordServiceImpl.java index 3592b43d7..23f424bb7 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/WordServiceImpl.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/WordServiceImpl.java @@ -3,47 +3,61 @@ import dev.pronunciationAppBack.model.Word; import dev.pronunciationAppBack.repository.WordRepository; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; import java.util.List; import java.util.UUID; - +@Service public class WordServiceImpl implements WordService { @Autowired - private static WordRepository wordRepository; + private WordRepository wordRepository; @Override - public List getAllWord() { + public List getAllWords() { return wordRepository.findAll(); } @Override public Word createWord(Word word) { - word.setId(UUID.randomUUID().toString()); + return wordRepository.save(word); } @Override - public Word getWordById(UUID id) { + public Word getWordById(String id) { return wordRepository.findById(id).orElse(null); } @Override - public Word updateWord(UUID id, Word wordDetails) { + public Word updateWord(String id, Word wordDetails) { Word word = wordRepository.findById(id).orElse(null); if (word != null) { - word.setWordName(wordDetails.getWordName()); - word.setDefinition(wordDetails.getDefinition()); - word.setPhoneticSpelling(wordDetails.getPhoneticSpelling()); - word.setSentence(wordDetails.getSentence()); - word.setActive(wordDetails.isActive()); - word.setLevel(wordDetails.getLevel()); + if (wordDetails.getWordName() != null) { + word.setWordName(wordDetails.getWordName()); + } + if (wordDetails.getDefinition() != null){ + word.setDefinition(wordDetails.getDefinition()); + } + if (wordDetails.getPhoneticSpelling() != null){ + word.setPhoneticSpelling(wordDetails.getPhoneticSpelling()); + } + if (wordDetails.getSentence() != null){ + word.setSentence(wordDetails.getSentence()); + } + if (wordDetails.isActive()){ + word.setActive(wordDetails.isActive()); + } + if (wordDetails.getLevel() != 0){ + word.setLevel(wordDetails.getLevel()); + } + return wordRepository.save(word); } return null; } @Override - public boolean deleteWord(UUID id) { + public boolean deleteWord(String id) { if (wordRepository.existsById(id)){ wordRepository.deleteById(id); System.out.println("Deleted successfully!"); diff --git a/backend/pronunciationAppBack/src/main/resources/application.properties b/backend/pronunciationAppBack/src/main/resources/application.properties index 19ae7e072..5a13148ae 100644 --- a/backend/pronunciationAppBack/src/main/resources/application.properties +++ b/backend/pronunciationAppBack/src/main/resources/application.properties @@ -18,6 +18,6 @@ spring.jpa.hibernate.ddl-auto=create-drop #spring.datasource.password=1234 #spring.datasource.driver-class-name=org.postgresql.Driver -# Configuración de JPA/Hibernate +# Config of JPA/Hibernate #spring.jpa.hibernate.ddl-auto=update #spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect From ae351daa7369e38e9cff191b074084d6e4418600 Mon Sep 17 00:00:00 2001 From: AlberteMB Date: Thu, 6 Feb 2025 11:53:27 +0100 Subject: [PATCH 16/21] Trying to solve issue in updateWord and updateUser --- .../src/main/java/dev/pronunciationAppBack/model/User.java | 2 +- .../src/main/java/dev/pronunciationAppBack/model/Word.java | 2 +- .../java/dev/pronunciationAppBack/service/WordServiceImpl.java | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/User.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/User.java index 542f5119a..7156c3e31 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/User.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/User.java @@ -10,7 +10,7 @@ @AllArgsConstructor @NoArgsConstructor -@Data +//@Data @Entity @Table(name = "USER") @Getter diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/Word.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/Word.java index 990c5b121..714ff6db6 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/Word.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/Word.java @@ -7,7 +7,7 @@ import java.util.UUID; -@Data +//@Data @AllArgsConstructor @NoArgsConstructor @Entity diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/WordServiceImpl.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/WordServiceImpl.java index 23f424bb7..ce8ce1d30 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/WordServiceImpl.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/WordServiceImpl.java @@ -14,6 +14,7 @@ public class WordServiceImpl implements WordService { @Override public List getAllWords() { + return wordRepository.findAll(); } From d882e9f43f7ec64546f76f65df5f61b58e9d82f2 Mon Sep 17 00:00:00 2001 From: AlberteMB Date: Thu, 6 Feb 2025 12:39:43 +0100 Subject: [PATCH 17/21] Adding annotations @Email, @NotBlank, @Size, @Pattern --- backend/pronunciationAppBack/pom.xml | 6 ++++- .../dev/pronunciationAppBack/model/User.java | 16 +++++++++--- .../dev/pronunciationAppBack/model/Word.java | 4 +-- .../repository/UserRepository.java | 25 +++++++++++++++++++ .../service/UserServiceImpl.java | 14 +++++++++++ 5 files changed, 58 insertions(+), 7 deletions(-) diff --git a/backend/pronunciationAppBack/pom.xml b/backend/pronunciationAppBack/pom.xml index 6efee594e..3313aede2 100644 --- a/backend/pronunciationAppBack/pom.xml +++ b/backend/pronunciationAppBack/pom.xml @@ -38,7 +38,11 @@ org.springframework.boot spring-boot-starter-web - + + org.springframework.boot + spring-boot-starter-validation + 3.4.2 + org.springframework.boot spring-boot-devtools diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/User.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/User.java index 7156c3e31..ba9e62320 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/User.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/User.java @@ -2,7 +2,11 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import jakarta.persistence.*; +import jakarta.validation.constraints.Pattern; import lombok.*; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; +import jakarta.validation.constraints.Email; import java.time.LocalDate; import java.util.List; @@ -10,16 +14,22 @@ @AllArgsConstructor @NoArgsConstructor -//@Data +@Data @Entity @Table(name = "USER") -@Getter -@Setter public class User { @Id private String id; + @NotBlank(message = "Username is required") + @Size(min = 3, max = 15) private String userName; + @Email(message = "Invalid email format") + @NotBlank(message = "Email is required") private String email; + @Size(min = 8, max = 20, message = "Password must be at least 8 characters long") + @Pattern( + regexp = "^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$", + message = "Password must contain at least one uppercase letter, one lowercase letter, one digit, and one special character") private String password; private boolean active; private LocalDate createdAt; diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/Word.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/Word.java index 714ff6db6..c01e94022 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/Word.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/Word.java @@ -7,13 +7,11 @@ import java.util.UUID; -//@Data +@Data @AllArgsConstructor @NoArgsConstructor @Entity @Table(name = "WORDS") -@Getter -@Setter public class Word { @Id diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/repository/UserRepository.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/repository/UserRepository.java index 05477528b..e4a995340 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/repository/UserRepository.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/repository/UserRepository.java @@ -2,7 +2,32 @@ import dev.pronunciationAppBack.model.User; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; + +import java.time.LocalDate; +import java.util.List; public interface UserRepository extends JpaRepository { + // Find active users + List findByActiveTrue(); + + // Find users created after a specific date + List findByCreatedAtAfter(LocalDate date); + + // Find users by username containing + List findByUsernameContaining(String username); + + // Count active users + long countByActiveTrue(); + + // Find users with email domain + List findByEmailContaining(String domain); + + // Complex query with multiple conditions + @Query("SELECT u FROM User u WHERE u.active = true AND u.createdAt > :date") + List findActiveUsersCreatedAfter( + @Param("date") LocalDate date + ); } diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserServiceImpl.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserServiceImpl.java index b2dff32ed..2a9315148 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserServiceImpl.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserServiceImpl.java @@ -5,6 +5,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.time.LocalDate; import java.util.List; @Service @@ -13,6 +14,19 @@ public class UserServiceImpl implements UserService { @Autowired private UserRepository userRepository; + public List getActiveUsers() { + return userRepository.findByActiveTrue(); + } + + public List getUsersCreatedRecently(int days) { + LocalDate cutoffDate = LocalDate.now().minusDays(days); + return userRepository.findByCreatedAtAfter(cutoffDate); + } + + public long countActiveUsers() { + return userRepository.countByActiveTrue(); + } + @Override public List getAllUsers() { return userRepository.findAll(); From 2a070faf608823073d8a92cee2ca2139e4355ea1 Mon Sep 17 00:00:00 2001 From: AlberteMB Date: Fri, 7 Feb 2025 09:13:10 +0100 Subject: [PATCH 18/21] Getters y setters added --- .../dev/pronunciationAppBack/model/User.java | 42 +++++++++++++++- .../dev/pronunciationAppBack/model/Word.java | 49 ++++++++++++++++++- 2 files changed, 88 insertions(+), 3 deletions(-) diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/User.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/User.java index ba9e62320..09222ff6c 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/User.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/User.java @@ -14,9 +14,9 @@ @AllArgsConstructor @NoArgsConstructor -@Data +//@Data @Entity -@Table(name = "USER") +//@Table(name = "USER") public class User { @Id private String id; @@ -39,7 +39,45 @@ public class User { fetch = FetchType.LAZY) private List wordsMapped; + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getPassword() { + return password; + } + public void setPassword(String password) { + this.password = password; + } + + public boolean isActive() { + return active; + } + + public void setActive(boolean active) { + this.active = active; + } + + public LocalDate getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(LocalDate createdAt) { + this.createdAt = createdAt; + } @Override public String toString() { return "Customer{" + diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/Word.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/Word.java index c01e94022..30ede5393 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/Word.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/Word.java @@ -7,7 +7,7 @@ import java.util.UUID; -@Data +//@Data @AllArgsConstructor @NoArgsConstructor @Entity @@ -29,6 +29,53 @@ public class Word { @JsonIgnoreProperties("wordsMapped") private User userMapped; + public String getWordName() { + return wordName; + } + + public void setWordName(String wordName) { + this.wordName = wordName; + } + + public String getDefinition() { + return definition; + } + + public void setDefinition(String definition) { + this.definition = definition; + } + + public String getPhoneticSpelling() { + return phoneticSpelling; + } + + public void setPhoneticSpelling(String phoneticSpelling) { + this.phoneticSpelling = phoneticSpelling; + } + + public String getSentence() { + return sentence; + } + + public void setSentence(String sentence) { + this.sentence = sentence; + } + + public boolean isActive() { + return isActive; + } + + public void setActive(boolean active) { + isActive = active; + } + + public int getLevel() { + return level; + } + + public void setLevel(int level) { + this.level = level; + } @Override public String toString() { From aec6d8381c19066dcf2ca3f8a5ebe76002a22097 Mon Sep 17 00:00:00 2001 From: AlberteMB Date: Fri, 7 Feb 2025 13:17:38 +0100 Subject: [PATCH 19/21] New queries added. Not finished! --- backend/pronunciationAppBack/pom.xml | 5 +- .../controller/UserController.java | 74 +++++++++++++++++-- .../controller/WordController.java | 5 +- .../dev/pronunciationAppBack/model/User.java | 10 ++- .../dev/pronunciationAppBack/model/Word.java | 10 ++- .../repository/UserRepository.java | 7 +- .../service/UserService.java | 10 +++ .../service/UserServiceImpl.java | 43 ++++++++++- .../service/WordServiceImpl.java | 2 +- .../src/main/resources/application.properties | 8 ++ 10 files changed, 156 insertions(+), 18 deletions(-) diff --git a/backend/pronunciationAppBack/pom.xml b/backend/pronunciationAppBack/pom.xml index 3313aede2..0f1edb628 100644 --- a/backend/pronunciationAppBack/pom.xml +++ b/backend/pronunciationAppBack/pom.xml @@ -89,7 +89,10 @@ lombok - + 21 + 21 + --enable-preview + org.springframework.boot diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/UserController.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/UserController.java index a356f9150..9ce394d0a 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/UserController.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/UserController.java @@ -10,9 +10,10 @@ import org.springframework.web.bind.annotation.*; import org.springframework.http.HttpHeaders; +import java.time.LocalDate; import java.util.Date; import java.util.List; -import java.util.UUID; + @RequestMapping("/api/v1/users") @RestController @@ -21,9 +22,6 @@ public class UserController { @Value("${endpoint.url.users}") private String endpointUrlUsers; - @Autowired - private UserRepository userRepository; - @Autowired private UserService userService; @@ -34,7 +32,7 @@ public String showEndPointUsers() { @GetMapping("/allUsers") public ResponseEntity> getAllUsers() { - List users = userRepository.findAll(); + List users = userService.getAllUsers(); HttpHeaders headers = getCommonHeaders("Get all users"); System.out.println("Number of users: " + users.size()); if (users.isEmpty()) { @@ -80,6 +78,72 @@ public ResponseEntity getUserById(@PathVariable("id") String id) { : new ResponseEntity<>(headers, HttpStatus.NOT_FOUND); } + // New endpoints for PRA02 + + @GetMapping("/active-users") + public ResponseEntity> getActiveUsers() { + List activeUsers = userService.getActiveUsers(); + HttpHeaders headers = getCommonHeaders("Get all active users"); + return activeUsers != null + ? new ResponseEntity<>(activeUsers, headers, HttpStatus.OK) + : new ResponseEntity<>(headers, HttpStatus.NOT_FOUND); + } + + @GetMapping("/created-after") + public ResponseEntity> getUsersCreatedAtAfter(@RequestParam LocalDate date) { + List users = userService.getUsersCreatedAtAfter(date); + HttpHeaders headers = getCommonHeaders("Get users created after a specific date"); + return users != null + ? new ResponseEntity<>(users, headers, HttpStatus.OK) + : new ResponseEntity<>(headers, HttpStatus.NOT_FOUND); + } + + @GetMapping("/username/contains") + public ResponseEntity> getUserNameContains(@RequestParam String username) { + List users = userService.getUserNameContains(username); + return ResponseEntity.ok(users); + } + + @GetMapping("/email/contains") + public ResponseEntity> getUserEmailContains(@RequestParam String email) { + List users = userService.getUserEmailContains(email); + HttpHeaders headers = getCommonHeaders("Get users with email domain"); + return users != null + ? new ResponseEntity<>(users, headers, HttpStatus.OK) + : new ResponseEntity<>(headers, HttpStatus.NOT_FOUND); + } + + // + @GetMapping("/active/created-after") + public ResponseEntity> getActiveUsersCreatedAfter(@RequestParam LocalDate date) { + List users = userService.getActiveUsersCreatedAfter(date); + HttpHeaders headers = getCommonHeaders("Get active users created after a specific date"); + return users != null + ? new ResponseEntity<>(users, headers, HttpStatus.OK) + : new ResponseEntity<>(headers, HttpStatus.NOT_FOUND); + } + // TERMINAR!! + + @GetMapping("/email/{email}") + public ResponseEntity findByEmail(@PathVariable String email) { + return userService.findByEmail(email) + .map(ResponseEntity::ok) + .orElseGet(() -> ResponseEntity.notFound().build()); + } + + + @GetMapping("/username/{userName}") + public ResponseEntity findByUserName(@PathVariable String userName) { + return userService.findByUserName(userName) + .map(ResponseEntity::ok) + .orElseGet(() -> ResponseEntity.notFound().build()); + } + + @GetMapping("/count") + public ResponseEntity countUsers() { + return ResponseEntity.ok(userService.countUsers()); + } + private HttpHeaders getCommonHeaders(String description) { HttpHeaders headers = new HttpHeaders(); headers.add("description", description); diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/WordController.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/WordController.java index 51e69c261..c6732b80e 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/WordController.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/WordController.java @@ -24,9 +24,6 @@ public class WordController { @Value("${endpoint.url.words}") private String endpointUrlWords; - @Autowired - public WordRepository wordRepository; - @Autowired public WordService wordService; @@ -38,7 +35,7 @@ public String showEndPointWords() { @GetMapping("/allWords") public ResponseEntity> getAllWords() { - List words = wordRepository.findAll(); + List words = wordService.getAllWords(); HttpHeaders headers = getCommonHeaders("Get all customers"); System.out.println("Number of words: " + words.size()); for (Word word : words) { diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/User.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/User.java index 09222ff6c..fce4f1df9 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/User.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/User.java @@ -16,7 +16,7 @@ @NoArgsConstructor //@Data @Entity -//@Table(name = "USER") +@Table(name = "\"user\"") public class User { @Id private String id; @@ -39,6 +39,14 @@ public class User { fetch = FetchType.LAZY) private List wordsMapped; + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + public String getUserName() { return userName; } diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/Word.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/Word.java index 30ede5393..b24fe1ddb 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/Word.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/Word.java @@ -25,10 +25,18 @@ public class Word { @JsonIgnore @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "user_id") + @JoinColumn(name = "WORD_USER_FK_ID") @JsonIgnoreProperties("wordsMapped") private User userMapped; + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + public String getWordName() { return wordName; } diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/repository/UserRepository.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/repository/UserRepository.java index e4a995340..096ecc75d 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/repository/UserRepository.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/repository/UserRepository.java @@ -7,6 +7,7 @@ import java.time.LocalDate; import java.util.List; +import java.util.Optional; public interface UserRepository extends JpaRepository { @@ -17,7 +18,7 @@ public interface UserRepository extends JpaRepository { List findByCreatedAtAfter(LocalDate date); // Find users by username containing - List findByUsernameContaining(String username); + List findByUserNameContaining(String username); // Count active users long countByActiveTrue(); @@ -30,4 +31,8 @@ public interface UserRepository extends JpaRepository { List findActiveUsersCreatedAfter( @Param("date") LocalDate date ); + + Optional findByEmail(String email); + + Optional findByUserName(String userName); } diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserService.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserService.java index 81ce1f51c..ac3156037 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserService.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserService.java @@ -2,7 +2,9 @@ import dev.pronunciationAppBack.model.User; +import java.time.LocalDate; import java.util.List; +import java.util.Optional; import java.util.UUID; @@ -14,4 +16,12 @@ public interface UserService { User updateUser(String id, User userDetails); boolean deleteUser(String id); long countUsers(); + // Adding new methods for complex queries + List getActiveUsers(); + List getUsersCreatedAtAfter(LocalDate date); + List getUserNameContains(String username); + List getUserEmailContains(String email); + List getActiveUsersCreatedAfter(LocalDate date); + Optional findByEmail(String email); + Optional findByUserName(String userName); } diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserServiceImpl.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserServiceImpl.java index 2a9315148..22bb914cb 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserServiceImpl.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserServiceImpl.java @@ -7,6 +7,8 @@ import java.time.LocalDate; import java.util.List; +import java.util.Optional; +import java.util.UUID; @Service public class UserServiceImpl implements UserService { @@ -18,9 +20,36 @@ public List getActiveUsers() { return userRepository.findByActiveTrue(); } - public List getUsersCreatedRecently(int days) { - LocalDate cutoffDate = LocalDate.now().minusDays(days); - return userRepository.findByCreatedAtAfter(cutoffDate); + @Override + public List getUsersCreatedAtAfter(LocalDate date) { + return userRepository.findByCreatedAtAfter(date); + } + + @Override + public List getUserNameContains(String username) { + return userRepository.findByUserNameContaining(username); + } + + @Override + public List getUserEmailContains(String email) { + return userRepository.findByEmailContaining(email); + } + + @Override + public List getActiveUsersCreatedAfter(LocalDate date) { + return userRepository.findActiveUsersCreatedAfter(date); + } + + @Override + public Optional findByEmail(String email) { + + + return userRepository.findByEmail(email); + } + + @Override + public Optional findByUserName(String userName) { + return userRepository.findByUserName(userName); } public long countActiveUsers() { @@ -34,7 +63,14 @@ public List getAllUsers() { @Override public User createUser(User user) { + if (userRepository.findByEmail(user.getEmail()).isPresent()) { + throw new IllegalArgumentException("A user with this email already exists."); + } + if (userRepository.findByUserName(user.getUserName()).isPresent()) { + throw new IllegalArgumentException("A user with this username already exists."); + } + user.setId(UUID.randomUUID().toString()); return userRepository.save(user); } @@ -50,7 +86,6 @@ public User updateUser(String id, User userDetails) { if (userDetails.getUserName() != null) { user.setUserName(userDetails.getUserName()); } - if (userDetails.getEmail() != null) { user.setEmail(userDetails.getEmail()); } diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/WordServiceImpl.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/WordServiceImpl.java index ce8ce1d30..7c8e9a7f5 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/WordServiceImpl.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/WordServiceImpl.java @@ -20,7 +20,7 @@ public List getAllWords() { @Override public Word createWord(Word word) { - + word.setId(UUID.randomUUID().toString()); return wordRepository.save(word); } diff --git a/backend/pronunciationAppBack/src/main/resources/application.properties b/backend/pronunciationAppBack/src/main/resources/application.properties index 5a13148ae..8642bf434 100644 --- a/backend/pronunciationAppBack/src/main/resources/application.properties +++ b/backend/pronunciationAppBack/src/main/resources/application.properties @@ -21,3 +21,11 @@ spring.jpa.hibernate.ddl-auto=create-drop # Config of JPA/Hibernate #spring.jpa.hibernate.ddl-auto=update #spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect + +# ENDPOINTS +# Import .env file +spring.config.import=optional:file:.env +# import from environment variables +#endpoint.url.users=${ENDPOINT_URL_USERS} +endpoint.url.users=/api/v1/users/ +endpoint.url.words=/api/v1/words/ \ No newline at end of file From 8448db593d8e53dcf365d1361a87ff10fbd9578f Mon Sep 17 00:00:00 2001 From: AlberteMB Date: Fri, 7 Feb 2025 17:47:30 +0100 Subject: [PATCH 20/21] Issues in controller are solved --- backend/pronunciationAppBack/pom.xml | 4 +- .../controller/UserController.java | 51 ++++++++++--------- .../controller/WordController.java | 5 +- .../repository/UserRepository.java | 4 +- .../service/UserService.java | 4 +- .../service/UserServiceImpl.java | 6 +-- 6 files changed, 36 insertions(+), 38 deletions(-) diff --git a/backend/pronunciationAppBack/pom.xml b/backend/pronunciationAppBack/pom.xml index 0f1edb628..86715b863 100644 --- a/backend/pronunciationAppBack/pom.xml +++ b/backend/pronunciationAppBack/pom.xml @@ -12,7 +12,7 @@ pronunciationAppBack 0.0.1-SNAPSHOT pronunciationAppBack - Spring Boot for app pronunciatoin + Spring Boot for app pronunciation @@ -27,7 +27,7 @@ - 17 + 21 diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/UserController.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/UserController.java index 9ce394d0a..31059d30c 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/UserController.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/UserController.java @@ -84,33 +84,34 @@ public ResponseEntity getUserById(@PathVariable("id") String id) { public ResponseEntity> getActiveUsers() { List activeUsers = userService.getActiveUsers(); HttpHeaders headers = getCommonHeaders("Get all active users"); - return activeUsers != null - ? new ResponseEntity<>(activeUsers, headers, HttpStatus.OK) - : new ResponseEntity<>(headers, HttpStatus.NOT_FOUND); + return activeUsers.isEmpty() ? ResponseEntity.noContent().headers(headers).build() + : ResponseEntity.ok().headers(headers).body(activeUsers); } @GetMapping("/created-after") public ResponseEntity> getUsersCreatedAtAfter(@RequestParam LocalDate date) { List users = userService.getUsersCreatedAtAfter(date); HttpHeaders headers = getCommonHeaders("Get users created after a specific date"); - return users != null - ? new ResponseEntity<>(users, headers, HttpStatus.OK) - : new ResponseEntity<>(headers, HttpStatus.NOT_FOUND); + return users.isEmpty() ? ResponseEntity.noContent().headers(headers).build() + : ResponseEntity.ok().headers(headers).body(users); } @GetMapping("/username/contains") public ResponseEntity> getUserNameContains(@RequestParam String username) { List users = userService.getUserNameContains(username); - return ResponseEntity.ok(users); + HttpHeaders headers = getCommonHeaders("Get users by username containing"); + return users.isEmpty() ? ResponseEntity.noContent().headers(headers).build() + : ResponseEntity.ok().headers(headers).body(users); + } @GetMapping("/email/contains") public ResponseEntity> getUserEmailContains(@RequestParam String email) { List users = userService.getUserEmailContains(email); HttpHeaders headers = getCommonHeaders("Get users with email domain"); - return users != null - ? new ResponseEntity<>(users, headers, HttpStatus.OK) - : new ResponseEntity<>(headers, HttpStatus.NOT_FOUND); + return users.isEmpty() ? ResponseEntity.noContent().headers(headers).build() + : ResponseEntity.ok().headers(headers).body(users); + } // @@ -118,29 +119,32 @@ public ResponseEntity> getUserEmailContains(@RequestParam String emai public ResponseEntity> getActiveUsersCreatedAfter(@RequestParam LocalDate date) { List users = userService.getActiveUsersCreatedAfter(date); HttpHeaders headers = getCommonHeaders("Get active users created after a specific date"); - return users != null - ? new ResponseEntity<>(users, headers, HttpStatus.OK) - : new ResponseEntity<>(headers, HttpStatus.NOT_FOUND); + return users.isEmpty() ? ResponseEntity.noContent().headers(headers).build() + : ResponseEntity.ok().headers(headers).body(users); + } - // TERMINAR!! @GetMapping("/email/{email}") - public ResponseEntity findByEmail(@PathVariable String email) { - return userService.findByEmail(email) - .map(ResponseEntity::ok) - .orElseGet(() -> ResponseEntity.notFound().build()); + public ResponseEntity getUserByEmail(@PathVariable String email) { + User user = userService.getUserByEmail(email).orElse(null); + HttpHeaders headers = getCommonHeaders("Get a user by email"); + return user != null + ? new ResponseEntity<>(user, headers, HttpStatus.OK) + : new ResponseEntity<>(headers, HttpStatus.NOT_FOUND); } @GetMapping("/username/{userName}") - public ResponseEntity findByUserName(@PathVariable String userName) { - return userService.findByUserName(userName) - .map(ResponseEntity::ok) - .orElseGet(() -> ResponseEntity.notFound().build()); + public ResponseEntity getUserByUserName(@PathVariable String userName) { + User user = userService.getUserByUserName(userName).orElse(null); + HttpHeaders headers = getCommonHeaders("Get a user by username"); + return user != null + ? new ResponseEntity<>(user, headers, HttpStatus.OK) + : new ResponseEntity<>(headers, HttpStatus.NOT_FOUND); } @GetMapping("/count") - public ResponseEntity countUsers() { + public ResponseEntity countUsers() { return ResponseEntity.ok(userService.countUsers()); } @@ -153,7 +157,6 @@ private HttpHeaders getCommonHeaders(String description) { headers.add("version", "1.0.0"); headers.add("user-count", String.valueOf(userService.countUsers())); headers.add("object", "users"); - return headers; } } diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/WordController.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/WordController.java index c6732b80e..742ad0fb3 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/WordController.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/WordController.java @@ -2,7 +2,6 @@ import dev.pronunciationAppBack.model.Word; -import dev.pronunciationAppBack.repository.WordRepository; import dev.pronunciationAppBack.service.WordService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -11,11 +10,9 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; - - import java.util.Date; import java.util.List; -import java.util.UUID; + @RequestMapping("/api/v1/words") @RestController diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/repository/UserRepository.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/repository/UserRepository.java index 096ecc75d..1e82eccc2 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/repository/UserRepository.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/repository/UserRepository.java @@ -32,7 +32,7 @@ List findActiveUsersCreatedAfter( @Param("date") LocalDate date ); - Optional findByEmail(String email); + Optional findByEmail(String email); - Optional findByUserName(String userName); + Optional findByUserName(String userName); } diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserService.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserService.java index ac3156037..5e35edf31 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserService.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserService.java @@ -22,6 +22,6 @@ public interface UserService { List getUserNameContains(String username); List getUserEmailContains(String email); List getActiveUsersCreatedAfter(LocalDate date); - Optional findByEmail(String email); - Optional findByUserName(String userName); + Optional getUserByEmail(String email); + Optional getUserByUserName(String userName); } diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserServiceImpl.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserServiceImpl.java index 22bb914cb..166f4dbb1 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserServiceImpl.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserServiceImpl.java @@ -41,14 +41,12 @@ public List getActiveUsersCreatedAfter(LocalDate date) { } @Override - public Optional findByEmail(String email) { - - + public Optional getUserByEmail(String email) { return userRepository.findByEmail(email); } @Override - public Optional findByUserName(String userName) { + public Optional getUserByUserName(String userName) { return userRepository.findByUserName(userName); } From ab49af0d9eb66194c2fe9210af31576fc39e200f Mon Sep 17 00:00:00 2001 From: AlberteMB Date: Fri, 7 Feb 2025 20:53:25 +0100 Subject: [PATCH 21/21] UserController, WordServiceImpl --- .../controller/UserController.java | 1 + .../dev/pronunciationAppBack/model/User.java | 2 +- .../dev/pronunciationAppBack/model/Word.java | 2 +- .../service/UserServiceImpl.java | 2 +- .../service/WordServiceImpl.java | 1 - .../UserControllerIntegrationTest.java | 18 ++++++++++++++++++ 6 files changed, 22 insertions(+), 4 deletions(-) diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/UserController.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/UserController.java index 31059d30c..9ad8844b0 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/UserController.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/controller/UserController.java @@ -90,6 +90,7 @@ public ResponseEntity> getActiveUsers() { @GetMapping("/created-after") public ResponseEntity> getUsersCreatedAtAfter(@RequestParam LocalDate date) { + List users = userService.getUsersCreatedAtAfter(date); HttpHeaders headers = getCommonHeaders("Get users created after a specific date"); return users.isEmpty() ? ResponseEntity.noContent().headers(headers).build() diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/User.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/User.java index fce4f1df9..abbb762b0 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/User.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/User.java @@ -16,7 +16,7 @@ @NoArgsConstructor //@Data @Entity -@Table(name = "\"user\"") +@Table(name = "\"Users\"") public class User { @Id private String id; diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/Word.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/Word.java index b24fe1ddb..856f84831 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/Word.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/model/Word.java @@ -11,7 +11,7 @@ @AllArgsConstructor @NoArgsConstructor @Entity -@Table(name = "WORDS") +@Table(name = "Words") public class Word { @Id diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserServiceImpl.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserServiceImpl.java index 166f4dbb1..bfccd67dd 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserServiceImpl.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/UserServiceImpl.java @@ -95,7 +95,7 @@ public User updateUser(String id, User userDetails) { } if (userDetails.getCreatedAt() != null){ user.setCreatedAt(userDetails.getCreatedAt()); - } + } return userRepository.save(user); } return null; diff --git a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/WordServiceImpl.java b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/WordServiceImpl.java index 7c8e9a7f5..a56e5abb9 100644 --- a/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/WordServiceImpl.java +++ b/backend/pronunciationAppBack/src/main/java/dev/pronunciationAppBack/service/WordServiceImpl.java @@ -51,7 +51,6 @@ public Word updateWord(String id, Word wordDetails) { if (wordDetails.getLevel() != 0){ word.setLevel(wordDetails.getLevel()); } - return wordRepository.save(word); } return null; diff --git a/backend/pronunciationAppBack/src/test/java/dev/pronunciationAppBack/UserControllerIntegrationTest.java b/backend/pronunciationAppBack/src/test/java/dev/pronunciationAppBack/UserControllerIntegrationTest.java index 81032f97a..4e5378a68 100644 --- a/backend/pronunciationAppBack/src/test/java/dev/pronunciationAppBack/UserControllerIntegrationTest.java +++ b/backend/pronunciationAppBack/src/test/java/dev/pronunciationAppBack/UserControllerIntegrationTest.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import dev.pronunciationAppBack.model.User; import dev.pronunciationAppBack.repository.UserRepository; +import dev.pronunciationAppBack.utilities.UserFakerGenerator; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; @@ -12,7 +13,11 @@ import org.springframework.test.web.servlet.RequestBuilder; import org.springframework.test.web.servlet.ResultMatcher; +import java.util.List; + import static java.nio.file.Paths.get; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.springframework.mock.http.server.reactive.MockServerHttpRequest.post; import static org.springframework.test.web.client.match.MockRestRequestMatchers.content; import static org.springframework.test.web.client.match.MockRestRequestMatchers.jsonPath; @@ -27,8 +32,21 @@ class UserControllerIntegrationTest { @Autowired private UserRepository userRepository; + @Autowired + UserFakerGenerator userFakerGenerator; + + @Test + public void testGenerateUsers() { + List users = userFakerGenerator.generateUsers(5); + + assertNotNull(users); + assertEquals(5, users.size()); + users.forEach(System.out::println); + } + @Test void testGetAllUsers() throws Exception { + mockMvc.perform((RequestBuilder) get("/api/users")) .andExpect(status().isOk()) .andExpect((ResultMatcher) content().contentType(MediaType.APPLICATION_JSON));