Este proyecto es una aplicación Spring Boot que implementa una API GraphQL para la gestión de posts/publicaciones. La aplicación utiliza las siguientes tecnologías principales:
- Spring Boot 3.5.6
- Spring GraphQL
- Java 21
- Lombok
- Maven como gestor de dependencias
La aplicación sigue una arquitectura de capas bien definida:
src/main/java/com/davinchicoder/springgraphql/
├── controller/ # Controladores GraphQL
├── dto/ # Data Transfer Objects
├── entity/ # Entidades del dominio
├── mapper/ # Mapeadores de datos
├── repository/ # Capa de acceso a datos
└── SpringGraphqlApplication.java # Clase principal
Controlador GraphQL que maneja las operaciones CRUD de posts:
getAllPosts()
: Obtiene todos los postsgetRecentPosts(count, offset)
: Obtiene posts recientes con paginacióngetPostById(id)
: Obtiene un post específico por ID
savePost(postDto)
: Crea un nuevo postdeletePostById(id)
: Elimina un post por ID
La entidad principal que representa una publicación con los siguientes campos:
id
: Identificador únicotitle
: Título del postcontent
: Contenido del postauthor
: Autor del postimageUrl
: URL de la imagen- : Fecha de creación
createdAt
- : Fecha de actualización
updatedAt
- : Fecha de eliminación (soft delete)
deletedAt
DTO utilizado para la creación y actualización de posts:
title
: Títulocontent
: Contenidoauthor
: AutorimageUrl
: URL de la imagen
Definido en , incluye: schema.graphqls
- Tipo con todos sus campos
Post
- Input para operaciones de escritura
PostDto
- Queries para lectura de datos
- Mutations para modificación de datos
- Java 21
- Maven 3.x
# Compilar el proyecto
mvn clean compile
# Ejecutar tests
mvn test
# Ejecutar la aplicación
mvn spring-boot:run
Una vez iniciada la aplicación, puedes acceder a:
- GraphQL Playground:
http://localhost:8080/graphiql
- Endpoint GraphQL:
http://localhost:8080/graphql
query {
getAllPosts {
id
title
content
author
imageUrl
createdAt
}
}
query {
getRecentPosts(count: 10, offset: 0) {
id
title
author
createdAt
}
}
mutation {
savePost(postDto: {
title: "Mi nuevo post"
content: "Contenido del post"
author: "Autor"
imageUrl: "https://ejemplo.com/imagen.jpg"
}) {
id
title
createdAt
}
}
mutation {
deletePostById(id: "1") {
id
title
deletedAt
}
}
El proyecto utiliza las siguientes dependencias principales:
spring-boot-starter-graphql
spring-boot-starter-web
lombok
spring-boot-starter-test
spring-graphql-test
Se configura el procesador de anotaciones de Lombok para generar automáticamente getters, setters y constructores.
spring-graphql/
├── src/
│ ├── main/
│ │ ├── java/com/davinchicoder/springgraphql/
│ │ └── resources/
│ │ ├── graphql/schema.graphqls
│ │ └── application.yml
│ └── test/
├── pom.xml
├── README.md
└── otros archivos de configuración
- ✅ API GraphQL completa para gestión de posts
- ✅ Operaciones CRUD (Create, Read, Update, Delete)
- ✅ Paginación en consultas
- ✅ Mapeo de datos entre DTOs y entidades
- ✅ Manejo de excepciones básico
- ✅ Tests unitarios configurados
- ✅ Configuración Maven optimizada
Esta documentación proporciona una visión completa del proyecto y debe servir como guía tanto para el desarrollo como para el mantenimiento de la aplicación.