1. GOAL this Q
1.1. Facem listare (paginare, sortare, filtrare dupa categorie)
2. Etape de implementare
2.1. Aplicatie
2.1.1. APP setup - 10MD
2.1.1.1. - repo 2MD
2.1.1.2. - servere (dev, stage) - 2MD
2.1.1.2.1. - www(php7, memcache+APC,)
2.1.1.2.2. - mysql
2.1.1.2.3. - SOLR
2.1.1.2.4. - gearman
2.1.1.2.5. - RabbitMQ
2.1.1.3. - tool de deploy (edeploy) 3MD
2.1.1.3.1. - logstash
2.1.1.3.2. - grafana
2.1.1.4. - ce microframework folosim - analiza (silex, lumen, slim) 3MD
2.1.1.5. - API definition (Standard API Rest) - http://confluence.emag.local:8090/display/EKB/RESTful+API+Usage - 3 MD
2.1.1.5.1. swagger - analysis - 3 MD
2.1.1.5.2. contracte raspuns (input/output, timpi de raspuns) -
2.1.1.5.3. statusuri de eroare
2.1.2. versionare
2.1.3. API Autentificare
2.1.3.1. Sa stim ce aplicatie cere date
2.1.3.2. Sa returnam doar datele de care are nevoie aplicatia (profil de date aplicatie)
2.1.4. Arhitectura
2.1.4.1. - tehnologii folosite
2.1.4.2. - structura date
2.1.5. Date
2.1.5.1. Primare
2.1.5.1.1. Produs
2.1.5.1.2. Oferta
2.1.5.2. Aditionale
2.1.5.2.1. Cautari
2.1.6. Tooluri de performanta (stress testing)
2.1.7. Administrare optiuni API – Role based
2.1.7.1. o Tweakuri de boostare
2.1.7.2. o Cautari speciale
2.1.7.3. o Product tagging (tbd)
2.1.7.4. o Minimum match pe diverse sectiuni
2.1.7.5. o Trending searches
2.1.7.6. o Fallback pe no results
2.1.7.7. o Tooluri de indexare/verificare informatii / debugging
2.1.7.8. o Search tool debug
2.1.7.9. o Administrare credentiale aplicatii
2.1.7.10. o Setare profile de request per aplicatie
2.1.7.11. o Tool de cache (timp de cache per sectiune / reset continut listare per sectiune, etc.)
2.1.7.12. o Tool de rulare teste de performanta
2.2. Dependinte
2.2.1. DOC:
2.2.1.1. o Informatii produs
2.2.1.2. o Informatii filtre
2.2.1.3. o Informatii caracteristici
2.2.1.4. o Informatii brand
2.2.1.5. o Informatii categorii (nume)
2.2.2. IPRICE:
2.2.2.1. o Informatii oferta
2.2.3. SCM
2.2.3.1. o Informatii popularittate
2.2.3.2. o Informatii stoc
2.2.4. MARKETPLACE
2.2.4.1. o Informatii popularitate
2.2.4.2. o Informatii vendor
2.2.4.2.1. Api Marketplace
2.2.5. Unknown:
2.2.5.1. o Taguri produse
2.2.6. Site
2.2.6.1. Nr review-uri
2.2.6.2. Rating produs
2.2.7. PRICE CHECK
2.2.7.1. o Informatii promotii/discounturi
2.3. Estimare si cronologie
2.3.1. 1. Stabilim tehnologiile pe care le vom folosi
2.3.1.1. Framework
2.3.2. 1. Analiza un singur nod versus un nod per tara (Pros and cons, discutie cu toata lumea) - zalando
2.3.3. 2. Servere configurate pentru dev
2.3.3.1. WWW
2.3.3.2. SOLR
2.3.3.3. GEARMAN
2.3.3.4. RABBITMQ
2.3.3.5. MySQL
2.3.4. - repo 2MD
2.3.5. - API definition (Standard API Rest) - http://confluence.emag.local:8090/display/EKB/RESTful+API+Usage - 3 MD
2.3.5.1. swagger - analysis - 3 MD
2.3.6. contracte raspuns (input/output, timpi de raspuns) -
2.3.6.1. statusuri de eroare
2.3.7. 4. Stabilirea cerintelor de performanta 1MD
2.3.8. 6. Identificarea entitatilor (domain entities) 2MD
2.3.9. 5. Identificare componente bundle (module, servicii, etc.) 3MD
2.3.9.1. 11. Cache
2.3.9.2. 12. Logging
2.3.9.3. 13. Tracking BI-related
2.3.10. 3. Stabilim structra datelor 10MD
2.3.10.1. Analiza mesaje
2.3.10.1.1. offer.update
2.3.10.1.2. doc
2.3.10.2. SOLR
2.3.10.3. MySQL
2.3.11. 7. Consumeri basic al mesajelor pe rabbiti locali 20 MD
2.3.11.1. Documentare
2.3.11.1.1. Salvare date
2.3.11.2. Oferta
2.3.11.2.1. Salvare offer update
2.3.11.2.2. Preluare preturi din nodul de oferta
2.3.12. 8. Proces indexare 10MD
2.3.13. 9. Varianta simpla de listare produse dupa categorie 20MD
2.3.14. 10. Sortare / Paginare 5MD
2.3.15. - tool de deploy (edeploy) 3MD
2.3.15.1. - logstash
2.3.15.2. - grafana
2.3.16. 14. Admin basic
2.3.17. 15. Server configurate pentru productie conform nevoilor identificate in pas 3
3. Business Requirements
3.1. Observatii: vom renunta la custom filters si in schimb vom da posibilitatea interogarii dupa campuri specifice (data start, data end, stoc, etc.)
4. Mottos
4.1. Only use up to date technologies and keep them up to date
4.2. Think about all the clients of your service, not only EOS.
4.3. Strip all service client (like EOS) specific data (department, subdepartment etc.)
4.4. As few external dependencies as possible
4.5. 100% automated testing
4.6. Continuous Integration
4.7. PHPCS, PHPMD, Sonar
4.8. Allow access to internal resources only to BI
4.9. Stabilim application KPI
4.10. Keep in mind internationalization
4.11. Use code annotation to generate documentation
4.12. English only names (for methods, variables, classes, etc)
4.13. Domain driven design
4.14. Lazy loading as much as possible
4.15. Dependency injection as much as possible
4.16. Performance tests for every version; logging performance data for every version
5. Decizii
5.1. Un singur nod global sau un nod per tara?
5.2. Facem si un api de detalii produs?
5.3. Cati oameni alocam full pe proiect?
5.3.1. 3