From 5efae3e68fb80ab6050b32228e2c810cda163669 Mon Sep 17 00:00:00 2001 From: Messier333 <36399805+Messier333@users.noreply.github.com> Date: Mon, 10 Apr 2023 16:20:52 +0900 Subject: [PATCH 1/4] Create deployment.yml --- .github/workflows/deployment.yml | 77 ++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 .github/workflows/deployment.yml diff --git a/.github/workflows/deployment.yml b/.github/workflows/deployment.yml new file mode 100644 index 0000000..56e6016 --- /dev/null +++ b/.github/workflows/deployment.yml @@ -0,0 +1,77 @@ + +# This workflow uses actions that are not certified by GitHub. +# They are provided by a third-party and are governed by +# separate terms of service, privacy policy, and support +# documentation. +# This workflow will build a Java project with Gradle and cache/restore any dependencies to improve the workflow execution time +# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-gradle + +name: Deployment + +on: + workflow_dispatch: + push: + branches: [ "main" ] + +permissions: + contents: read + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'temurin' + - name: Build with Gradle + uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1 + with: + arguments: build + - uses: actions/upload-artifact@v3 + with: + name: jar + path: build/libs + + send-jar: + needs: build + runs-on: ubuntu-latest + steps: + - name: Download jar + uses: actions/download-artifact@v3 + with: + name: jar + - name: Send jar to remote server + uses: appleboy/scp-action@master + with: + host: 34.22.65.56 + username: bdqueen3250 + source: "real_coding_server-0.0.1-SNAPSHOT.jar" + target: "/home/adulkid.kaya" + key: ${{ secrets.PRIVATE_KEY }} + + run-app: + needs: send-jar + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Move deploy.sh + uses: appleboy/scp-action@master + with: + host: 34.22.65.56 + username: bdqueen3250 + source: "deploy.sh" + target: "/home/bdqueen3250" + key: ${{ secrets.PRIVATE_KEY }} + - name: Execute script + uses: appleboy/ssh-action@master + with: + username: bdqueen3250 + host: 34.22.65.56 + key: ${{ secrets.PRIVATE_KEY }} + script_stop: true + script: cd /home/bdqueen3250 && chmod +x deploy.sh && ./deploy.sh From 4a7c3cd20eed6ab137ab8491b18f92f0ee780a27 Mon Sep 17 00:00:00 2001 From: Messier333 <36399805+Messier333@users.noreply.github.com> Date: Mon, 10 Apr 2023 16:46:27 +0900 Subject: [PATCH 2/4] Update deployment.yml --- .github/workflows/deployment.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deployment.yml b/.github/workflows/deployment.yml index 56e6016..b5cf649 100644 --- a/.github/workflows/deployment.yml +++ b/.github/workflows/deployment.yml @@ -50,7 +50,7 @@ jobs: host: 34.22.65.56 username: bdqueen3250 source: "real_coding_server-0.0.1-SNAPSHOT.jar" - target: "/home/adulkid.kaya" + target: "/home/bdqueen3250" key: ${{ secrets.PRIVATE_KEY }} run-app: From 844ebf1b5c34f7cbe39c0a02802f8dfc762824a1 Mon Sep 17 00:00:00 2001 From: Messier333 <36399805+Messier333@users.noreply.github.com> Date: Mon, 10 Apr 2023 16:49:53 +0900 Subject: [PATCH 3/4] Create deploy.sh --- deploy.sh | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 deploy.sh diff --git a/deploy.sh b/deploy.sh new file mode 100644 index 0000000..f2d9e47 --- /dev/null +++ b/deploy.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +SERVER_HOME=$(pwd) +APPLICATION=real_coding_server-0.0.1-SNAPSHOT.jar + +if [ -f $SERVER_HOME/application.pid ];then + kill -9 $(cat $SERVER_HOME/application.pid) + rm $SERVER_HOME/application.pid +fi + +sleep 1s + +nohup java -jar $APPLICATION >> spring.out 2>&1 & echo $! > application.pid From a251b8a0aa5d07242f852c9d8e62c431ee751be2 Mon Sep 17 00:00:00 2001 From: Messier333 <36399805+Messier333@users.noreply.github.com> Date: Thu, 20 Apr 2023 20:59:36 +0900 Subject: [PATCH 4/4] Add files via upload --- README.md | 39 +++++++++++++ .../RealCodingServerApplication.class | Bin 0 -> 862 bytes .../config/WebMVCConfig.class | Bin 0 -> 1362 bytes .../controller/PostController.class | Bin 0 -> 3709 bytes .../controller/ProjectController.class | Bin 0 -> 3805 bytes .../entity/BaseEntity.class | Bin 0 -> 977 bytes .../entity/Post$PostBuilder.class | Bin 0 -> 1950 bytes .../cnu/real_coding_server/entity/Post.class | Bin 0 -> 2149 bytes .../entity/Project$ProjectBuilder.class | Bin 0 -> 1992 bytes .../real_coding_server/entity/Project.class | Bin 0 -> 2176 bytes .../model/request/PostRequest.class | Bin 0 -> 1494 bytes .../model/request/ProjectRequest.class | Bin 0 -> 1536 bytes .../real_coding_server/model/type/Tag.class | Bin 0 -> 1295 bytes .../repository/PostRepository.class | Bin 0 -> 451 bytes .../repository/ProjectRepository.class | Bin 0 -> 460 bytes .../service/PostService.class | Bin 0 -> 4003 bytes .../service/ProjectService.class | Bin 0 -> 4108 bytes build/resources/main/application.yml | 22 +++++++ .../ProjectController.class.uniqueId0 | Bin 0 -> 3800 bytes .../ProjectRepository.class.uniqueId2 | Bin 0 -> 457 bytes .../stash-dir/ProjectRequest.class.uniqueId1 | Bin 0 -> 1503 bytes .../stash-dir/ProjectService.class.uniqueId3 | Bin 0 -> 4060 bytes .../compileJava/previous-compilation-data.bin | Bin 0 -> 45720 bytes .../config/WebMVCConfig.java | 16 +++++ .../controller/PostController.java | 41 ++++++++++++- .../controller/ProjectController.java | 46 +++++++++++++++ .../cnu/real_coding_server/entity/Post.java | 1 + .../real_coding_server/entity/Project.java | 37 +++--------- .../model/request/PostRequest.java | 2 + .../model/request/ProjectRequest.java | 55 ++++++++---------- .../repository/ProjectRepository.java | 14 +++++ .../service/PostService.java | 45 ++++++++++++++ .../service/ProjectService.java | 39 +++++++++++++ 33 files changed, 295 insertions(+), 62 deletions(-) create mode 100644 README.md create mode 100644 build/classes/java/main/com/cnu/real_coding_server/RealCodingServerApplication.class create mode 100644 build/classes/java/main/com/cnu/real_coding_server/config/WebMVCConfig.class create mode 100644 build/classes/java/main/com/cnu/real_coding_server/controller/PostController.class create mode 100644 build/classes/java/main/com/cnu/real_coding_server/controller/ProjectController.class create mode 100644 build/classes/java/main/com/cnu/real_coding_server/entity/BaseEntity.class create mode 100644 build/classes/java/main/com/cnu/real_coding_server/entity/Post$PostBuilder.class create mode 100644 build/classes/java/main/com/cnu/real_coding_server/entity/Post.class create mode 100644 build/classes/java/main/com/cnu/real_coding_server/entity/Project$ProjectBuilder.class create mode 100644 build/classes/java/main/com/cnu/real_coding_server/entity/Project.class create mode 100644 build/classes/java/main/com/cnu/real_coding_server/model/request/PostRequest.class create mode 100644 build/classes/java/main/com/cnu/real_coding_server/model/request/ProjectRequest.class create mode 100644 build/classes/java/main/com/cnu/real_coding_server/model/type/Tag.class create mode 100644 build/classes/java/main/com/cnu/real_coding_server/repository/PostRepository.class create mode 100644 build/classes/java/main/com/cnu/real_coding_server/repository/ProjectRepository.class create mode 100644 build/classes/java/main/com/cnu/real_coding_server/service/PostService.class create mode 100644 build/classes/java/main/com/cnu/real_coding_server/service/ProjectService.class create mode 100644 build/resources/main/application.yml create mode 100644 build/tmp/compileJava/compileTransaction/stash-dir/ProjectController.class.uniqueId0 create mode 100644 build/tmp/compileJava/compileTransaction/stash-dir/ProjectRepository.class.uniqueId2 create mode 100644 build/tmp/compileJava/compileTransaction/stash-dir/ProjectRequest.class.uniqueId1 create mode 100644 build/tmp/compileJava/compileTransaction/stash-dir/ProjectService.class.uniqueId3 create mode 100644 build/tmp/compileJava/previous-compilation-data.bin create mode 100644 src/main/java/com/cnu/real_coding_server/config/WebMVCConfig.java create mode 100644 src/main/java/com/cnu/real_coding_server/controller/ProjectController.java create mode 100644 src/main/java/com/cnu/real_coding_server/repository/ProjectRepository.java create mode 100644 src/main/java/com/cnu/real_coding_server/service/ProjectService.java diff --git a/README.md b/README.md new file mode 100644 index 0000000..32187be --- /dev/null +++ b/README.md @@ -0,0 +1,39 @@ +### Q. entity와 model은 왜 나뉘어 있나요? +PostRequest와 Post가 유사하게 생겼는데 클라이언트로부터 Post객체 그대로 요청 받아서 Post를 그대로 저장하면 편하고 관리할 클래스도 적어지지 않을까요? +### A. Entity와 DTO를 구분하기 위함입니다. +우선 Entity와 DTO의 정의부터 살펴보겠습니다. + +**Entity**는 DB 테이블에 존재하는 컬럼들을 필드로 가지는 객체를 뜻합니다. (즉, Entity는 DB 테이블 설계와 동일한 모습을 하고있겠죠.) +Entity는 DB 테이블과 1:1 대응이며, 테이블을 가지지 않는 컬럼을 필드로 갖지 않습니다. + +**DTO**는 Data Transfer Object의 준말로 데이터가 계층을 오갈 때(transfer) 사용하는 객체입니다. DTO는 로직을 갖지 않는 순수한 데이터 객체이며, +getter/setter 메서드만을 가집니다. + +Entity와 DTO를 구분지어 사용하는 이유는 '각 레이어간의 의존도를 줄이기 위함'입니다. 더 쉽게 예시를 들어보면 아래와 같습니다. +1. Post와 Tag를 각각 저장하도록 테이블을 별도로 설계했다고 해봅시다. + * 현재 우리 코드에서는 Post에 Tag를 같이 저장하도록 했지만, Tag의 내용이 많아 Post와 Tag를 각각 저장하도록 설계를 변경했습니다. + Post와 Tag의 테이블은 분리했지만 보통 우리가 게시글을 작성할 때 태그도 함께 작성하니 Request Body도 Post와 Tag를 한 번에 받아야 좋겠죠. + Post 클래스 하나로 요청과 DB 저장을 모두 처리했다면 위와 같은 상황 대처가 어려웠을텐데 Post와 PostRequest가 나뉘어 있으니 요청은 현재 PostRequest가 받던대로 게시글 내용과 Tag를 함께 받고 + 저장할 때 Post와 Tag 엔티티로 저장하면 위와 같은 상황에 대처가 가능해집니다. +2. 기획자가 게시글 작성과 관련한 기획을 변경한 상황을 가정해봅시다. + * 기능의 요구사항은 언제든 추가/변경/삭제가 생깁니다. 그럼 요청을 받아야하는 객체의 필드에도 추가/변경/삭제가 언제든 발생할 수 있습니다. + PostRequest가 없었다면, Post 클래스의 필드가 수시로 변경되어 DB에 데이터를 저장할 때 장애가 발생하기 쉽습니다. (없는 필드를 저장하려고 한다던지 등등) + +--- + +### Q. WebMVCConfig 파일은 왜 있나요? +### A. CORS을 허용하기 위해서입니다. +http://localhost:8080 이라는 url이 있다고 합시다. + +Origin은 host부분인 localhost와 포트인 8080을 모두 합친 것을 말합니다. http://localhost:9090은 포트가 다르니 Origin이 같다고 할 수 없죠. +서버가 이미 http://localhost:8080에서 돌고 있으니, 프론트 프로그램은 8080포트가 아닌 다른 포트(예를들면 9090)에서 돌게 됩니다. +브라우저는 보안상의 이유로 SOP(Same Origin Policy) 정책을 요구하고 있습니다. 프론트에서 api를 통해 정보를 얻어왔지만, +브라우저가 정보를 요청한 쪽(http://localhost:9090)과 정보를 준 쪽(http://localhost:8080)의 Origin이 달라 서버로부터 받아온 응답을 거절합니다. + +하지만 위처럼 서로 다른 Origin끼리 데이터를 주고 받아야하는 상황이 발생하기 때문에 별도의 예외 사항을 두었습니다. CORS가 바로 이 예외상황에 해당합니다. +CORS(Cross Origin Resource Sharing)는 다른 Origin으로 요청을 보내기 위해 지켜야하는 정책으로, 원래대로라면 SOP에 의해 막히게 될 요청을 풀어주는 정책입니다. +WebMvcConfig에서 CORS를 위해 추가한 파일이라고 알아주시면 될 것 같습니다!(프론트 수업을 위해 추가한 설정파일) - ❗️프론트엔드 수업하려면 해당 파일이 필수이니 프론트엔드 수업 전까지 반드시 pull하기❗️ + +글솜씨가 없어 간단히 적었지만, 토이프로젝트를 하다보면 정말 자주 마주치는 문제 중 하나가 CORS입니다!!! 기본적인 지식이기도 하니 시간되실 때 아래의 블로그를 읽어보셔도 좋을 것 같습니다 + +📌 https://it-eldorado.tistory.com/163 diff --git a/build/classes/java/main/com/cnu/real_coding_server/RealCodingServerApplication.class b/build/classes/java/main/com/cnu/real_coding_server/RealCodingServerApplication.class new file mode 100644 index 0000000000000000000000000000000000000000..7cce177a8fb76e0e414453c7e84eadff013a080d GIT binary patch literal 862 zcmbVLO>Yx15PeRQZW;nDDHO_=$}P)Wtpo~IAwGX zJzR^>@8dddFpP}NcvV_TKC_~bpN;**6Js2o25=>ldfQqvB*S=lzDX{sYW#5pnL1x= zydO7JPK|c*i{lfc&s0`hk>qlv1;IW%W@yv#CBtT{w0u(+iL~$iUWP$zQjyPuRepU1 zw%xg^7@o%e$BFM(2t{|>88%&IMsZ;?>ag7qCcR!ucW&nIglEu6OB;JrQ`=O&RQ}9+ z|Ip)!=aOOfq}EOqa;7TfInmmf>9R%_JGevmUHUtu7P%I7 PgT06Qv* zR_PD$M_KkHk&h}b8of+!&uqVb)&07^|M>C^z%x9~VFW1;X&)JkGE5zaL%|~vH~D(w zKn9j!^r?!KU1dlWiuEkA^ubG|9C8@*;QJWI1jDK}O`f!kiko{zv}9MC54{`w9csB)9V$gHXE}!{ zOnb=txQI&(FNcSul8GqN-HMT+jI9z;!tlEA?w`>0Fng{g{ZeFcg@I8Arf}8AHC$(y z=y8x?P1=1O5`&$>`~O(Nn?7#2v@?UW>qa$IydkWWCQdxeGb{(X#e=xRjTF&tphN26 zt`mbazqGI|8?}0+(i4Vr;fm8~^N%W{(tTSZI$xJ*S7LUZ!SHy;JLrL8s znz=3AF@b!gTv4XaHeuNf9mCvahlJdcb(JWp)QgjmrQj#Or9{JRe$ zkK43p81B&4ah8@1or~mgvW#q|^cn0^@A)pB?itA99-V&w2i!-2Jcc4l1mc4C3221u z;!@r_#)b4TCevRrvy;kS-a5wIneQ9hr`WR;1&o2#7wv&@(((irFxksB+s7N^B4jM# X0p)y15gA5~Wb6xmXnFsPMxY)$F1a7|S=X zqKr{Xn}~KyWpN7a8DtG~zz`Tc-gbd(k#Iw)PzgL5Y~+5+D@lj!zNyL})F4)C>#1C$ zZPE?x@R`;p+D@F#pvyovdITV%X+uY<&%n#*7dTaxp`siJ^bF=|R;!`yn0Y%0wdSh^ z2Jo6dCejqhCA}}Yp)5dw zF{wj5GdNG(2H8!7S=Gb^0~c|L`K?w;aemj6zIG`z%3Y(BA7-TkH)tS-Av$KU$lb!~ zuje>dP~|XU;2n$#w7Z@<7Nj9?gE?t3trzY}t0etkwrV?kPjz4n?`H6xfh!mnm^_&o zfwm20P++)uD5O7$s~KD~a2+=Ux(+6hS)aCDJDd?{8O#*~tP`KNCTUFxw9fI^3Y^Z{ zuDoB}+K~POYs2A}p1fDIoPy=sN{&9ZhMP7I#bl$RII@}1o9<>&TlfbvN7oiZw{?;fC-m?C>$puf;-5HaQ#0f|uv%r8+L8r3uo=l)uIq)CY6V0+ zQMZnt$_;bFc1xxe>+1fvWK}Bcg|vBozs)!hCo~>qWY#M^qw#X{H9ei^Z>l#QBQPp7 z<4x0Fkl`NtnY!(wuB|$^1^uSgrMk%D+ncyCb{n3+=D)Ikj2N(wY+Fv1CEIR(Tf_97 zIu`YgZ{4D>!p+?iN?Kt(+>J{0=rh)IgQeRa{s*_m3Uc#hwo*-$*-AZLO$R1A8hRKh zcy>wmf~!rZ_O`wr_iFx1!=6@e^iwxTcFn8$MR~_o9lckLG<&nTv2*`@jdL8LCpk~^K2l>eS81+0Fhyya(g*xK z#kVo^9AbC}nHPBJN6INq;5A*K4>Mf%*Yxl{_ozPuw=hdvb6mFx3czhXDa_*z-^$Gb z-*@?B1cgN|1joa1v}n&0lmx$ZD9=0St>bt=J2q-+k>i?=4`UzqwAlgVBSH&Apa}Iw zgkGWT*Z;t|I_A$Lc=g7-da;E2bQ$qlqOF?GW$m+*Ki%WA@(?1xN17l1F%Vc)9|LX{ zoDA0@G^-@rLJNHw&BzYkJ{rzN4d-l4KZes6!BJ^Y0Z(aQ?J0gnBIplda33E4*OS^0 zu9k;f9I(YGVBJx`F2BI=uP_Dn${?#FI>fPeBoVUi7-RQQAuGhFJ~@EuV92iHQ#w%< zITPW@4*i0Oq2Zq)e&W|;J$5EQWMdFnUEguu+R(*Fex|p6u3_}h$V19s#8AG(SCq4q L$2cjkr`!Jqdebm0 literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/cnu/real_coding_server/controller/ProjectController.class b/build/classes/java/main/com/cnu/real_coding_server/controller/ProjectController.class new file mode 100644 index 0000000000000000000000000000000000000000..e45456c50388150158ae8d7bc90a47e181a11c66 GIT binary patch literal 3805 zcmc&%ZBrXn6n<`ai3wZYMe(J!m9_+Gx3#>KhN6X18Ve;tjW1PkliY@dWjF3_U^6+*2glF;D92|vn`MEp4eg9Fv$K0{?tRX4o_p@Ohrj>%<4*v$p{0;OTN3RG zI?yRFU9xu6l37!2sTmt3tE`)q4M*C$(pF2B>DrcI@H1~)Te9RXgd+mo)%w^vC+j6C zaAP?J%Y)>s22ijlo5m|hC6QLp1x4WcsSyOult|r`0YiZ&qj5ZTtgBvQY zy+Fd+7PvjSyru1Gs-c+`b+zbeOYbdW_^J&mcojneT@~pDu{#3&qnSEz&D9NcS$AB2 z^6LtQ@rFS9V6s3a${}aEvLbDg@Ok;mSF5gWnVLa}xA1lnXBE7Ib98ciia@7jFB%Th z;8GMe4DDF7Nn9X>nEgJix0fg*3NGRjcf3|DM|Zp!_1Fj`ZY!UY1jobkMI2R-!5G~$ zgJdM(hMKw06ubnvqToGT6-b$ucXSw%z%6c3iyJ+1UutD(JM%T&;5*xeYq*}o`wDJg zLSX8}U<5jf9-zQ@>r|+~6sD87sbB`T1bUBdC^KMIH+6STplvi$5GcRQIczbqtU&t$ zPqaYKvTn+UwVk50A8AE{BmK)(NizzXt$TJb*zRuXJSH=7*%4Rv=&(`uf}-&pu-H_i zj4RUJw90wSs~Il0nz^#BS4_>V*^J?b|3JgpI4uqz!t5O5A6~1mlI_TX?&uWuj%ix1 z<`oKZpKO}hd$On&b+fE$;aoLuIqr&9t+HMc^TJ`wP>vS_54L9BDnBLoR_j?l8>xO? z@jRV2o;njPE3hOZ0?ak7Ax*KGTq^Y2S*4&kp6P+e#nPyS0^2Wze>xdhUv@R4#`IOx z?}8>FSN@*$s%bn;vqN(?8z+~+r9u>ey=IZbrEu&CY`GMZ#gG4w=hKScdIsiekqpc? zi>_sPf`j9?GX+a8`;}t4<^8_v->3)mU@ErmozP2qmri=!s@WxZPxo$sp`b51=vuFO zx0b-omWi=>i!{AVg3~PZd(4BNQfiRKER;&lG^M>@XpSRkb|1dzah^^36#I4FVqTlh zuTFki`1QG9cR0uIq53?0z%|~Vf;*Te)&jpf z1P$OWp9B_hk8jV-65sdvBn6EeKLoKR(B^xdq$N1k<$2!6KoiHqzGJ06EpS}-@lojG zfe$;3;~KyU9@1qH*9x)fK39F8-TdhRpZsG8 z2OsOaE z_1O_tM7+sl)nc#`g6aH>I zm62z(@?2@@<`|0N|78!CRTcK=%k%V%cb_pf8no$ zldsEPM(qf3Ud98Yy%mJ|msc^01_-si}Z%8_zvoXCOJ z#tW~Ec8oTV?O0eZcqXk=&PyFhJ~T<5>OP~Vp|KP0G7El3R;2Q?vBw;l1s5l2_;Ajy zAOg&@f5L>q`91V~q-4ARHijmajJl!H@@<}ur9BYf%cxiOITBVC`oh@opA;I{3IAu5 zpchP}Ul1(1@{KB3b(b63DOSShQROiAM3%{TKgWQhL^uZy z4=V%b+YZYmU>S&O&P0-<)b9Bsoo0f^CKXC^muH!=o)7X^c`WR7zCLZ@K5Dq$8a`Yh z;cB53hkO-puk_$}&e&IBufv8jhr9-j<7If8kAD#RR>H1B7H&ey8<0g31kf7Y#EYY) x+mNTh->LN#&KfPjtCisOO7Nw#;I#^HjW)^>cgj|KD0Ub6J#e}Ikyu2Ve*t~V@g4vG literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/cnu/real_coding_server/entity/Post$PostBuilder.class b/build/classes/java/main/com/cnu/real_coding_server/entity/Post$PostBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..742dbbee77b0412003e80e58a29ff3942840a13b GIT binary patch literal 1950 zcmbVNZBG+H5PlX4SIS{)Eg+(Z3fLCp6!EpZC?o_80uh2SejwZHS`Myvy5*wc!C%plRM>ITbtHlKN_bUA8rLWW$;%Am zD=qw1+>)>jd9W{xOUvEoEizpdzFekv>aPXYmA>@&evrDK?8I~ePw-U3Gu1QC8Ai^q zEvM%02_tYEw9yhbrRyCqdv1vUNV`L! zr3f?G9JA-rm@3Cp%w!!ijXb%I#F@G@rsC@qGhN3V#{`KK<{XizILiD)=41Yl(mzBG zJ*gw~H76qAF>}h}157rs=BZo?t2d1E0|Upn4YUI5ZGgq7j*9z-cvRmrn4&#SppWT! WL4^YS*4jvt!3?_Se>{)Z82Aei=HMy- literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/cnu/real_coding_server/entity/Post.class b/build/classes/java/main/com/cnu/real_coding_server/entity/Post.class new file mode 100644 index 0000000000000000000000000000000000000000..10babb8f0036a13a285f10ad656a236de63d3777 GIT binary patch literal 2149 zcma)6Yi}Dx6g^|F-*)39PTD{TErjAYkA?CkZJ{xtvXn+uVp-~^YGRMvh4pT_q~W5LJ=-jv4my%jr34q>u`>* zkv}l59bKFmyQ_zL1*|CCpQE3IDcm;Xvp;s+feFfJAS;^YG#w2>RxJTHh1iM@W5j zzj4nI;8$V=lcHebGk!(e<|@)$>kr%%)y$M?ZNg2`LWP8z!soc30xryg7gNDsq=IX+ z;FVPHm-s5hbA1-PmIAgIfW-f1%q-Vced6?#Qox*ie8bEL_E?E#$?>DiOGeD$?qoY-eNh`gK>;EuQ3_7dt!2lCN1od iat043qf{a5hx|VZ@dJM3g~dYykGYe1XmI}aQTh*|&%Cz) literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/cnu/real_coding_server/entity/Project$ProjectBuilder.class b/build/classes/java/main/com/cnu/real_coding_server/entity/Project$ProjectBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..c7f8b75cbc8ac0a9b5ed518c7c38de7d3030a0fc GIT binary patch literal 1992 zcmbtVZBG+H5Pr6_T&X9mwW#?1g4!1Gd>1J%3W-sJXoO&lAI$c;mV@gpx!X43pZGI0 z!C*A;2l%6mv%LdauBjM5+|J(I%rmpk?9Bc8{rx9^8O&#pz<`0Ii4+DIa_hXsEth+B z>s57K*ot9r+VLDU%P>$ZtqviLAp;o`M_@8c+OlEUUeodgcR$#&=6LlFf$&?xw}hu0 zwPn5brN$YHCD$vSfCh|B=nJ8Xo z7+>rYy&-GDwba(8uvU1zVqk=!)W^O%+YAagsVO{8`aM!6)tW;YO!X^TcM%R; znF_;FkMv9b1DJa$)S9fl=00x-C45S-UhD^Wu$295|8|;GRrdnJMDZWaKrEz{+`T3R za*eeQLuOeveOo+rbT!PV^KNQG@?H{wdL{$v?A*MRDo{S(3~30mgSeN$eLOJmP~W9V zhOvEk$7{(AVTG~7>-Ch|O8Q$2pE@fO8HS+GxL0#UFt#Y=Msu?gPq#zU<+wt<+r#{Q zhkcKBh#(fY>n=M=RMMDYxU)+^_Yf+!N6-wradCIZ=snGr8CD|Ro_n6~7hE0$g6_p| zx32-3h*x9e^g6SF#|-EDo6?vK2_n|hG?IYohu}DFrz&Fm6p%6jk})+O(J(PZs$eg zl&n)4Ek~Hy-k3)Zjj7MLhna0-=2525u{?8!#?*Z6VdmSI-8f&Bz=Nm@9;{wnRY$O6pQXMt-w{W{H3%Elv bO`vz_c|?T*{rVE5DPS5y^yi+#6O8@=U&T+O8cwR>(G6{St~O6;Q6Cf~rF6!=_&N z-Wxp#6>_xfXobatH`bYDI+i;!k3*l%cf{&k74u@UIPlz%Gy*wXsA3UIbRAkFg^hz5 z?#A9wJ7#!(s?DA?+9_aJ;o%JZIMSHjdMx)Qwlmaz84YBG!0jql@sUEt9x5zdVcsRl zk@j~KR*xpk)L8fJz&>&GQ`hxEE3`c~P`FLRZc>~Mo zTfQy(_|OPn+f4qjg9kN;qg_Eco6n2}fS-p4NSfZCCiz6L& z*+9!QbD5mW7Ao?-7fnawno2w$3KeQ};=$lZioQ(5)@)vhOiDMsbF`dNCrNdMDpx!S zKs;?XXC)xvNbHo4y@@~2zuHo!YCK-s68%kmxj%hym@dO*2}t%ddOBE%%ApRz=UNKS zUA60SN;-}e1e)8q>$8h{oZAdvK7(HlFBCrJZh^Zyl%H_FrtvB6@_>(6e4VGf$Lox| zLhqgN5sJ@hl=u06ps|k6Q06j+&k6g2V29G6Y_#7(wKpzMXm4Ji*50~6{g0{fCci60 zfLsi6DPawBB(p?1EuOX`Jmm&=v=md6l@OD-8uBJ0i%qU;St@{6;2~&k3)`e5WF$WM z75_%#-E+oMV zso-x?!L=lKITidZzDx03Pl8udzy<@5_^-#za$VLZN>3>TtnfX4U}gmT6Qv|LKdo~T zU7w;?B8_*|%*WM~%H`PAsFTUVbd$BD$;J&PqkfG|&QDGLIA!-9%PTz?#dzxmlTo|J oCKqYazz!*Ausa>43Ryqm|8amP_?Z_5Hw`@HO6H-#`P)P3e^2+vivR!s literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/cnu/real_coding_server/model/request/PostRequest.class b/build/classes/java/main/com/cnu/real_coding_server/model/request/PostRequest.class new file mode 100644 index 0000000000000000000000000000000000000000..589e57ba565a21ec62ae693c795a9bdfa82b0626 GIT binary patch literal 1494 zcmbVMZBG+H5Pr5$T8={ykatuRp%md15noUfB^phL8ff~#FJyb&)WhqY-fc0MzPj0zrA&dSDEE@x`1s2_~>bOD8iInvB-LUKhmHk*nhbnSZpgn!$ zybWVI$&_lIUsjR8W^Q@se5eHjeU{+1`f&k684TOFh!KH}E-tEJS^13UQ%%LX!M~fV z1=0-3R{|qDtvvU1#HhC{jNwuSq_ zgtO*w!W84OjVrjyThX#2u+pujNkR0{N97b`lIb;rzAhkh{{Z~2R7})2Y%F4l zK>pl4uq80HTVp3xRnd#RlCPcyL8ztn!XOryX1zbiNK5BX`d+zl>=ezCz`2va0`ors z?%igi2n_9bfqGr5mQ+-bBrx3(y3#Mo$TR!qVXuDgk#Y0y_3F@hj3%qY=Z%TrvZ8b$ zX~Z#B;!GIrA(*tBxPEXI!!D7PAFHnbEt(m z&3}XV!bJ)t&QF6cVzNkF<8ea)npwrRC9IA*Rk-K z-xHtH^a_TO!6?J$K=YZzIA(a(;+Z|>xsCNEPb)~0v>YZu+HK(UG5AhL@Z@RmU`Ox< e?sj0FI}IM{08U}Ek?=j-r?%*3jCb(>{eJ*sK4|#> literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/cnu/real_coding_server/model/request/ProjectRequest.class b/build/classes/java/main/com/cnu/real_coding_server/model/request/ProjectRequest.class new file mode 100644 index 0000000000000000000000000000000000000000..19211cae7423528944f742991450fe33db644c19 GIT binary patch literal 1536 zcmbtUT~8B16g^WY+m^K;1^HG{lmf!~4G5ZOqlpPY15F=%A=~YwE^c>qcS^#)(!^Bb zgFnC@WjxcZ)RqP$JnWsByZ79$Id^{j{_zvQQ#{Eafj$HMCXyHs7(TEMZOgO$s`aLP zARQ$zu;u!$dM419Uo2&iLfSya#2`$8MJK3Pj$gMzX?y!lP;ve0ek8*~8Cud;t~#>b zhC%GdDA!%DB13_#{Nnb11Ls=~Uc~6lG_n{nFl^#7Mg-PQaa0Q`(qn3$>M~M)6WNWA z0!gOlNr92=cFlV#WCfcUjAG2d6&+(-VEvRBomF-vE3lJ4>HUJmPnww0m8YD*R}3HN zY-hA`T=(XxiEFsd+fsH_VEMF0$Nf=9AEi~akXzo&z&?M!Wq!k|?%4MD`u0m^< zzCnE9CV@MY`Ztiq3Z)qvV3o$;{w@|MHTWH^wcX5j7)xJqsev4qi3X;*%r-FB!2D+r7n8^skC5sm|1Xol0$JX5##4EMlt z>U&MoJ2pM7;U1W_=D&MuYP)(p3WlJH5W-|%6stvsZ0WzV^E^GGBFfX1%J$CY*7LP; zd6&B{sZhB)w6jrM7oGtXgWMB%y2b-8t4LsoK~7bRrB@pjhS}GBlvXf;Q5i!juHY(_ zF>Kc{8HUrD(vg0wYqsvxwetRvY4~{sNnDdLu3`e$83uj_Y&fk3ZQ)qATW0wU!$P_z zd)?NX&3uoe;(MfIzPAD=5d4!WZeofdT(BI=UuGEXrRrvGW~vc{6zYC5f@lP41cMx9 zRLmgDwGcaLGR&nj{is28e`N;O>4X^uOO|79wHo`Tx2x~l!)lI>AxU>Av^vJG z13;GMT38xnVQGAUc#_X8kEHckWGU}1p((QbQQC-q!tgmpJ`kdVq;FWPNfbW;4FM59 zPnKsW2{vIk34E83OU>-^nl(FL+(8frFnxS$Z}*QT9Rk7@+8?g%C z^~EkDc#Op^h0&$Re<6m%E$I}g6G#Hw4hkR(a3>^yBEWQ5fY=$*Cy4WAIt4~aau8vR WY?7Lo25&~9Ry(_Yf;_DUQ1}Up921-X literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/cnu/real_coding_server/repository/PostRepository.class b/build/classes/java/main/com/cnu/real_coding_server/repository/PostRepository.class new file mode 100644 index 0000000000000000000000000000000000000000..746a7e54750a3d88991e53a55e88ba7449b5f4c7 GIT binary patch literal 451 zcmbV}!Ab)`42CmRyS6F_o_q$ux#($C@FFM+N()}gbQ_mhcPB$8Tj>kGWPOU1ybv$!4J8?U zT{BoWuv@#ivyBUty`I)sN(Oxc$HbLQkri{tuEhu9dpmRDY#rSy@hZ9{(7<5qtKg(# zH1JsbMCZl7uqVYI(_s)VpOfV)4KIUWg`A(|28LtmxWo(JsH(m19vr@FG_XJFl+)s^ zPk!3qc?cvk BlZ5~P literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/cnu/real_coding_server/repository/ProjectRepository.class b/build/classes/java/main/com/cnu/real_coding_server/repository/ProjectRepository.class new file mode 100644 index 0000000000000000000000000000000000000000..424df763c452b6b476ad14fdbe6375c203f78343 GIT binary patch literal 460 zcmbV}!Ab)`42CmRyS6HL5_|^1If;i=!Hb|QR9fh@Ot*2Fb$7C4vXwr9ujIi8@S()i zLt9jO@Q}%nz?VONK0e>x0pJ>r66hGX%&E3{Xf30wCOOS~C?*kkj;y7Iq8H+YePk*z zm*J|Cz^;Mg(#@T%Tqx{dy6h*=HE=;(*x0a=p4ip+Li}uJPMj?pw+Ve{+!|=0H}XYr z(lQ!&&3>ZO>|fZcY|DZe#LH^AbYtdy5G;_>o76ymL@nod=PMO<^2>?yrBVZ@!&YfE zj(zmg3U5OoapEaN1809~kAjROiw5o5hExqSu%of3R|5Sd`gUL+df&MZ2b#OuKLq#! DV9b{x literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/cnu/real_coding_server/service/PostService.class b/build/classes/java/main/com/cnu/real_coding_server/service/PostService.class new file mode 100644 index 0000000000000000000000000000000000000000..c7225ef9910735eee5880e475ff98af20eec3d98 GIT binary patch literal 4003 zcmcInTXz#x6#h^zJ z3f_K;uBBCYaQW==H@VzrW|9mvnH3&AxXtXOrP%J_f?6 z3;HMxy<8GK=v9zZk%G!_JO-p>P6ni7^ zn)3`D6}`%EEDW{iVpG+UI?Y3$wJq1HaK{h*h>D{)#?Wi5EjZjIZZPa`8faZDyPU)coK*0# zidS%oA^jvR$@6K$GQ@(?p&!7fXgPiO)N0H1i2v5Ds+&@@WufRJ?|> zBNir{Yb#MIK5=^fDzozMKPI ziOnk4NZj}Dl8Sj;CJ5=DgqVyyo+l8p%M8gPbwR;pzhk)BhIW&lM2Fj6k>{v`%u;7# z=+7G#pZ6-O+*#6By9DU;by0}We_o^;_#c5CnY=R*5-&6XzG>Kl0MSN@yHaz{aD1-DUCabC(A zoFczq$TCmM+=VZzN!hI#_AGkzP^s``!!@Y%&svr(ba^#Wg=O-#Q`X$7?8s}f2JhO= zy5>?Pa@+5OArw_m`kZYGS2%h#s9Cqa8%`1~gaS{+2JSK(Y}^lqwPCMwE$^qBH1svS z7`*OMROyY?KhaYTl>!47b*p4@cO-Ay>s~b%slf1Bi0nM3xI`^HD&GFbz+}8`SVsO; z79!8;rdcoq&!sWY--Qp8^dSC7#Vr_Ve8RBU_F=ZolQceKc&+cK0%L7y4vLL4w@-6U%=b6zeua|G$v@=G4?Ci_!g9h zcqW0rF!(cVCQzXN-J}2vVTu0l3WRY5%d{djT*Wo|ex2rBj26<;JJ?NP68$)>q;gWC zKg1BjldyYzST&FeVQ-K|0`Jn^dw3rmKGGT5k$$FpKObUGVjI-Hh=-}VhbgS!CP9TB zt`J6muhZr#iXr|D8awFQPy>H#;t`$)ws4@~be}IYLUA9$PK@{#_Xmn~i$kGBnKPN4 zgm1eyLEG>%6xc73eU3HyEHibDKxBNw5&M+0>wn=-HqYxfirramP3OxG)jZXvEOlgZ2UK{27GYheG%AX9X9FHsGiR*q|*sm!xW8- zqe`GMkE0VrrdPKxBgb=FI4{SGTgc1!CbpAo0G(2cUdD%!rXLBrk&PsGv~GShB%GAJ xjdilt36nGvsKBC8x^B~0r9Vm5JLJs=*u=;F>{EP>Z*ZT!B}wi9zQ>Q)^B)*AcFq6* literal 0 HcmV?d00001 diff --git a/build/classes/java/main/com/cnu/real_coding_server/service/ProjectService.class b/build/classes/java/main/com/cnu/real_coding_server/service/ProjectService.class new file mode 100644 index 0000000000000000000000000000000000000000..e3c03eefa79916fc59f54a5969b197dbe49ddecb GIT binary patch literal 4108 zcmcInX?NR16usjtN^G@uoTXd3r@>jMx>AbMls2?9;HDu7ZcBln*b`TcEU8*j!oF{1 zIs6ki2LkN}4xc&vCJt{T*;W!qO%8_-u{5K3_ucpAzBiM<{(1ZdfD8D(6A83PXqC~1 zc7~HBv#OK~PqDeG&zH=yW>n@KZZC6N5f81zm1*0&$4l;PFl6Ymf{7V!nU3a~_6o!K zLJW{yUs%IxnC6q{K&OPHj1**sb1^tov&?m3df(%Y+ko~g{#c(y3*gTyZisQrm zWi^0&3OkXOkde`aY&?UwNElijb(u2^<_h=JWmVBtqoUkc5V^|_ZJd(O!!Q&R?pm6H zWuJ^)*v%jASR3_FDaHJeYF#+0Y)S&-ml z9EZZtu9iyNav5&LCM-@y&7+?%4aci;+mHUFj8izx(5Wp>+uR|YFdS+cYu#+9n8aB; zBjKEkXK|h(vtFV^eoQkocbu}96U#f0mobJ5q@oIU=QLL*ZTHml=8JpQwW(har*2%7 z@jNckTBp9YH>$XBX#hMS;{^enB4DEEQUs0wxhmsD0g@t+#(W1RWxRx!iJ>5(R-Rbk zfx6rkiz~F;=XYJk6mAfN;3puC$L`QNgrOqCjuQ1qmxtYuVQ~up&3hGX@s`UzPiYUXohU$7Y#d5JGEWcPqBO8m0U~O;Ak5ihG4Q%SG zQSD8V!YWidO$(kRLC2UYT4Z;mN!M%`id%)+F5w-XRgMa3p_!w&B*f-_lVE@N-<@nb z4RolJJnD7T*NmYkz_HkZi|?sq-lwb8g|a%ZChG$y7=Db!jZJdg?yQsOHfvsJl3`>U z4yXcVP0udztD0yI-C;t*YujC6->LLIF{(? zi=t*9nD&z5P~~#d@1-FW)mrAVX}XSUt5#6sPP!d-5)NDmo{VKYU^vn^VKigeT;fW> z-vF{u7u8a5Z%k2VXpH`jZhdGJIJl-7Wt}?%1=C#etbC+U!-FL!7N!?6tlX|~rAzGXNNzm%v2!oXq5_F1~X(%~rn!J#*a-ly>j&Ck&23Oy6_>>B;U;d;_uKT|#%Lfsy@uViOrW2k zkuXjQ^hfArSP$Fd!^**`5cUpPB=9=Ty@5B;;v-$88NoB<^L&Ioi49P@A`DY?hAGVB zErJRe&J#v}uhQfKN+JFodbZHF-Uj~g=ws{$R&lsNdZ)i=FU7qNJ=p7eJQNt#J@$qk z3CzzoplSFS3jCMJKgVL2sapgh;_Hw2r<~pX9Z%hSj8Q@3#Lx6S*ph(8QKT_I zM26-B5$qG$ufZ|40;OcCOs|s6JotjY~IES-t*r+z(@E3U(vTDt@|1e@g4U33pQ(@ AZ~y=R literal 0 HcmV?d00001 diff --git a/build/resources/main/application.yml b/build/resources/main/application.yml new file mode 100644 index 0000000..9f1e564 --- /dev/null +++ b/build/resources/main/application.yml @@ -0,0 +1,22 @@ +spring: + # H2 Setting Info (H2 Console? ???? ?? ???? ??) + h2: + console: + enabled: true # H2 Console? ???? ?? (H2 Console? H2 Database? UI? ????? ??) + path: /h2-console # H2 Console? Path +# Database Setting Info (Database? H2? ???? ?? H2?? ?? ??) + datasource: + driver-class-name: org.h2.Driver # Database? H2? ?????. + url: jdbc:h2:mem:devblog # H2 ?? ?? + username: sa # H2 ?? ? ??? username ?? (??? ??? ??) + password: # H2 ?? ? ??? password ?? (??? ??? ??) + + jpa: + hibernate: + ddl-auto: create # ??????? ??? ? ??????? ????? ?? ??? ?? + properties: + hibernate: + format_sql: true # ???? query? ??? + +logging.level: + org.hibernate.SQL: debug \ No newline at end of file diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/ProjectController.class.uniqueId0 b/build/tmp/compileJava/compileTransaction/stash-dir/ProjectController.class.uniqueId0 new file mode 100644 index 0000000000000000000000000000000000000000..b0c6dab4913e26a63674e0ee1a8fc91079cfb122 GIT binary patch literal 3800 zcmc&%Yg5}s6g_Jmj*UWim6r68M?->vMoGgX#Dq2wLfk;&Lh3%!mdf_lC=rq?$uOBt z|3d#m|3N#G(zG8s{oEhb>5(kU0*qpknU)!iwCmk-&pr3<-OJzq{P8D%n<%D`Kt~dt z3cAoOFk7;=)sk6LZK)ZXC9ABPl}$(5JJME5mg(A-Vem6=TaRVQT?%IedaL!h4KCJ8 zQsCNZ43-DURSlqEQ#OqgNF|Y0&;v!_>ah_7PL@dBl>tM6(pVgiZL2H|I{RHsI&Oo_ zdVQG9#O;)(tGiFtyydv0-HTI6^eO1afWRfouBcAcrgq=j+P2)a>?i7$>sHlu=~OM# zk<0#OfrRx$;O5xsV{J!M4b7~m4~m|!G~FhKFWHcS*Dx&5Q;}}qxFawymZ<~RT-{Jt zb)V=7yrEzOrv=i@#R8cqhn(rkinK|>=jCsIP<3_7)C}5t3vVa!j)F5dOCyJu2y|Qa zvf(fXE=FNP*A97`#Cfib33fzmFGVgW7{x`#x>hYmV_l4zYj_bC#21ABuy4NHV+t}D zr+Ma%jHKFdEAyFxmmQM|-os^qlxcZ~hW-fLV0_w)@`bxnD@)s1tmy{d*&bZM)g<0m za1B!eGcN}t&{gyR1t!|3LIq|po5XbmbGRYUcQBd^|GaMM?t(zaSf(IQew7p0re|4! z&Ly5@fm5rxDeu>|i_(6m6%Eb|tXd__C}_6sjf2TfcT49PnTyMgxPnK6jfxkPix+^! zrW$2jlkS#P&TC%5a2aam%7$JsHMeHdhadj~4d>&uh@8Oe0-YaOud#-0%YyFcRP~l= zTCV1m2oj%enby0qs1|jztZLy}zk04|)ha6`G0*SE47GSk@E|UWR{1HxEA6NFe5CGq zW%C%qc+yO@?f!~%o8B+9tR5|~THGbH+g;^dl;de0jNB)UDk!k^O8CdnfMsPzGiuCQ zMg2bL3UcKiSf*M!(=snKcdKz==~*g75!h|zMqK8`9=x_IFj@Tc|5!ej^6lqdz81;7 zba0a~fdulc{A^pO;PCj(Ou^F2ezllwJMy>vE46tlW?~E95pAS*>!dfVnq882bngln z4!WXd!+P1fwgj%XO^mHuq~B#a9A~TFUN)UdsX;=sSSmTwl=hOLIgaG8cmGX~bL`J& z*sAjy^Ez~Xb@RIiS&rs8`jEdT_*TZBK}_r+`5Y&I<~YITzP=V1#sa^G>+A3V_jrE_ zZefvFOZ@H<900fZB(RJ-e0yeA_`b_0DLBaSL$J@BLWgg8nj^uv9?$X~23r_D?Hg9= z%L2o78y|%>?)k7ISPdLnAp_5$!N8%{iT&nZIM)LHOvJCj(62$P;XX|UeytI!Zu5a} zvzI^JSzN!7e?=#P3iAnrV>s6&+{iJQY!wE_<}~fj9du#q{n~5^!UWD5WjFXnvZ=E66ugc+RyJWZe8f3 gl8^kYU-~o#2=W!jUx!pS@eRjmj<2xC*1A*w0*&-i)Bpeg literal 0 HcmV?d00001 diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/ProjectRepository.class.uniqueId2 b/build/tmp/compileJava/compileTransaction/stash-dir/ProjectRepository.class.uniqueId2 new file mode 100644 index 0000000000000000000000000000000000000000..abaaf3b11d33f7df711659528aabb42606d6bf09 GIT binary patch literal 457 zcmbV}!Ab)`42CmRyS6HL5_|^1If;i=!Hb|QC@pv`(`{U4-JJ}XY^5*YLwWE4d?+#X zV2g?e519-JeEIX|?fvBy0M21AgPwuYl3H7a&N8}YQqs(aYLbxW$Xbe&ybv$!9aD{^ zjJ_%vY#P|F-Q3y6h05Mem;DU-22O}8n<6XefnAGF#E*97#MwH!b?8lWE1-eF*jK?x z$7tZW_>Rtte__vxKNiFwUUWH1lCKTC4uTbOevum(j;Z4kuY9Ab4u05hyp(C+aMUTP z#e1Lpw86^|NSt^I$-vRC!jm8)$s(d%d627n1~xRd^hBV)Oy3@C!{9RyVMlXc`?~-i DSD=;c literal 0 HcmV?d00001 diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/ProjectRequest.class.uniqueId1 b/build/tmp/compileJava/compileTransaction/stash-dir/ProjectRequest.class.uniqueId1 new file mode 100644 index 0000000000000000000000000000000000000000..e9dc50fe9c859cfa8becb697ee5e9dfa8d1da6a5 GIT binary patch literal 1503 zcmbVMT~8B16g^WY{aOJj$hV3jlp?I6f{2W)1X3gxg4=9|H*tTDXcKfwe9nYJNqztmt!Hh1%W;eACBn zv=xZ6Dpv^%ZMRz8(*X;7tKs;QzAIwe$dQ;IgW8 zA>!gNhjEUL0vUR29iKe!q475dz0`elXO3DRz3111vU=s1#7?6>PaO z3>7=fwB0<+kZCbK7Cn@_dz3lu`XI1Co#&T?$fCK68NSjIGsL8h(~Iv49hEYlfW-@`nm0l%lW@tgXAME)DDG?1klYhaRUx`CMnX20-% z6mx=6!EzHUryp62kb+~BleD$+Or7MpkCo#*tsNN@ literal 0 HcmV?d00001 diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/ProjectService.class.uniqueId3 b/build/tmp/compileJava/compileTransaction/stash-dir/ProjectService.class.uniqueId3 new file mode 100644 index 0000000000000000000000000000000000000000..00b5c9ae87d1173f715e4155dfe6750cabd8d90a GIT binary patch literal 4060 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Ï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 K9#loWjr~74-Xe+s literal 0 HcmV?d00001 diff --git a/src/main/java/com/cnu/real_coding_server/config/WebMVCConfig.java b/src/main/java/com/cnu/real_coding_server/config/WebMVCConfig.java new file mode 100644 index 0000000..2348439 --- /dev/null +++ b/src/main/java/com/cnu/real_coding_server/config/WebMVCConfig.java @@ -0,0 +1,16 @@ +package com.cnu.real_coding_server.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +public class WebMVCConfig implements WebMvcConfigurer { + @Override + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/**") + .allowCredentials(true) + .allowedMethods("*") + .allowedOriginPatterns("*"); + } +} diff --git a/src/main/java/com/cnu/real_coding_server/controller/PostController.java b/src/main/java/com/cnu/real_coding_server/controller/PostController.java index 8d7b907..9f864a6 100644 --- a/src/main/java/com/cnu/real_coding_server/controller/PostController.java +++ b/src/main/java/com/cnu/real_coding_server/controller/PostController.java @@ -1,7 +1,46 @@ package com.cnu.real_coding_server.controller; -import org.springframework.web.bind.annotation.RestController; +import com.cnu.real_coding_server.entity.Post; +import com.cnu.real_coding_server.model.request.PostRequest; +import com.cnu.real_coding_server.service.PostService; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; @RestController +@RequestMapping({"/posts"}) +@RequiredArgsConstructor public class PostController { + private final PostService postService; + + @PostMapping + public ResponseEntity createPost(@RequestBody PostRequest postRequest) { + return ResponseEntity.ok(postService.createPost(postRequest)); + } + + @GetMapping + public ResponseEntity> getPosts() { + return ResponseEntity.ok(postService.getPosts()); + } + + + @GetMapping("/{postId}") + public ResponseEntity getPost(@PathVariable("postId") Integer postId) { + return ResponseEntity.ok(postService.getPost(postId).orElse(null)); + } + + @PutMapping("/{postId}") + public ResponseEntity updatePost(@PathVariable("postId")Integer postId, + @RequestBody PostRequest postRequest) { + return ResponseEntity.ok(postService.updatePost(postId, postRequest).orElse(null)); + } + + @DeleteMapping("/{postId}") + public ResponseEntity deletePost(@PathVariable("postId") Integer postId) { + postService.deletePost(postId); + + return ResponseEntity.noContent().build(); + } } diff --git a/src/main/java/com/cnu/real_coding_server/controller/ProjectController.java b/src/main/java/com/cnu/real_coding_server/controller/ProjectController.java new file mode 100644 index 0000000..ba08feb --- /dev/null +++ b/src/main/java/com/cnu/real_coding_server/controller/ProjectController.java @@ -0,0 +1,46 @@ +package com.cnu.real_coding_server.controller; + + +import com.cnu.real_coding_server.entity.Project; +import com.cnu.real_coding_server.model.request.ProjectRequest; +import com.cnu.real_coding_server.service.ProjectService; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping({ "/projects"}) +@RequiredArgsConstructor +public class ProjectController { + private final ProjectService projectService; + + @PostMapping + public ResponseEntity createProject(@RequestBody ProjectRequest projectRequest) { + return ResponseEntity.ok(projectService.createProject(projectRequest)); + } + + @GetMapping + public ResponseEntity> getProjects() {return ResponseEntity.ok(projectService.getProjects());} + + + @GetMapping("/{projectId}") + public ResponseEntity getProject(@PathVariable("projectId") Integer postId) { + return ResponseEntity.ok(projectService.getProject(postId).orElse(null)); + } + + @PutMapping("/{projectId}") + public ResponseEntity updateProject(@PathVariable("projectId")Integer postId, + @RequestBody ProjectRequest projectRequest) { + return ResponseEntity.ok(projectService.updateProject(postId, projectRequest).orElse(null)); + } + + @DeleteMapping("/{projectId}") + public ResponseEntity deleteProject(@PathVariable("projectId") Integer postId) { + projectService.deleteProject(postId); + + return ResponseEntity.noContent().build(); + } + +} diff --git a/src/main/java/com/cnu/real_coding_server/entity/Post.java b/src/main/java/com/cnu/real_coding_server/entity/Post.java index 5cfa06a..bb99748 100644 --- a/src/main/java/com/cnu/real_coding_server/entity/Post.java +++ b/src/main/java/com/cnu/real_coding_server/entity/Post.java @@ -20,6 +20,7 @@ public class Post extends BaseEntity { @Setter private String contents; + @Setter @Enumerated(EnumType.STRING) private Tag tag; diff --git a/src/main/java/com/cnu/real_coding_server/entity/Project.java b/src/main/java/com/cnu/real_coding_server/entity/Project.java index 07203b9..ba833fe 100644 --- a/src/main/java/com/cnu/real_coding_server/entity/Project.java +++ b/src/main/java/com/cnu/real_coding_server/entity/Project.java @@ -1,10 +1,9 @@ package com.cnu.real_coding_server.entity; +import com.cnu.real_coding_server.model.type.Tag; import jakarta.persistence.*; import lombok.*; -import java.time.LocalDateTime; - @Getter @Entity(name = "projects") @NoArgsConstructor(access = AccessLevel.PROTECTED) @@ -19,36 +18,16 @@ public class Project extends BaseEntity { @Column @Setter - private String summary; - - @Column - @Setter - private String description; + private String contents; - @Column - @Setter - private LocalDateTime startDate; - - @Column - @Setter - private LocalDateTime endDate; - - @Column @Setter - private Boolean isInProgress; + @Enumerated(EnumType.STRING) + private Tag tag; @Builder - private Project(String title, - String summary, - String description, - LocalDateTime startDate, - LocalDateTime endDate, - Boolean isInProgress) { + public Project(String title, String contents, Tag tag) { this.title = title; - this.summary = summary; - this.description = description; - this.startDate = startDate; - this.endDate = endDate; - this.isInProgress = isInProgress; + this.contents = contents; + this.tag = tag; } -} +} \ No newline at end of file diff --git a/src/main/java/com/cnu/real_coding_server/model/request/PostRequest.java b/src/main/java/com/cnu/real_coding_server/model/request/PostRequest.java index e8943c1..5bd6733 100644 --- a/src/main/java/com/cnu/real_coding_server/model/request/PostRequest.java +++ b/src/main/java/com/cnu/real_coding_server/model/request/PostRequest.java @@ -3,10 +3,12 @@ import com.cnu.real_coding_server.entity.Post; import com.cnu.real_coding_server.model.type.Tag; +import jakarta.validation.Valid; import lombok.Getter; @Getter public class PostRequest { + @Valid private String title; private String contents; diff --git a/src/main/java/com/cnu/real_coding_server/model/request/ProjectRequest.java b/src/main/java/com/cnu/real_coding_server/model/request/ProjectRequest.java index 2e80181..8c9e488 100644 --- a/src/main/java/com/cnu/real_coding_server/model/request/ProjectRequest.java +++ b/src/main/java/com/cnu/real_coding_server/model/request/ProjectRequest.java @@ -1,32 +1,23 @@ -package com.cnu.real_coding_server.model.request; - -import com.cnu.real_coding_server.entity.Project; -import lombok.Getter; - -import java.time.LocalDateTime; - -@Getter -public class ProjectRequest { - private String title; - - private String summary; - - private String description; - - private LocalDateTime startDate; - - private LocalDateTime endDate; - - private Boolean isInProgress; - - public Project toEntity() { - return Project.builder() - .title(title) - .summary(summary) - .description(description) - .startDate(startDate) - .endDate(endDate) - .isInProgress(isInProgress) - .build(); - } -} +package com.cnu.real_coding_server.model.request; + +import com.cnu.real_coding_server.entity.Project; +import com.cnu.real_coding_server.model.type.Tag; +import jakarta.validation.Valid; +import lombok.Getter; + +@Getter +public class ProjectRequest { + @Valid + private String title; + private String contents; + + private Tag tag; + + public Project toEntity() { + return Project.builder() + .title(title) + .contents(contents) + .tag(tag) + .build(); + } +} diff --git a/src/main/java/com/cnu/real_coding_server/repository/ProjectRepository.java b/src/main/java/com/cnu/real_coding_server/repository/ProjectRepository.java new file mode 100644 index 0000000..ec0cd60 --- /dev/null +++ b/src/main/java/com/cnu/real_coding_server/repository/ProjectRepository.java @@ -0,0 +1,14 @@ +package com.cnu.real_coding_server.repository; + + +import com.cnu.real_coding_server.entity.Project; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface ProjectRepository extends JpaRepository { +// Post save(Post post); +// List findAll(); +// Optional findById(Integer postId); +// void delete(Post post); +} \ No newline at end of file diff --git a/src/main/java/com/cnu/real_coding_server/service/PostService.java b/src/main/java/com/cnu/real_coding_server/service/PostService.java index f79fbb8..6659b25 100644 --- a/src/main/java/com/cnu/real_coding_server/service/PostService.java +++ b/src/main/java/com/cnu/real_coding_server/service/PostService.java @@ -1,7 +1,52 @@ package com.cnu.real_coding_server.service; +import com.cnu.real_coding_server.entity.Post; +import com.cnu.real_coding_server.model.request.PostRequest; +import com.cnu.real_coding_server.model.request.ProjectRequest; +import com.cnu.real_coding_server.repository.PostRepository; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Optional; + @Service +@RequiredArgsConstructor public class PostService { + + private final PostRepository postRepository; + + + public Post createPost(PostRequest postRequest) { + return postRepository.save(postRequest.toEntity()); + } + + + public List getPosts() { + return postRepository.findAll(); + } + + + public Optional getPost(Integer postId) { + return postRepository.findById(postId); + } + + + public Optional updatePost(Integer postId, PostRequest postRequest) { + return postRepository.findById(postId) + .map(post -> { + post.setTitle(postRequest.getTitle()); + post.setContents(postRequest.getContents()); + post.setTag(postRequest.getTag()); + return postRepository.save(post); + }); + } + + + public void deletePost(Integer postId) { + postRepository.findById(postId) + .ifPresent(postRepository::delete); + } + + } diff --git a/src/main/java/com/cnu/real_coding_server/service/ProjectService.java b/src/main/java/com/cnu/real_coding_server/service/ProjectService.java new file mode 100644 index 0000000..f1223e5 --- /dev/null +++ b/src/main/java/com/cnu/real_coding_server/service/ProjectService.java @@ -0,0 +1,39 @@ +package com.cnu.real_coding_server.service; + +import com.cnu.real_coding_server.entity.Post; +import com.cnu.real_coding_server.entity.Project; +import com.cnu.real_coding_server.model.request.ProjectRequest; +import com.cnu.real_coding_server.repository.PostRepository; +import com.cnu.real_coding_server.repository.ProjectRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Optional; + +@Service +@RequiredArgsConstructor +public class ProjectService { + private final ProjectRepository projectRepository; + public Project createProject(ProjectRequest projectRequest) {return projectRepository.save(projectRequest.toEntity());} + public List getProjects() { + return projectRepository.findAll(); + } + public Optional getProject(Integer postId) { + return projectRepository.findById(postId); + } + public Optional updateProject(Integer postId, ProjectRequest projectRequest) { + return projectRepository.findById(postId) + .map(post -> { + post.setTitle(projectRequest.getTitle()); + post.setContents(projectRequest.getContents()); + post.setTag(projectRequest.getTag()); + return projectRepository.save(post); + }); + } + public void deleteProject(Integer postId) { + projectRepository.findById(postId) + .ifPresent(projectRepository::delete); + } + +}