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:
- Projektiň haýsy meseläni çözüp biljekdigini ýa-da geljekde çözjekdigini öwrenerin.
- Projektiň haýsy baglanşyklary bar diýlenine serederin.
- BD-niň gurluşyna serederin.
- Entity-niň gurluşyna serederin.
- API we/ýa-da beýleki kontrollerine serederin.
- 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.
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:
- Proekti öz kompýuteriňize klonla.
- BD serwerini (PostgreSQL) ýerli işledin. Muny docker arkaly etmegi maslahat berýärin.
- Programmanyň build edilmegi:
mvn clean install
- Spring Boot programmany (JiraRushApplication)
prod
profili bilen başlat
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
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_type
Enumcom.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.
- Proektiň gurluşyny öwrenmek (tanşlyk).
- Sosial networkleri aýyrmak: vk, yandex. Ýeňil wezipe
- 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
- 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.
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.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- 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. - 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).
changelog.sql
soňuna 3 ýazgy goşmaly
Statuslar bilen:insert into ACTIVITY (ID, AUTHOR_ID, TASK_ID, UPDATED, STATUS_CODE ) values ...
- Wezipe bilen iş başlan wagty - in_progress
- Işlemegen döwri - ready_for_review
- Test döwri - done
- Esasy serveriň
Dockerfile
ýaz. - Serwer we BD bilen bile işlemäge nginx bilen konteýner işlenmäge
docker-compose
faýly ýaz. nginx üçinconfig/nginx.conf
konfigurasiýa faýlyny ulanyň. Zerur ýerinde konfigurasiýa faýlyny redaktirläp bolýar. Agyr wezipe - Hatlar (mails) şablony we başlangyç sahypanyň (index.html) üçin iň az iki dilde lokalizasiýa goş.
- Frontoň we_backend arasyndaky "özge-özge" mehanizmini
JSESSIONID
bilen däl-deJWT
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.
GO TO FULL VERSION