Santa Airlines
Draugiem Group konkurss VTDT 2. kursa programmētājiem 2023. gada decembrī
Hei, programmētāj! 🎅🏼
Man prieks, ka esi gatavs izaicinājumam un ka esi pievienojies
aviokompānijas Santa Airlines komandai! Mēs esam mērķtiecīgi
nodrošināt lidojumus visā pasaulē, ieskaitot arī mazās lidostas. Atceries - mūsu
galvenā vērtība ir laimīgs klients un darbinieks, tāpēc kļūdīties nedrīkstam!
Ziemassvētki galīgi vairs nav aiz kalniem, turpretim mums jāpaspēj
piesaistīt pēc iespējas vairāk klientu līdz svētkiem. Tāpēc Tev ir dotas
tieši 4 astronomiskās stundas jeb 240 minūtes, lai izpildītu visus uzdevumus, ko šeit Tev došu.
Ja Tavs risinājums būs viens no 3 labākajiem, tiksi atalgots ar Macbook Air. Taču, ja pat šoreiz nebūsi starp 3 labākajiem, atceries - Ziemassvētku
vecītis Tevi vēro un centība dzīvē atmaksāsies tik un tā!
Ko drīksti izmantot darba laikā? Interneta resursus, Chat GPT, Bing, principā visu. Tikai citu cilvēku
palīdzība nav atļauta, lai noskaidrotas tiktu tieši Tavas prasmes, nevis
kāda cita. Tu taču arī nevēlētos, lai darba devējs Tevi apved ap stūri jau
pirmajā darba dienā, vai ne? 😀
Nav ko izplūst garos tekstos, ķeramies pie uzdevuma!
Santa Airlines projektu īstenosim tā, ka
priekšgalsistēma tiek atdalīta no aizmugursistēmas, un tās savā starpā
sazinās, izmantojot API. Aizmugursistēmā izmantosim PHP un objektorientēto pieeju, turpretim priekšgalsistēmā - React un funkcionālās komponentes.
- Lokāli savā darba stacijā izveido direktoriju jeb mapi ar nosaukumu santa-airlines
- Iekš lokālā direktorija santa-airlines izveido
apakšdirektoriju, kura nosaukums ir backend - tur turpmāk glabā visas datnes un kodu, kas saistītas ar aizmugursistēmu.
- Kad veidosi priekšgalsistēmas projektu, to saglabā santa-airlines apakšdirektorijā frontend.
Ir nepieciešams izveidot PHP klases, to īpašības un metodes atbilstoši
aprakstam turpmāk. Visas īpašības un metodes ir publiskas. Katra klase
jāveido savā datnē, bet objekti - index.php datnē.
Jābūt iespējai veidot lidmašīnas: $aircraft = new Aircraft("Airbus", "A220-300", 120, 850), kur:
- 1. arguments ir ražotājs,
- 2. arguments ir modelis,
- 3. arguments ir pasažieru sēdvietu skaits,
- 4. arguments ir vidējais ātrums (km/h) lidojumā.
Jābūt iespējai veidot lidostas: $destination = new Airport("RIX", 56.924, 23.971), kur:
- 1. arguments ir lidostas IATA kods,
- 2. arguments ir ģeogrāfiskā platuma (angļu v. latitude)
decimālie grādi,
- 3. arguments ir ģeogrāfiskā garuma (angļu v. longitude)
decimālie grādi.
Jābūt iespējai veidot lidojumus: $flight = new Flight("SA503", $origin, $destination,
$departureTime, $aircraft), kur:
- 1. arguments ir lidojuma kods,
- 2. arguments ir izlidošanas lidosta,
- 3. arguments ir galamērķa lidosta,
- 4. arguments ir DateTime objekts - izlidošanas datums un
laiks pēc izlidošanas lidostas laika joslas,
- 5. arguments ir lidmašīna.
- Izsaucot metodi $flight->getDistance(), tiek
atgriezts attālums starp izlidošanas un galamērķa lidostām, izteikts
kilometros. Zeme ir apaļa.
- Izsaucot metodi $flight->getDuration(), tiek
atgriezts lidojuma ilgums minūtēs. Aprēķinā jāizmanto dotās
lidmašīnas vidējais ātrums. Papildus pie katra lidojuma jāpieskaita
30 min (tās nepieciešamas, lai sagatavotos pirms pacelšanās, pēc
nolaišanās).
- Izsaucot metodi $flight->getLandingTime(), tiek
atgriezts DateTime objekts - nosēšanās datums un laiks pēc galamērķa lidostas laika joslas.
Lai uzzinātu laika joslas pēc koordinātēm, vari izmantot API: https://api.proti.lv/timezones/?latitude=56.924&longitude=23.971
Priekšgalsistēmu jāveido ar kādu JavaScript ietvaru, bibliotēku - visdrīzāk izvēlēsies React, tomēr drīksti izmantot arī Svelte, Next.js, SvelteKit un citus! Ja gadījumā izmanto kaut ko
īpašu, tad README.md datnē dod pamācību, kas jādara,
lai priekšgalsistēmas projektu būtu iespējams palaist lokāli.
Vadoties pēc video dotā parauga, izveido pēc iespējas tādu pašu vietni!
- Datus iegūsti nevis no savas aizmugursistēmas, bet no API: https://api.proti.lv/flights/.
- Fonts visam ir Josefin Sans.
- Krāsas:
- #165b33 - skuju zaļš,
- #146b3a - sūnu zaļš,
- #f8b229 - rotaļīgi oranžs,
- #bb2528 - Ziemassvētku sarkans,
- #ffffff - sniega balts,
- #000000 - nakts melns.
- Ikonas: tabler.
- Attēli: logo.png un favicon.png.
- Kā arī CSS loading spinner, tikai tas ir jāuzlabo, lai lidotu lidmašīnas!
- Izvēlētā sēdvieta nav nekādi jāsaglabā - tā ir rezervēta tikai tik
ilgi, cik ilgi ir atvērts uznirušais rezervācijas logs.
Ir tikai viens papildus nosacījums... Kaut arī rezervācijas poga ziņo Pick a random seat, piešķirt nebūt nedrīkst nejaušu sēdvietu! Padomā, kas notiks ar
lidmašīnu lidojuma laikā, ja attēlā redzamajā piemērā tiks piešķirta
sēdvieta 2F? Tieši tā - masas nevienmērīgs
sadalījums, disbalanss... Un tālāk es pat iedomāties nevēlos! Tāpēc,
kad tiek nospiesta poga Pick a random seat, sēdvieta jāpiešķir tā, lai pasažieri tiktu izsēdināti vienmērīgi
visā lidmašīnā - dotajā piemērā drīzāk piešķirama būtu sēdvieta 10A!
- Izveido privātu GitHub projektu santa-airlines.
- Uz savu GitHub projektu uzaicini skolotāju - GitHub lietotājs jkrigerts.
- Saiti uz GitHub projektu iesniedz skolo.lv uzdevumā Draugiem Group Ziemassvētku konkurss 2023
- Ja gadījumā šoreiz GitHub izmantošana
nesanāk, tad darbu vari arī iesniegt uzreiz skolo.lv uzdevumā Draugiem Group Ziemassvētku konkurss 2023 kā ZIP arhīvu ar nosaukumu santa-airlines.zip.
- Pirms dodies prom, vēlams pajautā skolotājam Jēkabam, vai darbs
tiešām ir iesniegts!
Tas arī viss, un paldies Tev par darbu! Lai labs lidojums!