Commit 344d568d by Patryk Czarnik

RProducts - wiele metod dla formatu JSON

parent 74088399
package sklep.rest; package sklep.rest;
import jakarta.ws.rs.GET; import jakarta.ws.rs.*;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.PathParam;
import jakarta.ws.rs.Produces;
import sklep.db.DBConnection; import sklep.db.DBConnection;
import sklep.db.DBException; import sklep.db.DBException;
import sklep.db.ProductDAO; import sklep.db.ProductDAO;
import sklep.db.RecordNotFound; import sklep.db.RecordNotFound;
import sklep.model.Product; import sklep.model.Product;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
@Path("/products") @Path("/products")
...@@ -32,4 +30,50 @@ public class RProducts { ...@@ -32,4 +30,50 @@ public class RProducts {
return productDAO.findById(productId); return productDAO.findById(productId);
} }
} }
@POST
@Consumes("application/json")
public void saveProduct(Product product) throws DBException {
try(DBConnection db = DBConnection.open()) {
ProductDAO productDAO = db.productDAO();
productDAO.save(product);
db.commit();
}
}
// Nie praktykuje się tego zbyt często, ale można zdefiniować dedykowane metody dające dostęp do poszczególnych pól obiektu (aby nie transferować całego rekordu, gdy potrzebna tylko jedna informacja)
@GET
@Path("/{id}/price")
// przykładowo /api/products/3/price
public BigDecimal getPrice(@PathParam("id") int productId) throws DBException, RecordNotFound {
return oneProduct(productId).getPrice();
}
@PUT
@Path("/{id}/price")
@Consumes("application/json")
public void setPrice(@PathParam("id") int productId, BigDecimal newPrice) throws DBException, RecordNotFound {
try(DBConnection db = DBConnection.open()) {
ProductDAO productDAO = db.productDAO();
Product product = productDAO.findById(productId);
product.setPrice(newPrice);
productDAO.save(product);
db.commit();
}
}
@GET
@Path("/{id}/photo")
// przykładowo /api/products/3/photo
@Produces("image/jpeg")
public byte[] getPhoto(@PathParam("id") int productId) throws DBException, RecordNotFound {
return PhotoUtil.readBytes(productId);
}
@PUT
@Path("/{id}/photo")
@Consumes("image/jpeg")
public void getPhoto(@PathParam("id") int productId, byte[] bajty) {
PhotoUtil.writeBytes(productId, bajty);
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment