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!

1

Sagatavošanās

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.
backend
frontend
2

Aizmugursistēma

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://tu.proti.lv/timezones/?latitude=56.924&longitude=23.971
3

Priekšgalsistēma

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://tu.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!

Lidmašīnas disbalanss
4

Iesniegšana

  • 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 2023ZIP 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!