Egypt-turer
Egypt-turer — Global plattform for reiseopplevelser Leverer konverteringsoptimaliserte, SEO-første reise- og opplevelsesopplevelser med ingeniørkunst i bedriftsklasse for hastighet, pålitelighet og lokalisering.
Egypt-turer — Global plattform for reiseopplevelser
Leverer konverteringsoptimaliserte, SEO-første reise- og opplevelsesopplevelser med ingeniørkunst i bedriftsklasse for hastighet, pålitelighet og lokalisering.
Dette depotet er en produksjonsorientert Laravel-applikasjon som driver en reiseplattform med støtte for flere språk og valutaer. Den løser den virkelige utfordringen med å drifte store varelager av heterogene reiseprodukter (dagsturer, pakker, cruise) ved å tilby:
- En rask, filtrerbar produktkatalog optimalisert for spørringer med lav forsinkelse og fasetterte søk.
- En fleksibel pris- og bestillingsmotor som støtter prising basert på datoperioder, varianttyper for lugarer/rom, og prisregler for barn.
- Fullstendig lokalisering (oversettelse av språk og URL-slugs) og valutakonvertering for et globalt publikum.
Kjerne-verdiforslag og markedsføringshøydepunkter
-
Ytelse og skalerbarhet: Plattformen er bygget på Laravel 12 og optimalisert for skalering med strategisk denormalisering (tabellen
product_filters), Redis-vennlig caching i tjenester somCurrencyService, og Vite-drevet frontend-pakking. Tunge aggregeringer forhåndsberegnes ved skriving, noe som muliggjør ekstremt raske lesestier for filtrering og visning. -
UX / UI-fortreffelighet: Tailwind CSS v4 + Vite leverer et responsivt, komponentdrevet brukergrensesnitt. Progressiv forbedring og JSON-endepunkter (f.eks.
/api/tours-list) er inkludert for å støtte raske klient-side-opplevelser og autofullføring-widgets. -
Sikkerhet og pålitelighet: Standardinnstillinger følger bestepraksis i Laravel—streng miljøstyrt konfigurasjon, CSRF-beskyttede skjemaer, streng validering gjennom Form Requests, og en Filament-administrator for sikker CRUD. Prosjektet inkluderer Pest-tester og kodeformatering via Pint for god utviklerhygiene.
Teknisk arkitektur og stack
-
Backend / API
- Rammeverk: Laravel 12 (PHP ^8.2).
- Mønster: MVC + tjenestelag. Sentrale tjenester inkluderer
FilterService,PricingServiceogCurrencyService(se app/Services). - Administrator: Filament v5 for innholdsstyring og sikker administrator-UX.
- Database: Relasjonell (Postgres anbefales). Skjemaet inkluderer denormaliserte
product_filtersfor å akselerere fasetterte spørringer.
-
Frontend
- Verktøy: Vite, Tailwind CSS v4.
- Komponenter: Gjenbrukbare Blade-komponenter og JSON-første endepunkter for asynkron UI (søk/autofullføring).
- Tredjepart: Swiper for karuseller.
-
DevOps og infrastruktur
- Lokale utviklerskript er gitt i composer.json (
setup,dev,test). - CI: Prosjektet bruker Pest for tester og Pint for formatering; integreres i CI-rørledninger for å håndheve kvalitetskrav.
- Cache: Bruker Laravel Cache (Redis anbefales) for valutalister og beregnede filtre.
- Containerisering: Fungerer i Docker via Laravel Sail eller din foretrukne PHP-runtime.
- Lokale utviklerskript er gitt i composer.json (
Arkitekturdiagram
graph LR
A[Brukerleser] -->|HTTP/HTTPS| B[Laravel Frontend (Blade + Vite)]
B --> C[Ruter/Kontrollere]
C --> D[Tjenestelag]
D -->|skriver| E[product_filters tabell]
D -->|leser/skriver| F[Produkter / Priser / Avganger]
F --> G[Postgres]
D --> H[CurrencyService Cache (Redis)]
I[Filament Administrator] --> F
Sentrale funksjoner og dypdykk i det tekniske
- Produktfiltre (raskt fasettert søk)
- Funksjon: Forhåndsberegnede produktfiltre lagret i
product_filtersfor å tillate effektiv fasettert filtrering på tvers av land, destinasjoner, taksonomier, prisklasser og varighet. - Utfordringen: Å kjøre ad-hoc-koblinger eller tunge aggregeringer på tvers av store produktkataloger og oversettelser fører til langsomme sidelastinger og komplekse spørringer.
- Teknisk løsning:
FilterService::rebuildProductFilters()(se app/Services/FilterService.php) sammensetter normaliserte rader ved lagring/oppdatering av produkter og setter dem inn iproduct_filters. Lesestien bruker skjæringspunkt-logikk (getProductIdsByFilters) for å kombinere filterkriterier effektivt—dette gjør mange-til-mange-oppslag til enkle indekserte spørringer og reduserer runtime-press på databasen.
- Prising og bestilling (datoperioder, lugarer, barnepolitikk)
- Funksjon: Nøyaktig priskalkulering på tvers av prisvarianter (per person, per lugar), avganger og overstyringer av datoperioder.
- Utfordringen: Prisregler varierer etter reisedato, lugar- eller romtyper og rabattregler for barn, og systemet må returnere konsistente, reviderbare tilbud.
- Teknisk løsning:
PricingService::calculateQuote()(se app/Services/PricingService.php) løser den korrekte basiseenheten ved å sjekke avgangsspesifikke priser, lugarpriser, daterte prisrader og til slutt trygge reserveløsninger. Barneprising brukerchildPolicyRulesfor å beregne rabatter per alder; valutakonvertering delegeres tilCurrencyServicefor en enkelt sannhetskilde. Implementeringen bruker fornuftig rekkefølge (periode->reserveløsning->opprettet_tid) for å deterministisk velge korrekt prisrad.
- Ruting for flere språk og SEO
- Funksjon: Lokaliserte ruter med oversatte URL-slugs, kanoniske URL-er og språkbevisste filtre.
- Utfordringen: Å betjene SEO-vennlig lokalisert innhold samtidig som man unngår rutingskonflikter med reserverte slugs og bevarer bakoverkompatibilitet.
- Teknisk løsning: Ruter grupperes og beskyttes med
SetLocale-middleware og lokaliserte prefiksgrupper i routes/web.php. Landsførste og nestede produktruter bruker regex-ekskluderinger for å unngå kollisjoner med reserverte slugs. Oversettelser lagres i tabeller for hver entitet, og filterrader som er klar over oversettelse inkludererlanguage_id, slik at UI-filtre kun viser relevante slugs for det valgte språket.