JavaRush /Kurslar /All lectures for TK purposes /JavaRush uniwersitetiniň jemleýji projekti

JavaRush uniwersitetiniň jemleýji projekti

All lectures for TK purposes
Dereje , Sapak
Elýeterli

Bu projekt, okuw döwründe eden ähli öňki projeleriňden tapawutlanar. Onuň esasy tapawudy - bu mümkin boldugyça uly, işleýän bir projekt.

Ony noldan ýazmak hökman däl, ýöne kody üýtgetmek we hiç zat bozmazlyk, heniz ýazylmadyk funksiýalary goşmak, infrastrukturany sazlamak gerek. Işde köplenç beýle wezipeler bilen ýüzbe-ýüz bolarsyňyz.

Bu ähli programmistleriň işiniň ýarysydyr - başga biriniň kodyny okamaly we çözmeli.

Işde ähli wagtyňyzy 3 zada sarp edersiňiz:

  • Başga biriniň koduny okamaly we çözmeli - wagtyň 50%-i.
  • Özüňiziň wezipesiniň kod-çözgüdi görnüşinde nädip suratlandyrypulynyz - wagtyň 25%-i.
  • Özüňiziziň kodyňyzy bar bolan logika goşmak - wagtyň 25%-i.

Täze projekta başlanda, men şu aşakdaky yzly-yzyna amal etmäge çalyşýaryn:

  1. Projektiň haýsy meseläni çözüp biljekdigini ýa-da geljekde çözjekdigini öwrenerin.
  2. Projektiň haýsy baglanşyklary bar diýlenine serederin.
  3. BD-niň gurluşyna serederin.
  4. Entity-niň gurluşyna serederin.
  5. API we/ýa-da beýleki kontrollerine serederin.
  6. Hemme hyzmatlaryň haýsy wezipesiniň bardygyna düşünmek.

Diňe şol sanaw bilen tanyşanymyzdan soň "näme etmeli?" diýen sorag bilen seredip bileris. Gel, şu planyň kömegi bilen hereket ederis.

Esasy wezipe

Projektiň ady - JiraRush.

Projektiň GitHub sahypasy

Adyndan düşünmek mümkin, bu Jira ýa-da Trello ýaly bir zat. Projekt, haýsydyr bir işjeňligi yzarlamak üçin gerek. Bu ýönekeý bir proyektiň gapdaly bilen baglanyşykly bolup biler, ýa-da aýalyň adama berýän satyn alyş sanawydyr. Proekti özüňe klonla, we nämeleriň bardygyny görüp çykaýaly.

Jira bilen tanşaman, bu ýerde gysgaça tanyşdyryş tema boýunça wideo

Tehnologiýalar

  • Spring Boot
  • Spring JPA
  • Hibernate
  • PostgreSQL
  • Liquibase (BD-niň wersiýa dolandyryş ulgamy, esasan onuň gurluşy)
  • Spring Security
  • Spring MVC
  • Thymeleaf
  • jQuery
  • Swagger (API-ni dokumentasiýa edýär)
  • Caffeine (kësh)
  • Lombok
  • Mapstruct (entity & DTO arasyndaky özgerdiji mapperler)
  • Spring Test
  • JUnit
  • Docker [1], [2]

BD Gurluşy

Programmanyň işini nähili başlatmaly:

  1. Proekti öz kompýuteriňize klonla.
  2. BD serwerini (PostgreSQL) ýerli işledin. Muny docker arkaly etmegi maslahat berýärin.
  3. BD bilen 2 konteýner edeli. Birinjisi programmanyň başlamagy üçin (prod profil), ikinjisi bolsa build we testler üçin (test profil). degişli komandalar:

    
    docker run -p 5432:5432 --name postgres-db -e POSTGRES_USER=jira -e POSTGRES_PASSWORD=JiraRush -e POSTGRES_DB=jira -e PGDATA=/var/lib/postgresql/data/pgdata -v ./pgdata:/var/lib/postgresql/data -d postgres
    
    docker run -p 5433:5432 --name postgres-db-test -e POSTGRES_USER=jira -e POSTGRES_PASSWORD=JiraRush -e POSTGRES_DB=jira-test -e PGDATA=/var/lib/postgresql/data/pgdata -v ./pgdata-test:/var/lib/postgresql/data -d postgres
    
  4. Programmanyň build edilmegi: mvn clean install
  5. Spring Boot programmany (JiraRushApplication) prod profili bilen başlat

