Δημιουργία repositories, services για τους πίνακες products, categories, brands, product_images, inventory

Θα δημιουργήσουμε τις απαραίτητες κλάσεις-components, οι οποίες θα μας επιτρέπουν να ανακτούμε, να προσθέτουμε, να διαγράφουμε και να ενημερώνουμε εγγραφές των παραπάνω πινάκων.

Category Components

Θα δημιουργήσουμε ένα package springeshop.repositories. Μέσα σε αυτό θα δημιουργήσουμε ένα repository CategoryRepository. Το Spring Data JPA παρέχει για εμάς την υλοποίηση της μεθόδου findByName(String name). Θα πραγματοποίησει το ερώτημα JPQL "Select c from Category c where name = :name".

                
                        package springeshop.repositories;

                        @Repository
                        public interface CategoryRepository  extends JpaRepository<Category, Integer>  {

                          Category findById(int id);
                          Category findByName(String name);
                        } 
                
            

Δημιουργούμε το interface CategoryService στο springeshop.service. Περιέχει CRUD μεθόδους και μια μέθοδο, για την εύρεση προϊόντος, σύμφωνα με το όνομα.

                
                        package springeshop.service;

                        public interface CategoryService{

                          Category findById(int id);
                          Category findByName(String name);
                          void saveCategory(Category category);
                          void updateCategory(Category category);
                          void deleteCategoryById(int id);
                          boolean doesCategoryExist(Category category);
                        } 
                
            

Δημιουργούμε την υλοποίηση του, CategoryServiceImpl

                
                            package springeshop.service;

                            @Service("categoryService")
                            @Transactional
                            public class CategoryServiceImpl implements CategoryService{

                              @Autowired(
                              private  CategoryRepository categoryRepository;;

                              @Override(
                              public Category findById(int id) {
                                return categoryRepository.findById(id);
                              }

                              @Override(
                              public Category findByName(String name) {
                                return categoryRepository.findByName(name);
                              }

                              @Override(
                              public void saveCategory(Category category) {
                                categoryRepository.save(category);
                              }

                              @Override(
                              public void updateCategory(Category category) {
                                saveCategory(category);
                              }

                              @Override(
                              public void deleteCategoryById(int id) {
                                categoryRepository.deleteById(id);
                              }

                              @Override(
                              public boolean doesCategoryExist(Category category) {
                                return findByName(category.getName()) != null;
                              }

                        }
                
            
Brand Components

Δημιουργούμε ένα repository BrandRepository.

                
                        package springeshop.repositories;

                        @Repository
                        public interface BrandRepository  extends JpaRepository<Brand, Integer>  {

                          Brand findByName(String name);
                        } 
                
            

Δημιουργούμε το interface BrandService στο springeshop.service.

                
                        package springeshop.service;

                        public interface BrandService{

                          Brand findByName(String name);
                          void saveBrand(Brand brand);
                          boolean doesBrandExist(Brand brand);
                        } 
                
            

Δημιουργούμε την υλοποίηση του, BrandServiceImpl

                
                            package springeshop.service;

                            @Service("brandService")
                            @Transactional
                            public class BrandServiceImpl implements BrandService{

                              @Autowired(
                              private  BrandRepository brandRepository;;

                              @Override(
                              public Brand findByName(String name) {
                                return brandRepository.findByName(name);
                              }

                              @Override(
                              public void saveBrand(Brand brand) {
                                brandRepository.save(brand);
                              }

                              @Override(
                              public boolean doesBrandExist(Brand brand) {
                                return findByName(brand.getName()) != null;
                              }
                        }
                
            
Inventory Components

Δημιουργούμε ένα repository InventoryRepository.

                
                        package springeshop.repositories;

                        @Repository
                        public interface InventoryRepository  extends JpaRepository<Inventory, Integer>  {

                          @Query("select invent.quantity from Inventory invent where invent.product.id = :productid")
                          int findProductQuantity(@Param("productid") int productid);
                        } 
                
            

Δημιουργούμε το interface InventoryService στο springeshop.service.

                
                        package springeshop.service;

                        public interface InventoryService{

                          int findProductQuantity(int productid);
                          void saveProductQuantity(Inventory productInventory);
                        } 
                
            

Δημιουργούμε την υλοποίηση του, InventoryServiceImpl

                
                            package springeshop.service;

                            @Service("inventoryService")
                            @Transactional
                            public class InventoryServiceImpl implements InventoryService{

                              @Autowired(
                              private  InventoryRepository inventoryRepository;

                              @Override(
                              public int findProductQuantity(int productid) {
                                return inventoryRepository.findProductQuantity(productid);
                              }

                              @Override(
                              public void saveProductQuantity(Inventory productInventory) {
                                inventoryRepository.save(productInventory);
                              }
                        }
                
            
ProductImage Components

Δημιουργούμε ένα repository ProductImageRepository.

                
                        package springeshop.repositories;

                        @Repository
                        public interface ProductImageRepository  extends JpaRepository<ProductImage, Integer>  {

                          ProductImage findByProductId(int id);
                        } 
                
            

Δημιουργούμε το interface ProductImageService στο springeshop.service.

                
                        package springeshop.service;

                        public interface ProductImageService{

                          ProductImage findByProductId(int id);
                          void saveImage(ProductImage image);
                        } 
                
            

Δημιουργούμε την υλοποίηση του, ProductImageServiceImpl

                
                            package springeshop.service;

                            @Service("imageService")
                            @Transactional
                            public class ProductImageServiceImpl implements ProductImageService{

                              @Autowired(
                              private  ProductImageRepository imageRepository;

                              @Override(
                              public void saveImage(ProductImage image) {
                                imageRepository.save(image);
                              }

                              @Override(
                              public ProductImage findByProductId(int id) {
                                return imageRepository.findByProductId(id);
                              }
                        }