diff --git a/mvnw.cmd b/mvnw.cmd index 019bd74..0aef3e5 100644 --- a/mvnw.cmd +++ b/mvnw.cmd @@ -41,7 +41,7 @@ @REM set %HOME% to equivalent of $HOME if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") -@REM Execute a user defined script before this one +@REM Execute a member defined script before this one if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre @REM check for pre script, once with legacy .bat ending and once with .cmd ending if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" diff --git a/src/main/java/com/example/postgresdemo/controller/AnswerController.java b/src/main/java/com/example/postgresdemo/controller/AnswerController.java deleted file mode 100644 index 7cfaa47..0000000 --- a/src/main/java/com/example/postgresdemo/controller/AnswerController.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.example.postgresdemo.controller; - -import com.example.postgresdemo.exception.ResourceNotFoundException; -import com.example.postgresdemo.model.Answer; -import com.example.postgresdemo.repository.AnswerRepository; -import com.example.postgresdemo.repository.QuestionRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; -import javax.validation.Valid; -import java.util.List; - -@RestController -public class AnswerController { - - @Autowired - private AnswerRepository answerRepository; - - @Autowired - private QuestionRepository questionRepository; - - @GetMapping("/questions/{questionId}/answers") - public List getAnswersByQuestionId(@PathVariable Long questionId) { - return answerRepository.findByQuestionId(questionId); - } - - @PostMapping("/questions/{questionId}/answers") - public Answer addAnswer(@PathVariable Long questionId, - @Valid @RequestBody Answer answer) { - return questionRepository.findById(questionId) - .map(question -> { - answer.setQuestion(question); - return answerRepository.save(answer); - }).orElseThrow(() -> new ResourceNotFoundException("Question not found with id " + questionId)); - } - - @PutMapping("/questions/{questionId}/answers/{answerId}") - public Answer updateAnswer(@PathVariable Long questionId, - @PathVariable Long answerId, - @Valid @RequestBody Answer answerRequest) { - if(!questionRepository.existsById(questionId)) { - throw new ResourceNotFoundException("Question not found with id " + questionId); - } - - return answerRepository.findById(answerId) - .map(answer -> { - answer.setText(answerRequest.getText()); - return answerRepository.save(answer); - }).orElseThrow(() -> new ResourceNotFoundException("Answer not found with id " + answerId)); - } - - @DeleteMapping("/questions/{questionId}/answers/{answerId}") - public ResponseEntity deleteAnswer(@PathVariable Long questionId, - @PathVariable Long answerId) { - if(!questionRepository.existsById(questionId)) { - throw new ResourceNotFoundException("Question not found with id " + questionId); - } - - return answerRepository.findById(answerId) - .map(answer -> { - answerRepository.delete(answer); - return ResponseEntity.ok().build(); - }).orElseThrow(() -> new ResourceNotFoundException("Answer not found with id " + answerId)); - - } -} diff --git a/src/main/java/com/example/postgresdemo/controller/MemberController.java b/src/main/java/com/example/postgresdemo/controller/MemberController.java new file mode 100644 index 0000000..edb9d86 --- /dev/null +++ b/src/main/java/com/example/postgresdemo/controller/MemberController.java @@ -0,0 +1,49 @@ +package com.example.postgresdemo.controller; + +import com.example.postgresdemo.exception.ResourceNotFoundException; +import com.example.postgresdemo.model.Member; +import com.example.postgresdemo.repository.MemberRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + +@RestController +public class MemberController { + + @Autowired + private MemberRepository memberRepository; + + @GetMapping("/member") + public Page getMember(Pageable pageable) { + return memberRepository.findAll(pageable); + } + + + @PostMapping("/member") + public Member createMember(@Valid @RequestBody Member member) { + return memberRepository.save(member); + } + + @PutMapping("/member/{memberId}") + public Member updateMember(@PathVariable Long memberId, + @Valid @RequestBody Member memberRequest) { + return memberRepository.findById(memberId) + .map(member -> { + member.setName(memberRequest.getName()); + return memberRepository.save(member); + }).orElseThrow(() -> new ResourceNotFoundException("Member not found with id " + memberId)); + } + + + @DeleteMapping("/member/{memberId}") + public ResponseEntity deleteUser(@PathVariable Long memberId) { + return memberRepository.findById(memberId) + .map(member -> { + memberRepository.delete(member); + return ResponseEntity.ok().build(); + }).orElseThrow(() -> new ResourceNotFoundException("Member not found with id " + memberId)); + } +} diff --git a/src/main/java/com/example/postgresdemo/controller/QuestionController.java b/src/main/java/com/example/postgresdemo/controller/QuestionController.java deleted file mode 100644 index c231819..0000000 --- a/src/main/java/com/example/postgresdemo/controller/QuestionController.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.example.postgresdemo.controller; - -import com.example.postgresdemo.exception.ResourceNotFoundException; -import com.example.postgresdemo.model.Question; -import com.example.postgresdemo.repository.QuestionRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; -import javax.validation.Valid; - -@RestController -public class QuestionController { - - @Autowired - private QuestionRepository questionRepository; - - @GetMapping("/questions") - public Page getQuestions(Pageable pageable) { - return questionRepository.findAll(pageable); - } - - - @PostMapping("/questions") - public Question createQuestion(@Valid @RequestBody Question question) { - return questionRepository.save(question); - } - - @PutMapping("/questions/{questionId}") - public Question updateQuestion(@PathVariable Long questionId, - @Valid @RequestBody Question questionRequest) { - return questionRepository.findById(questionId) - .map(question -> { - question.setTitle(questionRequest.getTitle()); - question.setDescription(questionRequest.getDescription()); - return questionRepository.save(question); - }).orElseThrow(() -> new ResourceNotFoundException("Question not found with id " + questionId)); - } - - - @DeleteMapping("/questions/{questionId}") - public ResponseEntity deleteQuestion(@PathVariable Long questionId) { - return questionRepository.findById(questionId) - .map(question -> { - questionRepository.delete(question); - return ResponseEntity.ok().build(); - }).orElseThrow(() -> new ResourceNotFoundException("Question not found with id " + questionId)); - } -} diff --git a/src/main/java/com/example/postgresdemo/controller/TodoController.java b/src/main/java/com/example/postgresdemo/controller/TodoController.java new file mode 100644 index 0000000..26b696f --- /dev/null +++ b/src/main/java/com/example/postgresdemo/controller/TodoController.java @@ -0,0 +1,66 @@ +package com.example.postgresdemo.controller; + +import com.example.postgresdemo.exception.ResourceNotFoundException; +import com.example.postgresdemo.model.Todo; +import com.example.postgresdemo.repository.TodoRepository; +import com.example.postgresdemo.repository.MemberRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; +import java.util.List; + +@RestController +public class TodoController { + + @Autowired + private TodoRepository todoRepository; + + @Autowired + private MemberRepository memberRepository; + + @GetMapping("/member/{memberId}/todo") + public List getTodoByMemberId(@PathVariable Long memberId) { + return todoRepository.findByMemberId(memberId); + } + + @PostMapping("/member/{memberId}/todo") + public Todo addTodo(@PathVariable Long memberId, + @Valid @RequestBody Todo todo) { + return memberRepository.findById(memberId) + .map(member -> { + todo.setMember(member); + return todoRepository.save(todo); + }).orElseThrow(() -> new ResourceNotFoundException("Member not found with id " + memberId)); + } + + @PutMapping("/member/{memberId}/todo/{todoId}") + public Todo updateTodo(@PathVariable Long memberId, + @PathVariable Long todoId, + @Valid @RequestBody Todo todoRequest) { + if(!memberRepository.existsById(memberId)) { + throw new ResourceNotFoundException("Member not found with id " + memberId); + } + + return todoRepository.findById(todoId) + .map(todo -> { + todo.setTodo(todoRequest.getTodo()); + return todoRepository.save(todo); + }).orElseThrow(() -> new ResourceNotFoundException("Todo not found with id " + todoId)); + } + + @DeleteMapping("/member/{memberId}/todo/{todoId}") + public ResponseEntity deleteTodo(@PathVariable Long memberId, + @PathVariable Long todoId) { + if(!memberRepository.existsById(memberId)) { + throw new ResourceNotFoundException("Member not found with id " + memberId); + } + + return todoRepository.findById(todoId) + .map(todo -> { + todoRepository.delete(todo); + return ResponseEntity.ok().build(); + }).orElseThrow(() -> new ResourceNotFoundException("Todo not found with id " + todoId)); + + } +} diff --git a/src/main/java/com/example/postgresdemo/model/Member.java b/src/main/java/com/example/postgresdemo/model/Member.java new file mode 100644 index 0000000..b1b9d35 --- /dev/null +++ b/src/main/java/com/example/postgresdemo/model/Member.java @@ -0,0 +1,39 @@ +package com.example.postgresdemo.model; + +import javax.persistence.*; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; + +@Entity +@Table(name = "member") +public class Member extends AuditModel { + @Id + @GeneratedValue(generator = "member_generator") + @SequenceGenerator( + name = "member_generator", + sequenceName = "member_sequence", + initialValue = 1000 + ) + private Long id; + + @NotBlank + @Size(min = 3, max = 100) + private String name; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + +} diff --git a/src/main/java/com/example/postgresdemo/model/Question.java b/src/main/java/com/example/postgresdemo/model/Question.java deleted file mode 100644 index d16a459..0000000 --- a/src/main/java/com/example/postgresdemo/model/Question.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.example.postgresdemo.model; - -import javax.persistence.*; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.Size; - -@Entity -@Table(name = "questions") -public class Question extends AuditModel { - @Id - @GeneratedValue(generator = "question_generator") - @SequenceGenerator( - name = "question_generator", - sequenceName = "question_sequence", - initialValue = 1000 - ) - private Long id; - - @NotBlank - @Size(min = 3, max = 100) - private String title; - - @Column(columnDefinition = "text") - private String description; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } -} diff --git a/src/main/java/com/example/postgresdemo/model/Answer.java b/src/main/java/com/example/postgresdemo/model/Todo.java similarity index 51% rename from src/main/java/com/example/postgresdemo/model/Answer.java rename to src/main/java/com/example/postgresdemo/model/Todo.java index b5e48d0..8519ca3 100644 --- a/src/main/java/com/example/postgresdemo/model/Answer.java +++ b/src/main/java/com/example/postgresdemo/model/Todo.java @@ -7,25 +7,25 @@ import javax.persistence.*; @Entity -@Table(name = "answers") -public class Answer extends AuditModel { +@Table(name = "todo") +public class Todo extends AuditModel { @Id - @GeneratedValue(generator = "answer_generator") + @GeneratedValue(generator = "todo_generator") @SequenceGenerator( - name = "answer_generator", - sequenceName = "answer_sequence", + name = "todo_generator", + sequenceName = "todo_sequence", initialValue = 1000 ) private Long id; @Column(columnDefinition = "text") - private String text; + private String todo; @ManyToOne(fetch = FetchType.LAZY, optional = false) - @JoinColumn(name = "question_id", nullable = false) + @JoinColumn(name = "member_id", nullable = false) @OnDelete(action = OnDeleteAction.CASCADE) @JsonIgnore - private Question question; + private Member member; public Long getId() { return id; @@ -35,19 +35,19 @@ public void setId(Long id) { this.id = id; } - public String getText() { - return text; + public String getTodo() { + return todo; } - public void setText(String text) { - this.text = text; + public void setTodo(String todo) { + this.todo = todo; } - public Question getQuestion() { - return question; + public Member getMember() { + return member; } - public void setQuestion(Question question) { - this.question = question; + public void setMember(Member member) { + this.member = member; } } diff --git a/src/main/java/com/example/postgresdemo/repository/QuestionRepository.java b/src/main/java/com/example/postgresdemo/repository/MemberRepository.java similarity index 58% rename from src/main/java/com/example/postgresdemo/repository/QuestionRepository.java rename to src/main/java/com/example/postgresdemo/repository/MemberRepository.java index 290373d..7219958 100644 --- a/src/main/java/com/example/postgresdemo/repository/QuestionRepository.java +++ b/src/main/java/com/example/postgresdemo/repository/MemberRepository.java @@ -1,9 +1,9 @@ package com.example.postgresdemo.repository; -import com.example.postgresdemo.model.Question; +import com.example.postgresdemo.model.Member; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository -public interface QuestionRepository extends JpaRepository { +public interface MemberRepository extends JpaRepository { } diff --git a/src/main/java/com/example/postgresdemo/repository/AnswerRepository.java b/src/main/java/com/example/postgresdemo/repository/TodoRepository.java similarity index 53% rename from src/main/java/com/example/postgresdemo/repository/AnswerRepository.java rename to src/main/java/com/example/postgresdemo/repository/TodoRepository.java index 761f91f..0676a6a 100644 --- a/src/main/java/com/example/postgresdemo/repository/AnswerRepository.java +++ b/src/main/java/com/example/postgresdemo/repository/TodoRepository.java @@ -1,11 +1,11 @@ package com.example.postgresdemo.repository; -import com.example.postgresdemo.model.Answer; +import com.example.postgresdemo.model.Todo; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import java.util.List; @Repository -public interface AnswerRepository extends JpaRepository { - List findByQuestionId(Long questionId); +public interface TodoRepository extends JpaRepository { + List findByMemberId(Long memberId); } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index ff398ee..0f9c6bc 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,10 +1,13 @@ ## Spring DATASOURCE (DataSourceAutoConfiguration & DataSourceProperties) -spring.datasource.url=jdbc:postgresql://localhost:5432/postgres_demo -spring.datasource.username= rajeevkumarsingh -spring.datasource.password= +spring.datasource.url=jdbc:postgresql://pellefant.db.elephantsql.com:5432/aurpmgzb +spring.datasource.username=aurpmgzb +spring.datasource.password=QN_brSihyQnrWWoramDmE3rXuRrG93kz +spring.datasource.hikari.maximum-pool-size=3 # The SQL dialect makes Hibernate generate better SQL for the chosen database -spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect +# spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect +spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect +spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false # Hibernate ddl auto (create, create-drop, validate, update) spring.jpa.hibernate.ddl-auto = update diff --git a/test-screenshot/CreateMember.PNG b/test-screenshot/CreateMember.PNG new file mode 100644 index 0000000..75ab95f Binary files /dev/null and b/test-screenshot/CreateMember.PNG differ diff --git a/test-screenshot/CreateTodo.PNG b/test-screenshot/CreateTodo.PNG new file mode 100644 index 0000000..a98d623 Binary files /dev/null and b/test-screenshot/CreateTodo.PNG differ diff --git a/test-screenshot/GetPaginated.PNG b/test-screenshot/GetPaginated.PNG new file mode 100644 index 0000000..5a3bf2b Binary files /dev/null and b/test-screenshot/GetPaginated.PNG differ diff --git a/test-screenshot/GetTodo.PNG b/test-screenshot/GetTodo.PNG new file mode 100644 index 0000000..b1624cb Binary files /dev/null and b/test-screenshot/GetTodo.PNG differ