Programmanyň build edilmegi wagtynda test BD-si doldurylar. Programmanyň başlamagy wagtynda işlemek üçin BD doldurylar. Takyklaşdyrýarys - gurluşy we sözlükler nakat ediljekdir. Programma nädip işleýändigini görmek üçin resources/data4dev -den data.sql skriptini ýerine ýetirmeli.

Indi BD-niň gurluşyny görüp bolýar:

activity – ulanyjylaryň beýleki entity-ler bilen baglanyşykly hereketlerini saklaýan tabel. Meselem, "ulanyjy teswir ýazdy", "ulanyjy wezipesiniň statusyny üýtgetdi"...

attachment – geýilen faýllary saklamak üçin tabel.

contact – "ulanyjy - kontakt görnüşi - kontakt bahasy" sözlügi.

mail_case – hat (email) ibermek başartmadyk ýagdaýynda maglumatlar saklanýan tabela.

profile – ulanyjynyň profili. Saýlamalar mail_notifications meýdanında bit flaglar görnüşinde saklanýar.

project – Projeketler. Wezipesiniň iň uly logiki birligi. Meselem, kompaniýanyň mikroservisleri bar bolsa, her mikroservisi bir topar alyp barýar, onda şeýle mikroservis üçin proje dörediler.

reference – entity-leriň dürli görnüşlerine laýyk gelýän tabela. ref_typeEnumcom.javarush.jira.ref.RefType laýyk gelýär. aux sütüni – bit flaglary hasaplamak üçin bahalary gadalýar.

task – wezipeler. JiraRush logiki strukturaly wezipeleriň iň esasysy.

task_tag – "wezipe– tag" baglanyşyklarynyň sözlügi. Bir wezipede nolla ýa-da has taglar bolup biler.

user_belong – "wezipe", "sprint", "proeke" görnüşli entity-ler bilen ulanyjy baglanyşygy.

user_role – "ulanyjy - rol" baglanyşyklarynyň sözlügi. Bir ulanyjyda birnäçe rol bolup biler.

users hasaba alnan ulanyjylaryň sanawy. endpoint we startpoint sütünleri bu ulanyjynyň aktiw mi, ýa-da öň aktiw bolup, indi dälmi diýleni aýdar. password meýdançasynyň başynda Spring Security tarapyndan (ýadyňdamy?) şifrlenen usul saklanýar.

Entity Gurluşy

Bu bölümi özüniňiziň açylyş işleriňize tabşyrýaryn

API-leri we/ýa-da beýleki kontrolleri gözden geçirýärin

Proekte Swagger birikdirildi, ol API-ni dokumentasiýa etmek üçin jogapkärdir. Gözden geçirmek üçin – işledilen programmanyň wagtynda şu salgy http://localhost:8080/swagger-ui/index.html.

Bu ýerde haýsy kontrollerleriň bardygyny, bu kontrollerleriň haýsy usullarynyň bardygyny, girizilmeli maglumatlaryň görnüşlerini, usullaryň görnüşlerini we başgalary görüp bilersiňiz. Şeýle hem özüňiz sorag ugradyp bilersiňiz. Dürli ulanyjylardan (test maglumatlary UI-de ýazylan) awtorizasiýa etmek we haýsy usuly ulanyjynyň ýerine ýetirilmegi üçin haýsy ygtyýarlaryň gerekdigini görüp täze maglumatlary kazyýetlendi.

Haýsy hyzmatlar nämäni edýär

