Δημιουργία controller,repository, service για την ανάκτηση προσφορών

Στο component index-page της Angular, θα εμφανίζουμε τις προσφορές. Οπότε, θα δημιουργήσουμε μια μέθοδο στον controller, η οποία θα επιστρέφει τις προσφορές στον client.

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

                
                        package springeshop.repositories;

                        @Repository
                        public interface DealRepository  extends JpaRepository<Deal, Integer>  {

                        } 
                
            

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

                
                        package springeshop.service;

                        public interface DealService{

                          List<Deal> findAllDeals();
                        } 
                
            

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

                
                            package springeshop.service;

                            @Service("dealService")
                            @Transactional
                            public class DealServiceImpl implements DealService{

                              @Autowired
                              private  DealRepository dealRepository;

                              @Override
                              public Listt<Deal> findAllDeals() {
                                return dealRepository.findAll();
                              }

                        }
                
            

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

                
                        package springeshop.repositories;

                        @Repository
                        public interface DealImageRepository  extends JpaRepository<DealImage, Integer>  {

                          DealImage findByDeal(Deal deal);
                        } 
                
            

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

                
                        package springeshop.service;

                        public interface DealImageService{

                          DealImage findByDeal(Deal deal);
                        } 
                
            

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

                
                            package springeshop.service;

                            @Service("dealImageService")
                            @Transactional
                            public class DealImageServiceImpl implements DealImageServiceImpl{

                              @Autowired
                              private  DealImageRepository dealImageRepository;

                              @Override
                              public DealImage findByDeal(Deal deal) {
                                return dealImageRepository.findByDeal(deal);
                              }

                        }
                
            
Δημιουργία controller

Θα δημιουργήσουμε έναν controller DealApiController στο πακέτο springeshop.controller . Όταν ο client πραγματοποιεί ένα HTTP GET αίτημα στο localhost:8080/api/deals, η μέθοδος getDeals θα επιστρέφει όλες τις προσφορές σε μορφή JSON.

Επίσης, θα προσθέσουμε ένα field imageUrl στο entity Deal.java . Αυτό αναπαριστά το URL της εικόνας της προσφοράς και θα παίρνει τιμή, από το DealImage entity. Χρησιμοποιούμε το annotation @Transient, για να δηλώσουμε ότι δεν θέλουμε, να αποθηκευτεί στη βάση, αλλά θέλουμε να επιστρέφεται στην JSON απάντηση.

                
                          @Transient
                          private String imageUrl;

                
            
                
                            package springeshop.controller;

                            @RestController
                            @RequestMapping("/api")
                            public class DealApiController{
                        
                               public static final  Logger logger = LoggerFactory.getLogger(DealApiController.class);
    
                               @Autowired
                               private  DealService dealService;
    
                               @Autowired
                               private  DealImageService dealImageService;

                               @RequestMapping(value = "/deals", method = RequestMethod.GET)
                               public ResponseEntity<?> getDeals(){

                                ...
                
            

Η μέθοδος findAllDeals πραγματοποιεί το ερώτημα "Select d from Deal d" και επιστρέφει μια λίστα με τις προσφορές Deals.

                
                          List<Deal> deals = dealService.findAllDeals();

                          if(deals.isEmpty()){
                            return new ResponseEntity<>(HttpStatus.NO_CONTENT);
                          } 

                
            

Η μέθοδος findByDeal επιστρέφει την αντίστοιχη εικόνα για κάθε προσφορά. Στέλνουμε στην απάντηση status 200 ΟΚ και τις προσφορές.

                
                          for(Deal deal : deals){
                            DealImage dealImage = dealImageService.findByDeal(deal);
                            deal.setImageUrl(dealImage.getUrl());
                          } 

                            return new ResponseEntity<List<Deal>>(deals, HttpStatus.OK);
                
            

Παράδειγμα αιτήματος με Postman

Deals Postman