From b9a0bbc83b0edd86380d6a528d7e88e0b9bc93f1 Mon Sep 17 00:00:00 2001 From: asia Date: Mon, 14 Mar 2022 21:46:13 +0100 Subject: [PATCH] BAEL-5304: adding graphql-spqr module --- graphql/graphql-spqr/pom.xml | 51 +++++++++++++++++ .../main/java/com/baeldung/SpringBootApp.java | 11 ++++ .../src/main/java/com/baeldung/spqr/Book.java | 57 +++++++++++++++++++ .../java/com/baeldung/spqr/BookService.java | 51 +++++++++++++++++ .../java/com/baeldung/spqr/IBookService.java | 15 +++++ 5 files changed, 185 insertions(+) create mode 100644 graphql/graphql-spqr/pom.xml create mode 100644 graphql/graphql-spqr/src/main/java/com/baeldung/SpringBootApp.java create mode 100644 graphql/graphql-spqr/src/main/java/com/baeldung/spqr/Book.java create mode 100644 graphql/graphql-spqr/src/main/java/com/baeldung/spqr/BookService.java create mode 100644 graphql/graphql-spqr/src/main/java/com/baeldung/spqr/IBookService.java diff --git a/graphql/graphql-spqr/pom.xml b/graphql/graphql-spqr/pom.xml new file mode 100644 index 0000000000..c825be9b79 --- /dev/null +++ b/graphql/graphql-spqr/pom.xml @@ -0,0 +1,51 @@ + + + + 4.0.0 + com.baeldung.graphql + graphql-spqr + 1.0 + graphql-java + + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + ../.. + + + + + org.springframework.boot + spring-boot-starter-web + ${spring-boot-version} + + + org.springframework.boot + spring-boot-starter + ${spring-boot-version} + + + io.leangen.graphql + graphql-spqr-spring-boot-starter + ${graphql-spqr-spring-boot-starter-version} + + + + + + + org.springframework.boot + spring-boot-maven-plugin + 2.6.2 + + + + + + 2.6.2 + 0.0.6 + + \ No newline at end of file diff --git a/graphql/graphql-spqr/src/main/java/com/baeldung/SpringBootApp.java b/graphql/graphql-spqr/src/main/java/com/baeldung/SpringBootApp.java new file mode 100644 index 0000000000..dc49f6a7e4 --- /dev/null +++ b/graphql/graphql-spqr/src/main/java/com/baeldung/SpringBootApp.java @@ -0,0 +1,11 @@ +package com.baeldung; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class SpringBootApp { + public static void main(String[] args) { + SpringApplication.run(SpringBootApp.class, args); + } +} diff --git a/graphql/graphql-spqr/src/main/java/com/baeldung/spqr/Book.java b/graphql/graphql-spqr/src/main/java/com/baeldung/spqr/Book.java new file mode 100644 index 0000000000..405eadca84 --- /dev/null +++ b/graphql/graphql-spqr/src/main/java/com/baeldung/spqr/Book.java @@ -0,0 +1,57 @@ +package com.baeldung.spqr; + +import java.util.Objects; + +public class Book { + private Integer id; + private String author; + private String title; + + public Book(Integer id, String author, String title) { + this.id = id; + this.author = author; + this.title = title; + } + + public Book() { + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + Book book = (Book) o; + return id.equals(book.id); + } + + @Override + public int hashCode() { + return Objects.hash(id); + } +} diff --git a/graphql/graphql-spqr/src/main/java/com/baeldung/spqr/BookService.java b/graphql/graphql-spqr/src/main/java/com/baeldung/spqr/BookService.java new file mode 100644 index 0000000000..7c9b129491 --- /dev/null +++ b/graphql/graphql-spqr/src/main/java/com/baeldung/spqr/BookService.java @@ -0,0 +1,51 @@ +package com.baeldung.spqr; + +import io.leangen.graphql.annotations.GraphQLArgument; +import io.leangen.graphql.annotations.GraphQLMutation; +import io.leangen.graphql.annotations.GraphQLQuery; +import io.leangen.graphql.spqr.spring.annotations.GraphQLApi; +import org.springframework.stereotype.Service; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +@Service +@GraphQLApi +public class BookService implements IBookService { + + Set books = new HashSet<>(); + + @GraphQLQuery(name = "getBookWithTitle") + public Book getBookWithTitle(@GraphQLArgument(name = "title") String title) { + return books.stream() + .filter(book -> book.getTitle() + .equals(title)) + .findFirst() + .orElse(null); + } + + @GraphQLQuery(name = "getAllBooks", description = "Get all books") + public List getAllBooks() { + return books.stream() + .toList(); + } + + @GraphQLMutation(name = "addBook") + public Book addBook(@GraphQLArgument(name = "newBook") Book book) { + books.add(book); + return book; + } + + @GraphQLMutation(name = "updateBook") + public Book updateBook(@GraphQLArgument(name = "modifiedBook") Book book) { + books.remove(book); + books.add(book); + return book; + } + + @GraphQLMutation(name = "deleteBook") + public boolean deleteBook(@GraphQLArgument(name = "book") Book book) { + return books.remove(book); + } +} \ No newline at end of file diff --git a/graphql/graphql-spqr/src/main/java/com/baeldung/spqr/IBookService.java b/graphql/graphql-spqr/src/main/java/com/baeldung/spqr/IBookService.java new file mode 100644 index 0000000000..fa92494745 --- /dev/null +++ b/graphql/graphql-spqr/src/main/java/com/baeldung/spqr/IBookService.java @@ -0,0 +1,15 @@ +package com.baeldung.spqr; + +import java.util.List; + +public interface IBookService { + Book getBookWithTitle(String title); + + List getAllBooks(); + + Book addBook(Book book); + + Book updateBook(Book book); + + boolean deleteBook(Book book); +}