Bu bölüm bilen özüňiz tanşarsyňyz. Mundan başga-da, eýýäm amala aşyrylýan funksiýalardan syn etmegi deňeşdireris. Ulanyjynyň ADMIN roly bilen syn ederis, sebäbi ol iň giň ygtyýarly. Emma gözden geçirmeli MANAGER we DEV bilen.

  • Proektleriň agajy. Proektleriň sanawy bar. Administrator ýa-da Menejer (enam Role-e seret) täze proektleri we subproektleri goşmak bilen iş alyp barýar. Proektde beklog ( ýerine ýetirilmesi gereken meseleleriň (task) sanawy) we sprintler bar. Şeýle hem projekta subproekt bolup biler. Bir mesele sprint bilen göni bagly bolup biler ýa-da epik bilen (bir gowy uly meseleler toplumy). http://localhost:8080/view/tree
  • Wezipe tagtasy (daşbord). Haýsy proektiň daşborduny görmek isleýändigiňizi saýlap bolýar. Proekt boýunça aktiw (ýa-da soňky) sprint görkeziler. Sprintdäki meseleler kolonkalar boýunça bölünýär. Diqqat etmeli meseleler reňklendirilen. Wezipe statuslarynyň üýtgemeleri meselelere sag düwmäni basmak arkaly edilýär. http://localhost:8080/ui/dashboard
  • Sprint boýunça hasabat: tamamlanan sprintler üçin iň az statistika şolaryň saýlanmagy bilen. http://localhost:8080/ui/reports
  • Ulanyjylar sanawy. Hemme hasaba alnan ulanyjylaryň sanawy bolup, öňki, ýüzek, redaktirleme we öçürme mümkinçiligi bar. Stasiýa http://localhost:8080/view/admin/users
  • Bagly nyşanalar - JiraRush sazlamalary (haýsy meýdanlaryň haýsy entity görnüşine elýeterliginiň edişi. Meselem, ulanyjynyň kontaktlarynda haýsy sosial network görkezilmeli ýa-da bir mesele üçin haýsy mümkinçilikler bar). http://localhost:8080/ui/admin/references
  • Ulanyjy profiliniň redakte edilmegi (özüniň profili).
  • email + password bilen täze ulanyjynyň hasaba durmagy.
  • Google, GitLab, GitHub sosial networker arkaly täze ulanyjynyň hasaba durmagy.
  • Paroly täzeländigiňde poçta iberisiniň iberilmegi.
  • Poçta hem-de onuň tassyklamagy üçin poçta iberisiniň iberilmegi.
  • Beklogda täze meseläni döretmek (şekilli faýllar hökmünde faýllary geýmäge mümkinçilikbolaýar).

Proekti "ağızdan-ağıza" köpçülikleýin maglumat

Projektiň gurluşy Spring Modulith proekte meňzeş hasaplanýar. Yagny, internal bolup, olardan ýokary derejeli paketlerden kod elýeterli bolmaýar.

Bu "geljek üçin ýadewliler bilen" edilipdir, sereri mikrosluzmatlar bilen aňsat bölünmegi üçin. Iň azyndan, bu arhitektoraň teklibi bolupdyr, we onuň durmuşa geçirilmesi başgaça bolup biler (hawa, beýle ýagdaýlar hakyky projelerde hemişelik bolýar).

Front üçin statiki faýllar nginx serwer arkaly hyzmat edilýär. Takyk "prod" bu, ýöne ýerli işleýän wagty ähli zat ýönekeý.

PostgreSQL. Siz natiw soraglar ýazmazlygyňyz gerek bolmaly. JPQL soraglaryny ulanmaly bolarsyňyz. Siziň üçin täze ýagday şu PostgreSQL birikdirişini ulanyp, tablolaryň gurluşyny we maglumatlaryna serediň. Database IDEA panelini ulanmagy maslahat berýärin.

Liquibase — açyk, BD-den garaşsyz ordinatir bibliotekasy bolup, BD-iň shemasy üýtgeşmelerini yzarlamak, dolantyrmak we ulanmak üçin. Projektda awtomatik BD-initializasiýa skriptini ýerine ýetirmek we test maglumatlary bilen doldurmak üçin ulanylýar. Tablanyň gurluşyny üýtgetmek islediňde, Liquibase-iň iki hyzmat tablosyny (databasechangelog we databasechangeloglock) öçürmeli. Ondan soň programmanyň indiki işlenýän wagty, Liquibase BD-initializasiýa skriptini täzeeden ýerine ýetirer. Siziň hiç hili sazlama etmek gerek däl, ähli zat sahylar birentek ýyl işläp dur.

Swagger — UI arkaly programmanyň kontrollerlerinde haýsy usullaryň bardygyny görmek we olara testlaýyn soraglar ugratmak üçin. Swagger-siz taslama wezipe bolmaýar. Ol proekte işleşmegiň rahatlygy üçin goşuldy.

