| | 93 | ** Листањето на сите апликации за нови рецепти се прави така што се прави GET барање до backend делот од апликацијата на патеката /admin/recipeapplications и како додатни параметри се праќаат page и size доколку администраторот претходно веќе започнал со листање на апликациите. Првото нешто што се прави во оваа функција е се иницијализира нова инстанца од интерфејсот Pageable и таа инстаца се праќа во тековната функција за да се превземат апликациите. Се превземаат рецептите преку query, се ставаат во листа и се праќаат назад до front-end делот од апликацијата. ** |
| | 94 | |
| | 95 | {{{ |
| | 96 | @GetMapping("/admin/recipeapplications") |
| | 97 | public ResponseEntity<Page<RecipeApplicationDTO>> getRecipeApplication( |
| | 98 | @RequestParam(defaultValue = "0") int page, |
| | 99 | @RequestParam(defaultValue = "4") int size |
| | 100 | ) { |
| | 101 | Pageable pageable = PageRequest.of(page, size); |
| | 102 | Page<RecipeApplicationDTO> recipeApplications = recipeService.findAllRecipeApplications(pageable); |
| | 103 | return new ResponseEntity<>(recipeApplications, HttpStatus.OK); |
| | 104 | } |
| | 105 | }}} |
| | 106 | |
| | 107 | ** Истата инстанца од интерфејсот Pageable се препраќа до полседниот слој. ** |
| | 108 | |
| | 109 | {{{ |
| | 110 | @Override |
| | 111 | public Page<RecipeApplicationDTO> findAllRecipeApplications(Pageable pageable) { |
| | 112 | return recipeDAO.findAllRecipeApplications(pageable); |
| | 113 | } |
| | 114 | }}} |
| | 115 | |
| | 116 | ** Во последниот дел се прави sql query за селектирање на рецепти со лимит и offset за да се усогласи со потребната страница која ја бара администраторот. Исто така претходно се превзема и целосниот број на апликации ** |
| | 117 | |
| | 118 | {{{ |
| | 119 | @Override |
| | 120 | public Page<RecipeApplicationDTO> findAllRecipeApplications(Pageable pageable) { |
| | 121 | String sql = "SELECT ra.id AS recipe_id, ra.recipe_name, ra.description, ra.category, ra.origin, ra.meal_thumb, ra.video_url, " + |
| | 122 | "rai.ingredient, rai.dose " + |
| | 123 | "FROM recipe_application ra " + |
| | 124 | "LEFT JOIN recipe_application_ingredients rai ON ra.id = rai.recipe_id " + |
| | 125 | "ORDER BY ra.id " + |
| | 126 | "LIMIT ? OFFSET ?"; |
| | 127 | |
| | 128 | Integer count = jdbcTemplate.queryForObject("SELECT COUNT(*) FROM recipe_application", Integer.class); |
| | 129 | |
| | 130 | RecipeApplicationRowMapper rowMapper = new RecipeApplicationRowMapper(); |
| | 131 | |
| | 132 | jdbcTemplate.query(sql, new Object[]{pageable.getPageSize(), pageable.getOffset()}, rowMapper); |
| | 133 | |
| | 134 | RecipeApplicationDTO recipe = rowMapper.getFinalRecipe(); |
| | 135 | |
| | 136 | List<RecipeApplicationDTO> recipeApplications = new ArrayList<>(); |
| | 137 | if (recipe != null) { |
| | 138 | recipeApplications.add(recipe); |
| | 139 | } |
| | 140 | |
| | 141 | return new PageImpl<>(recipeApplications, pageable, count != null ? count : 0); |
| | 142 | } |
| | 143 | }}} |
| | 144 | |