Changeset e5b84dc


Ignore:
Timestamp:
09/11/22 18:03:58 (21 months ago)
Author:
Marko <Marko@…>
Branches:
master
Children:
775e15e
Parents:
527b93f
Message:

Prototype version

Files:
6 added
2 deleted
30 edited

Legend:

Unmodified
Added
Removed
  • phonelux-backend/src/main/java/finki/it/phoneluxbackend/controllers/PhoneController.java

    r527b93f re5b84dc  
    2222//     handle request parameters for filtering phones
    2323    @GetMapping(path = "/phones")
    24     public List<Phone> getPhones(){
    25         return phoneService.getPhones().stream()
    26                 .sorted(Comparator.comparing(Phone::getTotal_offers).reversed())
    27                 .collect(Collectors.toList());
     24    public List<Phone> getPhones(@RequestParam(name = "shops", required = false) String shops,
     25                                 @RequestParam(name = "brands", required = false) String brands,
     26                                 @RequestParam(name = "sortBy", required = false) String sortBy,
     27                                 @RequestParam(name = "priceRange", required = false) String priceRange,
     28                                 @RequestParam(name = "searchValue", required = false) String searchValue){
     29
     30        return phoneService.getPhones(shops,brands,sortBy,priceRange,searchValue);
    2831    }
    2932
  • phonelux-backend/src/main/java/finki/it/phoneluxbackend/controllers/PhoneOfferController.java

    r527b93f re5b84dc  
    1616@RestController
    1717@AllArgsConstructor
    18 @RequestMapping(path = "/phones/offers/{phoneId}")
    1918public class PhoneOfferController {
    2019    private final PhoneOfferService phoneOfferService;
    2120    private final PhoneService phoneService;
    2221
    23     @GetMapping
     22    @GetMapping(path = "/phones/offers/{phoneId}")
    2423    public List<PhoneOffer> getOffersForPhone(@PathVariable("phoneId") Long phoneId){
    2524        return phoneOfferService.getPhoneOffersForPhone(phoneId);
    2625    }
    2726
     27    @GetMapping(path = "/phoneoffer/{offerId}")
     28    public PhoneOffer getPhoneOffer(@PathVariable("offerId") Long offerId){
     29        return phoneOfferService.getPhoneOffer(offerId);
     30    }
     31
    2832}
  • phonelux-backend/src/main/java/finki/it/phoneluxbackend/security/CustomAuthenticationFilter.java

    r527b93f re5b84dc  
    3333    @Override
    3434    public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException {
    35         String email = request.getParameter("email"); // mozda ke treba da se smeni vo username
     35        String email = request.getParameter("email");
    3636        String password = request.getParameter("password");
    3737        UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(email,password);
     
    4646        String access_token = JWT.create()
    4747                .withSubject(user.getEmail())
    48                 .withExpiresAt(new Date(System.currentTimeMillis() + 10 * 60 * 1000))
     48                .withExpiresAt(new Date(System.currentTimeMillis() + 10 * 60 * 100000)) // approx. 16.5 hours
    4949                .withIssuer(request.getRequestURL().toString())
    5050                .withClaim("role", user.getAuthorities().stream()
  • phonelux-backend/src/main/java/finki/it/phoneluxbackend/services/PhoneOfferService.java

    r527b93f re5b84dc  
    3030    }
    3131
     32    public PhoneOffer getPhoneOffer(Long offerId){
     33        boolean exists = phoneOfferRepository.existsById(offerId);
     34
     35        if(!exists)
     36            throw new IllegalStateException("Phone offer with id "+offerId+" does not exist");
     37
     38        return phoneOfferRepository.findById(offerId).get();
     39    }
     40
     41
    3242    public List<String> getShops() {
    3343        return phoneOfferRepository.findAll().stream()
  • phonelux-backend/src/main/java/finki/it/phoneluxbackend/services/PhoneService.java

    r527b93f re5b84dc  
    1010import java.util.Comparator;
    1111import java.util.List;
     12import java.util.Objects;
    1213import java.util.stream.Collectors;
    1314
     
    2223
    2324    // TODO: insert logic to filter
    24     public List<Phone> getPhones(){
    25         return phoneRepository.findAll();
     25    public List<Phone> getPhones(String shops, String brands, String sortBy, String priceRange, String searchValue){
     26        List<Phone> phones = phoneRepository.findAll();
     27
     28
     29        if(brands != null)
     30        {
     31            phones = phones.stream()
     32                    .filter(phone -> brands.contains(phone.getBrand())).collect(Collectors.toList());
     33        }
     34
     35        if(shops != null)
     36        {
     37            phones = phones.stream()
     38                    .filter(phone -> phone.getPhoneOffers().stream().anyMatch(offer -> shops.contains(offer.getOffer_shop())))
     39                    .collect(Collectors.toList());
     40        }
     41
     42        if(priceRange != null)
     43        {
     44            int lowestPrice = Integer.parseInt(priceRange.split("-")[0]);
     45            int highestPrice = Integer.parseInt(priceRange.split("-")[1]);
     46            phones = phones.stream()
     47                    .filter(phone -> phone.getLowestPrice() >= lowestPrice && phone.getLowestPrice() <= highestPrice)
     48                    .collect(Collectors.toList());
     49        }
     50
     51        if(searchValue != null && !Objects.equals(searchValue.stripIndent(), "")){
     52            phones = phones.stream()
     53                    .filter(phone -> phone.getBrand().toLowerCase().contains(searchValue.stripIndent().toLowerCase())
     54                            || phone.getModel().toLowerCase().contains(searchValue.stripIndent().toLowerCase()))
     55                    .collect(Collectors.toList());
     56        }
     57
     58        phones = phones.stream().sorted(Comparator.comparing(Phone::getTotal_offers).reversed())
     59                .collect(Collectors.toList());
     60        if(sortBy != null)
     61        {
     62            if(sortBy.equals("ascending")) {
     63                phones = phones.stream()
     64                        .sorted(Comparator.comparing(Phone::getLowestPrice))
     65                        .collect(Collectors.toList());
     66            }
     67
     68            if(sortBy.equals("descending")) {
     69                phones = phones.stream()
     70                        .sorted(Comparator.comparing(Phone::getLowestPrice).reversed())
     71                        .collect(Collectors.toList());
     72            }
     73        }
     74
     75        return phones;
    2676    }
    2777
  • phonelux-backend/src/main/java/finki/it/phoneluxbackend/services/UserService.java

    r527b93f re5b84dc  
    4040           User userToRegister =  userRepository.findByEmail(user.getEmail()).get();
    4141           if(userToRegister.getEnabled()) {
    42                return ResponseEntity.badRequest().body("Error: Email "+user.getEmail()+" already taken!");
     42               return ResponseEntity.badRequest().body("Error:Е-маил адресата е веќе зафатена!");
    4343           }
    4444           else {
    45                return ResponseEntity.badRequest().body("Email "+user.getEmail()+" not activated!" );
     45               return ResponseEntity.badRequest().body("Error:Профилот не е активиран. Потврдете на вашата е-маил адреса!" );
    4646           }
    4747       }
  • phonelux-frontend/package-lock.json

    r527b93f re5b84dc  
    2020        "@testing-library/react": "^13.3.0",
    2121        "@testing-library/user-event": "^13.5.0",
     22        "@tippyjs/react": "^4.2.6",
    2223        "axios": "^0.27.2",
    2324        "react": "^18.2.0",
     
    40924093      }
    40934094    },
     4095    "node_modules/@tippyjs/react": {
     4096      "version": "4.2.6",
     4097      "resolved": "https://registry.npmjs.org/@tippyjs/react/-/react-4.2.6.tgz",
     4098      "integrity": "sha512-91RicDR+H7oDSyPycI13q3b7o4O60wa2oRbjlz2fyRLmHImc4vyDwuUP8NtZaN0VARJY5hybvDYrFzhY9+Lbyw==",
     4099      "dependencies": {
     4100        "tippy.js": "^6.3.1"
     4101      },
     4102      "peerDependencies": {
     4103        "react": ">=16.8",
     4104        "react-dom": ">=16.8"
     4105      }
     4106    },
    40944107    "node_modules/@tootallnate/once": {
    40954108      "version": "1.1.2",
     
    1609516108      "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz",
    1609616109      "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA=="
     16110    },
     16111    "node_modules/tippy.js": {
     16112      "version": "6.3.7",
     16113      "resolved": "https://registry.npmjs.org/tippy.js/-/tippy.js-6.3.7.tgz",
     16114      "integrity": "sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==",
     16115      "dependencies": {
     16116        "@popperjs/core": "^2.9.0"
     16117      }
    1609716118    },
    1609816119    "node_modules/tmpl": {
     
    2007620097      }
    2007720098    },
     20099    "@tippyjs/react": {
     20100      "version": "4.2.6",
     20101      "resolved": "https://registry.npmjs.org/@tippyjs/react/-/react-4.2.6.tgz",
     20102      "integrity": "sha512-91RicDR+H7oDSyPycI13q3b7o4O60wa2oRbjlz2fyRLmHImc4vyDwuUP8NtZaN0VARJY5hybvDYrFzhY9+Lbyw==",
     20103      "requires": {
     20104        "tippy.js": "^6.3.1"
     20105      }
     20106    },
    2007820107    "@tootallnate/once": {
    2007920108      "version": "1.1.2",
     
    2871228741      "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA=="
    2871328742    },
     28743    "tippy.js": {
     28744      "version": "6.3.7",
     28745      "resolved": "https://registry.npmjs.org/tippy.js/-/tippy.js-6.3.7.tgz",
     28746      "integrity": "sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==",
     28747      "requires": {
     28748        "@popperjs/core": "^2.9.0"
     28749      }
     28750    },
    2871428751    "tmpl": {
    2871528752      "version": "1.0.5",
  • phonelux-frontend/package.json

    r527b93f re5b84dc  
    1515    "@testing-library/react": "^13.3.0",
    1616    "@testing-library/user-event": "^13.5.0",
     17    "@tippyjs/react": "^4.2.6",
    1718    "axios": "^0.27.2",
    1819    "react": "^18.2.0",
  • phonelux-frontend/src/App.js

    r527b93f re5b84dc  
    11import { BrowserRouter, Routes, Route } from "react-router-dom";
    22import './App.css';
    3 import GroupedFiltersComponent from "./components/GroupedFiltersComponent/GroupedFiltersComponent";
    4 import HeaderComponent from "./components/HeaderComponent/HeaderComponent";
    5 import InputFormComponent from "./components/LoginRegisterComponents/InputFormComponent";
    6 import LoginFormComponent from "./components/LoginRegisterComponents/LoginFormComponent";
    7 import RegisterFormComponent from "./components/LoginRegisterComponents/RegisterFormComponent";
    8 import PaginationComponent from "./components/PaginationComponent/PaginationComponent"
    9 import PhoneCardComponent from "./components/PhoneCardComponent/PhoneCardComponent";
    10 import PhoneCardGridComponent from "./components/PhoneCardGridComponent/PhoneCardGridComponent";
    113import HomepageComponent from "./components/HomepageComponent"
    124import PhonePageComponent from "./components/PhonePageComponent";
    13 import SortByComponent from "./components/FiltersComponents/SortByComponent";
    145import LoginPageComponent from "./components/LoginPageComponent"
    156import RegisterPageComponent from "./components/RegisterPageComponent";
     7import PhoneOfferDetailsComponent from "./components/PhoneOfferDetailsComponent/PhoneOfferDetailsComponent";
     8
    169
    1710
     
    2114    <BrowserRouter>
    2215      <Routes>
    23         {/* { <Route path="/" element={<PhoneCardComponent
    24         image_url='https://admin.ledikom.mk/uploads/items/411/1641668143apple-iphone-13-pro-max-1-250x300-pad.jpg?v=1'
    25         model='Apple iPhone 13 Pro Max' price='75000'/>}/> } */}
    2616        <Route path="/" element={<HomepageComponent/>}/>
    2717        <Route path="/login" element={<LoginPageComponent/>}/>
    2818        <Route path="/register" element={<RegisterPageComponent/>}/>
    2919        <Route path="/phones/:phoneId" element={<PhonePageComponent/>} />
     20        <Route path="/phoneoffer/:offerId" element={<PhoneOfferDetailsComponent/>} />
    3021
    3122      </Routes>
  • phonelux-frontend/src/components/FiltersComponents/FilterPriceComponent.js

    r527b93f re5b84dc  
    1818
    1919  componentDidMount(){
    20 
    2120
    2221  axios.get('/lowestPrice')
  • phonelux-frontend/src/components/FiltersComponents/SortByComponent.css

    r527b93f re5b84dc  
    1010    width: 15%;
    1111    background-color: #e6f8ef;
     12    margin-right: 15px;
    1213}
  • phonelux-frontend/src/components/GroupedFiltersComponent/GroupedFiltersComponent.js

    r527b93f re5b84dc  
    2121  }
    2222 
    23 
    24   componentDidMount(){
    25  
    26   }
    2723
    2824  render() {
  • phonelux-frontend/src/components/HeaderComponent/HeaderComponent.css

    r527b93f re5b84dc  
    88    width: 310px;
    99    height: 200px;
     10    margin-top: -65px;
    1011}
     12
     13.homepage-navbar-component{
     14    width: 100%;
     15    display: flex;
     16    justify-content: end;
     17    background-color: #B6E2C8;
     18}
  • phonelux-frontend/src/components/HeaderComponent/HeaderComponent.js

    r527b93f re5b84dc  
    22import { Link } from 'react-router-dom'
    33import logo from '../../images/logo_phonelux.png'
     4import NavbarComponent from '../NavbarComponent/NavbarComponent'
    45import './HeaderComponent.css'
    56
     
    78  render() {
    89    return (
     10      <>
     11      <div className='homepage-navbar-component'>
     12        <NavbarComponent/>
     13      </div>
    914      <div className='header-component'>
    1015          <Link style={{ textDecoration: 'none' }} to={"/"}>
     
    1217        </Link>
    1318      </div>
     19      </>
    1420    )
    1521  }
  • phonelux-frontend/src/components/HomepageComponent.js

    r527b93f re5b84dc  
    33import HeaderComponent from './HeaderComponent/HeaderComponent'
    44import PhoneCardGridComponent from './PhoneCardGridComponent/PhoneCardGridComponent'
     5
    56
    67export class HomepageComponent extends Component {
     
    1011
    1112  this.state = {
    12     shops: null,
    13     brands: null,
    14     priceRange: null,
    15     searchValue: null,
    16     sortBy: null
     13    shops: '',
     14    brands: '',
     15    priceRange: '',
     16    searchValue: '',
     17    sortBy: 'mostPopular'
    1718  }
    1819}
     
    4647      searchValue: e.searchValue
    4748    })
     49
    4850  }
    4951
     
    5658}
    5759
     60
    5861  render() {
    5962    return (
     
    6164        <HeaderComponent/>
    6265        <GroupedFiltersComponent passFilters={this.changeFilters}/>
    63         <PhoneCardGridComponent/>
     66        <PhoneCardGridComponent {...this.state}/>
    6467        </>
    6568    )
  • phonelux-frontend/src/components/LoginRegisterComponents/LoginFormComponent.css

    r527b93f re5b84dc  
    1616  width: fit-content;
    1717  box-shadow: 11px 12px 13px 12px rgb(207, 207, 207);
    18   padding-top: 30px;
     18  padding-top: 20px;
    1919  border-radius: 60px;
    2020  background-color: white;
     
    2323}
    2424.loginform-imgs-div {
    25     padding-top: 20px;
     25    padding-top: 10px;
    2626    justify-content: center;
    2727    display: flex;
     
    4343
    4444.loginform-sub-main-div > div{
    45   margin-bottom: 50px;
     45  margin-bottom: 30px;
    4646  margin-left: 80px;
    4747  margin-right: 80px;
     
    137137    color: blue;
    138138}
    139  .register-link > a{
    140      color: rgb(53, 99, 70);
    141      text-decoration: none;
     139
     140
     141
     142 .registerform-link{
     143  color: rgb(53, 99, 70);
     144  text-decoration: none;
    142145 }
    143146
    144  .register-link > a:hover{
    145   color: blue;
     147 .registerform-link:hover{
     148   color: blue;
    146149 }
     150
     151 .loginform-message-wrapper{
     152  display: flex;
     153  justify-content: center;
     154 }
     155
     156 .loginform-error-message{
     157  color: red;
     158  border: 1px solid red;
     159  width: fit-content;
     160  padding: 10px;
     161  border-radius: 50px;
     162  background-color: rgb(251, 224, 224);
     163 }
  • phonelux-frontend/src/components/LoginRegisterComponents/LoginFormComponent.js

    r527b93f re5b84dc  
    1717      email: '',
    1818      password: '',
     19      serverResponse: ''
    1920    }
    2021  }
     
    4243
    4344      axios(config)
    44       .then(function (response) {
    45         console.log(response.data);
     45      .then((response) => {
     46       // store access token in local storage, redirect to homepage
     47       console.log(response.data)
    4648      })
    47       .catch(function (error) {
    48         console.log(error);
     49      .catch((error) => {
     50        this.setState({
     51          serverResponse: 'error'
     52        })
    4953      });
    5054
     
    6771       <div className="loginform-sub-main-div">
    6872         <div>
    69 
     73          {this.state.serverResponse == 'error' ? <div className='loginform-message-wrapper'>
     74                          <h5 className='loginform-error-message'>Невалидна е-маил адреса или лозинка!</h5></div> : <></>}
    7075           <div className="loginform-imgs-div">
    7176             <div className="loginform-image-container">
     
    9398            </div> 
    9499           </form>
    95            <p className='register-link'><Link to={"/register"}><a>Регистрирај се</a></Link></p>
     100           <p className='register-link'><Link className='registerform-link' to={"/register"}>Регистрирај се</Link></p>
    96101 
    97102         </div>
  • phonelux-frontend/src/components/LoginRegisterComponents/RegisterFormComponent.css

    r527b93f re5b84dc  
    2323  }
    2424  .registerform-imgs-div {
    25       padding-top: 20px;
     25      padding-top: 5px;
    2626      justify-content: center;
    2727      display: flex;
     
    158158  }
    159159
     160  .registerform-message-wrapper{
     161    display: flex;
     162    justify-content: center;
     163  }
     164
     165  .registerform-error-message{
     166    color: red;
     167    border: 1px solid red;
     168    width: fit-content;
     169    padding: 10px;
     170    border-radius: 50px;
     171    background-color: rgb(251, 224, 224);
     172  }
     173
     174  .registerform-success-message{
     175    color: green;
     176    border: 1px solid green;
     177    width: fit-content;
     178    padding: 10px;
     179    border-radius: 50px;
     180    background-color: #B6E2C8;
     181  }
    160182
    161183
  • phonelux-frontend/src/components/LoginRegisterComponents/RegisterFormComponent.js

    r527b93f re5b84dc  
    2020        password: '',
    2121        confirmPassword:'',
     22        serverResponse: ''
    2223      }
    2324    }
     
    4344
    4445        axios(config)
    45         .then(function (response) {
    46           console.log(response);
     46        .then((response) => {
     47          this.setState({
     48            serverResponse: response.data
     49          })
    4750        })
    48         .catch(function (error) {
    49           console.log(error);
     51        .catch((error) => {
     52          this.setState({
     53            serverResponse: error.response.data
     54          })
    5055        });
    5156
     
    5964
    6065
    61    
    62 
    6366  render() {
    6467
     
    6972         <div className="registerform-sub-main-div">
    7073           <div>
     74
     75            {(() => {
     76              if(this.state.serverResponse == '')
     77              {
     78                return <></>
     79              }
     80
     81              if(this.state.serverResponse != '' && this.state.serverResponse.includes('Error'))
     82              {
     83                return <div className='registerform-message-wrapper'>
     84                          <h5 className='registerform-error-message'>{this.state.serverResponse.split(':')[1]}</h5> </div>
     85              }
     86
     87              if(this.state.serverResponse != '' && this.state.serverResponse.includes('token'))
     88              {
     89                return <div className='registerform-message-wrapper'>
     90                          <h5 className='registerform-success-message'>Вашата регистрација е во тек. Потврдете на вашата е-маил адреса!</h5> </div>
     91              }
     92
     93            })()}
    7194
    7295             <div className="registerform-imgs-div">
  • phonelux-frontend/src/components/PhoneCardComponent/PhoneCardComponent.css

    r527b93f re5b84dc  
    11.phonecard{
    2     background-color: #B6E2C8;
     2    /* background-color: #B6E2C8; */
    33    padding:15px;
    44    justify-items: center;
     5    padding-top: 35px;
    56    width: 250px;
    67    height: 400px;
    78    border-radius: 25px;
     9    border: 3px solid #B6E2C8;
     10    border-radius: 50px;
    811}
    912
    1013.phonecard:hover{
    11     background-color: #84c69f;
     14    /* background-color: #B6E2C8; */
    1215    cursor: pointer;
     16    box-shadow: 0 12px 16px 0 rgba(0,0,0,0.24), 0 17px 50px 0 rgba(0,0,0,0.19);
     17    transition: box-shadow 0.5s, background-color 0.5s ;
     18    border-radius: 50px;
    1319}
    1420
     
    2632
    2733.phonecard-lowestprice-header, .phonecard-totaloffers-header{
    28     margin-top: -10px;
    29     color: rgb(34, 106, 106);
    30     text-align: center;
     34    margin-top: 20px;
     35    text-align: right;
     36}
     37
     38.phonecard-totaloffers-header{
     39    margin-top: -15px;
    3140}
    3241
    3342.phonecard-model-header{
    3443    text-align: center;
     44    border: 1px solid rgb(161, 165, 163);
     45    border-radius: 20px 100px;
     46    background-color: rgb(222, 228, 225);
     47    padding: 5px;
     48    padding-right: 10px;
     49   
    3550}
    3651
     
    4459}
    4560
     61.phonecard-lowestprice-header{
     62    /* color: rgb(24, 117, 24); */
     63}
     64
     65.phonecard-totaloffers-header{
     66    /* color: rgb(24, 117, 24); */
     67}
     68
    4669.phonecard > h5 > p{
    4770    display: inline;
  • phonelux-frontend/src/components/PhoneCardComponent/PhoneCardComponent.js

    r527b93f re5b84dc  
    2424        <h3 className='phonecard-model-header'>{this.props.model}</h3>
    2525        <h5 className='phonecard-lowestprice-header'>Најниска цена: <p className='phonecard-lowestprice'>{this.props.lowestPrice}</p> ден.</h5>
    26         <h6 className='phonecard-totaloffers-header'>Вкупно понуди: <p className='phonecard-totaloffers'>{this.props.total_offers}</p></h6>
     26        <h5 className='phonecard-totaloffers-header'>Вкупно понуди: <p className='phonecard-totaloffers'>{this.props.total_offers}</p></h5>
    2727      </div>
    2828      </Paper>
  • phonelux-frontend/src/components/PhoneCardGridComponent/PhoneCardGridComponent.css

    r527b93f re5b84dc  
    1515}
    1616
     17.pagination-wrapper{
     18    margin-top: 40px;
     19    padding-bottom: 40px;
     20    display: flex;
     21    justify-content: center;
     22}
    1723
     24
     25
  • phonelux-frontend/src/components/PhoneCardGridComponent/PhoneCardGridComponent.js

    r527b93f re5b84dc  
    1 import { Grid } from '@mui/material'
     1import { Grid, Pagination } from '@mui/material'
    22import axios from 'axios'
    33import React, { Component } from 'react'
    4 import PaginationComponent from '../PaginationComponent/PaginationComponent'
    54import '../PhoneCardComponent/PhoneCardComponent'
    65import PhoneCardComponent from '../PhoneCardComponent/PhoneCardComponent'
     
    1514    this.state = {
    1615      phones: [],
    17       loading: true,
    1816      currentPage: 1,
    1917      phonesPerPage: 12,
     
    2422  }
    2523
     24  componentDidUpdate(prevProps) {
     25    if(JSON.stringify(prevProps) != JSON.stringify(this.props)){
     26      let filters = '?'
     27
     28      if(this.props.shops)
     29      {
     30        filters += 'shops='+this.props.shops+'&'
     31      }
     32      if(this.props.brands)
     33      {
     34        filters += 'brands='+this.props.brands+'&'
     35      }
     36      if(this.props.priceRange)
     37      {
     38        filters += 'priceRange='+this.props.priceRange+'&'
     39      }
     40      if(this.props.searchValue)
     41      {
     42        filters += 'searchValue='+this.props.searchValue+'&'
     43      }
     44
     45      if(this.props.sortBy)
     46      {
     47        filters += 'sortBy='+this.props.sortBy+'&'
     48      }
     49
     50      axios.get('/phones'+filters)
     51      .then(response => {
     52        this.setState({
     53          phones: response.data,
     54          numberOfPages: Math.ceil(response.data.length / this.state.phonesPerPage)
     55        },(e) => this.setNewPage(e,this.state.currentPage))
     56      }
     57      )
     58      .catch(error => console.log(error))
     59      console.log(filters)
     60    }
     61  }
     62
    2663  componentDidMount() {
    27 
    2864    axios.get('/phones')
    2965      .then(response => {
    3066        this.setState({
    3167          phones: response.data,
    32           loading: false,
    3368          numberOfPages: Math.ceil(response.data.length / this.state.phonesPerPage)
    34         },() => this.setNewPage(this.state.currentPage))
     69        },(e) => this.setNewPage(e,this.state.currentPage))
    3570      }
    3671      )
     
    3873  }
    3974
    40   setNewPage = (newPage) => {
    41     if(newPage == '')
    42     {
    43       newPage = this.state.currentPage-1
    44     }
    4575
    46     if(newPage == '')
    47     {
    48       newPage = this.state.currentPage+1
    49     }
     76  setNewPage = (event,page) => {
    5077
    51 
    52     const indexOfLastPhone = parseInt(newPage) * this.state.phonesPerPage;
     78    const indexOfLastPhone = parseInt(page) * this.state.phonesPerPage;
    5379    const indexOfFirstPhone = indexOfLastPhone - this.state.phonesPerPage;
    5480
     
    5682
    5783    this.setState({
    58       currentPage: parseInt(newPage),
     84      currentPage: parseInt(page),
    5985      currentPhones: currPhones
    6086    })
     
    6389
    6490  render() {
     91
    6592    return (
    6693      <div className='phonecardgrid-wrapper'>
     
    7198       spacing={2}>
    7299
    73         {this.state.currentPhones.map((phone) => <Grid className='phonecardgrid-item' item md={3}>
    74           <PhoneCardComponent key={phone.id} id={phone.id} brand={phone.brand}
     100        {this.state.currentPhones.map((phone,idx) => <Grid key={idx} className='phonecardgrid-item' item md={3}>
     101          <PhoneCardComponent id={phone.id} brand={phone.brand}
    75102          model={phone.model} image_url={phone.image_url == null ? phoneImage : phone.image_url} total_offers={phone.total_offers} lowestPrice={phone.lowestPrice}/></Grid>)}
    76103
    77         {/* <Grid item xs={12} md={12}>
    78         <PaginationComponent
    79           currentPage={this.state.currentPage}
    80           changePageHandler={this.setNewPage}
    81           numberOfPages={this.state.numberOfPages} />
    82           </Grid> */}
    83104      </Grid>
    84       <PaginationComponent
    85           currentPage={this.state.currentPage}
    86           changePageHandler={this.setNewPage}
    87           numberOfPages={this.state.numberOfPages} />
     105
     106      <div className='pagination-wrapper'>
     107         <Pagination className='paginationcomponent-pagination' onChange={this.setNewPage} page={this.state.currentPage}
     108          count={this.state.numberOfPages} color="primary" />
     109      </div>
     110
    88111      </div>
    89112    )
  • phonelux-frontend/src/components/PhoneOfferComponent/PhoneOfferComponent.css

    r527b93f re5b84dc  
     1.phone-with-offers-table-row{
     2    font-size: 18px;
     3}
     4
     5.phone-with-offers-table-row > td:first-of-type {
     6    font-weight: bold;
     7}
     8
     9.phone-offer-specifications-button{
     10    font-size: 17px;
     11    padding: 10px;
     12    background-color: #B6E2C8;
     13    border-radius: 20px;
     14    border: 1px solid black;
     15}
     16
     17.phone-with-offers-table-row td:last-of-type{
     18    display: flex;
     19    justify-content: center;
     20    flex-wrap: wrap;
     21}
     22
     23.phone-offer-specifications-button:hover{
     24    cursor: pointer;
     25    background-color: rgb(166, 201, 171);
     26    box-shadow: 0 12px 16px 0 rgba(0,0,0,0.24), 0 17px 50px 0 rgba(0,0,0,0.19);
     27    transition: box-shadow 0.5s, background-color 0.5s ;
     28}
  • phonelux-frontend/src/components/PhoneOfferComponent/PhoneOfferComponent.js

    r527b93f re5b84dc  
    11import React, { Component } from 'react'
     2import { Link } from 'react-router-dom'
     3import './PhoneOfferComponent.css'
    24
    35export class PhoneOfferComponent extends Component {
     
    1315   
    1416  render() {
    15     console.log(this.props)
     17    // console.log(this.props)
    1618    return (
    1719      <tr className='phone-with-offers-table-row'>
    1820      <td>{this.props.offer_shop}</td>
    19       <td><a href={this.props.offer_url}>{this.props.offer_name}</a></td>
     21      <td><a style={{ textDecoration: 'none' }} href={this.props.offer_url}>{this.props.offer_name}</a></td>
    2022      <td>{this.props.price} ден.</td>
    21       <td></td>
     23      <td>
     24        <Link style={{ textDecoration: 'none' }} to={"/phoneoffer/"+this.props.id}>
     25          <button className='phone-offer-specifications-button'>Спецификации</button>
     26        </Link>
     27        </td>
    2228      </tr>
    2329    )
     
    2733export default PhoneOfferComponent
    2834
    29 
    30 
    31 
    32 // back_camera: null
    33 // battery: null
    34 // chipset: null
    35 // color: null
    36 // cpu: null
    37 // front_camera: null
    38 // id: 486
    39 // image_url: "https://setec.mk/image/cache/catalog/Product/51841_0-228x228.jpg"
    40 // is_validated: false
    41 // last_updated: "2022-07-26T22:00:00.000+00:00"
    42 // offer_description: "Apple iPhone 13 128GB Midnight, GSM/CDMA/HSPA/EVDO/LTE/ 5G, Display: Super Retina XDR OLED; HDR10; Dolby Vision; 800 nits (HBM); 1200 nit…"
    43 // offer_name: "Apple iPhone 13 128GB Midnight"
    44 // offer_shop: "Setec"
    45 // offer_shop_code: "51841"
    46 // offer_url: "https://setec.mk/index.php?route=product/product&path=10066_10067&product_id=51841"
    47 // operating_system: null
    48 // price: 63990
    49 // ram_memory: null
    50 // rom_memory: null
  • phonelux-frontend/src/components/PhoneWithOffersComponent/PhoneWithOffersComponent.css

    r527b93f re5b84dc  
    2323
    2424.phone-with-offers-table-row:nth-of-type(even){
    25     background-color: #DEE4E1;
     25    background-color: #eef2f0;
    2626}
    2727
     
    5151    font-size: 22px;
    5252}
     53
     54.phone-with-offers-model-header{
     55    border: 1px solid gray;
     56    padding: 10px;
     57    padding-left: 50px;
     58    padding-right: 50px;
     59    border-radius: 10px 60px;
     60    box-shadow: inset 0px 0px 25px 0px rgb(120, 190, 139);
     61    outline: none;
     62    background-color: #c4f3d8;
     63}
     64
     65.phone-with-offers-totaloffers-header{
     66    padding: 10px;
     67    border: 1px solid rgb(199, 193, 193);
     68    background-color: #B6E2C8;
     69    border-radius: 50px;
     70}
  • phonelux-frontend/src/components/PhoneWithOffersComponent/PhoneWithOffersComponent.js

    r527b93f re5b84dc  
    3131        <div className='phone-with-offers-sub-main'>
    3232            <div className='phone-with-offers-totaloffers-div'>
    33                 <h3>Понуди: {this.props.total_offers}</h3>
     33                <h3 className='phone-with-offers-totaloffers-header'>Понуди: {this.props.total_offers}</h3>
    3434            </div>
    3535
     
    4141
    4242            <div className='phone-with-offers-model-wrapper'>
    43             <h1>{this.props.model}</h1>
     43            <h1 className='phone-with-offers-model-header'>{this.props.model}</h1>
    4444            </div>
    4545        </div>
     
    5858            <tbody>
    5959              {
    60                 this.state.phone_offers.map((offer) => <PhoneOfferComponent key={offer.offer_id} id={offer.id}
     60                this.state.phone_offers.map((offer,idx) => <PhoneOfferComponent key={idx} id={offer.id}
    6161                is_validated={offer.is_validated} offer_shop={offer.offer_shop} offer_name={offer.offer_name}
    6262                price={offer.price} offer_url={offer.offer_url}
  • phonelux-frontend/src/index.js

    r527b93f re5b84dc  
    44import App from './App';
    55import reportWebVitals from './reportWebVitals';
     6import Data from './components/DataManager';
    67
     8window.Data = Data;
    79const root = ReactDOM.createRoot(document.getElementById('root'));
    810root.render(
  • phonelux_scrappers/outputfile.txt

    r527b93f re5b84dc  
    1 id: 3
    2 id: 4
    3 id: 5
    4 id: 6
    5 id: 7
    6 id: 8
    7 id: 9
    8 id: 10
    9 id: 12
    10 id: 13
    11 id: 14
    12 id: 15
    13 id: 16
    14 id: 18
    15 id: 19
    16 id: 20
    17 id: 21
    18 id: 22
    19 id: 23
    20 id: 24
    21 id: 25
    22 id: 26
    23 id: 27
    24 id: 28
    25 id: 30
    26 id: 32
    27 id: 34
    28 id: 35
    29 id: 37
    30 id: 38
    31 id: 40
    32 id: 41
    33 id: 42
    34 id: 43
    35 id: 44
    36 id: 45
    37 id: 46
    38 id: 47
    39 id: 48
    40 id: 54
    41 id: 55
    42 id: 56
    43 id: 57
    44 id: 58
    45 id: 59
    46 id: 61
    47 id: 62
    48 id: 63
    49 id: 64
    50 id: 65
    51 id: 68
    52 id: 69
    53 id: 70
    54 id: 71
    55 id: 73
    56 id: 74
    57 id: 75
    58 id: 76
    59 id: 77
    60 id: 79
    61 id: 80
    62 id: 81
    63 id: 82
    64 id: 83
    65 id: 85
    66 id: 86
    67 id: 87
    68 id: 88
    69 id: 89
    70 id: 90
    71 id: 91
    72 id: 92
    73 id: 98
    74 id: 102
    75 id: 104
    76 id: 106
    77 id: 119
    78 id: 125
    79 id: 126
    80 id: 129
    81 id: 140
    82 id: 153
    83 id: 156
    84 id: 159
    85 id: 161
    86 id: 173
    87 id: 184
    88 id: 194
    89 id: 195
    90 id: 196
    91 id: 199
    92 id: 200
    93 id: 201
    94 id: 202
    95 id: 203
    96 id: 204
    97 id: 205
    98 id: 206
    99 id: 207
    100 id: 208
    101 id: 209
    102 id: 210
    103 id: 211
    104 id: 214
    105 id: 215
    106 id: 216
    107 id: 217
    108 id: 219
    109 id: 220
    110 id: 221
    111 id: 222
    112 id: 223
    113 id: 224
    114 id: 225
    115 id: 226
    116 id: 227
    117 id: 228
    118 id: 229
    119 id: 230
    120 id: 231
    121 id: 232
    122 id: 233
    123 id: 234
    124 id: 235
    125 id: 237
    126 id: 238
    127 id: 239
    128 id: 240
    129 id: 241
    130 id: 243
    131 id: 244
    132 id: 245
    133 id: 246
    134 id: 247
    135 id: 249
    136 id: 250
    137 id: 251
    138 id: 252
    139 id: 253
    140 id: 255
    141 id: 256
    142 id: 257
    143 id: 260
    144 id: 261
    145 id: 262
    146 id: 263
    147 id: 264
    148 id: 265
    149 id: 266
    150 id: 267
    151 id: 270
    152 id: 271
    153 id: 272
    154 id: 273
    155 id: 274
    156 id: 275
    157 id: 276
    158 id: 277
    159 id: 278
    160 id: 279
    161 id: 280
    162 id: 282
    163 id: 285
    164 id: 286
    165 id: 287
    166 id: 288
    167 id: 289
    168 id: 290
    169 id: 291
    170 id: 292
    171 id: 293
    172 id: 294
    173 id: 295
    174 id: 296
    175 id: 297
    176 id: 298
    177 id: 299
    178 id: 300
    179 id: 301
    180 id: 304
    181 id: 305
    182 id: 306
    183 id: 307
    184 id: 308
    185 id: 309
    186 id: 310
    187 id: 313
    188 id: 314
    189 id: 315
    190 id: 316
    191 id: 318
    192 id: 319
    193 id: 321
    194 id: 323
    195 id: 325
    196 id: 326
    197 id: 327
    198 id: 328
    199 id: 329
    200 id: 330
    201 id: 331
    202 id: 332
    203 id: 333
    204 id: 334
    205 id: 336
    206 id: 337
    207 id: 338
    208 id: 340
    209 id: 341
    210 id: 342
    211 id: 343
    212 id: 344
    213 id: 345
    214 id: 346
    215 id: 348
    216 id: 349
    217 id: 350
    218 id: 351
    219 id: 352
    220 id: 353
    221 id: 354
    222 id: 355
    223 id: 356
    224 id: 357
    225 id: 358
    226 id: 359
    227 id: 360
    228 id: 361
    229 id: 362
    230 id: 363
    231 id: 364
    232 id: 365
    233 id: 366
    234 id: 367
    235 id: 368
    236 id: 369
    237 id: 370
    238 id: 371
    239 id: 372
    240 id: 373
    241 id: 374
    242 id: 375
    243 id: 376
    244 id: 377
    245 id: 378
    246 id: 379
    247 id: 380
    248 id: 381
    249 id: 382
    250 id: 383
    251 id: 384
    252 id: 385
    253 id: 386
    254 id: 387
    255 id: 388
    256 id: 389
    257 id: 390
    258 id: 391
    259 id: 392
    260 id: 393
    261 id: 394
    262 id: 395
    263 id: 396
    264 id: 397
    265 id: 398
    266 id: 399
    267 id: 400
    268 id: 401
    269 id: 402
    270 id: 403
    271 id: 404
    272 id: 405
    273 id: 406
    274 id: 407
    275 id: 408
    276 id: 409
    277 id: 410
    278 id: 411
    279 id: 412
    280 id: 413
    281 id: 414
    282 id: 415
    283 id: 416
    284 id: 417
    285 id: 418
    286 id: 419
    287 id: 420
    288 id: 421
    289 id: 422
    290 id: 423
    291 id: 424
    292 id: 425
    293 id: 426
    294 id: 427
    295 id: 428
    296 id: 429
    297 id: 430
    298 id: 431
    299 id: 432
    300 id: 433
    301 id: 434
    302 id: 435
    303 id: 436
    304 id: 437
    305 id: 438
    306 id: 439
    307 id: 440
    308 id: 441
    309 id: 442
    310 id: 443
    311 id: 444
    312 id: 445
    313 id: 446
    314 id: 447
    315 id: 448
    316 id: 449
    317 id: 450
    318 id: 451
    319 id: 452
     1phone id: 3
     2https://admin.ledikom.mk/uploads/items/1500/1649755126honor-50-1-250x300-pad.jpg?v=1
     3phone id: 4
     4https://setec.mk/image/cache/catalog/Product/74172_0-228x228.jpg
     5phone id: 5
     6https://admin.ledikom.mk/uploads/items/412/1641670848apple-iphone-13-1-250x300-pad.jpg?v=1
     7phone id: 6
     8https://admin.ledikom.mk/uploads/items/413/1641671221apple-iphone-13-pro-1-250x300-pad.jpg?v=1
     9phone id: 7
     10https://admin.ledikom.mk/uploads/items/411/1641668143apple-iphone-13-pro-max-1-250x300-pad.jpg?v=1
     11phone id: 8
     12https://admin.ledikom.mk/uploads/items/342/1641664916apple-iphone-12-1-250x300-pad.jpg?v=1
     13phone id: 9
     14https://admin.ledikom.mk/uploads/items/192/1641654006apple-iphone-11-1-250x300-pad.jpg?v=1
     15phone id: 10
     16https://mobitech.mk/wp-content/uploads/2022/01/apple-iphone-xr-new.jpg
     17phone id: 12
     18https://admin.ledikom.mk/uploads/items/372/1642792043samsung-galaxy-a32-1-250x300-pad.jpg?v=1
     19phone id: 13
     20https://admin.ledikom.mk/uploads/items/1501/1649755462honor-50-lite-1-250x300-pad.jpg?v=1
     21phone id: 14
     22https://mobitech.mk/wp-content/uploads/2021/12/apple-iphone-7r4-1.jpg
     23phone id: 15
     24https://mobitech.mk/wp-content/uploads/2021/12/apple-iphone-x-1.jpg
     25phone id: 16
     26https://mobitech.mk/wp-content/uploads/2021/12/apple-iphone-xs-new.jpg
     27phone id: 18
     28https://admin.ledikom.mk/uploads/items/83/1653051611nokia-105-2017-duos-1-250x300-pad.jpg?v=1
     29phone id: 19
     30https://admin.ledikom.mk/uploads/items/1478/1647544681samsung-galaxy-s22-5g-1-250x300-pad.jpg?v=1
     31phone id: 20
     32https://admin.ledikom.mk/uploads/items/392/1642792789samsung-galaxy-a22-5g-1-250x300-pad.jpg?v=1
     33phone id: 21
     34https://admin.ledikom.mk/uploads/items/1563/1651071492samsung-galaxy-a33-5g-1-250x300-pad.jpg?v=1
     35phone id: 22
     36https://www.neptun.mk/2022/04/07/23_e3fe9e55-914d-4ac3-89af-8aea5e659341.JPG?width=192
     37phone id: 23
     38https://admin.ledikom.mk/uploads/items/1497/1649754127samsung-galaxy-a13-1-250x300-pad.jpg?v=1
     39phone id: 24
     40https://mobelix.com.mk/storage/app/uploads/public/5eb/2bf/b67/thumb_2064_550_800_0_0_crop.jpg
     41phone id: 25
     42https://admin.ledikom.mk/uploads/items/3036/1655459489xiaomi-redmi-10-1-250x300-pad.jpg?v=1
     43phone id: 26
     44https://admin.ledikom.mk/uploads/items/1499/1649754737samsung-galaxy-a53-5g-1-250x300-pad.jpg?v=1
     45phone id: 27
     46https://www.neptun.mk/2021/10/09/15571370a_e41b8951-dd67-4951-a899-104b37ff4f9d.jpg?width=192
     47phone id: 28
     48https://admin.ledikom.mk/uploads/items/344/1642708501samsung-galaxy-s21-5g-1-250x300-pad.jpg?v=1
     49phone id: 30
     50https://mobigo.mk/wp-content/uploads/2021/12/huawei-nova-9-5g.jpg
     51phone id: 32
     52https://admin.ledikom.mk/uploads/items/406/1642794048samsung-a03s-1-250x300-pad.jpg?v=1
     53phone id: 34
     54https://mobigo.mk/wp-content/uploads/2021/07/xiaomi-redmi-note10-pro.jpg
     55phone id: 35
     56https://mobigo.mk/wp-content/uploads/2021/01/xiaomi-mi-10t-5g-pro.jpg
     57phone id: 37
     58https://www.a1.mk/documents/20126/2021612/POCO_X3_Pro.png
     59phone id: 38
     60https://admin.ledikom.mk/uploads/items/340/1642705059samsung-galaxy-a02s-1-250x300-pad.jpg?v=1
     61phone id: 40
     62https://admin.ledikom.mk/uploads/items/390/mi10tlite5g-978742-250x300-pad.jpg?v=1
     63phone id: 41
     64https://mobigo.mk/wp-content/uploads/2020/07/samsung-galaxy-a10s.jpg
     65phone id: 42
     66https://setec.mk/image/cache/catalog/Product/73862_0-228x228.jpg
     67phone id: 43
     68https://admin.ledikom.mk/uploads/items/351/1653051682nokia-3310-2017-1-250x300-pad.jpg?v=1
     69phone id: 44
     70https://mobigo.mk/wp-content/uploads/2019/07/huawei-p30-pro.jpg
     71phone id: 45
     72https://mobigo.mk/wp-content/uploads/2019/02/huawei-mate-20-pro-1.jpg
     73phone id: 46
     74https://admin.ledikom.mk/uploads/items/364/1642789715samsung-galaxy-a72-1-250x300-pad.jpg?v=1
     75phone id: 47
     76https://mobelix.com.mk/storage/app/uploads/public/605/319/381/thumb_2496_550_800_0_0_crop.jpg
     77phone id: 48
     78https://mobelix.com.mk/storage/app/uploads/public/605/31a/2d7/thumb_2499_550_800_0_0_crop.jpg
     79phone id: 54
     80https://mobelix.com.mk/storage/app/uploads/public/622/360/d34/thumb_3692_550_800_0_0_crop.png
     81phone id: 55
     82https://mobelix.com.mk/storage/app/uploads/public/5f8/037/ce9/thumb_2308_550_800_0_0_crop.png
     83phone id: 56
     84https://admin.ledikom.mk/uploads/items/395/mi10lite5g-836560-250x300-pad.jpg?v=1
     85phone id: 57
     86https://mobelix.com.mk/storage/app/uploads/public/5f2/bc0/63d/thumb_2194_550_800_0_0_crop.jpg
     87phone id: 58
     88https://mobelix.com.mk/storage/app/uploads/public/5dd/3c7/29c/thumb_1944_550_800_0_0_crop.jpg
     89phone id: 59
     90https://mobelix.com.mk/storage/app/uploads/public/623/876/e71/thumb_3713_550_800_0_0_crop.png
     91phone id: 61
     92https://mobelix.com.mk/storage/app/uploads/public/5de/4e7/f26/thumb_1978_550_800_0_0_crop.jpg
     93phone id: 62
     94https://mobelix.com.mk/storage/app/uploads/public/5e5/3c4/5e6/thumb_2034_550_800_0_0_crop.png
     95phone id: 63
     96https://mobelix.com.mk/storage/app/uploads/public/5de/4e7/49d/thumb_1976_550_800_0_0_crop.jpg
     97phone id: 64
     98https://mobelix.com.mk/storage/app/uploads/public/5c9/0dc/413/thumb_1773_550_800_0_0_crop.jpg
     99phone id: 65
     100https://mobelix.com.mk/storage/app/uploads/public/5cd/053/0ab/thumb_1811_550_800_0_0_crop.jpg
     101phone id: 68
     102https://mobelix.com.mk/storage/app/uploads/public/5bc/877/975/thumb_686_550_800_0_0_crop.jpg
     103phone id: 69
     104https://admin.ledikom.mk/uploads/items/436/1653051842nokia-6310-2021-1-250x300-pad.jpg?v=1
     105phone id: 70
     106https://admin.ledikom.mk/uploads/items/315/1644588871xiaomi-poco-x3-nfc-1-250x300-pad.jpg?v=1
     107phone id: 71
     108https://mobelix.com.mk/storage/app/uploads/public/5fd/343/c47/thumb_2416_550_800_0_0_crop.jpg
     109phone id: 73
     110https://www.neptun.mk/2022/01/13/1150569a91-b4ec-4484-a977-da071903f48b_37266053-7f21-42d2-bde9-ebb29a1220c6.jpg?width=192
     111phone id: 74
     112https://mobelix.com.mk/storage/app/uploads/public/5ff/f06/b11/thumb_2451_550_800_0_0_crop.png
     113phone id: 75
     114https://admin.ledikom.mk/uploads/items/345/1642711031samsung-galaxy-s21-5g-1-250x300-pad.jpg?v=1
     115phone id: 76
     116https://admin.ledikom.mk/uploads/items/362/1653383457asus-rog-phone-5-1-250x300-pad.jpg?v=1
     117phone id: 77
     118https://admin.ledikom.mk/uploads/items/343/1642708100samsung-galaxy-s21-ultra-5g-1-250x300-pad.jpg?v=1
     119phone id: 79
     120https://mobelix.com.mk/storage/app/uploads/public/606/eff/40a/thumb_2684_550_800_0_0_crop.png
     121phone id: 80
     122https://mobelix.com.mk/storage/app/uploads/public/609/2af/b4b/thumb_3135_550_800_0_0_crop.png
     123phone id: 81
     124https://mobelix.com.mk/storage/app/uploads/public/609/2af/c8d/thumb_3137_550_800_0_0_crop.png
     125phone id: 82
     126https://admin.ledikom.mk/uploads/items/359/1642789645samsung-galaxy-a52-1-250x300-pad.jpg?v=1
     127phone id: 83
     128https://admin.ledikom.mk/uploads/items/379/1653381685xiaomi-redmi-note-10-pro-max-1-250x300-pad.jpg?v=1
     129phone id: 85
     130https://setec.mk/image/cache/catalog/Product/60645_0-228x228.jpg
     131phone id: 86
     132https://admin.ledikom.mk/uploads/items/354/1642788228samsung-galaxy-m02s-1-250x300-pad.jpg?v=1
     133phone id: 87
     134https://mobelix.com.mk/storage/app/uploads/public/60d/ed0/0f3/thumb_3191_550_800_0_0_crop.png
     135phone id: 88
     136https://mobelix.com.mk/storage/app/uploads/public/60d/eef/d6a/thumb_3193_550_800_0_0_crop.png
     137phone id: 89
     138https://admin.ledikom.mk/uploads/items/398/1651156416xiaomi-mi-11-ultra-1-250x300-pad.jpg?v=1
     139phone id: 90
     140https://www.neptun.mk/2021/05/18/22222_28c3ee3c-d029-4ccd-a5a6-64aa1ab03fb2.jpg?width=192
     141phone id: 91
     142https://mobelix.com.mk/storage/app/uploads/public/5ee/0f2/e81/thumb_2131_550_800_0_0_crop.png
     143phone id: 98
     144https://www.a1.mk/documents/20126/2346005/Honor-X7-Front.png
     145phone id: 102
     146https://d3mrte3vpewnxc.cloudfront.net/img/products/full/22032022111538download(1).jpg
     147phone id: 106
     148https://www.neptun.mk/2022/02/22/xiaomiredminote11azulestelar01l_367116a3-c5cb-46a0-af2b-b97401a4155f.jpg?width=192
     149phone id: 119
     150https://mobitech.mk/wp-content/uploads/2021/12/apple-iphone-xs-max-new1.jpg
     151phone id: 125
     152https://admin.ledikom.mk/uploads/items/1498/1649754304samsung-galaxy-a23-1-250x300-pad.jpg?v=1
     153phone id: 126
     154https://admin.ledikom.mk/uploads/items/352/1642711564samsung-galaxy-a02-1-250x300-pad.jpg?v=1
     155phone id: 129
     156https://i2.wp.com/mobilezone.mk/wp-content/uploads/2021/08/12-pro-blue.png?resize=512%2C600&ssl=1
     157phone id: 140
     158https://www.a1.mk/documents/20126/2336887/Nokia+C21_Front_Blue.png
     159phone id: 153
     160https://admin.ledikom.mk/uploads/items/429/1641673183apple-iphone-13-mini-1-250x300-pad.jpg?v=1
     161phone id: 156
     162https://admin.ledikom.mk/uploads/items/1477/1647544699samsung-galaxy-s21-fe-5g-1-250x300-pad.jpg?v=1
     163phone id: 173
     164https://www.a1.mk/documents/20126/2315371/Honor-8X-2022-Front-Blue.png
     165phone id: 184
     166https://akcija.com.mk/app/img/products/gallery/2021/07/WIKVIEWBLAST_Wiko_View_4G_Black_32_+_3.webp
     167phone id: 194
     168https://admin.ledikom.mk/uploads/items/1502/1649758047google-pixel-6-1-250x300-pad.jpg?v=1
     169phone id: 195
     170https://mobelix.com.mk/storage/app/uploads/public/612/e29/ab9/thumb_3301_550_800_0_0_crop.png
     171phone id: 196
     172https://admin.ledikom.mk/uploads/items/408/galaxyzfold35g-874417-250x300-pad.jpg?v=1
     173phone id: 199
     174https://www.neptun.mk/2021/11/10/xiaomi11tproblancomedianoche04adl_dcdba358-c8be-4ed6-ada5-0dac8dd6a314.jpg?width=192
     175phone id: 200
     176https://mobelix.com.mk/storage/app/uploads/public/618/11f/35e/thumb_3446_550_800_0_0_crop.png
     177phone id: 201
     178https://www.a1.mk/documents/20126/1900464/A1-Alpha-21.png
     179phone id: 202
     180https://www.a1.mk/documents/20126/2152486/Motorola-MOTO-G60-Front.png
     181phone id: 203
     182https://admin.ledikom.mk/uploads/items/1503/1649766652google-pixel-6-pro-1-250x300-pad.jpg?v=1
     183phone id: 204
     184https://mobelix.com.mk/storage/app/uploads/public/61a/0c6/65d/thumb_3478_550_800_0_0_crop.png
     185phone id: 205
     186https://www.neptun.mk/2021/09/02/720_c7b32e05-41eb-47c4-b2e6-64b19d789d54.jpg?width=192
     187phone id: 206
     188https://admin.ledikom.mk/uploads/items/1485/1649682740xiaomi-redmi-note-11t-5g-1-250x300-pad.jpg?v=1
     189phone id: 207
     190https://mobelix.com.mk/storage/app/uploads/public/61f/26c/5d9/thumb_3564_550_800_0_0_crop.png
     191phone id: 208
     192https://mobelix.com.mk/storage/app/uploads/public/5eb/2cd/447/thumb_2075_550_800_0_0_crop.png
     193phone id: 209
     194https://www.a1.mk/documents/20126/1862420/Nokia-G10.png
     195phone id: 210
     196https://admin.ledikom.mk/uploads/items/299/1642704279samsung-galaxy-note20-1-250x300-pad.jpg?v=1
     197phone id: 211
     198https://admin.ledikom.mk/uploads/items/341/1642707896samsung-galaxy-note20-ultra-5g-1-250x300-pad.jpg?v=1
     199phone id: 214
     200https://mobelix.com.mk/storage/app/uploads/public/621/a31/b32/thumb_3662_550_800_0_0_crop.png
     201phone id: 215
     202https://www.neptun.mk/2022/07/21/54000_0a9e6bb1-320e-4b2e-a10a-0bfd4093b9fc.jpg?width=192
     203phone id: 216
     204https://admin.ledikom.mk/uploads/items/1492/1653141418xiaomi-redmi-note-11-pro-1-250x300-pad.jpg?v=1
     205phone id: 217
     206https://www.a1.mk/documents/20126/2336936/TCL-306_Atlantic-Blue_Front.png
     207phone id: 219
     208https://admin.ledikom.mk/uploads/items/2798/1652776962xiaomi-poco-x4-pro-5g-1-250x300-pad.jpg?v=1
     209phone id: 220
     210https://admin.ledikom.mk/uploads/items/1480/1647546041samsung-galaxy-s22-ultra-5g-1-250x300-pad.jpg?v=1
     211phone id: 221
     212https://mobelix.com.mk/storage/app/uploads/public/5ec/92e/6d3/thumb_2119_550_800_0_0_crop.png
     213phone id: 222
     214https://mobelix.com.mk/storage/app/uploads/public/624/5ca/928/thumb_3764_550_800_0_0_crop.png
     215phone id: 223
     216https://admin.ledikom.mk/uploads/items/1566/1651355303oneplus-10-pro-1-250x300-pad.jpg?v=1
     217phone id: 224
     218https://admin.ledikom.mk/uploads/items/1564/1651071926samsung-galaxy-a73-5g-1-250x300-pad.jpg?v=1
     219phone id: 225
     220https://mobelix.com.mk/storage/app/uploads/public/628/ba6/995/thumb_3840_550_800_0_0_crop.png
     221phone id: 226
     222https://mobelix.com.mk/storage/app/uploads/public/629/ddd/5ac/thumb_3862_550_800_0_0_crop.png
     223phone id: 227
     224https://admin.ledikom.mk/uploads/items/3026/1655278093samsung-galaxy-m33-5g-1-250x300-pad.jpg?v=1
     225phone id: 228
     226https://mobelix.com.mk/storage/app/uploads/public/62c/d2d/bb7/thumb_3883_550_800_0_0_crop.png
     227phone id: 229
     228https://mobelix.com.mk/storage/app/uploads/public/62d/574/ea8/thumb_3889_550_800_0_0_crop.png
     229phone id: 233
     230https://www.neptun.mk/2019/12/31/06a36488-e86c-4599-8c59-7c7a4c588c80_8dbb8b4f-de84-4ae3-8392-5468909ee0e0.png?width=192
     231phone id: 234
     232https://akcija.com.mk/app/img/products/gallery/2022/03/Alcatel_1066G_Black.webp
     233phone id: 235
     234https://www.neptun.mk/2018/08/14/Tiger_L5_Black_Special_v11.23_1c0a6cd6-8705-42ad-a6ba-db7c7b939b7c.jpg?width=192
     235phone id: 237
     236https://admin.ledikom.mk/uploads/items/1488/1649683643xiaomi-redmi-9c-nfc-1-250x300-pad.jpg?v=1
     237phone id: 238
     238https://admin.ledikom.mk/uploads/items/432/redmi9a-48378-250x300-pad.jpg?v=1
     239phone id: 239
     240https://www.neptun.mk/2022/03/21/realmec1120212gb32gb04azuladll_253ab3fd-0f10-4c00-97b3-062c3db73710.jpg?width=192
     241phone id: 240
     242https://akcija.com.mk/app/img/products/gallery/2022/03/Blackview_A80_Black_49835.jpg
     243phone id: 241
     244https://akcija.com.mk/app/img/products/gallery/2021/07/WIKVIEMAXWP2ANTST_Wiko_View_Max_Anthracite.webp
     245phone id: 243
     246https://akcija.com.mk/app/img/products/gallery/2021/07/WIKLENNYWK400ANTST_Wiko_Lenny5_WK400_Anthracit.webp
     247phone id: 244
     248https://www.neptun.mk/2021/06/04/xiaomi-black-shark-4-600x600-600x600_78632f44-8eab-4436-8d92-4c30017fa7c5.jpg?width=192
     249phone id: 245
     250https://www.neptun.mk/2021/10/21/gsmarena004_415d078d-4c7e-43c8-b76c-857922a385b2.jpg?width=192
     251phone id: 246
     252https://www.a1.mk/documents/20126/2315411/Honor-Magic-4-lite-5G-Black-Front.png
     253phone id: 247
     254https://www.a1.mk/documents/20126/2087663/POCO-M4_Pro-5G-black.png
     255phone id: 249
     256https://admin.ledikom.mk/uploads/items/2800/1652862618xiaomi-poco-f4-gt-1-250x300-pad.jpg?v=1
     257phone id: 250
     258https://www.neptun.mk/2022/07/25/Capture1_39933e15-2e42-4fdd-ad50-b26daefc653d.JPG?width=192
     259phone id: 251
     260https://www.neptun.mk/2020/12/29/2.jpeg?width=192
     261phone id: 252
     262https://www.a1.mk/documents/20126/1482115/LG-K52.png
     263phone id: 253
     264https://www.a1.mk/documents/20126/2097647/TCL-20-plus-Milky-Way-Grey.png
     265phone id: 255
     266https://admin.ledikom.mk/uploads/items/400/1653051754nokia-6300-4g-1-250x300-pad.jpg?v=1
     267phone id: 256
     268https://setec.mk/image/cache/catalog/Product/73864_0-228x228.jpg
     269phone id: 257
     270https://www.neptun.mk/2022/07/21/22.JPG?width=192
     271phone id: 260
     272https://www.neptun.mk/2021/11/24/white_542da90b-c215-4e75-b6a0-416d1cbb745c.JPG?width=192
     273phone id: 261
     274https://www.a1.mk/documents/20126/622141/CAT-S62-front.png
     275phone id: 262
     276https://www.a1.mk/documents/20126/622141/CAT-B26.png
     277phone id: 263
     278https://www.a1.mk/documents/20126/2014065/Alcatel-3082-4G.png
     279phone id: 264
     280https://www.a1.mk/documents/20126/1384010/Doro_1370.png
     281phone id: 265
     282https://www.a1.mk/documents/20126/1741700/Alcatel-3080.png
     283phone id: 266
     284https://www.a1.mk/documents/20126/1384010/Doro_2404.png
     285phone id: 267
     286https://www.a1.mk/documents/20126/2065640/Motorola-MOTO-E20.png
     287phone id: 270
     288https://www.neptun.mk/2020/02/05/resizer.php_49f522a0-9f44-4a37-8212-e0e1b2995fa8.jpg?width=192
     289phone id: 271
     290https://setec.mk/image/cache/catalog/Product/48063_0-228x228.jpg
     291phone id: 272
     292https://setec.mk/image/cache/catalog/Product/50397_0-228x228.jpg
     293phone id: 273
     294https://setec.mk/image/cache/catalog/Product/52379_0-228x228.jpg
     295phone id: 274
     296https://setec.mk/image/cache/catalog/Product/53519_0-228x228.jpg
     297phone id: 275
     298https://d3mrte3vpewnxc.cloudfront.net/img/products/full/27062022151936download.jpg
     299phone id: 276
     300https://d3mrte3vpewnxc.cloudfront.net/img/products/full/a60problack_1.jpg
     301phone id: 277
     302https://setec.mk/image/cache/catalog/Product/49840_0-228x228.jpg
     303phone id: 278
     304https://setec.mk/image/cache/catalog/Product/48542_0-228x228.jpg
     305phone id: 279
     306https://setec.mk/image/cache/catalog/Product/52744_0-228x228.jpg
     307phone id: 280
     308https://setec.mk/image/cache/catalog/Product/50394_0-228x228.jpg
     309phone id: 282
     310https://www.neptun.mk/2021/01/27/111_3237af8a-8b15-4e3e-aff8-38a86a1bcb40.jpg?width=192
     311phone id: 285
     312https://www.neptun.mk/2022/03/21/C21Y-Black_3fe958bc-9eeb-4bc6-8cc5-5caa930a4369.jpg?width=192
     313phone id: 286
     314https://setec.mk/image/cache/catalog/Product/49553_0-228x228.jpg
     315phone id: 287
     316https://setec.mk/image/cache/catalog/Product/74712_0-228x228.jpg
     317phone id: 288
     318https://setec.mk/image/cache/catalog/Product/48099_0-228x228.jpg
     319phone id: 289
     320https://d3mrte3vpewnxc.cloudfront.net/img/products/full/g10-auroragrey-front.jpg
     321phone id: 290
     322https://setec.mk/image/cache/catalog/Product/52740_0-228x228.jpg
     323phone id: 291
     324https://setec.mk/image/cache/catalog/Product/74998_0-228x228.jpg
     325phone id: 292
     326https://setec.mk/image/cache/catalog/Product/52389_0-228x228.jpg
     327phone id: 293
     328https://www.neptun.mk/2022/06/23/156755-1200-1200.png?width=192
     329phone id: 294
     330https://setec.mk/image/cache/catalog/Product/75793_0-228x228.jpg
     331phone id: 295
     332https://www.neptun.mk/2022/06/23/156729-1200-1200.png?width=192
     333phone id: 296
     334https://setec.mk/image/cache/catalog/Product/74694_0-228x228.jpg
     335phone id: 297
     336https://www.neptun.mk/2021/10/18/746380-1000x1000_4a0ec6bb-6131-439e-a4b4-406e57caf52e.jpg?width=192
     337phone id: 298
     338https://setec.mk/image/cache/catalog/Product/74996_0-228x228.jpg
     339phone id: 299
     340https://www.neptun.mk/2022/03/21/2_50b1868c-30f0-4a9a-a8c5-180a3868aef5.JPG?width=192
     341phone id: 300
     342https://setec.mk/image//var/www/setec/image/catalog/Product/75706_0.jpg
     343phone id: 301
     344https://setec.mk/image/cache/catalog/Product/74997_0-228x228.jpg
     345phone id: 304
     346https://setec.mk/image/cache/catalog/Product/75805_0-228x228.jpg
     347phone id: 305
     348https://www.neptun.mk/2022/03/22/33.JPG?width=192
     349phone id: 306
     350https://setec.mk/image/cache/catalog/Product/75703_0-228x228.jpg
     351phone id: 307
     352https://setec.mk/image/cache/catalog/Product/74704_0-228x228.jpg
     353phone id: 308
     354https://admin.ledikom.mk/uploads/items/368/1644923487xiaomi-mi-11-lite-1-250x300-pad.jpg?v=1
     355phone id: 309
     356https://www.neptun.mk/2022/06/23/156684-1600-1600.png?width=192
     357phone id: 310
     358https://admin.ledikom.mk/uploads/items/3042/1655899106oneplus-nord-ce-5g-1-250x300-pad.jpg?v=1
     359phone id: 313
     360https://www.neptun.mk/2022/03/21/11_e8705b0f-d153-4b36-b5f5-776e49163dbd.JPG?width=192
     361phone id: 314
     362https://www.neptun.mk/2022/05/13/xiaomi-11t-5g-8gb-128gb-dual-sim-blanco41319a91-e898-4122-9dad-0f3115643b9f_65cc4f17-4add-4eea-a64e-49b60f2d45b1.jpg?width=192
     363phone id: 315
     364https://setec.mk/image/cache/catalog/Product/75403_0-228x228.jpg
     365phone id: 316
     366https://admin.ledikom.mk/uploads/items/2756/1651663563xiaomi-12x-1-250x300-pad.jpg?v=1
     367phone id: 318
     368https://admin.ledikom.mk/uploads/items/1562/1651071199xiaomi-12-1-250x300-pad.jpg?v=1
     369phone id: 319
     370https://admin.ledikom.mk/uploads/items/401/1642796375samsung-galaxy-z-flip3-5g-1-250x300-pad.jpg?v=1
     371phone id: 321
     372https://d3mrte3vpewnxc.cloudfront.net/img/products/full/11022022143748download.jpg
     373phone id: 323
     374https://i2.wp.com/mobilezone.mk/wp-content/uploads/2021/08/12-pro-max-blue.png?resize=512%2C600&ssl=1
     375phone id: 325
     376https://i0.wp.com/mobilezone.mk/wp-content/uploads/2021/08/12-mini-blue.png?resize=512%2C600&ssl=1
     377phone id: 326
     378https://i2.wp.com/mobilezone.mk/wp-content/uploads/2021/08/11-pro-black.png?resize=512%2C600&ssl=1
     379phone id: 327
     380https://i0.wp.com/mobilezone.mk/wp-content/uploads/2021/08/11-pro-max-black.png?resize=512%2C600&ssl=1
     381phone id: 328
     382https://admin.ledikom.mk/uploads/items/1481/1649102984apple-iphone-se-2022-1-250x300-pad.jpg?v=1
     383phone id: 329
     384https://admin.ledikom.mk/uploads/items/1479/1647545279samsung-galaxy-s22-5g-1-250x300-pad.jpg?v=1
     385phone id: 330
     386https://admin.ledikom.mk/uploads/items/297/1642703362samsung-galaxy-a01-core-1-250x300-pad.jpg?v=1
     387phone id: 331
     388phone id: 332
     389phone id: 333
     390phone id: 334
     391phone id: 336
     392https://admin.ledikom.mk/uploads/items/319/1642704346samsung-galaxy-s20-fe-1-250x300-pad.jpg?v=1
     393phone id: 337
     394https://setec.mk/image/cache/catalog/Product/73860_0-228x228.jpg
     395phone id: 338
     396https://admin.ledikom.mk/uploads/items/1486/1649685350xiaomi-redmi-9i-1-250x300-pad.jpg?v=1
     397phone id: 340
     398https://setec.mk/image/cache/catalog/Product/74714_0-228x228.jpg
     399phone id: 341
     400https://www.neptun.mk/2021/06/14/xiaomiredminote105g00v2grisadl_a83a542a-c9d1-4475-8fc7-dae3521b9bc6.jpg?width=192
     401phone id: 342
     402https://www.neptun.mk/2022/07/19/51UhkQTNxmL.ACSL1000_37699529-bf74-498e-9d9b-ecc8e6b57976.jpg?width=192
     403phone id: 343
     404https://www.neptun.mk/2022/05/13/222_e9b3e0e4-4026-4d87-9b5f-44f05b306611.JPG?width=192
     405phone id: 344
     406https://admin.ledikom.mk/uploads/items/3044/1656151222xiaomi-12-pro-1-250x300-pad.jpg?v=1
     407phone id: 345
     408phone id: 346
     409phone id: 348
     410phone id: 349
     411phone id: 350
     412phone id: 351
     413phone id: 352
     414https://admin.ledikom.mk/uploads/items/356/1642789488samsung-galaxy-m62-1-250x300-pad.jpg?v=1
     415phone id: 353
     416phone id: 354
     417phone id: 355
     418phone id: 356
     419https://d3mrte3vpewnxc.cloudfront.net/img/products/full/14102020175047ory-unlocked-global-872783_800x.jpg
     420phone id: 357
     421https://mobelix.com.mk/storage/app/uploads/public/613/094/943/thumb_3309_550_800_0_0_crop.png
     422phone id: 358
     423https://www.neptun.mk/2019/11/19/555.jpg_99d86467-c5a7-42e7-8896-2ff76ac4874d.PNG?width=192
     424phone id: 359
     425https://www.neptun.mk/2019/11/19/555.jpg_e9a27a11-7377-40e5-ba21-2c42a6216ed8.PNG?width=192
     426phone id: 360
     427https://www.neptun.mk/2021/10/25/20200514120927alcatel3025x256mbmetallicblue_5968b52f-10cf-408c-96ee-6ebb76a83d0e.jpeg?width=192
     428phone id: 361
     429https://www.neptun.mk/2021/10/25/71qaRJFLH2L.ACSS450_58ea1f14-bd9f-49a4-91e2-2af91b5826a0.jpg?width=192
     430phone id: 362
     431https://www.neptun.mk/2021/03/15/1122_3c24c189-3b4b-4b37-9d43-1232b082244b.png?width=192
     432phone id: 363
     433https://www.neptun.mk/2021/11/21/Alcatel-1S-2021513x599-1_6c7faa25-0939-4db9-b9ec-b80be480509f.png?width=192
     434phone id: 364
     435https://akcija.com.mk/app/img/products/gallery/2022/03/Alcatel_5024D_1S_3GB-32GB_LTE_Dual-Sim_Metallic_Black.webp
     436phone id: 365
     437https://www.neptun.mk/2020/06/03/12_b9efc36f-7581-4ace-a550-007ac853a6cd.jpg?width=192
     438phone id: 366
     439https://www.a1.mk/documents/20126/2333741/Alcatel-1B_Front.png
     440phone id: 367
     441phone id: 368
     442phone id: 369
     443https://www.neptun.mk/2020/08/14/1122_7fa6daf3-975e-4abe-9edb-197b70ffb150.jpeg?width=192
     444phone id: 370
     445https://www.a1.mk/documents/20126/2142278/Alcatel-1-2021.png
     446phone id: 371
     447phone id: 372
     448phone id: 373
     449https://d3mrte3vpewnxc.cloudfront.net/img/products/full/a70problack.jpg
     450phone id: 374
     451https://d3mrte3vpewnxc.cloudfront.net/img/products/full/c20purple.jpg
     452phone id: 375
     453https://d3mrte3vpewnxc.cloudfront.net/img/products/full/doogee_x96_2gb_32gb_rojo_01_l.jpg
     454phone id: 376
     455https://d3mrte3vpewnxc.cloudfront.net/img/products/full/doogee-x96-pro_arenamobiles.jpg
     456phone id: 377
     457https://d3mrte3vpewnxc.cloudfront.net/img/products/full/10112021121646x95black_1.jpg
     458phone id: 378
     459https://d3mrte3vpewnxc.cloudfront.net/img/products/full/x95black_1.jpg
     460phone id: 379
     461https://d3mrte3vpewnxc.cloudfront.net/img/products/full/thumb_548333_default_big.jpg
     462phone id: 380
     463https://d3mrte3vpewnxc.cloudfront.net/img/products/full/doogee_s58_pro_6gb_64gb_05_negro_ad_l.jpg
     464phone id: 381
     465https://www.neptun.mk/2021/07/02/4_6eaa4b73-2e6d-40b3-86c2-6c5940433cbd.JPG?width=192
     466phone id: 382
     467https://www.neptun.mk/2020/11/17/77_55ded608-c4a7-45f6-84e2-1dd826f4db2c.jpg?width=192
     468phone id: 383
     469https://www.neptun.mk/2021/07/02/1_3c75a06b-29ee-459b-8260-3c065616cf65.JPG?width=192
     470phone id: 384
     471https://www.neptun.mk/2021/11/24/Motorola-Edge-20-Pro-128GB-Midnight-Blue-0840023220623-01102021-01-p_6099d602-c2c4-428c-9560-1dd79df3338d.jpg?width=192
     472phone id: 385
     473https://www.a1.mk/documents/20126/1706113/MOTO-G50.png
     474phone id: 386
     475https://www.neptun.mk/2021/11/04/gsmarena004_6a7fd9b3-8102-4bb7-960b-0c72ca683936.jpg?width=192
     476phone id: 387
     477https://www.neptun.mk/2022/06/23/156709-1600-1600.png?width=192
     478phone id: 388
     479https://www.neptun.mk/2022/06/23/157221-1600-auto.png?width=192
     480phone id: 389
     481https://www.neptun.mk/2022/03/21/51u9-q9539L.SL1000_f04a7be5-ad53-445d-9bde-9a33c0ff3f33.jpg?width=192
     482phone id: 390
     483https://www.neptun.mk/2022/03/21/Realme-9-Pro-Plus-Green_d8eec8b7-5912-4dea-b36b-a3f66832abd4.jpg?width=192
     484phone id: 391
     485https://www.neptun.mk/2022/03/21/222_4c36f6d2-1a4b-4e91-a096-21d115330db2.JPG?width=192
     486phone id: 392
     487https://mobelix.com.mk/storage/app/uploads/public/619/e62/78d/thumb_3468_550_800_0_0_crop.png
     488phone id: 393
     489https://www.neptun.mk/2022/03/21/523920-1000x1000_e0d86853-abff-4048-bd07-e6d6ca0915db.jpg?width=192
     490phone id: 394
     491https://www.neptun.mk/2022/03/21/6935117828220-003-1400Wx1400H_90483936-5a39-47cb-b1c8-f9e868d765c8.jpg?width=192
     492phone id: 395
     493https://www.neptun.mk/2019/10/16/hq_c86c98c2-729b-49d5-aab9-216be2fea777.jpg?width=192
     494phone id: 396
     495phone id: 397
     496https://d3mrte3vpewnxc.cloudfront.net/img/products/full/nokia_106.jpg
     497phone id: 398
     498phone id: 399
     499phone id: 400
     500https://www.neptun.mk/2022/07/08/45_7f5afee7-d808-4111-9853-738a7b5993a3.JPG?width=192
     501phone id: 401
     502https://www.neptun.mk/2022/07/21/1234_97e5321e-7ec0-438b-8c9b-0c89acb73b2f.JPG?width=192
     503phone id: 402
     504https://www.neptun.mk/2022/07/08/333_bda690bd-c2a4-4ee4-82c7-3e4001fd1655.JPG?width=192
     505phone id: 403
     506https://www.neptun.mk/2021/12/16/infinix-note-11-pro-8-128-zeleni-mobilni-6-95-quot-octa-core-mediatek-helio-g96-8gb-128gb-64mpx-13mpx-2mpx-dual-simZFNfn4_2d108fb3-756e-4d1b-a41a-afeae6104ac9.jpg?width=192
     507phone id: 404
     508https://d3mrte3vpewnxc.cloudfront.net/img/products/full/max10black_1.jpg
     509phone id: 405
     510https://d3mrte3vpewnxc.cloudfront.net/img/products/full/flex50gtturnedred.jpg
     511phone id: 406
     512https://d3mrte3vpewnxc.cloudfront.net/img/products/full/09142292_name.jpg
     513phone id: 407
     514phone id: 408
     515phone id: 409
     516phone id: 410
     517phone id: 411
     518phone id: 412
     519phone id: 413
     520phone id: 414
     521phone id: 415
     522https://mobelix.com.mk/storage/app/uploads/public/5cd/051/f4c/thumb_1809_550_800_0_0_crop.jpg
     523phone id: 416
     524https://d3mrte3vpewnxc.cloudfront.net/img/products/full/510095mub.jpg
     525phone id: 417
     526phone id: 418
     527phone id: 419
     528phone id: 420
     529phone id: 421
     530https://i0.wp.com/mobilezone.mk/wp-content/uploads/2021/11/Honor-9x-lite-black.png?resize=512%2C600&ssl=1
     531phone id: 422
     532phone id: 423
     533https://www.a1.mk/documents/20126/2117931/Wiko_Y62.png
     534phone id: 424
     535https://d3mrte3vpewnxc.cloudfront.net/img/products/full/21122021152115ilt-in-camera-main-camera-03-mp.jpg
     536phone id: 425
     537https://d3mrte3vpewnxc.cloudfront.net/img/products/full/21122021141255download.jpg
     538phone id: 426
     539phone id: 427
     540phone id: 428
     541phone id: 429
     542phone id: 430
     543phone id: 431
     544phone id: 432
     545phone id: 433
     546phone id: 434
     547phone id: 435
     548phone id: 436
     549phone id: 437
     550phone id: 438
     551phone id: 439
     552phone id: 440
     553https://admin.ledikom.mk/uploads/items/3040/1655892316oppo-a94-5g-1-250x300-pad.jpg?v=1
     554phone id: 441
     555https://admin.ledikom.mk/uploads/items/3041/1655898755oppo-find-x5-lite-5g-1-250x300-pad.jpg?v=1
     556phone id: 442
     557phone id: 443
     558phone id: 444
     559https://d3mrte3vpewnxc.cloudfront.net/img/products/full/11012022150451veteranivplus_1.jpg
     560phone id: 445
     561https://d3mrte3vpewnxc.cloudfront.net/img/products/full/seniorflipxl_1.jpg
     562phone id: 446
     563https://d3mrte3vpewnxc.cloudfront.net/img/products/full/denver-bas-18300m-1.jpg
     564phone id: 447
     565https://d3mrte3vpewnxc.cloudfront.net/img/products/full/23022022105342123.jpg
     566phone id: 448
     567phone id: 449
     568phone id: 450
     569phone id: 451
     570phone id: 452
     571https://d3mrte3vpewnxc.cloudfront.net/img/products/full/09150922_name.jpg
Note: See TracChangeset for help on using the changeset viewer.