summaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com')
-rw-r--r--src/main/java/com/blog/web/controllers/ArticleController.java33
-rw-r--r--src/main/java/com/blog/web/dto/ArticleDto.java27
-rw-r--r--src/main/java/com/blog/web/models/Article.java30
-rw-r--r--src/main/java/com/blog/web/repository/ArticleRepository.java8
-rw-r--r--src/main/java/com/blog/web/services/ArticleService.java9
-rw-r--r--src/main/java/com/blog/web/services/impl/ArticleServiceImpl.java36
6 files changed, 143 insertions, 0 deletions
diff --git a/src/main/java/com/blog/web/controllers/ArticleController.java b/src/main/java/com/blog/web/controllers/ArticleController.java
new file mode 100644
index 0000000..3c86ea3
--- /dev/null
+++ b/src/main/java/com/blog/web/controllers/ArticleController.java
@@ -0,0 +1,33 @@
+package com.blog.web.controllers;
+
+import com.blog.web.dto.ArticleDto;
+import com.blog.web.models.Article;
+import com.blog.web.services.ArticleService;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.GetMapping;
+
+import java.util.List;
+
+@Controller
+public class ArticleController {
+ private ArticleService articleService;
+
+ public ArticleController(ArticleService articleService) {
+ this.articleService = articleService;
+ }
+
+ @GetMapping("/")
+ public String listArticles(Model model) {
+ List<ArticleDto> articles = articleService.findAllArticles();
+ model.addAttribute("articles", articles);
+ return "index";
+ }
+
+ @GetMapping("/articles/new")
+ public String createArticleForm(Model model) {
+ Article article = new Article();
+ model.addAttribute("article", article);
+ return "articles/new";
+ }
+}
diff --git a/src/main/java/com/blog/web/dto/ArticleDto.java b/src/main/java/com/blog/web/dto/ArticleDto.java
new file mode 100644
index 0000000..ffe7926
--- /dev/null
+++ b/src/main/java/com/blog/web/dto/ArticleDto.java
@@ -0,0 +1,27 @@
+package com.blog.web.dto;
+
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import lombok.Builder;
+import lombok.Data;
+import org.hibernate.annotations.CreationTimestamp;
+import org.hibernate.annotations.UpdateTimestamp;
+
+import java.time.LocalDateTime;
+
+@Data
+@Builder
+public class ArticleDto {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+ private String title;
+ private String photoUrl;
+ private String content;
+ @CreationTimestamp
+ private LocalDateTime createdOn;
+ @UpdateTimestamp
+ private LocalDateTime updatedOn;
+
+}
diff --git a/src/main/java/com/blog/web/models/Article.java b/src/main/java/com/blog/web/models/Article.java
new file mode 100644
index 0000000..5d4566f
--- /dev/null
+++ b/src/main/java/com/blog/web/models/Article.java
@@ -0,0 +1,30 @@
+package com.blog.web.models;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import jakarta.persistence.*;
+import org.hibernate.annotations.CreationTimestamp;
+import org.hibernate.annotations.UpdateTimestamp;
+
+import java.time.LocalDateTime;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@Entity
+public class Article {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+ private String title;
+ private String photoUrl;
+ private String content;
+ @CreationTimestamp
+ private LocalDateTime createdOn;
+ @UpdateTimestamp
+ private LocalDateTime updatedOn;
+}
diff --git a/src/main/java/com/blog/web/repository/ArticleRepository.java b/src/main/java/com/blog/web/repository/ArticleRepository.java
new file mode 100644
index 0000000..c7e8c04
--- /dev/null
+++ b/src/main/java/com/blog/web/repository/ArticleRepository.java
@@ -0,0 +1,8 @@
+package com.blog.web.repository;
+
+import com.blog.web.models.Article;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface ArticleRepository extends JpaRepository<Article, Long> {
+
+}
diff --git a/src/main/java/com/blog/web/services/ArticleService.java b/src/main/java/com/blog/web/services/ArticleService.java
new file mode 100644
index 0000000..c1b28e6
--- /dev/null
+++ b/src/main/java/com/blog/web/services/ArticleService.java
@@ -0,0 +1,9 @@
+package com.blog.web.services;
+
+import com.blog.web.dto.ArticleDto;
+
+import java.util.List;
+
+public interface ArticleService {
+ List<ArticleDto> findAllArticles();
+}
diff --git a/src/main/java/com/blog/web/services/impl/ArticleServiceImpl.java b/src/main/java/com/blog/web/services/impl/ArticleServiceImpl.java
new file mode 100644
index 0000000..2d3f253
--- /dev/null
+++ b/src/main/java/com/blog/web/services/impl/ArticleServiceImpl.java
@@ -0,0 +1,36 @@
+package com.blog.web.services.impl;
+
+import com.blog.web.dto.ArticleDto;
+import com.blog.web.models.Article;
+import com.blog.web.repository.ArticleRepository;
+import com.blog.web.services.ArticleService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+public class ArticleServiceImpl implements ArticleService {
+ public ArticleServiceImpl(com.blog.web.repository.ArticleRepository articleRepository) {
+ this.articleRepository = articleRepository;
+ }
+
+ private ArticleRepository articleRepository;
+
+ @Override
+ public List<ArticleDto> findAllArticles() {
+ List<Article> articles = articleRepository.findAll();
+ return articles.stream().map(this::mapToArticleDto).collect(Collectors.toList());
+ }
+
+ private ArticleDto mapToArticleDto(Article article) {
+ return ArticleDto.builder()
+ .id(article.getId())
+ .title(article.getTitle())
+ .photoUrl(article.getPhotoUrl())
+ .content(article.getContent())
+ .createdOn(article.getCreatedOn())
+ .updatedOn(article.getUpdatedOn())
+ .build();
+ }
+}