Egyptin matkat
Egyptin matkat — Maailmanlaajuinen elämysalusta Tarjoamme korkean konversion ja hakukoneoptimoidut matkailukokemukset yritystason teknologialla, joka takaa nopeuden, luotettavuuden ja lokalisoinnin.
Egyptin matkat — Maailmanlaajuinen elämysalusta
Tarjoamme korkean konversion ja hakukoneoptimoidut matkailukokemukset yritystason teknologialla, joka takaa nopeuden, luotettavuuden ja lokalisoinnin.
Tämä arkisto on tuotantovalmis Laravel-sovellus, joka pyörittää monikielistä ja monivaluuttaista matkailualustaa. Se ratkaisee käytännön haasteita suurten, heterogeenisten matkailutuotteiden (päiväretket, paketit, risteilyt) hallinnassa tarjoamalla:
- Nopean ja suodatettavan tuoteluettelon, joka on optimoitu alhaisen latenssin kyselyille ja monipuolisille hauille.
- Joustavan hinnoittelu- ja varausjärjestelmän, joka tukee päivämääräkohtaista hinnoittelua, hytti-/huonevaihtoehtoja sekä lasten hintapolitiikkoja.
- Täyden lokalisoinnin (kielen ja URL-polkujen käännökset) sekä valuutanmuunnoksen maailmanlaajuiselle yleisölle.
Keskeiset arvot ja markkinoinnin kohokohdat
-
Suorituskyky ja skaalautuvuus: Alusta on rakennettu Laravel 12:lla ja optimoitu skaalautumaan strategisella denormalisoinnilla (
product_filters-taulu), Redis-pohjaisella välimuistilla palveluissa (kutenCurrencyService) ja Vite-pohjaisella frontend-paketoinnilla. Raskas aggregointi esilasketaan kirjoitushetkellä, mikä mahdollistaa erittäin nopeat lukupolut suodattamiseen ja listaamiseen. -
UX / UI -huippuosaaminen: Tailwind CSS v4 ja Vite tarjoavat responsiivisen, komponenttipohjaisen käyttöliittymän. Progressiivinen parantaminen ja JSON-päätepisteet (esim.
/api/tours-list) tukevat nopeita asiakaspuolen kokemuksia ja automaattisia hakuehdotuksia. -
Tietoturva ja luotettavuus: Oletukset noudattavat Laravelin parhaita käytäntöjä — tiukka ympäristökohtainen konfigurointi, CSRF-suojatut lomakkeet, tiukka validointi Form Request -luokkien kautta ja Filament-hallintapaneeli turvalliseen CRUD-toimintoon. Projekti sisältää Pest-testit ja koodin muotoilun Pintin avulla kehityksen laadun varmistamiseksi.
Tekninen arkkitehtuuri ja pino
-
Backend / API
- Kehys: Laravel 12 (PHP ^8.2).
- Arkkitehtuuri: MVC + palvelukerros. Keskeisiä palveluita ovat
FilterService,PricingServicejaCurrencyService(katso app/Services). - Hallinta: Filament v5 sisällönhallintaan ja turvalliseen ylläpitoon.
- Tietokanta: Relaatiotietokanta (Postgres suositeltu). Skeema sisältää denormalisoidut
product_filters-taulut monipuolisten kyselyiden nopeuttamiseksi.
-
Frontend
- Työkalut: Vite, Tailwind CSS v4.
- Komponentit: Uudelleenkäytettävät Blade-komponentit ja JSON-päätepisteet asynkroniselle käyttöliittymälle (haku/automaattinen täydennys).
- Kolmannen osapuolen kirjastot: Swiper karuselleille.
-
DevOps ja infrastruktuuri
- Kehittäjäskriptit on määritelty composer.json-tiedostossa (
setup,dev,test). - CI: Projekti käyttää Pestiä testaukseen ja Pintiä muotoiluun; integroi CI-putkiin laadunvalvonnan varmistamiseksi.
- Välimuisti: Käyttää Laravel Cachea (Redis suositeltu) valuuttalistoille ja lasketuille suodattimille.
- Kontitus: Toimii Dockerin sisällä Laravel Sailin tai suosikkisi PHP-ajoympäristön kautta.
- Kehittäjäskriptit on määritelty composer.json-tiedostossa (
Arkkitehtuurikaavio
graph LR
A[Käyttäjän selain] -->|HTTP/HTTPS| B[Laravel Frontend (Blade + Vite)]
B --> C[Reitit/Ohjaimet]
C --> D[Palvelukerros]
D -->|kirjoittaa| E[product_filters-taulu]
D -->|lukee/kirjoittaa| F[Tuotteet / Hinnoittelu / Lähdöt]
F --> G[Postgres]
D --> H[CurrencyService Välimuisti (Redis)]
I[Filament-hallinta] --> F
Keskeiset ominaisuudet ja tekniset syväluotaukset
- Tuotesuodattimet (nopea monipuolinen haku)
- Ominaisuus: Esilasketut tuotesuodattimet tallennetaan
product_filters-tauluun, mikä mahdollistaa tehokkaan suodattamisen maiden, kohteiden, taksonomioiden, hintaluokkien ja keston mukaan. - Haaste: Ad-hoc-liitosten tai raskaiden aggregointien suorittaminen suurten tuoteluetteloiden ja käännösten yli aiheuttaa hitaat sivun lataukset ja monimutkaiset kyselyt.
- Tekninen ratkaisu:
FilterService::rebuildProductFilters()(katso app/Services/FilterService.php) kokoaa normalisoidut rivit tuotteen tallennuksen/päivityksen yhteydessä ja syöttää neproduct_filters-tauluun. Lukupolku käyttää leikkauslogiikkaa (getProductIdsByFilters) yhdistääkseen suodatusehdot tehokkaasti — tämä muuttaa monesta-moneen-haut yksinkertaisiksi indeksoiduiksi kyselyiksi ja vähentää tietokannan kuormitusta ajon aikana.
- Hinnoittelu ja varaus (päivämäärävälit, hytit, lapsipolitiikat)
- Ominaisuus: Tarkka tarjouksen laskenta hinnoittelumuunnelmien (per henkilö, per hytti), lähtöjen ja päivämääräkohtaisten ohitusten välillä.
- Haaste: Hinnoittelusäännöt vaihtelevat matkustuspäivän, hytin tai huonetyypin ja lasten alennuspolitiikkojen mukaan, ja järjestelmän on palautettava johdonmukaiset ja auditoitavat tarjoukset.
- Tekninen ratkaisu:
PricingService::calculateQuote()(katso app/Services/PricingService.php) selvittää oikean perusyksikön tarkistamalla lähtökohtaiset hinnat, hyttihinnat, päiväkohtaiset hinnoittelurivit ja lopulta turvalliset varavaihtoehdot. Lasten hinnoittelu käyttäächildPolicyRules-sääntöjä ikäkohtaisten alennusten laskemiseen; valuutanmuunnos delegoidaanCurrencyService-palvelulle totuuden lähteeksi. Toteutus käyttää järkevää järjestystä (alue->varavaihtoehto->luontiaika) valitakseen deterministisesti oikean hintarivin.
- Monikielinen reititys ja SEO
- Ominaisuus: Lokalisoitavat reitit käännetyillä URL-poluilla, kanonisilla URL-osoitteilla ja kielitietoisilla suodattimilla.
- Haaste: SEO-ystävällisen lokalisoidun sisällön tarjoaminen välttäen reitityskonflikteja varattujen URL-polkujen kanssa ja säilyttäen taaksepäin yhteensopivuuden.
- Tekninen ratkaisu: Reitit on ryhmitelty ja suojattu
SetLocale-väliohjelmistolla ja lokalisoiduilla etuliiteryhmillä routes/web.php-tiedostossa. Maakohtaiset ja sisäkkäiset tuotereitit käyttävät regex-poissulkemista varattujen URL-polkujen välttämiseksi. Käännökset tallennetaan entiteettikohtaisiin käännöstauluihin, ja käännöstietoiset suodatinrivit sisältävätlanguage_id-kentän, jotta käyttöliittymän suodattimet näyttävät vain valitulle kielelle relevantit URL-polut.