From 7995d3d885fac26f9dc0aa022740638253abedc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9=20=D0=9A=D1=80?= =?UTF-8?q?=D1=8E=D0=BA=D0=BE=D0=B2?= Date: Mon, 18 Mar 2024 12:47:29 +0400 Subject: [PATCH] lab_1_done --- .gitignore copy | 37 +++ .gradle/8.5/checksums/checksums.lock | Bin 0 -> 17 bytes .gradle/8.5/checksums/md5-checksums.bin | Bin 0 -> 24697 bytes .gradle/8.5/checksums/sha1-checksums.bin | Bin 0 -> 36317 bytes .../dependencies-accessors.lock | Bin 0 -> 17 bytes .../8.5/dependencies-accessors/gc.properties | 0 .../8.5/executionHistory/executionHistory.bin | Bin 0 -> 210029 bytes .../executionHistory/executionHistory.lock | Bin 0 -> 17 bytes .gradle/8.5/fileChanges/last-build.bin | Bin 0 -> 1 bytes .gradle/8.5/fileHashes/fileHashes.bin | Bin 0 -> 25597 bytes .gradle/8.5/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes .../8.5/fileHashes/resourceHashesCache.bin | Bin 0 -> 21183 bytes .gradle/8.5/gc.properties | 0 .../buildOutputCleanup.lock | Bin 0 -> 17 bytes .gradle/buildOutputCleanup/cache.properties | 2 + .gradle/buildOutputCleanup/outputFiles.bin | Bin 0 -> 19469 bytes .gradle/file-system.probe | Bin 0 -> 8 bytes .gradle/vcs-1/gc.properties | 0 .vscode/extensions.json | 12 + .vscode/launch.json | 24 ++ .vscode/settings.json | 19 ++ build.gradle | 28 ++ build/resources/main/application.properties | 1 + .../stash-dir/UserController.class.uniqueId0 | Bin 0 -> 4088 bytes .../stash-dir/UserService.class.uniqueId1 | Bin 0 -> 3151 bytes .../compileJava/previous-compilation-data.bin | Bin 0 -> 38871 bytes .../UserServiceTests.class.uniqueId0 | Bin 0 -> 3750 bytes .../previous-compilation-data.bin | Bin 0 -> 26353 bytes gradle/wrapper/gradle-wrapper.properties | 7 + gradlew | 249 ++++++++++++++++++ gradlew.bat | 92 +++++++ settings.gradle | 1 + .../com/example/demo/DemoApplication.java | 50 ++++ .../demo/core/configuration/Constants.java | 8 + .../configuration/MapperConfiguration.java | 13 + .../core/configuration/WebConfiguration.java | 15 ++ .../demo/core/error/NotFoundException.java | 7 + .../example/demo/core/model/BaseEntity.java | 20 ++ .../core/repository/CommonRepository.java | 17 ++ .../demo/core/repository/MapRepository.java | 57 ++++ .../demo/items/api/ItemController.java | 69 +++++ .../com/example/demo/items/api/ItemDto.java | 57 ++++ .../example/demo/items/model/ItemEntity.java | 65 +++++ .../demo/items/repository/ItemRepository.java | 10 + .../demo/items/service/ItemService.java | 51 ++++ .../demo/speaker/api/SpeakerController.java | 23 ++ .../configuration/SpeakerConfiguration.java | 27 ++ .../example/demo/speaker/domain/Speaker.java | 5 + .../demo/speaker/domain/SpeakerDeu.java | 28 ++ .../demo/speaker/domain/SpeakerEng.java | 26 ++ .../demo/speaker/domain/SpeakerRus.java | 21 ++ .../demo/speaker/service/SpeakerService.java | 20 ++ .../demo/types/api/TypeController.java | 64 +++++ .../com/example/demo/types/api/TypeDto.java | 28 ++ .../example/demo/types/model/TypeEntity.java | 43 +++ .../demo/types/repository/TypeRepository.java | 10 + .../demo/types/service/TypeService.java | 43 +++ .../demo/users/api/UserController.java | 63 +++++ .../com/example/demo/users/api/UserDto.java | 63 +++++ .../example/demo/users/model/UserEntity.java | 75 ++++++ .../demo/users/repository/UserRepository.java | 10 + .../demo/users/service/UserService.java | 44 ++++ src/main/resources/application.properties | 1 + .../com/example/demo/SpeakerSrviceTests.java | 38 +++ .../com/example/demo/TypeServiceTests.java | 61 +++++ .../com/example/demo/UserServiceTests.java | 62 +++++ 66 files changed, 1666 insertions(+) create mode 100644 .gitignore copy create mode 100644 .gradle/8.5/checksums/checksums.lock create mode 100644 .gradle/8.5/checksums/md5-checksums.bin create mode 100644 .gradle/8.5/checksums/sha1-checksums.bin create mode 100644 .gradle/8.5/dependencies-accessors/dependencies-accessors.lock create mode 100644 .gradle/8.5/dependencies-accessors/gc.properties create mode 100644 .gradle/8.5/executionHistory/executionHistory.bin create mode 100644 .gradle/8.5/executionHistory/executionHistory.lock create mode 100644 .gradle/8.5/fileChanges/last-build.bin create mode 100644 .gradle/8.5/fileHashes/fileHashes.bin create mode 100644 .gradle/8.5/fileHashes/fileHashes.lock create mode 100644 .gradle/8.5/fileHashes/resourceHashesCache.bin create mode 100644 .gradle/8.5/gc.properties create mode 100644 .gradle/buildOutputCleanup/buildOutputCleanup.lock create mode 100644 .gradle/buildOutputCleanup/cache.properties create mode 100644 .gradle/buildOutputCleanup/outputFiles.bin create mode 100644 .gradle/file-system.probe create mode 100644 .gradle/vcs-1/gc.properties create mode 100644 .vscode/extensions.json create mode 100644 .vscode/launch.json create mode 100644 .vscode/settings.json create mode 100644 build.gradle create mode 100644 build/resources/main/application.properties create mode 100644 build/tmp/compileJava/compileTransaction/stash-dir/UserController.class.uniqueId0 create mode 100644 build/tmp/compileJava/compileTransaction/stash-dir/UserService.class.uniqueId1 create mode 100644 build/tmp/compileJava/previous-compilation-data.bin create mode 100644 build/tmp/compileTestJava/compileTransaction/stash-dir/UserServiceTests.class.uniqueId0 create mode 100644 build/tmp/compileTestJava/previous-compilation-data.bin create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 gradlew create mode 100644 gradlew.bat create mode 100644 settings.gradle create mode 100644 src/main/java/com/example/demo/DemoApplication.java create mode 100644 src/main/java/com/example/demo/core/configuration/Constants.java create mode 100644 src/main/java/com/example/demo/core/configuration/MapperConfiguration.java create mode 100644 src/main/java/com/example/demo/core/configuration/WebConfiguration.java create mode 100644 src/main/java/com/example/demo/core/error/NotFoundException.java create mode 100644 src/main/java/com/example/demo/core/model/BaseEntity.java create mode 100644 src/main/java/com/example/demo/core/repository/CommonRepository.java create mode 100644 src/main/java/com/example/demo/core/repository/MapRepository.java create mode 100644 src/main/java/com/example/demo/items/api/ItemController.java create mode 100644 src/main/java/com/example/demo/items/api/ItemDto.java create mode 100644 src/main/java/com/example/demo/items/model/ItemEntity.java create mode 100644 src/main/java/com/example/demo/items/repository/ItemRepository.java create mode 100644 src/main/java/com/example/demo/items/service/ItemService.java create mode 100644 src/main/java/com/example/demo/speaker/api/SpeakerController.java create mode 100644 src/main/java/com/example/demo/speaker/configuration/SpeakerConfiguration.java create mode 100644 src/main/java/com/example/demo/speaker/domain/Speaker.java create mode 100644 src/main/java/com/example/demo/speaker/domain/SpeakerDeu.java create mode 100644 src/main/java/com/example/demo/speaker/domain/SpeakerEng.java create mode 100644 src/main/java/com/example/demo/speaker/domain/SpeakerRus.java create mode 100644 src/main/java/com/example/demo/speaker/service/SpeakerService.java create mode 100644 src/main/java/com/example/demo/types/api/TypeController.java create mode 100644 src/main/java/com/example/demo/types/api/TypeDto.java create mode 100644 src/main/java/com/example/demo/types/model/TypeEntity.java create mode 100644 src/main/java/com/example/demo/types/repository/TypeRepository.java create mode 100644 src/main/java/com/example/demo/types/service/TypeService.java create mode 100644 src/main/java/com/example/demo/users/api/UserController.java create mode 100644 src/main/java/com/example/demo/users/api/UserDto.java create mode 100644 src/main/java/com/example/demo/users/model/UserEntity.java create mode 100644 src/main/java/com/example/demo/users/repository/UserRepository.java create mode 100644 src/main/java/com/example/demo/users/service/UserService.java create mode 100644 src/main/resources/application.properties create mode 100644 src/test/java/com/example/demo/SpeakerSrviceTests.java create mode 100644 src/test/java/com/example/demo/TypeServiceTests.java create mode 100644 src/test/java/com/example/demo/UserServiceTests.java diff --git a/.gitignore copy b/.gitignore copy new file mode 100644 index 0000000..c2065bc --- /dev/null +++ b/.gitignore copy @@ -0,0 +1,37 @@ +HELP.md +.gradle +build/ +!gradle/wrapper/gradle-wrapper.jar +!**/src/main/**/build/ +!**/src/test/**/build/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ diff --git a/.gradle/8.5/checksums/checksums.lock b/.gradle/8.5/checksums/checksums.lock new file mode 100644 index 0000000000000000000000000000000000000000..caf3907bbbc64f2896f4bca7f26b0c76375a7d7c GIT binary patch literal 17 VcmZSn$tiyBq~yge1~6dC0RS`x1eO2* literal 0 HcmV?d00001 diff --git a/.gradle/8.5/checksums/md5-checksums.bin b/.gradle/8.5/checksums/md5-checksums.bin new file mode 100644 index 0000000000000000000000000000000000000000..e6ac688f40f1d928bc83e0a3e9bfda35f432e423 GIT binary patch literal 24697 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 E0Lgj6y8r+H literal 0 HcmV?d00001 diff --git a/.gradle/8.5/checksums/sha1-checksums.bin b/.gradle/8.5/checksums/sha1-checksums.bin new file mode 100644 index 0000000000000000000000000000000000000000..ae015d620ed2840f9903a0db2646ed77c435ed7d GIT binary patch literal 36317 zcmeI4c{o+w`~QzI^E_url8Ou&OG+y9Jcdk}=P_fZ%pxUJh9pALfG8AFBvgbXgixkR zr9p7PJiqJuc0Ip;en0!Vp3U>_eyw}0d)@0^YwvUF5Dv%1^ar_c|GC)z z^XvL=>k(Lwze1R9&4*7o4FKKn8LG#bGPxSG?|K3BplD3b*&X>fduuJyzAvW#j=6kOLCgv0 zx|ygRU*}RhQ)OrabSraIPq?UiP5P>QE6`)G{v;h639#Ya`vd4&?x=lI+Nq3BJjeKe z9`q5@Z-h9t&3)z5EO zq-#$$JOT6*!kEq}rlw)Ig4ieR#&qwvg72CS9DuzGmbd3)zZ{b+y^qdU2x@;}M{}>W zP%uBRk2rwodtW})tK%>N`cW-RKYE&3+%889=)q~Ie$l;rkl9yd9Ie*#Yhe~^zk#?f{Q9Z|^}{A2)#7U*VP5NZsYY3v@edz6#S#CU)vQ^ar|+0BT?K$x&+YX(m#C zbP`a#L_@;VvS1L={joeLc}M$PNh2AV$MAgA{u-{X$85f*3$$;Zit1(3PG0-Eq(e`g27*89hm(9-t{8JD9KYJW$xHf0~qd^@l= z!0OT+)7psNx3(H0?ewAc)q+DOS{e7U0^J3huj)I!8=}hJ<^f#;8*feYBl%d*m#={C z`vPs}u8&&^bui53CWn^pGIRSL_8>n6zqwKLY^G_wv zU9dc_9aC4IAW?b`^kdSP{qnm3p?$eXy^SM5_4|p2rWVawQ^4Lf2Gh#}B81hqAi9<; zsy}#Gae$Pq_5iT=W=8b}LzeU~Q+YC=n+TwKV~YQL_}QyS-Hyig&BhFFC2z_oWZ$$I zL+u~V2io20-=+@Q@ft++N3`{y%LmDkI9Orz=h0`Wqx0`akhQ7wxlwLk}LG~{f15|Hg8n?Z!ml}iEUqtn%X@j!|E0^_v zZjbHP?ZR)5;Bd>$abM4troK!3FTj_vnuDW#ZE z0o`vH(<3vRBlpOJ1KsB#rZ?PM*2H}&0eY|ys(1c)8@5xk6|oP(>iM(ivI`T7de?!y z0Uv7rg0(C8+Hgib(7mv_(Y^KO_H2$BWWR{bMD4rNJkkYL!;p29M26~p4Nh+L8S`AA zorrNve7S}39MxbjxMfLvsA*4%*$8G^VPzlvvZ*Wv2C+kD@ zJ55ynGhjYvL$g(X8Q7U4HC&^78Y`@3fnQhp>L zbt3|s-#70XL!2L2j{tk0Q<(j?+r_d8RJ(y5+=A*uUNm1%Jb5hzbo~lUj~Y~t$jL|M zOFsG$$nGnC2Rfp!eOWBQVl>P^qSCZL-sqWZgC>Kz;2wg~{; z?g^%QkceKhKl&Ev$0bmG@|@-CR1bcn{p4v>f1e$DGhpd(Ah5T@;y=aFsxd$8@(AcD zSbdxR@?3c7ZV(bry#chHnT-R&)zy5Xz~1L4rdzTxbuauv&TodIn4Yr~@y%4(9@yJ{ z#`OA#(Z~F^J_B9n0jkg5JF+o8QuQOy!(veVBfaX?JB4qM^FZivOlL@09F_Sc0qm`% zFrDj0T~*n`Gl=et>hmn}RlH3$tw1;O#&kbPw(D-TOF%cn@@@XU7_YA+y#mmUv3Pzp zt~Am1;fV&iRzKR#&uw#o`$&V{0Npwd)9V^LJ?+ov1N{`1Z@-MxYAlNP@&G-R0=54Y zylwnj!aHQW>)N3DqG00t#m3t&fqj$+rti$!Z0E$w0rU_o4vXg0{Z-|$5kL=kgxOy? z-J{FSbp+@~KVtfjlvA}}C2~&FD@66*O|PC&WU5yHds8e=e$R**{+tStM%uZH+Aqt! z)a&XM+W_=LEFYHJrZTg>Wg&Id4QqczsG&l}PXbw|dh%#HE74xR1AU%1fOc$aG5u@% z!Yh(PazNL?>inO#`z&939XbhgZFbW?k@eaZ&4{&aa}QlNWc@!ZfEuU^3|au?_ce5gH@ z8~s+x-;Bt5@xXNI@MDEnx*YES`x96_q2X;$57_zb6VTlcqwUZ%OU%B1nfL(c_6IP1 zRqEjD?aFOH58aRI^q)gFhF5(@@;1B=)fsqS-7`_QVFvc6u>Fo<^S3?45q@a?M5FeM zR&wOBb{xn)>yPa(Og!HNx!L73K|4{X`5%^hFQqlL7LaxvusE|!anOGDSw_~EBWBOK zuXjLFoWmBhqrr{-0qY%V^ZK|tBp>{+I>44O(h)aT_8i!UOQZJek$(G9d>$SIdVnCN z|LOWY-_@@IbWJQzc=!`T{C@c$d2YUl+Vcp|j%q5rW(W4}jF|4jzO40Q4mno`{Kr1$ zlIGozP&LGFDr&zmW0P6x)IDS#gV-^>FIU^7PY!v0*Tm`u-+Sx(Q~NI=_0!K6wdW5= zC|3Vy+z8s&$MS){x2DZJh9wf{fg`BBfXss0RrVGopod{~USP?@GPm!L1<U3I3vYc= z?9%Yg7U&+>dKdn6sqn&^B_wadbWr=PIJ+Jf_4;{WpJ<2aqznmLJ}5T<{geQv-=%DP z{XQKzH-=K9`i?Q2;6+!n9$@eJ4AsS+Ru9A|kMIHA0n6u|lc7=Ka|=;GcN;+M#T$<* z_0O>*`(xk+RF`C?@8tU9j+|%WusSR?7F}Sl{}uAw8uI|P-?iy1bKCwD+7Sj)2 z+?6B#44HS!YncAaxp}1iFp`JPSUyNUwrrQSFe?N7w2(mUr6;LtZ4UoI>Rz-gs>^;2 zEo5-_vIX`j7cqUI`h58mqYuzy5>Q=^=>?@{X%+Ika1!$?XEYZwcWMh#ACd-9d-;8j zM~&>0konTILUje5-s(!3mP=#~U}Jhoo;FuQA)I($OvfNLgdzej|6 zfR`j^GqATD!E{YqGVRd_XQ2BjqPpTsrCSO4LdgD}%={nyBySw+_!O`=$Lf!gLhJ9P z%%x(WdtF8CmBKEE@Q&_B&asB)QGMSlX@!f725!JU#U9o7%Y7^lQT>jLH*^fsFGZg3 z=IG@F_9mxLU8S`;p!u7R5YU6}qWZzGjQ5?DtPg8&p@-9oF%)yv_!6FEUIo%#c5*w*fgPSYmmumf3l6 z-ki+~*lXya_G))6zUW8|A^Vhj7^4OghnJpuOKn7w9_q0RBK zz&AiY^%J$%I@)}V^hz~ye(=QRSIc4H{7v%xNZl}bh}kbxdiv8>R#3bm zbq$HX`Z#K@6Li0kv0VhIZxPsf*Uc|Yi;Xqm2kp3#p!Np+KaMvl2_W@3BoEaMwH!A2 zZfm~>?89nN-Gu3Fzhde~dY}iGVfx+WgeP0A7lCfN6V**QXTk?U)cSyKg2lmfW_DhE z#}{Fs2QQ)aX8JO7b4AyY^N*Dfsvn_~cQXtth{w%2FB?8@f64j6He^_kx z)c-rs-Q-c-D$~$uWr1G}=thH>-q5l5VHNF<&2dz>Q8elDBRe(hU>E_q6&7dvD%}*Zwha_O zcioP*3uqTiy@1?YO7n7(gEjCqC)Quo{|FulETaHqwD46wIb zL3KC!r6_j}x<;T!Ve8thRxy9@>=!$r8#JQ!?hO0WFYpRpL+q_k-D5bZ@ucx;E6{zh zeD=KX+}SpQ7O7VWNvOSN7gNbt5{osk*V%~bUQ9x@TSelY0{sNmPcQRrLOJ5`NWLXu z_229AmnnXCQDk2;!s?{g&!ObEQjEwxVzVD>e|3j+z^}J0pnbDpRQEnF%2J$6{Tt}U zRha&VX{TnI#bcnGKSFgM4%ey&v08#iKe4>>37Ol`9n6HRQ|%DU{`KAT>D(zQqM50q^xswowf8-CCFknM8>F6i+F|-z5=E|SJ+h!3XDrYCuBaKAiCdTe-R>-E z@3)ZP>74rn*&h=cQQcqiMR#ic7UVfD7OM~bZjmlB10^>=JC^>KeIB=2sFN!)zoyvv zB;XHwAcL$D9k92#j@lnr+NHG5haXul!RDC$%iB_5<{|PP+XKsoAhFx;Ygk#3^O!Rh zw;;DPWv722+N1yqq`JNS@|II<>Zd~4f)ci@++6(6tLID z)^Dgq3Z)*kAo5-=#2K{@b+o+oxt0!jZx+Uh>S5N5GJZSm^MZC9MKIm#R#B9co~RyqgfI9{Q`a7( z|JZy**1pPprm+cmU#flpvwv+n?{Pi^c^{IDk(LwzGa;wH2vMsdwqCZRObQ3O-AhNpQAzb5m0MI1E)LX`LWd#$J9Br zeX{5|i8e*BG2#n+mPR5Ae>OodE^_jWOId!__60PaX?Zz@-0IyveSo4ze5w8T-%t!l zH2!zg|H;?ijjNF2qjIoOK--J0U&>S7^PfyU_Mifciw%6@LcVp4Jgn{tFL5e0zM*!F z;m-Bd*5pH?CeY`H@O-hsvBTj=Wd(?%@y`@H`1Em2YL}t*duwBfJ)S-T{)ghNc^)Z? zC<9*{&af*SWqvtyCz!8)9v4R~o?3HUx=$@_d#BuwW?r7=?%>=(vlzwv8TjI4#Z!z) zoy5NWnc`acXX>BF#RF&3Ka9)KR-12THm1J+rnxpf^i2(zk`o0K6a0x4K@aEM`m>Z=F74W9x{Frtxx#E(90gP-;5-z_ z1=J?^dkX}VIZLfFZQ4LzW4NjcU&&I6%GO>xKyBgxl>YsHi~74BcE`~7`Dvaeac`2K zt_d$4*!fxg7KnyCTyvpI9R7TVU|a`^1<69B78lAATwJxLzjv6A#Ec-62Oh#Hz?nrr zDYqQBYaY{>Ya@4@OX@Wz^I(pkI1&w{_PV7KQ?UW^I$0&3XW}U%4fY6T|M3{AwFHzP zvVU!FCZ_(**FWdHAjpk1bG~_xz<^Akf=hn;g8Guz_C_Jn*o#OHGe9(~)`-SC``0oP zv}zmZ4vyPgZ0-11_H_*U1`3=}Lau%h0AV}fnM|L|0jBAS^7?&zkM+nE&{->d~ z;hcUjO`md5(t@1B8C#V(WL(bx#T`maiCed%rxg{*3F|1W-fQtzyRGpW+9Tm;>;cih z9o@GE^;bRoye0N$ds{zUoMVx5ZHzpp*+({LH^BQsYLxy0u`hpWyZ1_z3AaOwjx_DA zk=RbOKd;bawEQwwal?bJ$!EDtX^t#)2-=JF#GbTb8^;;pTU6I z3O~p|*G41gMi7m^^Hm^sM4p#PGs%1?ieD`$@NLqv8+2lT=W8$W%?6>%#J(Kui#n_K zsRkErJJ2$C`^{L>)-pzfGJ~w4iwXXI3qcQ0n4DC|Yb9|l)xLMKp({tTCQ-T(85gv- zz!!r7bo*B*?WXZyi5gKc^9nW*Z}wnovRe2X6Zmm0;a%Y*i->(0=scu2U1U|QRP!QY z*N2Y5_pR=m0i~n^sEZ85)aj?qdr9u)p77C|+5h;Yn9fAg7D+%Ijsuj%Q(`Kt!-Zsj zz8~d9c4ui5$>%JMH|lqQXow(t3jff*MRiTT(W&w}y|{B1_X08@=+=q3r9= zzX@pV+(nB-V-ZlYH;5_KdnIu-G$PK_mhsGXibu>MvU;IN!@f2r0gB}{G4*%8{ByeV z4zPA*-Bx3)2k4>$li{yO2Z+qSfp{xNVIY~^_7Y(Q!E3mHJ ze~!iLlFG1e&?m2N2vrTJjlYSh9cr21I6qN_WaivD(s?(|;bmqVlJnbw0L4;BOc}IE zsbsc0*RhGs9^Kj>epSYtPr722yU zVI?1U;pR^LwlQVKuOl-3fYO4Z0$-dd(2ZbRCmdcM@f&iBr=ZX%-+MH~Jbe!dJj+lt zw(H{|93vkwmEZ1rBi(8`*j1}*lYn>E3+>8SC~NUl4WOvc5>tQY%WGhAaPxIZr7hy# zpQD&&!YhphIDxMnV!#*O8ZrDkN-dc;>g@Wp?R~ty>TO%(Cim_@b|Ssaz!&Wr zHEP>M=kSyH8mE_SPG)S?us%9tFWv>Bp?3>V^zg1uFki|wPuNnWhPNw+wF$l3HWBdF z&*2&}E~JVI)%{!4yiC)NZ92l2cvN2x$hTbRe3#t@z0ZJSD2bf(1lFiF9#Z2&$7pg? zx#caFhw2t`j|*8tyEmQ!?}%`;P;>~#B_Xa+Wl_FI&1zqoG8IF%U*bW91Avmc1EL`c zoiYijEJr&H$wifm6OKv>)cfkFCe00m{+r?xA*TM$m*^CWzs{zoY&%@^t93q}q|-eS zdkFa21%Wylo((_Z|=ypI!!zXg+qT2x72z*_cjydC-UX`k0timNP_<&PV z+61Z>a1W)SGbw!0t??EsE#Z#e!6-(7a5Md>;ND}-N~3+yIPetmY)%Vh7@;r4bM52y zx7aQSh~4>SdU$I|ZcU^lLcu#Lbn%ZuH-a8M;$-kY@4L@+_?pn|2X8wju53_gCZJ9b zQya9+J)EyfJERp==I?yb)2Q2N8I4fqAZzI2U*il=m3y>y$29MKp(}T%ZY#TPFku`b z1C$Iopr~M)poa=&hcC>QYOy{~xKb#hdN8EZelzqg4~~Wm8$!Xm9|0vgxm6O3y@(#!|tPB$Q4I{+V#E~rw(e+RI8N(#(ZUnqtv^JH6))U?rLQ&@sQ}5FD z#8}@hyMOlTS+Or+ri%H`>Y)7!PkDnLa&IK24wm11PbQx9_GgZv&3$2Q3x4WD(g>9S zD6SG>>T%P2K*NgcRLC)!q{D;OI`PGU$^T7JcM?-C@7q_Dw?1K69VU7Iv*r-pucExS z2$ctX@wgIG_o=@rzUS~cx58kfO}!y}u=6_48$ijzy8?94FhMth$hVZfefD}Hz?g-h zmy6!7;LB`fA+l0rS?~~!nVOhN@6bs$Q5-gKPnG>T9VYMnCrc8F9UMcHVujD71in_X zr>n20<=^gcJlep?CTYbGu4RBwyugT0|yUvEIgkY!lMNP4!Dm4DN>GhkeD$i7T>f!J55 zuVJrw%W}o^_=Oi|f5#u^(Y>#aP;#J$bT^2pPgd3(H&Xdcf45F76?5-0V|p5M?Y}7o zXlEjfVXN2-n79>muxVv1u3 zl3DPkg%*ZGyBywE9pVdWg>YOhLp$z&B+WA((p?>+9%QyDi&uu;xWJS=RJq}6!#H#! z$lf12{>*+(Ej&EfTM#B@wO2YKVIUl#RPYdvk%X8kjA52KRbZDlL)OK|^PM{2Q(6!! zLLn8Kx|^69a^XLJHK=*Z_p;DWXU46C=YE(Vl}-L9@I{qLOqH`5ygGDTWcz@jl%mni zx#UpVy-04z{{|Gz8osI|Jy+^as%G@oYGhsbRQ;un{+2T6p#oelpoZKEJNVdtWu(5*oMbX4(S~(Tlk*5F! zPe85p414}ch|ktOQ+w|avXFq2lhvIiE|4+amlvR@XNY~x+-8N2sn{Ff*(RV8UsMeYvAjL8wY{_1 z{rS^=4J*zNKq+#;o^ZIWY0!;;atu26LTXuEj?S1?%J5yMsC|8DIYM#cA>77vV(PIk z`~A8*?~(&uQ+YZXe8w#JUp_}Dc!fY0H9Xq{zAlTHbVvQ+uMJ6=pXHTQcjMb3h3w{v zS$GIX4bK|^_0hgm(7r3zVxjKFfY9}TWQHAX%fJ`<&YT{qK7>@TQs_q3$ZY%QVy$U| zAFd1|A7A<*ln3xdOG8Y>C%x>nq$U^FaPuuoFfOWyvnDGS7f#CU4g5Nem7yTM_38v>}O)zLdd_6{d zO+r5jV%R7eWTmHTufdY*@K*9%w(+^3^OS&6p#>DnBVy_ae`}124fWkCtg@+!n=|v$ z^O&KtCp<0{2823AOqK86Lf*^i#I2R~+(qUISIFYj0+NR+f(QlgEd)Je|2C?~IAF$j z=E3tU13S8hhDO>8h%b4Bx=c(xj3+VN-v7O$hv8bzB3bG4x1O=kdnkMl6%gtIG3BZj z^yQ?qreGt_OvP>O$GcOa1fY3>DOLDP16`@`Pl6u4H`WNHlFh3$+~`{UlWCMn?yOY` zpw!{|4qe;apc?@d{(gH9&0+IFGnQ1@&YR&9!#!42fYLC=LnNcSi7CO3i}7b_aaWA) zIlL`4o_^Cf&!2=)V|WV3x<(AQ-W0nO>3UnpLZZB&C6=Rw|7ODvKxsnx2wjwB%Fvyl zhouyQzlU8w{f)vZqKeCn9tZwe?aT`l_1is$0^>C)94lf;Q^Ihh)soQ&0 zP^=N5+VK!>!wF*Q`W6H2fT%}S`PXWKgpUr{F$6UUA=C?m`bbR4A3sZVj#O|j`!Sza zuP&r7^BNsQ@=&h}P*kMERH55B7R9ZcEvdUU@{;oX4CU#)N{9GDD7rXeYUK30)fBt^ z*@-ScPW11go?mFTp`^9#gv(tu-y~-D%$^pf-Mn(;< zGDHcUZGJair#jX|MNzU}s};#ZLnxN;wbrwqgd~5%uafGC6AR_WPu>pFxJI%<6%C$c zL!=(E20$pmd}YQ(kXvvCFIu{~9Qv6`R;$}=?f@ubAG|A^(i>vxW<%^9Bipxi1A4AI zlmlAJXN_zw1ImOCPf=N!6H_-9d>PBP_zHO^t9ld%Kl}NIWbk+ z=9Wiu$i~e+U_Mnv5gQG&=>tSi~l7GMEi{`o$jV;0bB2zpwhY`vO^pLihnBx208Wz22IJ8x= z_(*zw-QujXG!l7BS3uE0CqF`8tvpA>cJs8eQpH|X;rlc)cFiMz9q|S2e$Yj>R7XrP z*#xEtvO6r#PV{GRKPa00Oi%L!P)7~$6bY9mF%=|zIIx@aapK7=-E31^F(2_*eh)xd zx#KAuTPiV?TVnH}>QqClhR;~wBleqHrSGoDAQY7Q@Wr78-3Vg%p{&1UA4OZxX6k8n z(n~BX$4c%?1Ijuc4>2yY5mU1^>OW83;cbh)-6(M9b@IDEo|e#44V+QdMR*Fw1)atS zeO)>9z**B+YGmkr>b7UU%$Rh&|3K9fPqhNdW`LOb`hrX~yLwAkE0u+7h}HFWrO!Ul z{J@mWK|rxt6H_raUJhS<*2cWL6f@(%W8_Y6?m);LwFf1$oo{CYw4NyfMF-}Lb#bR&h(lM_tY!<8EPm1d1+ zqCg{#hVRw~CJguIh(z7<63my%=`#s5ys!7oQ9tgv$;IRQ z;e8PjLx*j63P;OKOpP;lUX<_KTtLCG`3SA1m@wm$14zz0?88&^?83xUrM!_inKaFb zUq3t_s=XJjpV0P!c2>BDj!bxp_tqNcjgN9i+WodY61bxH6Q|YSpu*>~1Ik*Ma_PWR zIA%^_U*>}Wvj?&gEvpMO4un=*HyFxsh0fG4YU?5PBXX>>+QzN=li=1=%Z4ch(h$Rqc{J`vH0~grgA^ zji=Te*NH<@yg#q8ne_7Vb?_FA+$?V_S_D+IEkeZ-`r=1X_(S6XI^Kjl&%*_J!^QzQ}pb znr^C2mNRlOyt|~JPJW#J2ef;`<0`m_r`RIlp9GX?vF;&NiMtHbyAy70I&N0n^JE#C zADFrZPATGyp2XDayo)D7$M39=kyT%KIK1hePd>+GKwZCu_r<&st^@?WvZ6k`5?;}I zd{pOqa9&sM&d$0lWR@#h@RZQ;d18vPY>DL8c+WMLAK&ch;up%V=eZ*>yaRg3G{43v z<#UqV%S1u-iyCUqrTapbygKIKzkLLctNIJx*P6NU`qGZyQp>|yI(r?cat4I z=XOAKgR`ih9lSaTW?3Wmh54t!txEa>yiK%uGFSU?=aKp9amV|jCA&jRoir+ON!hl% zBC=5rr(*;6z8Rw)kfEozl+4xsXXVazqmJ@0=qWPrx^1@>qze{vQjNI-VCV8t$1oL>l0#%##Y2+d^%$OzH;VPxw>Ln=u;5__}Jg4wOvrafJN@phX zhjW(?o-Ang8AC~bF-g*421_(w&!E&qrHLgOC#)nqW=a%ILgCooUwgW_22(t z3+ayyx0~(@e%Nv?QvixM>Y1bX?s5!$B-saHFi9gVJ9I(?0! zwmcu6nybMB|Lr%phg>i56ls}0F?B#r_B)lx(rpL%!87M7bOawamV&ih&HWTl;VR)X z4nYqyav0pUA9<8&E%h|}pdq&*)gEjkir5?(>Dx1z)Go>7sXQ~C;N!06XXW!+8bOKhRwXZaD<#`CRE z^@Mw<1oleOySc;^Ur}dARwTz#_wgCg2gBRrMmYnZ(ZkffQsAq~gqWhbWqQwWvi4c) zJAsRir31LSXG%y6RhIA+)mC<5s`;dDFkPa{S(%QDOVVvcAC*QID1ono@O}*aDg;#o z!ug8frHvnMey*^a*D`v>NtAA-Nemhf+(T7WJcZ-xC#F6wPwamnsbu24+u)YtNX@wH zYaytv<0+6)I2I@`34KYOXV(;kY#r0lHhqE;9^oty54dW^JBm}+vR#@W%TmD%# z&akK6wCD|0#=Vy!;Zrwv4**INoB`-J1Q7d@J-e%IN8bL@&|OwFAA1yShMWsuBh(qZ zFRCx_>LiGvm;BFzL+qvfMXS)iaV^}@%Fn`}0)1oWCWKmPR$p^N}kzeW{(Xxn#2 zx_MRjv|EWz|2E-W2OMrek%nVvGK;6yd>Sn>_Eg=s-z7wolDBz{&^#ovD#d<3y`gS_6p8}u%L1(B4gQG`N)W@TKDXr(+cyVd?`ob~ z36=a{)W7WqppL@z0?I?%@6erqx|?H_R5illz+|b2qs(?K2tT3>S;4++J7EY%X#nL4 zAr){f?w#5dN2|0k)1jAXJ>1#j!$=H|G2$uGbU2m-zEoLt%m;6(29v$xw}==I_l#w4 z=Lf!=>hTmEHIyraRKd;I;#xoZCo`s=zy15lH~R+cgZ4(ahpxiF7yTNiO0L+d}Hm4iD?Mc7eo7N3{ML;xsal)BJkQ*~cwA;tdF=yQVc|bW@ znOcKoBn?^1DPWcbY1W9L*_X~*fge}$re5sU9_CN^LH33gnpHR&XB61xedbyAV@a&LW*-%iPGG z^0^6yaO_d9pgY01uI}y95J(N^=&1;+KU*xRTX=i^6!7(p98XbF=n+#-f7IJ|oL5Mk z6_sGkbzimF``D`xPz%d=ij4m%F~!7c?I=m=zmr}fQ}E0uwIN)x$|pemqQz4bm*M(B z(8FVTzNP(kabL?*g|uDVA6%z>nLG-pMQ%Jrid&uS5^-NShbaGxOcU?`R4h?0Mk0A6d(P+<-4p=vf`N>wf^KmreNq literal 0 HcmV?d00001 diff --git a/.gradle/8.5/dependencies-accessors/dependencies-accessors.lock b/.gradle/8.5/dependencies-accessors/dependencies-accessors.lock new file mode 100644 index 0000000000000000000000000000000000000000..6d441af66d25e72edbaa8763342bc67acc965387 GIT binary patch literal 17 TcmZRUe68E2CckwW0~7!NC{hDU literal 0 HcmV?d00001 diff --git a/.gradle/8.5/dependencies-accessors/gc.properties b/.gradle/8.5/dependencies-accessors/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/.gradle/8.5/executionHistory/executionHistory.bin b/.gradle/8.5/executionHistory/executionHistory.bin new file mode 100644 index 0000000000000000000000000000000000000000..b7bef7de05e830b1e2e62580248822cb739f203d GIT binary patch literal 210029 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 literal 0 HcmV?d00001 diff --git a/.gradle/8.5/executionHistory/executionHistory.lock b/.gradle/8.5/executionHistory/executionHistory.lock new file mode 100644 index 0000000000000000000000000000000000000000..8ca11a9af408d117e3b21469d218a4d9dfb115c1 GIT binary patch literal 17 UcmZQxIe8oRyZa7@7$Cq206awn5&!@I literal 0 HcmV?d00001 diff --git a/.gradle/8.5/fileChanges/last-build.bin b/.gradle/8.5/fileChanges/last-build.bin new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/.gradle/8.5/fileHashes/fileHashes.bin b/.gradle/8.5/fileHashes/fileHashes.bin new file mode 100644 index 0000000000000000000000000000000000000000..1f9f1154d6ba26ccb324bc490dc6eda639d8e577 GIT binary patch literal 25597 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 p2393K&d`s+el literal 0 HcmV?d00001 diff --git a/.gradle/8.5/fileHashes/resourceHashesCache.bin b/.gradle/8.5/fileHashes/resourceHashesCache.bin new file mode 100644 index 0000000000000000000000000000000000000000..7fe8d3a773909486567b432a70a34d2878b5cb21 GIT binary patch literal 21183 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 literal 0 HcmV?d00001 diff --git a/.gradle/8.5/gc.properties b/.gradle/8.5/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock new file mode 100644 index 0000000000000000000000000000000000000000..4a7187176c94043e565a03ac61b8b21346b5567c GIT binary patch literal 17 UcmZQpiA*%#__Jmq0|XQT04>D?Q2+n{ literal 0 HcmV?d00001 diff --git a/.gradle/buildOutputCleanup/cache.properties b/.gradle/buildOutputCleanup/cache.properties new file mode 100644 index 0000000..13d45f5 --- /dev/null +++ b/.gradle/buildOutputCleanup/cache.properties @@ -0,0 +1,2 @@ +#Mon Mar 04 17:42:53 GMT+04:00 2024 +gradle.version=8.5 diff --git a/.gradle/buildOutputCleanup/outputFiles.bin b/.gradle/buildOutputCleanup/outputFiles.bin new file mode 100644 index 0000000000000000000000000000000000000000..ee3852a2da00fbd6a5ff88aa8087f826882d9ee1 GIT binary patch literal 19469 zcmeI&e@x7A9LMp)r7piNM9FVia;+b3l`Qik(|zxvKbj%CrG%-Aaij7hKQ@W{st995 zeq}4eEJnW!l^-)@%u-S@%%S-aYdUv6@AsMAe{GG~>$`P*_xQf=-S_*vKd%`wnVZr~ zhwS&^`uh}TD1ZVefC4Ch0w{n2D1ZVefC4Ch0w{n2D1ZVefC4Ch0{=^aIhF@;77yd* z)7^T~FIgt@?`=5=$_U7M6`^p66PGoG{QW`3!XHob66Gs}>z=Tm^O#qkob0}lJdwRH zsC?pn@5ou?F6>1?XJ<{#?9)O%hW)a9_4oH?`E21*q|GCp*Eab*{7P?OteS1#^ha++7Mmre?6>bT-)60U1!zolMOleX?zU*Vc4_Nvpgs3(z93KWeWHP%_Zs`aaeh%P(Z+N!uba<4C`np%Eg>YH{5ZSY3|D=l zF|<;+W*Ym@opV){$Ll<3{tf%E=D`)|Z6Edt*Y;o^nRBVsv$gTDaLJwBbNatYfrJO zy{f-8*X_=r`Niy0-WB(Z2rWvZd1kYAf=|2hem?Dy9Qi`TBd^?H)ti!Neg*s7s9f{- zx50Fu+RZjk7<=JBmFXb;-DLLYve#oxsXbJ*ri`O?pABZO-nvaiX_ z^869tP(ky0_7o4*P49fyo5FP)*we;1&b~fAE}Y+~%%(m;L6>iTx*NzsG*&?@HI*Vdpk?-Mj2J KcTRqNUOxfVILo&H literal 0 HcmV?d00001 diff --git a/.gradle/file-system.probe b/.gradle/file-system.probe new file mode 100644 index 0000000000000000000000000000000000000000..7020664fcc2316acc5f6e18efa017f8fa2236d42 GIT binary patch literal 8 PcmZQzVC)On^K2;q2)P3% literal 0 HcmV?d00001 diff --git a/.gradle/vcs-1/gc.properties b/.gradle/vcs-1/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..42cf79d --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,12 @@ +{ + "recommendations": [ + // fronted + "AndersEAndersen.html-class-suggestions", + "dbaeumer.vscode-eslint", + // backend + "vscjava.vscode-java-pack", + "vmware.vscode-boot-dev-pack", + "vscjava.vscode-gradle", + "redhat.vscode-xml" + ] +} \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..8a4c9bd --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,24 @@ +{ + "configurations": [ + { + "type": "java", + "name": "Demo", + "request": "launch", + "cwd": "${workspaceFolder}", + "mainClass": "com.example.demo.DemoApplication", + "projectName": "demo", + "args": "--populate", + "envFile": "${workspaceFolder}/.env" + }, + { + "type": "java", + "name": "Spring Boot-DemoApplication", + "request": "launch", + "cwd": "${workspaceFolder}", + "mainClass": "com.example.demo.DemoApplication", + "projectName": "lab_2", + "args": "", + "envFile": "${workspaceFolder}/.env" + } + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..d0ad713 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,19 @@ +{ + "editor.tabSize": 4, + "editor.insertSpaces": true, + "editor.formatOnPaste": true, + "editor.formatOnSave": true, + "editor.formatOnType": false, + "java.compile.nullAnalysis.mode": "automatic", + "java.configuration.updateBuildConfiguration": "automatic", + "[java]": { + "editor.pasteAs.enabled": false + }, + "gradle.nestedProjects": true, + "java.saveActions.organizeImports": true, + "java.dependency.packagePresentation": "hierarchical", + "spring-boot.ls.problem.boot2.JAVA_CONSTRUCTOR_PARAMETER_INJECTION": "WARNING", + "spring.initializr.defaultLanguage": "Java", + "java.format.settings.url": ".vscode/eclipse-formatter.xml", + "java.project.explorer.showNonJavaResources": true, +} \ No newline at end of file diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..b7867b9 --- /dev/null +++ b/build.gradle @@ -0,0 +1,28 @@ +plugins { + id 'java' + id 'org.springframework.boot' version '3.2.3' + id 'io.spring.dependency-management' version '1.1.4' +} + +group = 'com.example' +version = '0.0.1-SNAPSHOT' + +java { + sourceCompatibility = '17' +} + +repositories { + mavenCentral() +} + +dependencies { + implementation 'org.springframework.boot:spring-boot-starter-web' + implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.3.0' + implementation 'org.modelmapper:modelmapper:3.2.0' + + testImplementation 'org.springframework.boot:spring-boot-starter-test' +} + +tasks.named('test') { + useJUnitPlatform() +} diff --git a/build/resources/main/application.properties b/build/resources/main/application.properties new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/build/resources/main/application.properties @@ -0,0 +1 @@ + diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/UserController.class.uniqueId0 b/build/tmp/compileJava/compileTransaction/stash-dir/UserController.class.uniqueId0 new file mode 100644 index 0000000000000000000000000000000000000000..1f91c3928897fe7111344fb7e3ee7f5e9b9d73d0 GIT binary patch literal 4088 zcmb_fYj+b>6x}zZ4Na%7pkTowZ`!mlfI!hyv@LH_sBNi=&q*?EhfZd~%%o5e^(X0C zQWt!1`Pt=fa=Gu#B$+gsuITbZ=W*|xv-jEO+>_Hk|9<^DfDiCf8VT%6A*rDUy#m9J zjV(jB4QE|{P1A*Qd%dvv%0{g}%R{O9YeJP|h^g|PvD7t0cd}fp@wyBrQva45p z)AMzsV(Ab0H19fr=i0XE3G~aYWz*ZTil)F+KE{+EZCSpl%)_s95_M3+5Qgcd?3PS> z!KhTE)3Lnkt?O#3td{hJ=5{WHjKGN)pgPAJft$t~cr%5A8V=ztfg^kPqznWSm>$pX zmMRxnnYRt!&rL*DYI2g&VS%$TlvErl@|#Xz1>0%7jj(lCoTYE@)$1U$nl|3fSt zk#1Q!_lk0Rdx>P08vbk#c z7G;=q95*mzUtkcImAHPzvz+xc8QW9W+ti<$1-)Q7CEaLztKT*Q`TM}{=<;e?>BNfA z8dAb4QOrmOSErvRdCRb?46{dnZk1l}_obC{L-!W)SGy*^XapPeG9dk=!$`YntTGQ> zMs}rpGOizya;!DdmF-Gvh7MD#O~VTeof26*xw4_J%0~v$J?N78q-y%XoLkza-J`br zbyG}TD$#vSEmk8!Om{8d4b?`P)tFv(t6tH(Wyv#tpmjt#FMr~Ae7bhNM3q{O{=YF* z8aIgzsG05J`3q`-W8u%aZouD5qf%=p{!lL}X*_|Kg0CS!m6hL|fGlUr-8A*QQ7)7W zS{Q3aF>pPO1pRD6&9}dz*$j!mcfOgk$I2gKv6>m~;{o63K*0$0B!LoG)RPq4&&>ApwsMY`tr)7kZ? zay`1+^~o65%UEf;UZ!gyCvUQqtZx%S@){%S)DDik!g0>zuW=T5g~63O`E%xgC7ify1Q;hmi({ z5wyuzkF-FqMgH|c9OSLUKS`xu5YG%31o78GB^Jp@mS?7>M0QG1neRYlT2ZN0Wu`$T z6Urg$SdwZ~r4&Zyw=T{)1&E51k*SV|BgqMlhOsHS-GS3gM4qlvw6TjtYl@Pv$RdHq kigkuhn|!w$Hf1<`m!;-Xv@JZtHooIZnk&!o0zYE(A2|(B(f|Me literal 0 HcmV?d00001 diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/UserService.class.uniqueId1 b/build/tmp/compileJava/compileTransaction/stash-dir/UserService.class.uniqueId1 new file mode 100644 index 0000000000000000000000000000000000000000..9471d9756dd1dc88197977d16ab8c3d5d8adfcab GIT binary patch literal 3151 zcmb7G{ZkWH6g@8>A?vHA_*I~#exQbcu43(nQ7clYwgD|cthKdWk_W78cGKMrVn6r$2Z4H+6d6?vgA992kbYeQ)nQ_uTu=yKn#b@5NsLZs11)8T4e)D{%mQ z0{N%bhGjaIyK3HBeyXaWK;L!SwZoeNJ%zEQ9Qu*V!jL!!DNw9>byICx^@gL&nyPzd zGf;kD@@K;il=*-U75!XQ0*0>|USNlw|6E|Qyo+ncDDqxt`;-hE!r?6P60c)G;L?5p zn98aOryNIMpfFaBGHr&oW0vh8jL?rt9K&&DN;`pTh1e#lM%i;$OJm)ntDdjSx>r+< zdD{xqj2qhF^HLUX2%O)AU~H{R6I&Y?!f+OEO1y;;a_bPg*9dLTwMf|TR_2?IV=X%@ zWFbu~-X>D(b}J2Vk5B5HP6?Q4rzD$>%SzL&>R4u_*=RVn@>!1|oRJvCS%HI|KjQ>y zan1Lh30zK)qS|#kCQMQqifVgaqJS~(LDg4Q$Sf8Ld#&c4%WhDe<2v67fzl57?r}rN z_XI9Vn7G8;sfAgV-nHr^eRNAWQF@iowo(e?5N64x}0L73F?b;+|z>wa3#)Ggc5wjWB|(zgAyZ7<%InBJm&-wJ|fo?p|( zGZM2~{5tE0a7W^9v@Oj>joYHn*ryWZXo;d$p~_-j;6hjFBH=6F_k45S3unEiTbtRe zsz|X0=5Swkl+Of?q)QO%Zb{(k4x1mhj@{4y82x&udDH|Bmu*+gH|xvFUyRShK-sHW z&XVQZdY&xyhHG{pFwrfvUE5TNJ#bEiYhLZX<#SU)wljfT#a?x-u<0}QjV%eZd&l+N z@LxXZrJID$*fqv@xwQx^?pl&Am>mv8oKTk~&zp)`lE8kPYF(SQ=M?u7MygG=-XLy+ z0@AVS%Qb71A|IvLr@Bb&fc+{Nve-t&Yx-3+YwNz5*F876jxOrnCos6sWO?dp$qsDl zX3BNF(9(^Nn_eh;{;C-?^ci2#THsk)Hv=j{dExVhG7~5*ncJQh2BB{?V(kQn`|#Aj zI-D%(5-vP}(^0pL`iAXpc&*U5S0HhU1KhFPnxlfzvgfTg z8>N(*k}i{4+2*)N;%W1}zl=k^+Be<%6Xa>jaVmDGN_l+ya{o;3E*2}$tvi%hMm3KO zeaGy7ujO6WRsOWYuBU=5_>pn8tK>UXFN^O5MqX{oa}<{vr${uzdzBZp{s!Vxmd^*U zz|{(8vmEt%qxd^Sar`%Af8i{HMgAT_4}bIM_Y>gevekpAYap z;UM$}56v|EBxizSfALpjTX^kfKF8pF(fY9nRK_+5=%dKy3$F2IOmH4@)HH`R&Ugz) z{>F(vFgX4KZv!oy=ClJH^B%-eeiIB~FvWYg&3hP+@g+kfydM*rM+jdf@opvYWD@V( zwg55rkrc3O14}%?*B#&|5%67nlK}t3v6pL;MP^Z)zcA6lg%&RB@oEe2>#@|rO+8Mv z@R1JB_aAQyKZHIaoaXNt?$Idsx z0KU>SD7S0ANJA}vfr#pyrb1SqY@?#T$AR$(P|M?F?9mQAkc94|^mM>Xs^ED;pC5+Q zLb*amEtK4!n0rJm-s@~J*Z8j$WfQUiA5A>tiouml Je1{(}_&;*bIe7p8 literal 0 HcmV?d00001 diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin new file mode 100644 index 0000000000000000000000000000000000000000..93eee6a98bb20ef00eaf4ab061dd431a31436a2e GIT binary patch literal 38871 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

Ek`GXWVw*ycB;Q_qkv(nurybP!t-GoB1Ga@f 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 E0UkG*X#fBK literal 0 HcmV?d00001 diff --git a/build/tmp/compileTestJava/compileTransaction/stash-dir/UserServiceTests.class.uniqueId0 b/build/tmp/compileTestJava/compileTransaction/stash-dir/UserServiceTests.class.uniqueId0 new file mode 100644 index 0000000000000000000000000000000000000000..026053e57679e2908c11789a5742f1e4cbc6efd7 GIT binary patch literal 3750 zcmbVOd3O`n9lcMIEm;h)5e|vj7YA%(7!uYXNHJi7i7+HKh9srUSbCPn9?ghZyb!Xq z&C(@l(H_D678d*f|=?YS;ixAT1YUG4Q3p^}a%rmK&aQ$D})F z7Uj6~d@tW$aNM#!6VN`NRnwQQZd6TuDzJ-6wLToGGbSyW&*Cw3rqQKg6LJE(TT2dk zw4p>j0nG>pB)7YZn2|OvV=PMx#YzP`G z2n;r}q}Dy155sgcr{K|!LiHv82&NeHNW;u|3nrC(3eKP zh5;ND7+3>P3kI01MOPXszs6hSS8F1eWouYiO<6vJL*#78k_#E=%;p!|#bDN%%iw8& zO;gjdET`RbM zHRbhnW@}te)N$gORGaCa$lxU+A0HkYS6Mi&;RYsDu1fz>U|F_NAtT)@T!y%6NtnSc z3i@m(3dAcKUd1=be^4!jX;O;YkMelE$?#}^zop^Z3UFuCbl4@MNGY!j4U>x6c2=nL zJ3hI=GGNu_%LLDi^5~d!!u=C9*K4%pNS7L=20#XIlgXD_Vlt9l*0b4*tPMDs_ z);VO`j&IbO;;FFbc~w=xQ!aUB<!$|(AdyQmv=0evX&oq5xhr94@_z!pP< z1=E(JL1j|9(4)wnj9@~2Ja>AvRTi?y`q7+`u5z4{i|zD7@0tMnlo z)qk`%#U@UX^#@8|#~SLdxh3gRe_L25NtTqLu_%ioW4RdbwcKMwW!P&8z_CiBVU~8- zaz5(7N=t%TqNpn^Y9`4;*fJ`UC8M_ny7ve-)sIszjUTW|8%I_BwBfEXCvc1MlBrmK zd^L}Um5jiN))96bU-#()&vM(B3%))U=D>N*E7yqqz#81B<*U-4c1kNO9baQ-Y?pL< z!`+SKqlGSI>KO8twEt+ws#Zeuj_J_(a3c@e6^y4dkXh=gdmI5VA!Hqn4m-43+rk zKk*{32}K4j8+OT(UT?v1W`k|Q8*C_=lNFqHs;a;56}TDW8=++5_L-kJ<#YwL(#^Xq7|R! zl};?wmHq>nP;O@6b8P-6dR`W}ZMhw}UAaB?v2O|cZ#L!!bBA+BTFyVym@l*|fh8RK z0;dE$eD0tccjNprE-vB9GDaI7Z>1N&4*I(jN3e^>{vO=IUYOVyBG?jnRzq-^D~q^G z3KW)3t|=_9b9`?EZ}9WYI;j7W9d(x2xfcr$nZG)?gt5`almeWkXStivFU0)v>C|cv zJ*kFFgd+E1Pl~#T=TPnAb_3Xc6&>^;iGD_P09$Ynr!Yu>hwusxqr^n05V8u>vB=XJ z$RuV-!CM5i3Agb!;U*}33*X^fk~&V{yPQk4qTqW}_D-FG2i&e&^=om*U%T0+hOy{G ztHmfdg>DoNE>bYIC4NLppW-wA|C%#73j7AY!yg#mKjP2$ HD|-G9)0^p; literal 0 HcmV?d00001 diff --git a/build/tmp/compileTestJava/previous-compilation-data.bin b/build/tmp/compileTestJava/previous-compilation-data.bin new file mode 100644 index 0000000000000000000000000000000000000000..f34352f31f82e65041dd85bb7ff55b720cb6eea8 GIT binary patch literal 26353 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