Caffeine cache — Java üçin ýokary öndürijilikli keş bibliotekasy. Onuň birikdirilmegini gözden geçirmäge maslahat berilýär. Keşi ulanmak üçin taslama bolmaýar.

Saýlawyň boýunça wezipeleriň

Ýeňil wezipelerden başla we diňe soňra beýlekilere geç. Elin mümkin boldugyça köp wezipeleri ýerine ýetirip baha.

  1. Proektiň gurluşyny öwrenmek (tanşlyk).
  2. Sosial networkleri aýyrmak: vk, yandex. Ýeňil wezipe
  3. Duyguýy maglumatyny aýratyn her bir aýratyn propeti faýlyna çykarmak:
    • login
    • BD paroly
    • OAuth ýazgysy/awtorizasiýa üçin identifikatorlar
    • poçta sazlamalary
    Bu propetiň bahalary server işlenende maýyň daşky uzurlaryndan işlenmeli. Ýeňil wezipe
  4. Tesiň işlenýän wagtynda in memory BD (H2) ulanylýan bolsa ösdürilmeli, PostgreSQL ýerine. Şonuň üçin iki bin belledilmeli, haýsy bin ulanmak gerekdigini kesgitlemek Spring profiliniň aktiwine bagly. H2-niň PostgreSQL-de bolan ähli aýratynlyklary goldamaýar, şu sebäpli test maglumatly skriptleri biraz aňsatlaşdyrmaly.
  5. ProfileRestController kontroleriniň ähli jemgyýetçilik usullary üçin testleri ýazmaly. Diňe 2 usul bar bolsa-da, test usullary köp bolmaly, sebäbi üstünlikli we başarowsyz yolagyny barlamak gerek.
  6. com.javarush.jira.bugtracking.attachment.FileUtil#upload usulynyň rewektörüni geçirip, ol häzirki zaman faýl ulgamy bilen işlemek üçin täze çemeleşmäni mümkin ediň. Ýeňil wezipe
  7. Täze funksiýany goşmak: meseleler üçin taglary goşmak (REST API + hyzmat üçin amal). Özüňize front etmeli däl. Tablon task_tag eýýem döredildi.
  8. Wezipe işde we barlagda näçe wagt bolandygyny hasaplamak goýmak. Iki usul ýazmaly hyzmat derejesinde, olar parametriň wezipäni kabul edýär, we sarp edilen wagty gaýtarylýar:
    • Wezipe işde näçe wagt bolup biler (ready_for_review minus in_progress).
    • Wezipe barlagda näçe wagt bolup biler (done minus ready_for_review).
    Bu wezipäni ýazmak üçin BD initializasiyası skriptiniň changelog.sql soňuna 3 ýazgy goşmaly
    
    insert into ACTIVITY (ID, AUTHOR_ID, TASK_ID, UPDATED, STATUS_CODE ) values ...
    
    Statuslar bilen:
    • Wezipe bilen iş başlan wagty - in_progress
    • Işlemegen döwri - ready_for_review
    • Test döwri - done
  9. Esasy serveriň Dockerfile ýaz.
  10. Serwer we BD bilen bile işlemäge nginx bilen konteýner işlenmäge docker-compose faýly ýaz. nginx üçin config/nginx.conf konfigurasiýa faýlyny ulanyň. Zerur ýerinde konfigurasiýa faýlyny redaktirläp bolýar. Agyr wezipe
  11. Hatlar (mails) şablony we başlangyç sahypanyň (index.html) üçin iň az iki dilde lokalizasiýa goş.
  12. Frontoň we_backend arasyndaky "özge-özge" mehanizmini JSESSIONID bilen däl-de JWT bilen täzeden anyklamagy ediň. Çylşyrymly meselelerden biri, formalaryň frontdan iberişiniň täzelenmegi gerek bolar, awtorizasiýa headerleriniň goşulmagy üçin. Çylşyrymly wezipe

Proekti tabşyranyňda README.md haýsy meseleleriň ýerine ýetirilenini ýaz.


  1. Jemleýji proekte göz aýlamak (Tanşlyk)
  2. Docker Compose sýpÿdý?
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION