You don't have access to this class

Keep learning! Join and start boosting your career

Aprovecha el precio especial y haz tu profesión a prueba de IA

Antes: $249

Currency
$209
Suscríbete

Termina en:

0 Días
5 Hrs
22 Min
58 Seg
Curso de Java Spring

Curso de Java Spring

Alejandro Ramírez

Alejandro Ramírez

Probando nuestros servicios de compras

30/35
Resources

How can we test our shopping features?

It is important to make sure that our purchase-related features are working properly in our system. Here we guide you on how to test those features using Postman. Before you start testing, remember that it is crucial to restart your service to apply all the changes made. This ensures that the server is operational and receiving requests properly. We will examine three essential methods exposed through our API: get all purchases, retrieve purchases per customer, and save a new purchase.

How to get all purchases?

We'll start by testing the functionality to fetch all registered purchases. Using Postman, you can upload the corresponding request. The key is to send the GET request through the API, which will allow you to receive a response with the purchase history. This gives you an overview of all transactions associated with the customers:

GET /api/purchases/all
  1. Open Postman.
  2. Select or create a new GET request.
  3. Enter the URL corresponding to get all purchases.
  4. Click "Send".
  5. Review the response containing a list of purchases associated with the customers.

How to verify specific purchases by customer?

The next test involves retrieving specific purchases associated with a particular customer. We should enter the ID of the customer in question into the request to retrieve only the purchases made by that person:

GET /api/purchases/client/:clientId.
  1. In Postman, select the option to create or edit a GET request.
  2. Enter the URL that allows you to retrieve purchases by customer, replacing :clientId with the actual customer ID.
  3. Click "Send".
  4. Examine the results to verify that only the purchases of the indicated customer are displayed.

How to save a new purchase?

Finally, we will test our system's ability to store new purchases. This request requires the use of the POST method, entering the details of the purchase within the body of the message. It is important to include details such as the type of payment and the date of the purchase:

POST /api/purchases/new{ " paymentMethod": "card", " year": 2020, " clientId": "1234567"}
  1. In Postman, select a new POST request.
  2. Enter the URL to save a new purchase.
  3. Add the body of the request with the necessary details.
  4. Click "Send" and verify that the purchase has been saved correctly.
  5. You can confirm its saving by reusing the GET request to get shopping lists, confirming that the new transaction is visible.

This process ensures that the shopping services are operational and reliable. Also, remember to use the JSON file provided to import the requests into your Postman environment. This way, you can be sure that you are replicating the process and testing the requests efficiently. In a future class, we will cover the documentation of our API with Swagger, let's keep learning!

Contributions 37

Questions 32

Sort by:

Want to see more contributions, questions and answers from the community?

si alguno le sale este error Caused by: org.postgresql.util.PSQLException: Bad value for type int : 3104583224 al tratar de consultar el servicio all de compras, deben cambiar el tipo de dato del campo celular de la clase Entity Cliente.java pasando de Integer a Long y por consiguiente tambien cambiar los metodos Getter y Setter del mismo:

private Long celular;

public Long getCelular() {
	return celular;
}

public void setCelular(Long celular) {
	this.celular = celular;
}

Si alguno tiene este error:
org.postgresql.util.PSQLException: ERROR: no existe la relaci�n �compras_producto�
Revisen los nombres de las tablas en las anotaciones @Table de los entities. En mi caso tenía mapeada la tabla compras_productos como compras_producto, sin la s. En el entity de ComprasProducto.

Hola compañeros aprendices.
Quiero mostrarles un detalle menor, pero ello me llevó tiempo descubrirlo y corregirlo.
El error como se aprecia esta en la importación de la clase incorrecta.
![](
Ojala a nadie más le haya pasado.

Alguien me puede decir por que me marca este error?

Caused by: org.postgresql.util.PSQLException: ERROR: el operador no existe: character varying = integer

este es mi codigo https://github.com/kreytos23/API_Spring

RECORDATORIO: Si tenemos un error en las clases de los Mappers, verificar que todos los atributos de las clases de los Entities tengan sus respectivos Setters y Getters.
A mi me ocurrió eso.

Saludos a todos !!

Al momento de mostrar el purchases/all y se consulta el puchaseId 2 que fue la segunda compra creada, en el arreglo de items aparece vació como si no se hubiera asociado ningún producto. A alguien mas le paso?

Tuve problemas con el save, pero era porque no sabia como meter los datos en Postman, les dejo en Json ojala les sirva
{
“clienteId”: “4546221”,
“date”: “2020-08-10T17:30:00”,
“paymentMethod”: “T”,
“comment”: “”,
“state”: “P”,
“iteam”: [
{
“productId”: 1,
“quantity”: 10,
“total”: 3000.0,
“active”: true
},
{
“productId”: 24,
“quantity”: 1,
“total”: 4000.0,
“active”: true
},
{
“productId”: 27,
“quantity”: 1,
“total”: 9000.0,
“active”: true
},
{
“productId”: 36,
“quantity”: 1,
“total”: 40000.0,
“active”: true
},
{
“productId”: 49,
“quantity”: 2,
“total”: 16400.0,
“active”: true
}
]
}

Si a alguno le sale este error en la consola al consultar el /all de los purchases

Caused by: java.io.StreamCorruptedException: invalid stream header: 33313034

Tambien es debido al campo celular de la clase Cliente.java, deben cambiarlo de Number a Long y así mismo modificar sus Getter and Setter

Respecto al método getByClient() no debería retornar estado 200 cuando se busca con un clientId que no exista en la base de datos, debería ser el NOT_FOUND, es decir, cuando retorna una lista vacia esta poniendo el estado como OK, en vez de poner NOT_FOUND.

Paso lo mismo con el método getByCategory de la clase ProductController.

Creo que en vez de usar el .map, se debería validar el tamaño de la lista que viene desde el service.

Buenos días compañeros yo tuve el siguiente problema al querer obtenere mi lista de compras:

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.platzi.supermercado.persistence.entity.Compra.productos, could not initialize proxy - no Session

Este problema según investigue es por que se cierra la sesión de hibernate antes de recuperar la lista de compras_productos, para esto hay dos soluciones la primera es un pequeño hack que debemos recuperar la lista antes de cerrar la sesión con el metodo size();

Y la segunda es colocar la anotación EAGER, espero que les ayude

@OneToMany(mappedBy = "compra", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private List<ComprasProducto> productos;

Les de por aca el Json

{
    "clientId": "4546221",
    "date": "2004-08-10T17:30:00",
    "paymentMethod": "T",
    "comment": "",
    "state": "P",
    "items": [
      {
        "productId": 1,
        "quantity": 10,
        "total": 3000.0,
        "active": true
      },
      {
        "productId": 24,
        "quantity": 1,
        "total": 4000.0,
        "active": true
      },
      {
        "productId": 27,
        "quantity": 1,
        "total": 9000.0,
        "active": true
      },
      {
        "productId": 36,
        "quantity": 1,
        "total": 40000.0,
        "active": true
      },
      {
        "productId": 49,
        "quantity": 2,
        "total": 16400.0,
        "active": true
      }
    ]
  }

Hola a todos al momento de guardar una nueva compra me sale la siguiente excepción:
.w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize instance of com.platzi.market.domain.Purchase out of START_ARRAY token; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of com.platzi.market.domain.Purchase out of START_ARRAY token
at [Source: (PushbackInputStream); line: 1, column: 1]].
ya cheque la clase Purchase del dominio pero no encuentro diferencias con el codigo realizado por el profesor.

Tengo el siguiente error en Postman y el metodo save tiene el @PostMapping("/save"), no se cual sea mi error.

```js si estas aqui te recomiendo fijarte mucho en los tipos tantos con los de las clases en entinty como los de las tablas dures dure 1 hora con un error porque en la case estava Integer y en la Tabla estaba long ```

¿Alguien puede ayudarme con este problema?

2021-03-01 20:19:29.259 ERROR 3636 — [nio-8090-exec-2] o.a.c.c.C.[.[.[.[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [/platzi-market/api] threw exception [Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: A different object with the same identifier value was already associated with the session : [com.platzi.market.persistence.entity.ComprasProducto#com.platzi.market.persistence.entity.ComprasProductoPK@6154230d]; nested exception is javax.persistence.EntityExistsException: A different object with the same identifier value was already associated with the session : [com.platzi.market.persistence.entity.ComprasProducto#com.platzi.market.persistence.entity.ComprasProductoPK@6154230d]] with root cause

javax.persistence.EntityExistsException: A different object with the same identifier value was already associated with the session : [com.platzi.market.persistence.entity.ComprasProducto#com.platzi.market.persistence.entity.ComprasProductoPK@6154230d]

![](https://static.platzi.com/media/user_upload/image-1c04fd69-f231-4373-966d-db12333653e0.jpg) Me salio este error en el postman y revise por mucho tiempoy si todo esta como en los recursos lo que pasa es que al enviar el request es de esta manera ```js { "clientId": "4546221", "date": "2004-07-10T17:30:00", "paymentMethod": "T", "comment": "Nueva compra", "state": "P", "items": [ { "productId": 1, "quantity": 10, "total": 3000.0, "active": true }, { "productId": 24, "quantity": 1, "total": 4000.0, "active": true }, { "productId": 27, "quantity": 1, "total": 9000.0, "active": true }, { "productId": 36, "quantity": 1, "total": 40000.0, "active": true }, { "productId": 49, "quantity": 2, "total": 16400.0, "active": true } ] } ```el problema son los corchetes al principio y el del final

Buenas noches alguien que me pueda ayudar por favor tengo el sgt error segun dice que no puede castear o convertir algo error sql

Costo esta parte… al no tener claro el tema y hacer tanto antes de probar cuesta mucho encontrar el error.

Por si a aluien le da un error de que el server espera un objeto de tipo purchase pero recibe un arreglo, es lo los [] mas externos, madre mia el tiempo que perdí buscando donde estaba la falla >:V

Tengo el siguiente problema. La aplicación corre sin problemas pero al ejecutar la petición /purchases/all obtengo un error. Internamente me genera la siguiente traza:

org.postgresql.util.PSQLException: ERROR: column compra0_.id does not exist

No sé donde puede estar ubicado.

Alguien que me ayude con este error?

Caused by: org.postgresql.util.PSQLException: ERROR: el operador no existe: character varying = integer

Porfavor gracias , ya hice private String idCliente; en la clase Compra.
???

Alguien Más recibió la siguiente Respuesta

El Body enviado es el siguiente…

Tuve que escribir un constructor de la entidad ComprasProducto porque me arrojaba error 500

Database Data Script:

-- CATEGORIAS
INSERT INTO categorias VALUES (1, 'Frutas y verduras', true);
INSERT INTO categorias VALUES (2, 'Pastelería', true);
INSERT INTO categorias VALUES (3, 'Carnes y pescados', true);
INSERT INTO categorias VALUES (4, 'Lácteos y huevos', true);
INSERT INTO categorias VALUES (5, 'Bebidas', true);
INSERT INTO categorias VALUES (6, 'Licores', true);
INSERT INTO categorias VALUES (7, 'Cuidado personal', true);
INSERT INTO categorias VALUES (8, 'Despensa', true);

-- PRODUCTOS
INSERT INTO productos VALUES (1, 'Guayaba Feijoa', 1, '7029 A42 23', 300, 500, true);
INSERT INTO productos VALUES (2, 'Mango', 1, '0316 R56 01', 2100, 250, true);
INSERT INTO productos VALUES (3, 'Manzana', 1, '7923 T23 19', 700, 130, true);
INSERT INTO productos VALUES (4, 'Aguacate', 1, '9322 Q33 02', 2500, 98, true);
INSERT INTO productos VALUES (5, 'Lechuga', 1, '9742 S22 21', 4000, 86, true);
INSERT INTO productos VALUES (6, 'Tomate', 1, '0483 R00 97', 290, 430, true);
INSERT INTO productos VALUES (7, 'Pera', 1, '9999 X10 01', 750, 210, true);
INSERT INTO productos VALUES (8, 'Apio', 1, '3390 F29 45', 150, 115, true);
INSERT INTO productos VALUES (9, 'Papaya', 1, '5291 J34 32', 4500, 73, true);
INSERT INTO productos VALUES (10, 'Limón', 1, '7886 N18 32', 350, 425, true);
INSERT INTO productos VALUES (11, 'Brownie', 2, '6683 H15 20', 2500, 80, true);
INSERT INTO productos VALUES (12, 'Pan tajado', 2, '5745 F05 47', 4500, 120, true);
INSERT INTO productos VALUES (13, 'Torta', 2, '3831 D97 99', 10000, 35, true);
INSERT INTO productos VALUES (14, 'Tortilla', 2, '4335 Z33 84', 6400, 87, true);
INSERT INTO productos VALUES (15, 'Tostadas', 2, '6584 M19 25', 4000, 45, true);
INSERT INTO productos VALUES (16, 'Chocorramo', 2, '4487 S00 97', 2000, 105, true);
INSERT INTO productos VALUES (17, 'Salmón', 3, '4546 A00 01', 28000, 55, true);
INSERT INTO productos VALUES (18, 'Punta de anca', 3, '3678 E57 22', 12000, 32, true);
INSERT INTO productos VALUES (19, 'Posta', 3, '8893 O01 03', 7800, 40, true);
INSERT INTO productos VALUES (20, 'Costilla de cerdo', 3, '4534 Q12 88', 8600, 70, true);
INSERT INTO productos VALUES (21, 'Tilapia', 3, '5684 R53 02', 17000, 60, true);
INSERT INTO productos VALUES (22, 'Merluza', 3, '3523 R04 00', 23000, 45, true);
INSERT INTO productos VALUES (23, 'Leche de vaca', 4, '2323 T56 33', 2500, 500, true);
INSERT INTO productos VALUES (24, 'Queso', 4, '7786 K19 56', 4000, 300, true);
INSERT INTO productos VALUES (25, 'Huevos de gallina feliz', 4, '3478 M74 01', 400, 1000, true);
INSERT INTO productos VALUES (26, 'Clara de huevo', 4, '7932 R31 46', 3200, 200, true);
INSERT INTO productos VALUES (27, 'Suero costeño', 4, '5463 W23 33', 9000, 110, true);
INSERT INTO productos VALUES (28, 'Agua', 5, '8965 I32 11', 2000, 600, true);
INSERT INTO productos VALUES (29, 'Jugo de naranja', 5, '7445 T87 44', 7400, 200, true);
INSERT INTO productos VALUES (30, 'Gaseosa Colombiana', 5, '3434 R34 63', 3100, 175, true);
INSERT INTO productos VALUES (31, 'Jugo de Lulo', 5, '9753 W33 19', 8250, 630, true);
INSERT INTO productos VALUES (32, 'Tea', 5, '9836 F35 69', 1900, 450, true);
INSERT INTO productos VALUES (33, 'Cerveza', 6, '3432 G67 21', 2100, 800, true);
INSERT INTO productos VALUES (34, 'Tequila', 6, '9529 E45 98', 65000, 764, true);
INSERT INTO productos VALUES (35, 'Ron', 6, '1947 R07 53', 55000, 240, true);
INSERT INTO productos VALUES (36, 'Aguardiente Antioqueño', 6, '3160 A54 94', 40000, 480, true);
INSERT INTO productos VALUES (37, 'Vino', 6, '7891 W46 95', 82000, 560, true);
INSERT INTO productos VALUES (38, 'Crema dental', 7, '6310 C99 73', 7500, 200, true);
INSERT INTO productos VALUES (39, 'Jabón de manos', 7, '9371 J14 75', 4900, 90, true);
INSERT INTO productos VALUES (40, 'Enjuague bucal', 7, '1942 T68 01', 12000, 105, true);
INSERT INTO productos VALUES (41, 'Shampoo', 7, '6789 W01 23', 9300, 200, true);
INSERT INTO productos VALUES (42, 'Desodorante', 7, '7333 S21 36', 6900, 85, true);
INSERT INTO productos VALUES (43, 'Arroz', 8, '4676 I83 00', 3500, 600, true);
INSERT INTO productos VALUES (44, 'Lentejas', 8, '7333 S21 36', 3000, 560, true);
INSERT INTO productos VALUES (45, 'Harina', 8, '7333 S21 36', 1800, 300, true);
INSERT INTO productos VALUES (46, 'Sal', 8, '7333 S21 36', 1400, 500, true);
INSERT INTO productos VALUES (47, 'Aceite', 8, '7333 S21 36', 6500, 135, true);
INSERT INTO productos VALUES (48, 'Cereal', 8, '4673 K53 98', 7000, 75, true);
INSERT INTO productos VALUES (49, 'Frijol', 8, '2745 F40 45', 8200, 270, true);
INSERT INTO productos VALUES (50, 'Café', 8, '6351 R33 92', 7200, 400, true);

-- CLIENTES
INSERT INTO clientes VALUES (1, '4546221', 'Johannes', 'Kepler', 3104583224, 'Cl 3 # 33 - 33', '[email protected]');
INSERT INTO clientes VALUES (2, '2552243', 'Galileo', 'Galilei', 3462257293, 'Cl 1 # 11 - 11', '[email protected]');
INSERT INTO clientes VALUES (3, '983824', 'Nicolás', 'Copernico', 3019392466, 'Cl 2 # 22 - 22', '[email protected]');

-- COMPRA
INSERT INTO compras VALUES (1, 1, TO_TIMESTAMP('10/08/1992 17:30:00','DD/MM/YYYY HH24:MI:SS'), 'E', '', 'P');
INSERT INTO compras_productos VALUES (1, 1, 10, 3000, true);
INSERT INTO compras_productos VALUES (1, 36, 1, 40000, true);
INSERT INTO compras_productos VALUES (1, 27, 1, 9000, true);
INSERT INTO compras_productos VALUES (1, 49, 2, 16400, true);
INSERT INTO compras_productos VALUES (1, 24, 1, 4000, true);

-- SE REINICIAN LAS SECUENCIAS SEGÚN LOS DATOS INICIALES
CREATE SEQUENCE IF NOT exists public.productos_id_producto_seq AS INT INCREMENT by 1 MINVALUE 1 START WITH 1 no CYCLE OWNED by productos.id_producto;
SELECT setval('public.productos_id_producto_seq', 50, true);
CREATE SEQUENCE IF NOT exists public.categorias_id_categoria_seq AS INT INCREMENT by 1 MINVALUE 1 START WITH 1 no CYCLE OWNED by categorias.id_categoria;
SELECT setval('public.categorias_id_categoria_seq', 8, true);
CREATE SEQUENCE IF NOT exists public.compras_id_compra_seq AS INT INCREMENT by 1 MINVALUE 1 START WITH 1 no CYCLE OWNED by compras.id_compra;
SELECT setval('public.compras_id_compra_seq', 1, true);

Buenas tardes, alguien mas le dio el siguiente error y si pudiera compartir como lo soluciono.

Caused by: org.postgresql.util.PSQLException: Bad value for type int : 3104583224
org.hibernate.exception.DataException: Could not read entity state from ResultSet : EntityKey[com.platzi.market.persistence.entity.Cliente#4546221]

Esto me lo muestra cuando intento consultar las compras

Buenas!
Cual curso es mas recomendable. Este o el de Anahi Salgado?

ayuda, cuando hago el get all de purchases, me sale esto:

{
        "purchaseId": 1,
        "clientId": "4546221",
        "date": "1992-08-10T17:30:00",
        "paymentMethod": "E",
        "comment": "",
        "state": "P",
        "items": [
            {
                "id": {
                    "idCompra": 1,
                    "idProducto": 1
                },
                "cantidad": 10,
                "total": 3000.0,
                "estado": true,
                "compra": {
                    "idCompra": 1,
                    "idCliente": "4546221",
                    "fecha": "1992-08-10T17:30:00",
                    "medioPago": "E",
                    "comentario": "",
                    "estado": "P",
                    "cliente": {
                        "id": "4546221",
                        "nombre": "Johannes",
                        "apellidos": "Kepler",
                        "celular": 3104583224,
                        "direccion": "Cl 3 # 33 - 33",
                        "correoElectronico": "[email protected]",
                        "compras": [
                            {
                                "idCompra": 1,
                                "idCliente": "4546221",
                                "fecha": "1992-08-10T17:30:00",
                                "medioPago": "E",
                                "comentario": "",
                                "estado": "P",
                                "cliente": {
                                    "id": "4546221",
                                    "nombre": "Johannes",
                                    "apellidos": "Kepler",
                                    "celular": 3104583224,
                                    "direccion": "Cl 3 # 33 - 33",
                                    "correoElectronico": "[email protected]",
                                    "compras": [
                                        {
                                            "idCompra": 1,
                                            "idCliente": "4546221",
                                            "fecha": "1992-08-10T17:30:00",
                                            "medioPago": "E",
                                            "comentario": "",
                                            "estado": "P",
                                            "cliente": {
                                                "id": "4546221",
                                                "nombre": "Johannes",
                                                "apellidos": "Kepler",
                                                "celular": 3104583224,
                                                "direccion": "Cl 3 # 33 - 33",
                                                "correoElectronico": "[email protected]",
                                                "compras": [
                                                    {
                                                        "idCompra": 1,
                                                        "idCliente": "4546221",
                                                        "fecha": "1992-08-10T17:30:00",
                                                        "medioPago": "E",
                                                        "comentario": "",
                                                        "estado": "P",
                                                        "cliente": {

me resultan muchos resultados en cascada

Hola por si a alguien mas le pasa, yo tenia dos errores en la clase Cliente (java/com/platzi/market/persistence/entity/Cliente.java) fue cambiar de ` @Id` ` @Column(name = "id")` ` private Integer idCliente;` a ` @Id` ` @Column(name = "id")` ` private String idCliente;` y ` private Integer celular;` a ` private Long celular;` y me funciono, no olvides borrar y volver a crear los getters y setters
Tube un error en el save() pero era porque no sabía muy bien como meter datos en JSON. Así que resiven si tienen un error de este tipo: ```js .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type `com.platzi.market.domain.DomainPurchase` from Array value (token `JsonToken.START_ARRAY`)] ``` Solo es revisar detalladamente cómo están haciendo el proceso en postman
Alguien mas le pasa esto? Execution failed for task ':PruebasSprintApplication.main()'. \> Process 'command 'C:\Program Files\Eclipse Adoptium\jdk-17.0.6.10-hotspot\bin\java.exe'' finished with non-zero exit value 1 \* Try: \> Run with --stacktrace option to get the stack trace. \> Run with --scan to get full insights. \> Get more help at <https://help.gradle.org.>
Tengo este error a la hora de invocar /save, alguien me puedo orientar: java.lang.NullPointerException: Cannot invoke "java.util.List.forEach(java.util.function.Consumer)" because the return value of "com.platzi.market.persistence.entity.Compra.getProductos()" is null at com.platzi.market.persistence.CompraRepository.save(CompraRepository.java:34) ~\[main/:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~\[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~\[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~\[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~\[na:na] at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:352) ~\[spring-aop-6.1.1.jar:6.1.1]

¡Excelente!

Recuerden que el estado de compras es String y no booleano

Postgresql Database Script:

-- Table CATEGORIAS
-- drop table CATEGORIAS CASCADE;
CREATE TABLE CATEGORIAS (
id_categoria INT NOT NULL,
descripcion VARCHAR(45) NOT NULL,
estado BOOLEAN NOT NULL,
PRIMARY KEY (id_categoria));

-- Table PRODUCTOS
-- drop table PRODUCTOS CASCADE;
CREATE TABLE PRODUCTOS (
id_producto INT NOT NULL,
nombre VARCHAR(45) NULL,
id_categoria INT NOT NULL,
codigo_barras VARCHAR(150) NULL,
precio_venta DECIMAL(16,2) NULL,
cantidad_stock INT NOT NULL,
estado BOOLEAN NULL,
PRIMARY KEY (id_producto),
CONSTRAINT "fk_PRODUCTOS_CATEGORIAS"
FOREIGN KEY (id_categoria)
REFERENCES CATEGORIAS (id_categoria)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

-- Table CLIENTES
-- drop table CLIENTES CASCADE;
CREATE TABLE CLIENTES (
id INT,
identificacion VARCHAR(20) NOT NULL,
nombre VARCHAR(40) NULL,
apellidos VARCHAR(100) NULL,
celular VARCHAR(20) NULL,
direccion VARCHAR(80) NULL,
correo_electronico VARCHAR(70) NULL,
PRIMARY KEY (id),
unique (identificacion)
);

-- Table COMPRAS
-- drop table COMPRAS CASCADE;
CREATE TABLE COMPRAS (
id_compra INT NOT NULL,
id_cliente INT NOT NULL,
fecha TIMESTAMP NULL,
medio_pago CHAR(1) NULL,
comentario VARCHAR(300) NULL,
estado CHAR(1) NULL,
PRIMARY KEY (id_compra),
CONSTRAINT "fk_COMPRAS_CLIENTES1"
FOREIGN KEY (id_cliente)
REFERENCES CLIENTES (id)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

-- Table COMPRAS_PRODUCTOS
-- drop table COMPRAS_PRODUCTOS CASCADE;
CREATE TABLE COMPRAS_PRODUCTOS (
id_compra INT NOT NULL,
id_producto INT NOT NULL,
cantidad INT NULL,
total DECIMAL(16,2) NULL,
estado BOOLEAN NULL,
PRIMARY KEY (id_compra, id_producto),
CONSTRAINT "fk_COMPRAS_PRODUCTOS_PRODUCTOS1"
FOREIGN KEY (id_producto)
REFERENCES PRODUCTOS (id_producto)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT "fk_COMPRAS_PRODUCTOS_COMPRAS1"
FOREIGN KEY (id_compra)
REFERENCES COMPRAS (id_compra)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
  • PurchaseService.java

@Service
public class PurchaseService {

@Autowired
private PurchaseRepository purchaseRepository;

public List<Purchase> getAll() {
    return purchaseRepository.getAll();
}

public Optional<List<Purchase>> getByClientId(String clientId) {
    return purchaseRepository.getByClientId(clientId);
}

public Purchase save(Purchase purchase) {
    return purchaseRepository.save(purchase);
}

}

  • PurchasesController.java

@RestController
@RequestMapping("/purchases")
public class PurchaseController {

@Autowired
private PurchaseService purchaseService;

@GetMapping()
public ResponseEntity<List<Purchase>> getAll() {
    return new ResponseEntity<>(purchaseService.getAll(), HttpStatus.OK);
}

@GetMapping("/client/{id}")
public ResponseEntity<List<Purchase>> getByClientId(@PathVariable("id") String clientId) {
    return purchaseService.getByClientId(clientId)
            .map(purchase -> new ResponseEntity<>(purchase, HttpStatus.OK))
            .orElse(new ResponseEntity<>(HttpStatus.NOT_FOUND));
}

@PostMapping("/save")
public ResponseEntity<Purchase> save(@RequestBody Purchase purchase) {
    return new ResponseEntity<>(purchaseService.save(purchase), HttpStatus.CREATED);
}

}

Tengo un error en la Interfaz PurchaseMapper pero no lo encuentro, según yo es el mismo código que el profesor.

El error enviado es:
Purchase toPurchase(Compra compra);
^
1 warning

La Interfaz es:

@Mapper(componentModel = “spring”, uses = {PurchaseItemMapper.class})
public interface PurchaseMapper {

@Mappings({
        @Mapping(source = "idCompra", target = "purchaseId"),
        @Mapping(source = "idCliente", target = "clientId"),
        @Mapping(source = "fecha", target = "date"),
        @Mapping(source = "medioPago", target = "paymentMethod"),
        @Mapping(source = "comentario", target = "comment"),
        @Mapping(source = "estado", target = "state"),
        @Mapping(source = "productos", target = "items"),
})
Purchase toPurchase(Compra compra);
List<Purchase> toPurchases(List<Compra> compras);

@InheritInverseConfiguration
@Mapping(target = "cliente", ignore = true)
Compra toCompra(Purchase purchase);

}