OJ z0Am2D7YqcFtRLY^YODElmbFo^sQW6K7UtSi9$o1rM4aOo-5$U zJgHB3B;{k=<6$9=e0ruXj)me`5Dg{3j*`cOaH@hqnEFA{&4qa;xQsDEqd3q4B9HrIR%M9cv%4)YDkXqhR?S16uHJM8L}c5W18!<|G9em(DHk ze4bS?8b(P67+LWAA`_;;>EPYreQP-O60{PAy9)n^#uvI!%N@=>VL|u^<1!(~`@?HC zbTQt_##{YNw0_D$Su7}lWWzm$&>n*)0zJkzP@S@xa*WzaPZy3npOpiAhU20W_m`V= zrmH*&UdSCkVM2Sk!DqoUAU?ja^1hP^$?x2{UfsQSzS6I$7Qvy=VyI>%3KKC=fW0yi? zFI;W;^Q+V@YNC_{PY+>r#-alI;-ykYlV*y7oMl~8-m=g;7WhmOr*x#q@BEA!i)Pd0 z*_p$A#j#~9R1PBeuisI*?!_pbm?BfD)E^!!bbIxlrS%=&ZE}wHzgN7%upGPnAwnw3 zYb2urv<*;+nv4tW^|;3Q%U7Bz#Rn@lF!KX?D_N=^S&CIG%|DD!IHx(_Es0}{aRz6L zOq-RQpp%RRg`e`N3eKx$!8-`pAvrAfoZ(5Cv|^9wpf-(%FKbw+7RMYeKZ`OK`9&(s zsG0NLY){g6%Argu$JyGkmAPS9{YCSrnSQt7@;Vl($2Dmej_Rb~s@)}bb{%MvJv>Wf z+5V=11x_`LGxzMF?X8a3oS~MU?|!pnq>%-Mzt6b-FyUmiJXh(hNZog#(dEF7=okG> zEahgF>KB&IT{@(+!5j3DXAI4FWuK@y`n5x4;Pkr|7HVZ76$wH;ce@nUT;4caxlQY; zV9zYZSC)1gOS_$=-bn0VLEX{HM*IypR?>n25ozDSnv;DM4$C+%&ejk=xOa83(03L* zuL;L(P}mKn=aa>6q8=N+e0Ff+uuT^Wb>o!lVc`#L|9y=BOry!ySn_tv+15DORHH7R zuMdxbE9nq8$~STfj_ul^obPlycVFzLtUea{fg`3L&gbJ#Fk$V=hwC(=>M*-`xsI(D zO5z3wSnz@l#-+-Q^C<78`5rXp}?wx;FXp9ARSkiacx>;`YSsC^9aLU!6y`t4Sd#RixSBq^` zYgN)Jnh7VezaAJEXF&)A`*g(REx(r_@))l_Xkh#P>ZS?MytoL2Cm2t0i+NwsT5GoG z;d=44zbr_5z>sea$z?DG}@6^v~~-c4Z?s zHuMBU;Lt5pD~mR9=sPBreKDzbWLL5~8+ouHMeoTbctDXBUS+|g?>h@=I+I6Vyhu!{ zq?IUd_F^M%Hk5oMxjFBYB^JYr?y>dy*=}~YcDp}YD}b$ZlMRm-0%04l z+3=Ma0!uT{fGaf`)AnAgmY;f9LG#yvg5yDKm0?IkhkHt z9aqRJgD#J7HY6J1J29X-%84_GGgE-43s*^cDw`JuXGY-H1sIMFXKc-n5k}8>zY|lk z+;Hy&iL)=TKSLa1k+8vj`{AN0f$tqQiey86AIIuM(J@kWZNB}5C7c`GYjdyPWuquI zI7HEK6ubks0)~TGAKbXV#zQH;R`1&Ui>WhP@g7_AK3g+}t@f8xLVm!8M6^g83pW%B z@ah`mU5~D?-0yX;c>ay;+sqt7*A~aIp#=^$IzeVf8~cdc=kvuOZx4iNWvNmuytXhA*Cw=+A)z z?NfhhEs!SAr<8{fN3RsI(JMBX!PmfI__I!cW1#Q%@E!9*OJ_yzfiLDF+%0Awe#4e4 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 '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..93e3f59 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,92 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..0a383dd --- /dev/null +++ b/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'demo' diff --git a/src/main/java/com/example/demo/DemoApplication.java b/src/main/java/com/example/demo/DemoApplication.java new file mode 100644 index 0000000..b365b54 --- /dev/null +++ b/src/main/java/com/example/demo/DemoApplication.java @@ -0,0 +1,50 @@ +package com.example.demo; + +import java.util.Objects; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.CommandLineRunner; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +import com.example.demo.items.model.ItemEntity; +import com.example.demo.items.service.ItemService; +import com.example.demo.types.model.TypeEntity; +import com.example.demo.types.service.TypeService; + +@SpringBootApplication +public class DemoApplication implements CommandLineRunner { + private final Logger log = LoggerFactory.getLogger(DemoApplication.class); + + private final TypeService typeService; + private final ItemService itemService; + + public DemoApplication(TypeService typeService, ItemService itemService) { + this.typeService = typeService; + this.itemService = itemService; + } + + public static void main(String[] args) { + SpringApplication.run(DemoApplication.class, args); + } + + @Override + public void run(String... args) throws Exception { + if (args.length > 0 && Objects.equals("--populate", args[0])) { + log.info("Create default types values"); + final var type1 = typeService.create(new TypeEntity(null, "Ноутбук")); + final var type2 = typeService.create(new TypeEntity(null, "Телефон")); + final var type3 = typeService.create(new TypeEntity(null, "Игровая приставка")); + + log.info("Create default items values"); + itemService.create(new ItemEntity(null, type1, 49999.00, 20)); + itemService.create(new ItemEntity(null, type1, 129999.00, 3)); + itemService.create(new ItemEntity(null, type2, 15450.50, 30)); + itemService.create(new ItemEntity(null, type2, 69900.50, 10)); + itemService.create(new ItemEntity(null, type2, 150000.00, 6)); + itemService.create(new ItemEntity(null, type3, 75000.00, 6)); + itemService.create(new ItemEntity(null, type3, 67800.00, 3)); + } + } +} diff --git a/src/main/java/com/example/demo/core/configuration/Constants.java b/src/main/java/com/example/demo/core/configuration/Constants.java new file mode 100644 index 0000000..d9c6b7c --- /dev/null +++ b/src/main/java/com/example/demo/core/configuration/Constants.java @@ -0,0 +1,8 @@ +package com.example.demo.core.configuration; + +public class Constants { + public static final String API_URL = "/api/1.0"; + + private Constants() { + } +} diff --git a/src/main/java/com/example/demo/core/configuration/MapperConfiguration.java b/src/main/java/com/example/demo/core/configuration/MapperConfiguration.java new file mode 100644 index 0000000..a5ad6f3 --- /dev/null +++ b/src/main/java/com/example/demo/core/configuration/MapperConfiguration.java @@ -0,0 +1,13 @@ +package com.example.demo.core.configuration; + +import org.modelmapper.ModelMapper; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class MapperConfiguration { + @Bean + ModelMapper modelMapper() { + return new ModelMapper(); + } +} diff --git a/src/main/java/com/example/demo/core/configuration/WebConfiguration.java b/src/main/java/com/example/demo/core/configuration/WebConfiguration.java new file mode 100644 index 0000000..762e85a --- /dev/null +++ b/src/main/java/com/example/demo/core/configuration/WebConfiguration.java @@ -0,0 +1,15 @@ +package com.example.demo.core.configuration; + +import org.springframework.context.annotation.Configuration; +import org.springframework.lang.NonNull; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +public class WebConfiguration implements WebMvcConfigurer { + @Override + public void addCorsMappings(@NonNull CorsRegistry registry) { + registry.addMapping("/**") + .allowedMethods("GET", "POST", "PUT", "DELETE"); + } +} diff --git a/src/main/java/com/example/demo/core/error/NotFoundException.java b/src/main/java/com/example/demo/core/error/NotFoundException.java new file mode 100644 index 0000000..586af3c --- /dev/null +++ b/src/main/java/com/example/demo/core/error/NotFoundException.java @@ -0,0 +1,7 @@ +package com.example.demo.core.error; + +public class NotFoundException extends RuntimeException { + public NotFoundException(Long id) { + super(String.format("Entity with id [%s] is not found or not exists", id)); + } +} diff --git a/src/main/java/com/example/demo/core/model/BaseEntity.java b/src/main/java/com/example/demo/core/model/BaseEntity.java new file mode 100644 index 0000000..674ddfb --- /dev/null +++ b/src/main/java/com/example/demo/core/model/BaseEntity.java @@ -0,0 +1,20 @@ +package com.example.demo.core.model; + +public abstract class BaseEntity { + protected Long id; + + protected BaseEntity() { + } + + protected BaseEntity(Long id) { + this.id = id; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } +} diff --git a/src/main/java/com/example/demo/core/repository/CommonRepository.java b/src/main/java/com/example/demo/core/repository/CommonRepository.java new file mode 100644 index 0000000..85e1e6d --- /dev/null +++ b/src/main/java/com/example/demo/core/repository/CommonRepository.java @@ -0,0 +1,17 @@ +package com.example.demo.core.repository; + +import java.util.List; + +public interface CommonRepository { + List getAll(); + + E get(T id); + + E create(E entity); + + E update(E entity); + + E delete(E entity); + + void deleteAll(); +} diff --git a/src/main/java/com/example/demo/core/repository/MapRepository.java b/src/main/java/com/example/demo/core/repository/MapRepository.java new file mode 100644 index 0000000..6809ac2 --- /dev/null +++ b/src/main/java/com/example/demo/core/repository/MapRepository.java @@ -0,0 +1,57 @@ +package com.example.demo.core.repository; + +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + +import com.example.demo.core.model.BaseEntity; + +public abstract class MapRepository implements CommonRepository { + private final Map entities = new TreeMap<>(); + private Long lastId = 0L; + + protected MapRepository() { + } + + @Override + public List getAll() { + return entities.values().stream().toList(); + } + + @Override + public E get(Long id) { + return entities.get(id); + } + + @Override + public E create(E entity) { + lastId++; + entity.setId(lastId); + entities.put(lastId, entity); + return entity; + } + + @Override + public E update(E entity) { + if (get(entity.getId()) == null) { + return null; + } + entities.put(entity.getId(), entity); + return entity; + } + + @Override + public E delete(E entity) { + if (get(entity.getId()) == null) { + return null; + } + entities.remove(entity.getId()); + return entity; + } + + @Override + public void deleteAll() { + lastId = 0L; + entities.clear(); + } +} diff --git a/src/main/java/com/example/demo/items/api/ItemController.java b/src/main/java/com/example/demo/items/api/ItemController.java new file mode 100644 index 0000000..8de1407 --- /dev/null +++ b/src/main/java/com/example/demo/items/api/ItemController.java @@ -0,0 +1,69 @@ +package com.example.demo.items.api; + +import java.util.List; + +import org.modelmapper.ModelMapper; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import com.example.demo.core.configuration.Constants; +import com.example.demo.items.model.ItemEntity; +import com.example.demo.items.service.ItemService; +import com.example.demo.types.service.TypeService; + +import jakarta.validation.Valid; + +@RestController +@RequestMapping(Constants.API_URL + "/item") +public class ItemController { + private final ItemService itemService; + private final TypeService typeService; + private final ModelMapper modelMapper; + + public ItemController(ItemService itemService, TypeService typeService, ModelMapper modelMapper) { + this.itemService = itemService; + this.typeService = typeService; + this.modelMapper = modelMapper; + } + + private ItemDto toDto(ItemEntity entity) { + return modelMapper.map(entity, ItemDto.class); + } + + private ItemEntity toEntity(ItemDto dto) { + final ItemEntity entity = modelMapper.map(dto, ItemEntity.class); + entity.setType(typeService.get(dto.getTypeId())); + return entity; + } + + @GetMapping + public List getAll(@RequestParam(name = "typeId", defaultValue = "0") Long typeId) { + return itemService.getAll(typeId).stream().map(this::toDto).toList(); + } + + @GetMapping("/{id}") + public ItemDto get(@PathVariable(name = "id") Long id) { + return toDto(itemService.get(id)); + } + + @PostMapping + public ItemDto create(@RequestBody @Valid ItemDto dto) { + return toDto(itemService.create(toEntity(dto))); + } + + @PutMapping("/{id}") + public ItemDto update(@PathVariable(name = "id") Long id, @RequestBody ItemDto dto) { + return toDto(itemService.update(id, toEntity(dto))); + } + + @DeleteMapping("/{id}") + public ItemDto delete(@PathVariable(name = "id") Long id) { + return toDto(itemService.delete(id)); + } +} diff --git a/src/main/java/com/example/demo/items/api/ItemDto.java b/src/main/java/com/example/demo/items/api/ItemDto.java new file mode 100644 index 0000000..023ffc4 --- /dev/null +++ b/src/main/java/com/example/demo/items/api/ItemDto.java @@ -0,0 +1,57 @@ +package com.example.demo.items.api; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotNull; + +public class ItemDto { + private Long id; + @NotNull + @Min(1) + private Long typeId; + @NotNull + @Min(1) + private Double price; + @NotNull + @Min(1) + private Integer count; + + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getTypeId() { + return typeId; + } + + public void setTypeId(Long typeId) { + this.typeId = typeId; + } + + public Double getPrice() { + return price; + } + + public void setPrice(Double price) { + this.price = price; + } + + public Integer getCount() { + return count; + } + + public void setCount(Integer count) { + this.count = count; + } + + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + public Double getSum() { + return price * count; + } +} diff --git a/src/main/java/com/example/demo/items/model/ItemEntity.java b/src/main/java/com/example/demo/items/model/ItemEntity.java new file mode 100644 index 0000000..55951d9 --- /dev/null +++ b/src/main/java/com/example/demo/items/model/ItemEntity.java @@ -0,0 +1,65 @@ +package com.example.demo.items.model; + +import java.util.Objects; + +import com.example.demo.core.model.BaseEntity; +import com.example.demo.types.model.TypeEntity; + +public class ItemEntity extends BaseEntity { + private TypeEntity type; + private Double price; + private Integer count; + + public ItemEntity() { + super(); + } + + public ItemEntity(Long id, TypeEntity type, Double price, Integer count) { + super(id); + this.type = type; + this.price = price; + this.count = count; + } + + public TypeEntity getType() { + return type; + } + + public void setType(TypeEntity type) { + this.type = type; + } + + public Double getPrice() { + return price; + } + + public void setPrice(Double price) { + this.price = price; + } + + public Integer getCount() { + return count; + } + + public void setCount(Integer count) { + this.count = count; + } + + @Override + public int hashCode() { + return Objects.hash(id, type, price, count); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null || getClass() != obj.getClass()) + return false; + final ItemEntity other = (ItemEntity) obj; + return Objects.equals(other.getId(), id) + && Objects.equals(other.getType(), type) + && Objects.equals(other.getPrice(), price) + && Objects.equals(other.getCount(), count); + } +} diff --git a/src/main/java/com/example/demo/items/repository/ItemRepository.java b/src/main/java/com/example/demo/items/repository/ItemRepository.java new file mode 100644 index 0000000..6488c26 --- /dev/null +++ b/src/main/java/com/example/demo/items/repository/ItemRepository.java @@ -0,0 +1,10 @@ +package com.example.demo.items.repository; + +import org.springframework.stereotype.Repository; + +import com.example.demo.core.repository.MapRepository; +import com.example.demo.items.model.ItemEntity; + +@Repository +public class ItemRepository extends MapRepository { +} diff --git a/src/main/java/com/example/demo/items/service/ItemService.java b/src/main/java/com/example/demo/items/service/ItemService.java new file mode 100644 index 0000000..7678a2c --- /dev/null +++ b/src/main/java/com/example/demo/items/service/ItemService.java @@ -0,0 +1,51 @@ +package com.example.demo.items.service; + +import java.util.List; +import java.util.Objects; +import java.util.Optional; + +import org.springframework.stereotype.Service; + +import com.example.demo.core.error.NotFoundException; +import com.example.demo.items.model.ItemEntity; +import com.example.demo.items.repository.ItemRepository; + +@Service +public class ItemService { + private final ItemRepository repository; + + public ItemService(ItemRepository repository) { + this.repository = repository; + } + + public List getAll(Long typeId) { + if (Objects.equals(typeId, 0L)) { + return repository.getAll(); + } + return repository.getAll().stream() + .filter(item -> item.getType().getId().equals(typeId)) + .toList(); + } + + public ItemEntity get(Long id) { + return Optional.ofNullable(repository.get(id)) + .orElseThrow(() -> new NotFoundException(id)); + } + + public ItemEntity create(ItemEntity entity) { + return repository.create(entity); + } + + public ItemEntity update(Long id, ItemEntity entity) { + final ItemEntity existsEntity = get(id); + existsEntity.setType(entity.getType()); + existsEntity.setPrice(entity.getPrice()); + existsEntity.setCount(entity.getCount()); + return repository.update(existsEntity); + } + + public ItemEntity delete(Long id) { + final ItemEntity existsEntity = get(id); + return repository.delete(existsEntity); + } +} diff --git a/src/main/java/com/example/demo/speaker/api/SpeakerController.java b/src/main/java/com/example/demo/speaker/api/SpeakerController.java new file mode 100644 index 0000000..293296d --- /dev/null +++ b/src/main/java/com/example/demo/speaker/api/SpeakerController.java @@ -0,0 +1,23 @@ +package com.example.demo.speaker.api; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.example.demo.speaker.service.SpeakerService; + +@RestController +public class SpeakerController { + private final SpeakerService speakerService; + + public SpeakerController(SpeakerService speakerService) { + this.speakerService = speakerService; + } + + @GetMapping + public String hello( + @RequestParam(value = "name", defaultValue = "Мир") String name, + @RequestParam(value = "lang", defaultValue = "ru") String lang) { + return speakerService.say(name, lang); + } +} diff --git a/src/main/java/com/example/demo/speaker/configuration/SpeakerConfiguration.java b/src/main/java/com/example/demo/speaker/configuration/SpeakerConfiguration.java new file mode 100644 index 0000000..0ef7cda --- /dev/null +++ b/src/main/java/com/example/demo/speaker/configuration/SpeakerConfiguration.java @@ -0,0 +1,27 @@ +package com.example.demo.speaker.configuration; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import com.example.demo.speaker.domain.Speaker; +import com.example.demo.speaker.domain.SpeakerEng; +import com.example.demo.speaker.domain.SpeakerRus; + +@Configuration +public class SpeakerConfiguration { + private final Logger log = LoggerFactory.getLogger(SpeakerConfiguration.class); + + @Bean(value = "ru", initMethod = "init", destroyMethod = "destroy") + public SpeakerRus createRusSpeaker() { + log.info("Call createRusSpeaker()"); + return new SpeakerRus(); + } + + @Bean(value = "en") + public Speaker createEngSpeaker() { + log.info("Call createEngSpeaker()"); + return new SpeakerEng(); + } +} diff --git a/src/main/java/com/example/demo/speaker/domain/Speaker.java b/src/main/java/com/example/demo/speaker/domain/Speaker.java new file mode 100644 index 0000000..27a0a29 --- /dev/null +++ b/src/main/java/com/example/demo/speaker/domain/Speaker.java @@ -0,0 +1,5 @@ +package com.example.demo.speaker.domain; + +public interface Speaker { + String say(); +} diff --git a/src/main/java/com/example/demo/speaker/domain/SpeakerDeu.java b/src/main/java/com/example/demo/speaker/domain/SpeakerDeu.java new file mode 100644 index 0000000..5909864 --- /dev/null +++ b/src/main/java/com/example/demo/speaker/domain/SpeakerDeu.java @@ -0,0 +1,28 @@ +package com.example.demo.speaker.domain; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import jakarta.annotation.PostConstruct; +import jakarta.annotation.PreDestroy; + +@Component(value = "de") +public class SpeakerDeu implements Speaker { + private final Logger log = LoggerFactory.getLogger(SpeakerDeu.class); + + @Override + public String say() { + return "Hallo"; + } + + @PostConstruct + public void init() { + log.info("SpeakerDeu.init()"); + } + + @PreDestroy + public void destroy() { + log.info("SpeakerDeu.destroy()"); + } +} diff --git a/src/main/java/com/example/demo/speaker/domain/SpeakerEng.java b/src/main/java/com/example/demo/speaker/domain/SpeakerEng.java new file mode 100644 index 0000000..a310403 --- /dev/null +++ b/src/main/java/com/example/demo/speaker/domain/SpeakerEng.java @@ -0,0 +1,26 @@ +package com.example.demo.speaker.domain; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.DisposableBean; +import org.springframework.beans.factory.InitializingBean; + +public class SpeakerEng implements Speaker, InitializingBean, DisposableBean { + private final Logger log = LoggerFactory.getLogger(SpeakerEng.class); + + @Override + public String say() { + return "Hello"; + } + + @Override + public void afterPropertiesSet() { + log.info("SpeakerEng.afterPropertiesSet()"); + } + + @Override + public void destroy() { + log.info("SpeakerEng.destroy()"); + + } +} diff --git a/src/main/java/com/example/demo/speaker/domain/SpeakerRus.java b/src/main/java/com/example/demo/speaker/domain/SpeakerRus.java new file mode 100644 index 0000000..d6ed18e --- /dev/null +++ b/src/main/java/com/example/demo/speaker/domain/SpeakerRus.java @@ -0,0 +1,21 @@ +package com.example.demo.speaker.domain; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class SpeakerRus implements Speaker { + private final Logger log = LoggerFactory.getLogger(SpeakerRus.class); + + @Override + public String say() { + return "Привет"; + } + + public void init() { + log.info("SpeakerRus.init()"); + } + + public void destroy() { + log.info("SpeakerRus.destroy()"); + } +} diff --git a/src/main/java/com/example/demo/speaker/service/SpeakerService.java b/src/main/java/com/example/demo/speaker/service/SpeakerService.java new file mode 100644 index 0000000..db81ba4 --- /dev/null +++ b/src/main/java/com/example/demo/speaker/service/SpeakerService.java @@ -0,0 +1,20 @@ +package com.example.demo.speaker.service; + +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Service; + +import com.example.demo.speaker.domain.Speaker; + +@Service +public class SpeakerService { + private final ApplicationContext applicationContext; + + public SpeakerService(ApplicationContext applicationContext) { + this.applicationContext = applicationContext; + } + + public String say(String name, String lang) { + final Speaker speaker = (Speaker) applicationContext.getBean(lang); + return String.format("%s, %s!", speaker.say(), name); + } +} diff --git a/src/main/java/com/example/demo/types/api/TypeController.java b/src/main/java/com/example/demo/types/api/TypeController.java new file mode 100644 index 0000000..81f07cf --- /dev/null +++ b/src/main/java/com/example/demo/types/api/TypeController.java @@ -0,0 +1,64 @@ +package com.example.demo.types.api; + +import java.util.List; + +import org.modelmapper.ModelMapper; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.example.demo.core.configuration.Constants; +import com.example.demo.types.model.TypeEntity; +import com.example.demo.types.service.TypeService; + +import jakarta.validation.Valid; + +@RestController +@RequestMapping(Constants.API_URL + "/type") +public class TypeController { + private final TypeService typeService; + private final ModelMapper modelMapper; + + public TypeController(TypeService typeService, ModelMapper modelMapper) { + this.typeService = typeService; + this.modelMapper = modelMapper; + } + + private TypeDto toDto(TypeEntity entity) { + return modelMapper.map(entity, TypeDto.class); + } + + private TypeEntity toEntity(TypeDto dto) { + return modelMapper.map(dto, TypeEntity.class); + } + + @GetMapping + public List getAll() { + return typeService.getAll().stream().map(this::toDto).toList(); + } + + @GetMapping("/{id}") + public TypeDto get(@PathVariable(name = "id") Long id) { + return toDto(typeService.get(id)); + } + + @PostMapping + public TypeDto create(@RequestBody @Valid TypeDto dto) { + return toDto(typeService.create(toEntity(dto))); + } + + @PutMapping("/{id}") + public TypeDto update(@PathVariable(name = "id") Long id, @RequestBody TypeDto dto) { + return toDto(typeService.update(id, toEntity(dto))); + } + + @DeleteMapping("/{id}") + public TypeDto delete(@PathVariable(name = "id") Long id) { + return toDto(typeService.delete(id)); + } +} diff --git a/src/main/java/com/example/demo/types/api/TypeDto.java b/src/main/java/com/example/demo/types/api/TypeDto.java new file mode 100644 index 0000000..c559680 --- /dev/null +++ b/src/main/java/com/example/demo/types/api/TypeDto.java @@ -0,0 +1,28 @@ +package com.example.demo.types.api; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import jakarta.validation.constraints.NotBlank; + +public class TypeDto { + private Long id; + @NotBlank + private String name; + + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/src/main/java/com/example/demo/types/model/TypeEntity.java b/src/main/java/com/example/demo/types/model/TypeEntity.java new file mode 100644 index 0000000..fd90bdb --- /dev/null +++ b/src/main/java/com/example/demo/types/model/TypeEntity.java @@ -0,0 +1,43 @@ +package com.example.demo.types.model; + +import java.util.Objects; + +import com.example.demo.core.model.BaseEntity; + +public class TypeEntity extends BaseEntity { + private String name; + + public TypeEntity() { + super(); + } + + public TypeEntity(Long id, String name) { + super(id); + this.name = name; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Override + public int hashCode() { + return Objects.hash(id, name); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null || getClass() != obj.getClass()) + return false; + final TypeEntity other = (TypeEntity) obj; + return Objects.equals(other.getId(), id) + && Objects.equals(other.getName(), name); + } + +} diff --git a/src/main/java/com/example/demo/types/repository/TypeRepository.java b/src/main/java/com/example/demo/types/repository/TypeRepository.java new file mode 100644 index 0000000..1c29ea2 --- /dev/null +++ b/src/main/java/com/example/demo/types/repository/TypeRepository.java @@ -0,0 +1,10 @@ +package com.example.demo.types.repository; + +import org.springframework.stereotype.Repository; + +import com.example.demo.core.repository.MapRepository; +import com.example.demo.types.model.TypeEntity; + +@Repository +public class TypeRepository extends MapRepository { +} diff --git a/src/main/java/com/example/demo/types/service/TypeService.java b/src/main/java/com/example/demo/types/service/TypeService.java new file mode 100644 index 0000000..e71b030 --- /dev/null +++ b/src/main/java/com/example/demo/types/service/TypeService.java @@ -0,0 +1,43 @@ +package com.example.demo.types.service; + +import java.util.List; +import java.util.Optional; + +import org.springframework.stereotype.Service; + +import com.example.demo.core.error.NotFoundException; +import com.example.demo.types.model.TypeEntity; +import com.example.demo.types.repository.TypeRepository; + +@Service +public class TypeService { + private final TypeRepository repository; + + public TypeService(TypeRepository repository) { + this.repository = repository; + } + + public List getAll() { + return repository.getAll(); + } + + public TypeEntity get(Long id) { + return Optional.ofNullable(repository.get(id)) + .orElseThrow(() -> new NotFoundException(id)); + } + + public TypeEntity create(TypeEntity entity) { + return repository.create(entity); + } + + public TypeEntity update(Long id, TypeEntity entity) { + final TypeEntity existsEntity = get(id); + existsEntity.setName(entity.getName()); + return repository.update(existsEntity); + } + + public TypeEntity delete(Long id) { + final TypeEntity existsEntity = get(id); + return repository.delete(existsEntity); + } +} diff --git a/src/main/java/com/example/demo/users/api/UserController.java b/src/main/java/com/example/demo/users/api/UserController.java new file mode 100644 index 0000000..e0defce --- /dev/null +++ b/src/main/java/com/example/demo/users/api/UserController.java @@ -0,0 +1,63 @@ +package com.example.demo.users.api; + +import java.util.List; + +import org.modelmapper.ModelMapper; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.example.demo.core.configuration.Constants; +import com.example.demo.users.model.UserEntity; +import com.example.demo.users.service.UserService; + +import jakarta.validation.Valid; + +@RestController +@RequestMapping(Constants.API_URL + "/user") +public class UserController { + private final UserService userService; + private final ModelMapper modelMapper; + + public UserController(UserService userService, ModelMapper modelMapper) { + this.userService = userService; + this.modelMapper = modelMapper; + } + + private UserDto toDto(UserEntity entity) { + return modelMapper.map(entity, UserDto.class); + } + + private UserEntity toEntity(UserDto dto) { + return modelMapper.map(dto, UserEntity.class); + } + + @GetMapping + public List getAll() { + return userService.getAll().stream().map(this::toDto).toList(); + } + + @GetMapping("/{id}") + public UserDto get(@PathVariable(name = "id") Long id) { + return toDto(userService.get(id)); + } + + @PostMapping + public UserDto create(@RequestBody @Valid UserDto dto) { + return toDto(userService.create(toEntity(dto))); + } + + @PutMapping("/{id}") + public UserDto update(@PathVariable(name = "id") Long id, @RequestBody UserDto dto) { + return toDto(userService.update(id, toEntity(dto))); + } + + @DeleteMapping("/{id}") + public UserDto delete(@PathVariable(name = "id") Long id) { + return toDto(userService.delete(id)); + } +} diff --git a/src/main/java/com/example/demo/users/api/UserDto.java b/src/main/java/com/example/demo/users/api/UserDto.java new file mode 100644 index 0000000..31fabd8 --- /dev/null +++ b/src/main/java/com/example/demo/users/api/UserDto.java @@ -0,0 +1,63 @@ +package com.example.demo.users.api; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; + +public class UserDto { + private Long id; + @NotNull + @Min(1) + private String fullname; + @NotBlank + private String surname; + @NotBlank + private String email; + @NotBlank + private String password; + + @NotBlank + + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getFullname() { + return fullname; + } + + public void setFullname(String fullname) { + this.fullname = fullname; + } + + public String getSurname() { + return surname; + } + + public void setSurname(String surname) { + this.surname = surname; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } +} diff --git a/src/main/java/com/example/demo/users/model/UserEntity.java b/src/main/java/com/example/demo/users/model/UserEntity.java new file mode 100644 index 0000000..e885b62 --- /dev/null +++ b/src/main/java/com/example/demo/users/model/UserEntity.java @@ -0,0 +1,75 @@ +package com.example.demo.users.model; + +import java.util.Objects; + +import com.example.demo.core.model.BaseEntity; + +public class UserEntity extends BaseEntity { + private String fullname; + private String surname; + private String email; + private String password; + + public UserEntity() { + super(); + } + + public UserEntity(Long id, String fullname, String surname, String email, String password) { + super(id); + this.fullname = fullname; + this.surname = surname; + this.email = email; + this.password = password; + } + + public String getFullname() { + return fullname; + } + + public void setFullname(String fullname) { + this.fullname = fullname; + } + + public String getSurname() { + return surname; + } + + public void setSurname(String surname) { + this.surname = surname; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + @Override + public int hashCode() { + return Objects.hash(id, fullname, surname, email, password); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null || getClass() != obj.getClass()) + return false; + final UserEntity other = (UserEntity) obj; + return Objects.equals(other.getId(), id) + && Objects.equals(other.getFullname(), fullname) + && Objects.equals(other.getSurname(), surname) + && Objects.equals(other.getEmail(), email) + && Objects.equals(other.getPassword(), password); + } +} diff --git a/src/main/java/com/example/demo/users/repository/UserRepository.java b/src/main/java/com/example/demo/users/repository/UserRepository.java new file mode 100644 index 0000000..fa4b654 --- /dev/null +++ b/src/main/java/com/example/demo/users/repository/UserRepository.java @@ -0,0 +1,10 @@ +package com.example.demo.users.repository; + +import org.springframework.stereotype.Repository; + +import com.example.demo.core.repository.MapRepository; +import com.example.demo.users.model.UserEntity; + +@Repository +public class UserRepository extends MapRepository { +} diff --git a/src/main/java/com/example/demo/users/service/UserService.java b/src/main/java/com/example/demo/users/service/UserService.java new file mode 100644 index 0000000..6aa4a02 --- /dev/null +++ b/src/main/java/com/example/demo/users/service/UserService.java @@ -0,0 +1,44 @@ +package com.example.demo.users.service; + +import java.util.List; +import java.util.Optional; +import org.springframework.stereotype.Service; +import com.example.demo.core.error.NotFoundException; +import com.example.demo.users.model.UserEntity; +import com.example.demo.users.repository.UserRepository; + +@Service +public class UserService { + private final UserRepository repository; + + public UserService(UserRepository repository) { + this.repository = repository; + } + + public List getAll() { + return repository.getAll(); + } + + public UserEntity get(Long id) { + return Optional.ofNullable(repository.get(id)) + .orElseThrow(() -> new NotFoundException(id)); + } + + public UserEntity create(UserEntity entity) { + return repository.create(entity); + } + + public UserEntity update(Long id, UserEntity entity) { + final UserEntity existsEntity = get(id); + existsEntity.setFullname(entity.getFullname()); + existsEntity.setSurname(entity.getSurname()); + existsEntity.setEmail(entity.getEmail()); + existsEntity.setPassword(entity.getPassword()); + return repository.update(existsEntity); + } + + public UserEntity delete(Long id) { + final UserEntity existsEntity = get(id); + return repository.delete(existsEntity); + } +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/src/main/resources/application.properties @@ -0,0 +1 @@ + diff --git a/src/test/java/com/example/demo/SpeakerSrviceTests.java b/src/test/java/com/example/demo/SpeakerSrviceTests.java new file mode 100644 index 0000000..d8624d3 --- /dev/null +++ b/src/test/java/com/example/demo/SpeakerSrviceTests.java @@ -0,0 +1,38 @@ +package com.example.demo; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.NoSuchBeanDefinitionException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import com.example.demo.speaker.service.SpeakerService; + +@SpringBootTest +class SpeakerSrviceTests { + @Autowired + SpeakerService speakerService; + + @Test + void testSpeakerRus() { + final String res = speakerService.say("Мир", "ru"); + Assertions.assertEquals("Привет, Мир!", res); + } + + @Test + void testSpeakerEng() { + final String res = speakerService.say("World", "en"); + Assertions.assertEquals("Hello, World!", res); + } + + @Test + void testSpeakerDeu() { + final String res = speakerService.say("Welt", "de"); + Assertions.assertEquals("Hallo, Welt!", res); + } + + @Test + void testSpeakerErrorWired() { + Assertions.assertThrows(NoSuchBeanDefinitionException.class, () -> speakerService.say("Мир", "rus")); + } +} diff --git a/src/test/java/com/example/demo/TypeServiceTests.java b/src/test/java/com/example/demo/TypeServiceTests.java new file mode 100644 index 0000000..409d4d9 --- /dev/null +++ b/src/test/java/com/example/demo/TypeServiceTests.java @@ -0,0 +1,61 @@ +package com.example.demo; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.MethodOrderer.OrderAnnotation; +import org.junit.jupiter.api.Order; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import com.example.demo.core.error.NotFoundException; +import com.example.demo.types.model.TypeEntity; +import com.example.demo.types.service.TypeService; + +@SpringBootTest +@TestMethodOrder(OrderAnnotation.class) +class TypeServiceTests { + @Autowired + private TypeService typeService; + + @Test + void getTest() { + Assertions.assertThrows(NotFoundException.class, () -> typeService.get(0L)); + } + + @Test + @Order(1) + void createTest() { + typeService.create(new TypeEntity(null, "Ноутбук")); + typeService.create(new TypeEntity(null, "Телефон")); + final TypeEntity last = typeService.create(new TypeEntity(null, "Игровая приставка")); + Assertions.assertEquals(3, typeService.getAll().size()); + Assertions.assertEquals(last, typeService.get(3L)); + } + + @Test + @Order(2) + void updateTest() { + final String test = "TEST"; + final TypeEntity entity = typeService.get(3L); + final String oldName = entity.getName(); + final TypeEntity newEntity = typeService.update(3L, new TypeEntity(1L, test)); + Assertions.assertEquals(3, typeService.getAll().size()); + Assertions.assertEquals(newEntity, typeService.get(3L)); + Assertions.assertEquals(test, newEntity.getName()); + Assertions.assertNotEquals(oldName, newEntity.getName()); + } + + @Test + @Order(3) + void deleteTest() { + typeService.delete(3L); + Assertions.assertEquals(2, typeService.getAll().size()); + final TypeEntity last = typeService.get(2L); + Assertions.assertEquals(2L, last.getId()); + + final TypeEntity newEntity = typeService.create(new TypeEntity(null, "Игровая приставка")); + Assertions.assertEquals(3, typeService.getAll().size()); + Assertions.assertEquals(4L, newEntity.getId()); + } +} diff --git a/src/test/java/com/example/demo/UserServiceTests.java b/src/test/java/com/example/demo/UserServiceTests.java new file mode 100644 index 0000000..f65096d --- /dev/null +++ b/src/test/java/com/example/demo/UserServiceTests.java @@ -0,0 +1,62 @@ +package com.example.demo; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.MethodOrderer.OrderAnnotation; +import org.junit.jupiter.api.Order; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import com.example.demo.core.error.NotFoundException; +import com.example.demo.users.model.UserEntity; +import com.example.demo.users.service.UserService; + +@SpringBootTest +@TestMethodOrder(OrderAnnotation.class) +class UserServiceTests { + @Autowired + private UserService userService; + + @Test + void getTest() { + Assertions.assertThrows(NotFoundException.class, () -> userService.get(0L)); + } + + @Test + @Order(1) + void createTest() { + userService.create(new UserEntity(null, "John", "Doe", "gge@fkgjfdj", "password")); + userService.create(new UserEntity(null, "Alex", "Kryukov", "fhegehr@ghsjg.com", "password")); + final UserEntity last = userService.create(new UserEntity(null, "Alex", "selivanov", "fhegehr@ghsjg.com", + "password")); + Assertions.assertEquals(3, userService.getAll().size()); + Assertions.assertEquals(last, userService.get(3L)); + } + + @Test + @Order(2) + void updateTest() { + final String test = "TEST"; + final UserEntity entity = userService.get(3L); + final String oldName = entity.getFullname(); + final UserEntity newEntity = userService.update(3L, new UserEntity(1L, "test", "test", "test", "test")); + Assertions.assertEquals(3, userService.getAll().size()); + Assertions.assertEquals(newEntity, userService.get(3L)); + Assertions.assertEquals("test", newEntity.getFullname()); + Assertions.assertNotEquals(oldName, newEntity.getFullname()); + } + + @Test + @Order(3) + void deleteTest() { + userService.delete(3L); + Assertions.assertEquals(2, userService.getAll().size()); + final UserEntity last = userService.get(2L); + Assertions.assertEquals(2L, last.getId()); + + final UserEntity newEntity = userService.create(new UserEntity()); + Assertions.assertEquals(3, userService.getAll().size()); + Assertions.assertEquals(4L, newEntity.getId()); + } +}