From b236f43165b506e004dbc95df62ed65808085273 Mon Sep 17 00:00:00 2001 From: jshortz Date: Mon, 18 Nov 2019 15:16:27 +0100 Subject: [PATCH 01/21] Fixed typo in README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2e07c3c..fdc8785 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ We will need to set up and start these three components in the order above for e ### Prerequisites - Install `docker` and `docker-compose`. - Install `Nodejs`. -- Install a proper IDE/Text editor fo Java and Javascript. IntelliJ community edition is recommended for Java development but doesn't work very well with JavaScript. It's therefore recommended to use VS Code or any other JavaScript-friendly IDE when working with frontend code. +- Install a proper IDE/Text editor for Java and Javascript. IntelliJ community edition is recommended for Java development but doesn't work very well with JavaScript. It's therefore recommended to use VS Code or any other JavaScript-friendly IDE when working with frontend code. ### Starting the database To start the database open the terminal and `cd` your way in to the project root folder. You can just simply run From d59f9a9d170aee08dae4426179e5bf01581ce5e8 Mon Sep 17 00:00:00 2001 From: jshortz Date: Tue, 19 Nov 2019 13:55:40 +0100 Subject: [PATCH 02/21] Added Hibernate annotations to Post Class --- src/main/java/se/kth/sda6/skeleton/posts/Post.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/se/kth/sda6/skeleton/posts/Post.java b/src/main/java/se/kth/sda6/skeleton/posts/Post.java index a95fabe..bd3960e 100644 --- a/src/main/java/se/kth/sda6/skeleton/posts/Post.java +++ b/src/main/java/se/kth/sda6/skeleton/posts/Post.java @@ -1,9 +1,17 @@ package se.kth.sda6.skeleton.posts; +import javax.persistence.*; + // @TODO add Hibernate annotations to define which table and columns should be used to save the Post Object. +@Entity +@Table(name = "post") public class Post { + @Id + @Column(name = "id") + @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; + @Column(name = "body") private String body; // @OneToMany(mappedBy = "post", cascade = CascadeType.ALL) From 25eee5001c73332209c17f552cbb7cbf6b2be184 Mon Sep 17 00:00:00 2001 From: jshortz Date: Tue, 19 Nov 2019 14:09:46 +0100 Subject: [PATCH 03/21] Added Hibernate and JPA to PostService and PostRepository --- .../sda6/skeleton/posts/PostRepository.java | 15 ++++++++++++++- .../kth/sda6/skeleton/posts/PostService.java | 19 +++++++++++++------ 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/src/main/java/se/kth/sda6/skeleton/posts/PostRepository.java b/src/main/java/se/kth/sda6/skeleton/posts/PostRepository.java index 13b8bca..d8840f5 100644 --- a/src/main/java/se/kth/sda6/skeleton/posts/PostRepository.java +++ b/src/main/java/se/kth/sda6/skeleton/posts/PostRepository.java @@ -4,5 +4,18 @@ @TODO extend the appropriate JpaRepository to get common database operations for Post Add also the correct annotation to describe the Repository. */ -public interface PostRepository { + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + + +@Repository +public interface PostRepository extends JpaRepository { + } + + + + + diff --git a/src/main/java/se/kth/sda6/skeleton/posts/PostService.java b/src/main/java/se/kth/sda6/skeleton/posts/PostService.java index 6035b91..c29dc60 100644 --- a/src/main/java/se/kth/sda6/skeleton/posts/PostService.java +++ b/src/main/java/se/kth/sda6/skeleton/posts/PostService.java @@ -1,34 +1,41 @@ package se.kth.sda6.skeleton.posts; +import org.springframework.beans.factory.annotation.Autowired; + import java.util.List; import java.util.Optional; /* @TODO Autowire the PostRepository and use it to implement all the service methods. */ + public class PostService { + + @Autowired + private PostRepository repository; + public List getAll() { // @TODO get all posts and return them as List - return null; + return repository.findAll(); } public Optional getByID(Long id) { // @TODO get a post by ID if it exists - return null; + return repository.findById(id); } public Post save(Post post) { // @TODO save the post to DB and return the saved post - return null; + return repository.save(post); } - public Optional update(Post post) { + public Post update(Post post) { // @TODO update the post if it exists in DB and return the updated post. - return null; + return repository.save(post); } public void deleteById(Long id) { // @TODO delete the post by id - return; + repository.deleteById(id); } } From a6f1fa21d6711994fdefaf9b105a8519effc4165 Mon Sep 17 00:00:00 2001 From: jshortz Date: Tue, 19 Nov 2019 14:25:31 +0100 Subject: [PATCH 04/21] Updated Post Controller with Annotations --- .../sda6/skeleton/posts/PostController.java | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/src/main/java/se/kth/sda6/skeleton/posts/PostController.java b/src/main/java/se/kth/sda6/skeleton/posts/PostController.java index 1affd13..fb85a2e 100644 --- a/src/main/java/se/kth/sda6/skeleton/posts/PostController.java +++ b/src/main/java/se/kth/sda6/skeleton/posts/PostController.java @@ -1,10 +1,51 @@ package se.kth.sda6.skeleton.posts; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.server.ResponseStatusException; + +import javax.persistence.PostUpdate; +import java.util.List; /* @TODO AutoWire PostService and create the methods needed to implement the API. Don't forget to add necessary annotations. */ + +@RestController public class PostController { + @Autowired + private PostService postService; + + // get all posts + @GetMapping("/posts") + public List getAll() { + return postService.getAll(); + } + + // create a post + @PostMapping("/posts") + public Post create(@RequestBody Post newPost) { + return postService.save(newPost); + } + + // get a specific post by ID + @PostMapping("/posts/{id}") + public Post getById(@PathVariable Long id) { + return postService.getByID(id) + .orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND)); + } + + // update a post + @PutMapping("/posts") + public Post update(@RequestBody Post newPost) { + return postService.update(newPost); + } + + // delete a post + @DeleteMapping("/posts/{id}") + public void delete(@PathVariable Long id) { + postService.deleteById(id); + } } From 3c37983844f1f391286dac6ddf6634c027bf3a91 Mon Sep 17 00:00:00 2001 From: Alberto Martinez Date: Tue, 19 Nov 2019 14:46:43 +0100 Subject: [PATCH 05/21] Changing H1, add H2, add logo and change P --- frontend/public/logo192.png | Bin 8581 -> 3673 bytes frontend/src/components/auth/LoginPage.js | 12 +++++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/frontend/public/logo192.png b/frontend/public/logo192.png index fa313abf53936aefc517dbd583b724a57199d415..5803790fec82b9898eca380fd4e363e41bbc3a32 100644 GIT binary patch literal 3673 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 literal 8581 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�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 f>uyPRU
-

