-
Notifications
You must be signed in to change notification settings - Fork 25
[이현성_BackEnd] 11주차 과제 제출합니다. #25
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
1c2bb44
d17c235
6a0e82e
3a28a03
c3de8a6
a36bda3
662939f
c85af65
d229067
7dc0b89
3a3a5be
31c7db2
8e653f1
a597233
ad2aaa6
b6e4d9d
55af08c
773ebe9
92d02f2
1722721
c2fce43
5484541
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
This file was deleted.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,48 @@ | ||
| package com.example.bcsd.controllers; | ||
|
|
||
| import com.example.bcsd.models.Article; | ||
| import com.example.bcsd.services.PostService; | ||
| import org.springframework.http.HttpStatus; | ||
| import org.springframework.http.ResponseEntity; | ||
| import org.springframework.web.bind.annotation.*; | ||
|
|
||
| import java.util.List; | ||
|
|
||
| @RestController | ||
| @RequestMapping("/articles") | ||
| public class ArticleController { | ||
|
|
||
| private final PostService postService; | ||
|
|
||
| public ArticleController(PostService postService) { | ||
| this.postService = postService; | ||
| } | ||
|
|
||
| @GetMapping | ||
| public List<Article> getArticlesByBoard(@RequestParam("boardId") int boardId) { | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 이 부분은
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
이 부분에 관해서 살짝 이해가 안되는 부분이 있던데, 모델을 작성하는것과 DTO의 큰 차이가 뭔지 잘 모르겠습니다. |
||
| return postService.getArticlesByBoard(boardId); | ||
| } | ||
|
|
||
| @GetMapping("/{id}") | ||
| public Article getArticle(@PathVariable int id) { | ||
| return postService.getArticleById(id); | ||
| } | ||
|
|
||
| @PostMapping | ||
| public ResponseEntity<Void> createArticle(@RequestBody Article article) { | ||
| postService.createArticle(article); | ||
| return ResponseEntity.status(HttpStatus.CREATED).build(); | ||
| } | ||
|
|
||
| @PutMapping("/{id}") | ||
| public ResponseEntity<Void> updateArticle(@PathVariable int id, @RequestBody Article article) { | ||
| postService.updateArticle(id, article); | ||
| return ResponseEntity.ok().build(); | ||
| } | ||
|
|
||
| @DeleteMapping("/{id}") | ||
| public ResponseEntity<Void> deleteArticle(@PathVariable int id) { | ||
| postService.deleteArticle(id); | ||
| return ResponseEntity.noContent().build(); | ||
| } | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,50 @@ | ||
| package com.example.bcsd.controllers; | ||
|
|
||
| import com.example.bcsd.models.Member; | ||
| import com.example.bcsd.services.MemberService; | ||
| import org.springframework.beans.factory.annotation.Autowired; | ||
| import org.springframework.http.HttpStatus; | ||
| import org.springframework.http.ResponseEntity; | ||
| import org.springframework.web.bind.annotation.*; | ||
|
|
||
| import java.util.List; | ||
|
|
||
| @RestController | ||
| @RequestMapping("/members") | ||
| public class MemberController { | ||
|
|
||
| private final MemberService memberService; | ||
|
|
||
| @Autowired | ||
| public MemberController(MemberService memberService) { | ||
| this.memberService = memberService; | ||
| } | ||
|
Comment on lines
+18
to
+21
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 해당 주입 방법의 장점이 뭘까요? |
||
|
|
||
| @PostMapping | ||
| public ResponseEntity<Member> createMember(@RequestBody Member member) { | ||
| Member created = memberService.createMember(member); | ||
| return ResponseEntity.status(HttpStatus.CREATED).body(created); | ||
| } | ||
|
|
||
| @GetMapping("/{id}") | ||
| public ResponseEntity<Member> getMemberById(@PathVariable int id) { | ||
| return ResponseEntity.ok(memberService.getMemberById(id)); | ||
| } | ||
|
|
||
| @GetMapping | ||
| public ResponseEntity<List<Member>> getAllMembers() { | ||
| return ResponseEntity.ok(memberService.getAllMembers()); | ||
| } | ||
|
|
||
| @PutMapping("/{id}") | ||
| public ResponseEntity<Void> updateMember(@PathVariable int id, @RequestBody Member member) { | ||
| memberService.updateMember(id, member); | ||
| return ResponseEntity.ok().build(); | ||
| } | ||
|
|
||
| @DeleteMapping("/{id}") | ||
| public ResponseEntity<Void> deleteMember(@PathVariable int id) { | ||
| memberService.deleteMember(id); | ||
| return ResponseEntity.noContent().build(); | ||
| } | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,26 @@ | ||
| package com.example.bcsd.controllers; | ||
|
|
||
| import com.example.bcsd.services.PostService; | ||
| import org.springframework.stereotype.Controller; | ||
| import org.springframework.ui.Model; | ||
| import org.springframework.web.bind.annotation.GetMapping; | ||
| import org.springframework.web.bind.annotation.RequestParam; | ||
|
|
||
|
|
||
|
|
||
| @Controller | ||
| public class PostController { | ||
| private final PostService postService; | ||
|
|
||
| public PostController(PostService postService) { | ||
| this.postService = postService; | ||
| } | ||
|
|
||
| @GetMapping("/posts") | ||
| public String getPosts(@RequestParam int boardId, Model model) { | ||
| model.addAttribute("boardName", postService.getBoardName(boardId)); | ||
| model.addAttribute("articles", postService.getArticlesByBoard(boardId)); | ||
| return "posts"; | ||
| } | ||
| } | ||
|
|
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,63 @@ | ||
| package com.example.bcsd.controllers; | ||
|
|
||
| import com.example.bcsd.dtos.LoginDto; | ||
| import com.example.bcsd.dtos.SignupDto; | ||
| import com.example.bcsd.models.Member; | ||
| import com.example.bcsd.repositories.MemberRepository; | ||
| import jakarta.servlet.http.HttpSession; | ||
| import lombok.RequiredArgsConstructor; | ||
| import org.springframework.stereotype.Controller; | ||
| import org.springframework.web.bind.annotation.*; | ||
|
|
||
| import java.util.Optional; | ||
|
|
||
| @Controller | ||
| @RequiredArgsConstructor | ||
| public class SessionController { | ||
|
|
||
| private final MemberRepository memberRepository; | ||
|
|
||
| @GetMapping("/login") | ||
| public String loginForm() { | ||
| return "login"; | ||
| } | ||
| @GetMapping("/signup") | ||
| public String signupForm() { | ||
| return "signup"; // templates/login.html 파일 필요 | ||
| } | ||
|
|
||
| @PostMapping("/signup") | ||
| public String signup(SignupDto request) { | ||
| if (!request.getPassword().equals(request.getConfirmPassword())) { | ||
| return "비밀번호가 일치하지 않습니다."; | ||
| } | ||
|
|
||
| if (memberRepository.findByAccount(request.getAccount()).isPresent()) { | ||
| return "이미 존재하는 계정입니다."; | ||
| } | ||
|
|
||
| Member member = new Member(); | ||
| member.setAccount(request.getAccount()); | ||
| member.setPassword(request.getPassword()); | ||
| member.setEmail(request.getEmail()); | ||
| member.setName(request.getName()); | ||
| memberRepository.save(member); | ||
|
|
||
| return "redirect:/login"; | ||
| } | ||
|
|
||
| @PostMapping("/login") | ||
| public String login(LoginDto request, HttpSession session) { | ||
| Optional<Member> optionalMember = memberRepository.findByAccount(request.getAccount()); | ||
|
|
||
| if (optionalMember.isEmpty()) return "존재하지 않는 계정입니다."; | ||
| Member member = optionalMember.get(); | ||
|
|
||
| if (!member.getPassword().equals(request.getPassword())) { | ||
| return "비밀번호가 틀렸습니다."; | ||
| } | ||
|
|
||
| session.setAttribute("loginMember", member); // 세션 저장 | ||
| return "redirect:/"; | ||
| } | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,54 @@ | ||
| /*package com.example.bcsd.daos; | ||
|
|
||
| import com.example.bcsd.models.Article; | ||
| import org.springframework.stereotype.Repository; | ||
| import jakarta.persistence.EntityManager; | ||
| import jakarta.persistence.PersistenceContext; | ||
|
|
||
| import java.util.List; | ||
|
|
||
| @Repository | ||
| public class ArticleDAO { | ||
|
|
||
| @PersistenceContext | ||
| private EntityManager em; | ||
|
|
||
| public Article findById(int id) { | ||
| return em.find(Article.class, id); | ||
| } | ||
|
|
||
| public List<Article> findByBoardId(int boardId) { | ||
| return em.createQuery("SELECT a FROM Article a WHERE a.boardId = :boardId", Article.class) | ||
| .setParameter("boardId", boardId) | ||
| .getResultList(); | ||
| } | ||
|
|
||
| public void insert(Article article) { | ||
| em.persist(article); | ||
| } | ||
|
|
||
| public void update(int id, Article article) { | ||
| Article target = em.find(Article.class, id); | ||
| if (target != null) { | ||
| target.setBoardId(article.getBoardId()); | ||
| target.setTitle(article.getTitle()); | ||
| target.setContent(article.getContent()); | ||
| target.setUpdatedAt(java.time.LocalDateTime.now()); | ||
| } | ||
| } | ||
|
|
||
| public void delete(int id) { | ||
| Article article = em.find(Article.class, id); | ||
| if (article != null) { | ||
| em.remove(article); | ||
| } | ||
| } | ||
|
|
||
| public int countByAuthorId(int authorId) { | ||
| Long count = em.createQuery("SELECT COUNT(a) FROM Article a WHERE a.authorId = :authorId", Long.class) | ||
| .setParameter("authorId", authorId) | ||
| .getSingleResult(); | ||
| return count.intValue(); | ||
| } | ||
| } | ||
| */ |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,30 @@ | ||
| /* | ||
| package com.example.bcsd.daos; | ||
|
|
||
|
|
||
| import com.example.bcsd.models.Board; | ||
| import jakarta.persistence.EntityManager; | ||
| import jakarta.persistence.PersistenceContext; | ||
| import org.springframework.dao.EmptyResultDataAccessException; | ||
| import org.springframework.jdbc.core.JdbcTemplate; | ||
| import org.springframework.jdbc.core.RowMapper; | ||
| import org.springframework.stereotype.Repository; | ||
|
|
||
| import java.util.List; | ||
| import java.util.Optional; | ||
|
|
||
|
|
||
| @Repository | ||
| public class BoardDAO { | ||
|
|
||
| @PersistenceContext | ||
| private EntityManager em; | ||
|
|
||
| public Optional<String> findNameById(int id) { | ||
| List<String> names = em.createQuery("SELECT b.name FROM Board b WHERE b.id = :id", String.class) | ||
| .setParameter("id", id) | ||
| .getResultList(); | ||
| return names.stream().findFirst(); | ||
| } | ||
| } | ||
| */ |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,51 @@ | ||
| /* | ||
| package com.example.bcsd.daos; | ||
|
|
||
| import com.example.bcsd.models.Member; | ||
| import jakarta.persistence.EntityManager; | ||
| import jakarta.persistence.PersistenceContext; | ||
| import org.springframework.stereotype.Repository; | ||
|
|
||
| import java.util.List; | ||
| import java.util.Optional; | ||
|
|
||
| @Repository | ||
| public class MemberDAO { | ||
|
|
||
| @PersistenceContext | ||
| private EntityManager em; | ||
|
|
||
| public Member findById(int id) { | ||
| return em.find(Member.class, id); | ||
| } | ||
|
|
||
| public List<Member> findAll() { | ||
| return em.createQuery("SELECT m FROM Member m", Member.class).getResultList(); | ||
| } | ||
|
|
||
| public void insert(Member member) { | ||
| em.persist(member); | ||
| } | ||
|
|
||
| public void update(Member member) { | ||
| Member target = em.find(Member.class, member.getId()); | ||
| if (target != null) { | ||
| target.setName(member.getName()); | ||
| target.setEmail(member.getEmail()); | ||
| } | ||
| } | ||
|
|
||
| public void delete(int id) { | ||
| Member member = em.find(Member.class, id); | ||
| if (member != null) { | ||
| em.remove(member); | ||
| } | ||
| } | ||
| public Optional<Member> findByEmail(String email) { | ||
| List<Member> result = em.createQuery("SELECT m FROM Member m WHERE m.email = :email", Member.class) | ||
| .setParameter("email", email) | ||
| .getResultList(); | ||
| return result.stream().findFirst(); | ||
| } | ||
| } | ||
| */ |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,10 @@ | ||
| package com.example.bcsd.dtos; | ||
|
|
||
| import lombok.Getter; | ||
| import lombok.Setter; | ||
|
|
||
| @Getter @Setter | ||
| public class LoginDto { | ||
| private String account; | ||
| private String password; | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,13 @@ | ||
| package com.example.bcsd.dtos; | ||
|
|
||
| import lombok.Getter; | ||
| import lombok.Setter; | ||
|
|
||
| @Getter @Setter | ||
| public class SignupDto { | ||
| private String account; | ||
| private String password; | ||
| private String confirmPassword; | ||
| private String email; | ||
| private String name; | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Article관련인데ArticleService가 아닌 이유가 있을까요?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
html에 보여줄때 post html을 같이 사용해서 따로 분리하지 않고 post에 같이 넣어둔건데 분리하겠습니다!