SDA 6

-

Starter template

+ +

From Nogrammer to Programmer

+

A Forum for Those Learning to Code

+

+ Welcome to No-2-Pro, a safe space where you can vent, + your pains and gains of your personal journey into the + world of programming. +

-
From 4a258a0fd7585dd822a6dc924760909e25065747 Mon Sep 17 00:00:00 2001 From: Alberto Martinez Date: Tue, 19 Nov 2019 15:04:34 +0100 Subject: [PATCH 06/21] Modifying public webpage favicon --- frontend/public/favicon.ico | Bin 22382 -> 207898 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/frontend/public/favicon.ico b/frontend/public/favicon.ico index c2c86b859eaa20639adf92ff979c2be8d580433e..8a7d17abec108e66a8182d37df7620164489ce06 100644 GIT binary patch literal 207898 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 akEj0@et%M*|8qME7ZK$Y%%4qT`2P=(9#Cii literal 22382 zcmeI4_m@>g631uH?hiA>Aq+VTNjPWS;EE`MGJt>?K?MV56hy>`7*J7EOc)R|k_>>b z$<4tHZVqnp59+N?_4~fpbLZao?tAP3ciB0o&waPMLU(m_RdsdWX>0pJ+ZWq9JKOBp z-M02iZEdsK+SiSaLvu*!^O)cRqLua3I8RFCx>l&hKB3cjSJ6zFeF@g z-Gs36nhD|g14F_Mw~Y%=?H(G=J$G{N{wBO{Tt6;cedBoNG3#s7!}dd+;l&R-!|7k2 z?sd?+X~WpweMtCUw|1QO6L~CO(H*wFH7q>-#;|bd%84$Yt8W_b{pcmH3V-;myMJ_e z^?QTD_Jf^a*T)0Gv+oY^^3E>?gclEYhS$D7D6D^IbhSS&1LJ?`6%)e?*4H)nj&a-v zo*xk|xwJc6v~*Iq@Zw4So4V}>I>XI(j&+#JubSv`IO~jQ;koyRgfqSo<-O^d5#Dcb z5C5wp9R6oVxbUJ$UU&bqBYf9Ok?o-)PVW>NbII z{e>4i;msH>yKE^q}`n)~3y(=tTZv8hr`oUPd|2D?8HpUlhP8hSs4`1eJ{ez=j zM$8%VduIO-FS|Y-=<-3f$QW5y^|c~@Xx(6Xvubsmf98+5qu>0d9UZ*x)^U-q@RIpQ zH?F*Xg3AFO%n3#O(5)NSk1f`b?n9xK?VqCcPO7W??0!adbwmeM+w@9;XFg>ly# zFKc|;-l5@@?+gx)yfQp2yR5qqo;Cf@3ti#mZw_{S=e-gARPNc|3wox8_y624y#9kh z;gOxg!`nX_=(dag%$qy4I%n7_Y%+EUo4V!I;chQJ_)EWV&cZ2GxGa6W7mfe!ts}#G zf9x0LoL2E!Cr=NnYz^-HP5-d(xBcCgA)h_J8W8sXu79}RY{+R}F?(rqI{Va<9Ok~K zM-<8n{`KY_`|$L>p?zS^K69G;jRT+d3yg8cw+Dxwv!?ceLnio_dOXwz$s&E<`O%>8 z@Q&e*pKZU)?6mv<_AJ}ZJGTAx9}ddJPvMJxzx=JiVasd7d(j4VkFLwpTP()w#Mf3mUJHwoQ+K!JyAMrit-JDs|!dpKb7~cHxK%aAH3LgKd z`4g|SUB8Rw=guvo!hRbk{smp6KX3koHP9Xo{k_A>hyRFA>Y{HP8qhgnmVKtD_dGGO z>G_{GXPW!m$jf2{qrLZ&0pXor4)8f=PVmXMZX6TVTH!Z!=)-PX3-Fb0Ag4PY9Tn!E zU0bh`Pbw3BpK0riSmNN{I=no&YgjwRMavOf1bi!%-W z;!7sEO~NM1&YgGuWQRd6JIr1(_Zk;6djC)T+&-nc3awezUu2DaTfAsWulZu`ktO|l z=*6zc+hPI6!@N)!Cw2&0=sY$P9AX~oRIsP4NBAHk>gnI*SI4zXT*kZV`Av+o$L1a$ zn!`uU7HfXvv)%auzhK_faL8b>k&3TVddP@AuUJ)y^9*N2h5z{%WMUv|g9fzVkBx&z zU;Z6c{=fjc_mloHJ~Mc5RFD&WX3VOC$6F?oH-0oIEHoLV{Y8erV`m>U{Q-x$NB&2w zp2BbG05HIU!@dA`(OYab3LRsvnRB(#P8+_9xx3x=0{9&2(IM>nZ4ZnNhtNNZ6RE!l z{WIOeFT$I;^Gr9q@JQa@Fbpmz+!a9!x$d3I2l>qzB%qq zz$NaTX?_rR6{lnCkF}|>VXqE;+F>?psMCNBYnwGLzQWHwnZpeakE;56WVz?p1H$f# z{bAheHjNHz?j94?+%qQJX0iXH=JSEe+8_GE-U^$R<)im(fAo&+#IIvZv8hk*AL@4h zi0LmfLe{ds=mGYL@iKPi9$ajR=;iUFt*9{f!~kjgZ2XVuDf&9cY#H{9d0}1Sn^IWz zoAf8G%l@WM)TwXj`_7Ln<}>}uwl6Xp_3j_~yDl*2{KkHYhTyTi=&s(g?RqbIGA8zn zdF`?p%sKnaJeY@fbcI)KZ=Khc))n=Su|4tjus;1qm+&>L5!MvH&rbA9^oUcpSLUyX zAFxGbhxkEYS!cvW_n0mg(Wjn%>8U>I{hS3; ze2nBLm`mad z4*6jAidWq*!E+;=tC6=-d!v0gW3M+p+FB{>*~m#ScIKTk&nz8sY^&{zk(?E9Dv#Ox zrh9te?tgAX)Sn6*d+&9d#`J;{eR6H&jG%{n&_lH~`)nkiqIS-hrSF{YraDF+(s%Mt z?B4{>dS)-jc?bD0av|umbo~j-57QKfCX3oPC`Z zL$eLV_%&X@z>l*S)`G8>7IFf}t&F_bqg=aYoX;`(DP2Vef80NHee?Rb=aT-5Ke04%IeV*I`pKN9?e%`oGTkC3 zPyMvUo<2E4>q+je`QErP26VQpU#Bm?5)X+!cVNAbCLin$`~E1`I1hr;lRY&0nc9nb zV=S6~&LEu^KC9xNd2(J)K8k%PI?Q^9x9*XU_d+k-Kbt=LJ=Tis=|>Si^^taBDriCj zTF|7Ob8)|;VfE-5_foj4#Jvc?D}TTpCC-rR@uMwUh(Fj)JbYx@VW=!MQr;y4*v-o@Cp3=k9~}6BkkE`#z(~7+Du79(S-gQ;l+n z{E0O0NAAtp98-u4UK?~1!q`rMZ$2gSKEJR<#ezgwiZvKM@!m+;1C z*YG<0-b~$fWHRB7pvJ*k7k+kM&i$O!&x0d8p3-N@iYNYG^ptDl9lxRRr11L9d=nR< z!@|$@N3fCy=l%E~bPgQu8v&#CEWF;aPtlLZ^$I@rQgRbMIooJQ&`s8sO6{GyID&^h zcO>wYf)ze@m&8AXr!IYGjeUqd8ZUgwe6ts6JHJ)1nex5di$K0=tM?>VRm)Se7TN>f zMx;2zXmK85yZpEK=^Yr|tq?x3vD$fJ|L`?xZ}j9F5#b}Z6h4&~_dlXewtKu;M!v%5 z?w<6SxljEa{P;#l?XfRW_o>r*Ry#IUym{i!J%?(rz>q&p+o50Yoo_Hio4co3c;S+F zjQz3ucxG!-*yy+39%m@~E2dv35b1x{L+FaO3W zq3`Ep6}T9q^u__7^Rko|>xlcKDQ$jZ%Tu_b-`uBk{W2W(oSd1Zu*jEp%~gzBu~Bvh z(qw@D!I!8#3y+P&7fHXkQ>OI{?-ZUmC;Gogzoz%`o%mk1Py9Fo5j|p2*CDfk#3b^6 zY5&C!o57u3!P7r-Hfk6BK2IADF&pqI+;#N(X^EVKr#KZ@@^{>|*0|WCDyJ!UWbmAQ z>nIrT_)T3_?}?o}H)ie31+f+1JqS1V&Ybn1?>4eI2Vc+DrhcT)to)EG=W4``(eK81 zfP2Rtb0u`hy+z&Z@bf?D@*Q5pv%C3~yX{$i#DSb^liNt|m;$H%5J!tYziA`Z7eD-( z;K>1yQzPzEJGjI@9`_`D7JcFJo>#~*az=x{lK({Z=piu=b4kob8#ak=Mxeuay>?|Ft+;_=-b;C4OUH zC*E=WMEfCl;t%ow?A`O|XZfjL^`6*rz6Is`5An`>V)wbD%6GNy6HNxdA&=beTN1g$ zA3Y|Y6USxWAedgU#?t&p9$)InzmcO!WnFJfYRk%_?z^ocVp+yR-Y@#q#DBYAxB2jA z^w+FM`iDHQiOdi7i97rh?!2>(-ZOf>UorST_(rc*S8G?UgSFVoco=Id1)r!~Cvw1N zu-=q2DDv;oHX$#@P+aob@!#x!IY)sf`1sSZ`;@$KBD1>lUC>_J&vf`V;F3M-gm{yE z7w6)flaU+K+C&eSGv&UO|0b7O)9ZG(yNr|X$5*bJ5Wn}V#3A&TSW58NTk&sYJSlG3 z-<&yUO!TuJ9^dx(zS_nPPHNADN8BZP%yXlhKKWI_r{7$OUNg^D<{zKRdZZAar~LBh zac_tD!d|dOs{aqb^oz43?a_hZyPQV!;`v+T&;Ga(d{H}nZKV)T$=|Lp{VYR+Z?N#4 z6yiF*>te0A9dV!9?s@Yvw1{=YpL>U8aPnY~3-v|vDQfo^ucFW70L$RxkBM^?Ki~(5 zE8;jheD8z*E7Kq1Bk4ajrVM|rw{CH%i?ku>NWd@20Ym>p2YQh+f$Yf zcP@mV&4-kwA-JqO%DnsdZ7s8&*_VhG&qnym>^>-c2iJ@JPR|G$;nVK>t_nWBw;BE^ zeSWu6*jvhfvri~XgS~+7fiu3J{8lsj1nyjjKmMmI|14aY`2r^^U-Br@zgsNVnQia$ zZgC^uxM^R6{*x;p4%GUm4cni`FH6sJRYn6knuJqqUp@vJM_1N0idKwLrYGuyxF-q?8KL+a+I8rUOfw_5oB2lD5f;d3X4 zJ5Ah&WdE1FA3)secO`Rp62r5<~m_U#9gdeUyLKJ9CbYQqHy>{e|9{^t8& zegB|7>&clAck|MNVbeFrktOvg3z02+fklW+i z75E(uea`*)|61hwI0Glv#osFTd$jcF+lgF`R(}5r_>AF1E=RLI|J&#PL|*%vcRjTR QPNaAH_W=L@JAozeZ|l@fegFUf From 85e1a791ad9bd5a8783c76d39b32cb41d253e88b Mon Sep 17 00:00:00 2001 From: jshortz Date: Tue, 19 Nov 2019 15:06:22 +0100 Subject: [PATCH 07/21] Defined PostService as a service for automapping --- src/main/java/se/kth/sda6/skeleton/posts/PostService.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/se/kth/sda6/skeleton/posts/PostService.java b/src/main/java/se/kth/sda6/skeleton/posts/PostService.java index c29dc60..903430a 100644 --- a/src/main/java/se/kth/sda6/skeleton/posts/PostService.java +++ b/src/main/java/se/kth/sda6/skeleton/posts/PostService.java @@ -1,6 +1,7 @@ package se.kth.sda6.skeleton.posts; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; import java.util.List; import java.util.Optional; @@ -8,7 +9,7 @@ /* @TODO Autowire the PostRepository and use it to implement all the service methods. */ - +@Service public class PostService { @Autowired From 14dd1e89b3e6d4a3abe294cc0e094d66f0da3bc7 Mon Sep 17 00:00:00 2001 From: jshortz Date: Tue, 19 Nov 2019 15:55:36 +0100 Subject: [PATCH 08/21] Adding new comment files from Kwabena --- .../kth/sda6/skeleton/comments/Comment.java | 92 +++++++-------- .../skeleton/comments/CommentController.java | 107 ++++++++++-------- .../skeleton/comments/CommentRepository.java | 24 ++-- .../skeleton/comments/CommentService.java | 83 +++++++------- 4 files changed, 166 insertions(+), 140 deletions(-) diff --git a/src/main/java/se/kth/sda6/skeleton/comments/Comment.java b/src/main/java/se/kth/sda6/skeleton/comments/Comment.java index 0da1bbb..a0a7ac3 100644 --- a/src/main/java/se/kth/sda6/skeleton/comments/Comment.java +++ b/src/main/java/se/kth/sda6/skeleton/comments/Comment.java @@ -1,45 +1,47 @@ -//package se.kth.sda6.skeleton.comments; -// -// -//import se.kth.sda6.skeleton.posts.Post; -// -//import javax.persistence.*; -// -///** -// * Represents a comment made by a user on a post. -// */ -//@Entity -//public class Comment { -// @Id -// @GeneratedValue(strategy = GenerationType.AUTO) -// private Long id; -// -// private String body; -// -// @ManyToOne -// private Post post; -// -// public Comment() { -// } -// -// public Comment(String body, Post post) { -// this.body = body; -// this.post = post; -// } -// -// public String getBody() { -// return body; -// } -// -// public void setBody(String body) { -// this.body = body; -// } -// -// public Post getPost() { -// return post; -// } -// -// public void setPost(Post post) { -// this.post = post; -// } -//} +package se.kth.sda6.skeleton.comments; + + +import se.kth.sda6.skeleton.posts.Post; + +import javax.persistence.*; + +/** + * Represents a comment made by a user on a post. + */ +@Entity +@Table(name = "comment") +public class Comment { + @Id + @Column(name = "id") + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + + @Column(name = "body") + private String body; + + @ManyToOne() + private Post post; + + public Comment() { + } + + public Comment(String body) { + this.body = body; + } + + public String getBody() { + return body; + } + + public void setBody(String body) { + this.body = body; + } + + public Post getPost() { + return post; + } + + public void setPost(Post post) { + this.post = post; + } +} diff --git a/src/main/java/se/kth/sda6/skeleton/comments/CommentController.java b/src/main/java/se/kth/sda6/skeleton/comments/CommentController.java index c39a885..a2df82a 100644 --- a/src/main/java/se/kth/sda6/skeleton/comments/CommentController.java +++ b/src/main/java/se/kth/sda6/skeleton/comments/CommentController.java @@ -1,45 +1,62 @@ -//package se.kth.sda6.skeleton.comments; -// -//import org.springframework.http.HttpStatus; -//import org.springframework.http.ResponseEntity; -//import org.springframework.web.bind.annotation.*; -//import org.springframework.web.server.ResponseStatusException; -//import se.kth.sda6.skeleton.posts.Post; -//import se.kth.sda6.skeleton.posts.PostService; -// -//import javax.persistence.EntityNotFoundException; -//import java.util.List; -// -//@RestController -//public class CommentController { -// -// private CommentService commentService; -// private PostService postService; -// -// public CommentController(CommentService commentService, PostService postService) { -// this.commentService = commentService; -// this.postService = postService; -// } -// -// @GetMapping("/comments") -// public ResponseEntity getAllCommentsOnPost(@RequestParam Long postId) { -// Post post = postService.getByID(postId) -// .orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, "Could not find post with id " + postId.toString())); -// List comments = commentService.getAllByPost(post); -// return new ResponseEntity<>(comments, HttpStatus.OK); -// } -// -// @DeleteMapping("/comments/{id}") -// public ResponseEntity deleteComment(@PathVariable("id") Long id) { -// commentService.deleteById(id); -// return new ResponseEntity<>(HttpStatus.NO_CONTENT); -// } -// -// @PostMapping("posts/{id}/comments") -// public ResponseEntity postComment(@RequestBody Comment comment, @PathVariable("id") Long postId) { -// Post post = postService.getByID(postId) -// .orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, "Could not find post with id " + postId.toString())); -// Comment savedComment = commentService.save(comment, post); -// return new ResponseEntity(savedComment, HttpStatus.CREATED); -// } -//} +package se.kth.sda6.skeleton.comments; + +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.server.ResponseStatusException; +import se.kth.sda6.skeleton.posts.Post; +import se.kth.sda6.skeleton.posts.PostService; + +import java.util.List; + +@RestController +public class CommentController { + + private CommentService commentService; + private PostService postService; + + public CommentController(CommentService commentService, PostService postService) { + this.commentService = commentService; + this.postService = postService; + } + + @GetMapping("/comments") + public ResponseEntity getAll() { + List comments = commentService.getAll(); + return new ResponseEntity<>(comments, HttpStatus.OK); + } + + @GetMapping(value = "/comments", params = "postId") + public ResponseEntity getAllOnPost(@RequestParam Long postId) { + Post post = postService.getByID(postId) + .orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND)); + List comments = commentService.getAllByPost(post); + return new ResponseEntity<>(comments, HttpStatus.OK); + } + + @GetMapping("/comments/{id}") + public ResponseEntity getById(@PathVariable Long id) { + Comment comment = commentService.getByID(id) + .orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND)); + return new ResponseEntity<>(comment, HttpStatus.OK); + } + + @PostMapping("comments") + public ResponseEntity create(@RequestBody Comment comment) { + Comment newComment = commentService.create(comment); + return new ResponseEntity(newComment, HttpStatus.CREATED); + } + + @PutMapping("comments") + public ResponseEntity update(@RequestBody Comment comment) { + commentService.update(comment); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @DeleteMapping("/comments/{id}") + public ResponseEntity delete(@PathVariable("id") Long id) { + commentService.delete(id); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + +} diff --git a/src/main/java/se/kth/sda6/skeleton/comments/CommentRepository.java b/src/main/java/se/kth/sda6/skeleton/comments/CommentRepository.java index 47d4ce5..973f56d 100644 --- a/src/main/java/se/kth/sda6/skeleton/comments/CommentRepository.java +++ b/src/main/java/se/kth/sda6/skeleton/comments/CommentRepository.java @@ -1,12 +1,12 @@ -//package se.kth.sda6.skeleton.comments; -// -//import org.springframework.data.repository.CrudRepository; -//import se.kth.sda6.skeleton.posts.Post; -// -//import java.util.List; -// -// -//public interface CommentRepository extends CrudRepository { -// -// List findAllByPost(Post post); -//} +package se.kth.sda6.skeleton.comments; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.repository.CrudRepository; +import se.kth.sda6.skeleton.posts.Post; + +import java.util.List; + + +public interface CommentRepository extends JpaRepository { + List findAllByPost(Post post); +} diff --git a/src/main/java/se/kth/sda6/skeleton/comments/CommentService.java b/src/main/java/se/kth/sda6/skeleton/comments/CommentService.java index 6060f4f..0b97841 100644 --- a/src/main/java/se/kth/sda6/skeleton/comments/CommentService.java +++ b/src/main/java/se/kth/sda6/skeleton/comments/CommentService.java @@ -1,38 +1,45 @@ -//package se.kth.sda6.skeleton.comments; -// -//import org.springframework.stereotype.Service; -//import se.kth.sda6.skeleton.posts.Post; -// -//import java.util.ArrayList; -//import java.util.List; -//import java.util.Optional; -// -//@Service -//public class CommentService { -// -// private CommentRepository commentRepository; -// -// // Implicitly autowired -// public CommentService(CommentRepository commentRepository) { -// this.commentRepository = commentRepository; -// } -// -// public List getAllByPost(Post post) { -// List list = new ArrayList<>(); -// commentRepository.findAllByPost(post).forEach(list::add); -// return list; -// } -// -// public Optional getByID(Long id) { -// return commentRepository.findById(id); -// } -// -// public Comment save(Comment comment, Post post) { -// post.addComment(comment); -// return commentRepository.save(comment); -// } -// -// public void deleteById(Long id) { -// commentRepository.deleteById(id); -// } -//} +package se.kth.sda6.skeleton.comments; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import se.kth.sda6.skeleton.posts.Post; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +@Service +public class CommentService { + + private CommentRepository commentRepository; + + @Autowired + public CommentService(CommentRepository commentRepository) { + this.commentRepository = commentRepository; + } + + public List getAll() { + return commentRepository.findAll(); + } + + public List getAllByPost(Post post) { + return commentRepository.findAllByPost(post); + } + + public Optional getByID(Long id) { + return commentRepository.findById(id); + } + + public Comment create(Comment comment) { + return commentRepository.save(comment); + } + + public void delete(Long id) { + commentRepository.deleteById(id); + } + + public void update(Comment comment) { + commentRepository.save(comment); + } +} From dfac94a85308c405b2afdf87bb2c9fbad13dec0d Mon Sep 17 00:00:00 2001 From: basiazorychta Date: Wed, 20 Nov 2019 12:23:42 +0100 Subject: [PATCH 09/21] Changing H2 in Navbar , add logo in correct size inside --- frontend/src/components/layout/Navbar.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/frontend/src/components/layout/Navbar.js b/frontend/src/components/layout/Navbar.js index 4682ad1..1b034b6 100644 --- a/frontend/src/components/layout/Navbar.js +++ b/frontend/src/components/layout/Navbar.js @@ -4,11 +4,14 @@ import { Link } from "react-router-dom"; function Navbar({onLogout}) { return (