diff --git a/src/main/java/com/adlternative/tinyhacknews/controller/NewsController.java b/src/main/java/com/adlternative/tinyhacknews/controller/NewsController.java new file mode 100644 index 0000000..6dec291 --- /dev/null +++ b/src/main/java/com/adlternative/tinyhacknews/controller/NewsController.java @@ -0,0 +1,41 @@ +package com.adlternative.tinyhacknews.controller; + +import com.adlternative.tinyhacknews.entity.News; +import com.adlternative.tinyhacknews.service.NewsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/api/v1/news") +public class NewsController { + + @Autowired + private NewsService newsService; + + @PostMapping + public News createNews(@RequestBody News news) { + return newsService.createNews(news); + } + + @GetMapping("/{id}") + public News getNewsById(@PathVariable("id") Long id) { + return newsService.getNewsById(id); + } + + @GetMapping + public List getAllNews() { + return newsService.getAllNews(); + } + + @PutMapping("/{id}") + public News updateNews(@PathVariable("id") Long id, @RequestBody News news) { + return newsService.updateNews(id, news); + } + + @DeleteMapping("/{id}") + public void deleteNews(@PathVariable("id") Long id) { + newsService.deleteNews(id); + } +} diff --git a/src/main/java/com/adlternative/tinyhacknews/db/schema.sql b/src/main/java/com/adlternative/tinyhacknews/db/schema.sql index fc7f91f..4883e6f 100644 --- a/src/main/java/com/adlternative/tinyhacknews/db/schema.sql +++ b/src/main/java/com/adlternative/tinyhacknews/db/schema.sql @@ -6,3 +6,12 @@ CREATE TABLE Users ( createdAt DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, updatedAt DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +CREATE TABLE News ( + id INT PRIMARY KEY AUTO_INCREMENT, + title VARCHAR(255) NOT NULL, + content TEXT NOT NULL, + author VARCHAR(50) NOT NULL, + createdAt DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + updatedAt DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; diff --git a/src/main/java/com/adlternative/tinyhacknews/entity/News.java b/src/main/java/com/adlternative/tinyhacknews/entity/News.java new file mode 100644 index 0000000..889899d --- /dev/null +++ b/src/main/java/com/adlternative/tinyhacknews/entity/News.java @@ -0,0 +1,21 @@ +package com.adlternative.tinyhacknews.entity; + +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.Builder; + +import java.util.Date; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class News { + private Long id; + private String title; + private String content; + private String author; + private Date createdAt; + private Date updatedAt; +} diff --git a/src/main/java/com/adlternative/tinyhacknews/mapper/NewsMapper.java b/src/main/java/com/adlternative/tinyhacknews/mapper/NewsMapper.java new file mode 100644 index 0000000..1c137db --- /dev/null +++ b/src/main/java/com/adlternative/tinyhacknews/mapper/NewsMapper.java @@ -0,0 +1,33 @@ +package com.adlternative.tinyhacknews.mapper; + +import com.adlternative.tinyhacknews.entity.News; +import java.util.List; +import java.util.Optional; +import org.apache.ibatis.annotations.Delete; +import org.apache.ibatis.annotations.Insert; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Options; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; +import org.springframework.stereotype.Component; + +@Mapper +@Component +public interface NewsMapper { + + @Insert("INSERT INTO News (title, content, author, createdAt, updatedAt) VALUES (#{title}, #{content}, #{author}, #{createdAt}, #{updatedAt})") + @Options(useGeneratedKeys = true, keyProperty = "id") + int insert(News news); + + @Select("SELECT * FROM News WHERE id = #{id}") + Optional selectById(Long id); + + @Select("SELECT * FROM News") + List selectAll(); + + @Update("UPDATE News SET title=#{title}, content=#{content}, author=#{author}, updatedAt=#{updatedAt} WHERE id=#{id}") + int update(News news); + + @Delete("DELETE FROM News WHERE id=#{id}") + int delete(Long id); +} diff --git a/src/main/java/com/adlternative/tinyhacknews/service/NewsService.java b/src/main/java/com/adlternative/tinyhacknews/service/NewsService.java new file mode 100644 index 0000000..62a706a --- /dev/null +++ b/src/main/java/com/adlternative/tinyhacknews/service/NewsService.java @@ -0,0 +1,12 @@ +package com.adlternative.tinyhacknews.service; + +import com.adlternative.tinyhacknews.entity.News; +import java.util.List; + +public interface NewsService { + News createNews(News news); + News getNewsById(Long id); + List getAllNews(); + News updateNews(Long id, News news); + void deleteNews(Long id); +} diff --git a/src/main/java/com/adlternative/tinyhacknews/service/impl/NewsServiceImpl.java b/src/main/java/com/adlternative/tinyhacknews/service/impl/NewsServiceImpl.java new file mode 100644 index 0000000..cd78842 --- /dev/null +++ b/src/main/java/com/adlternative/tinyhacknews/service/impl/NewsServiceImpl.java @@ -0,0 +1,44 @@ +package com.adlternative.tinyhacknews.service.impl; + +import com.adlternative.tinyhacknews.entity.News; +import com.adlternative.tinyhacknews.mapper.NewsMapper; +import com.adlternative.tinyhacknews.service.NewsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class NewsServiceImpl implements NewsService { + + @Autowired + private NewsMapper newsMapper; + + @Override + public News createNews(News news) { + newsMapper.insert(news); + return news; + } + + @Override + public News getNewsById(Long id) { + return newsMapper.selectById(id).orElse(null); + } + + @Override + public List getAllNews() { + return newsMapper.selectAll(); + } + + @Override + public News updateNews(Long id, News news) { + news.setId(id); + newsMapper.update(news); + return news; + } + + @Override + public void deleteNews(Long id) { + newsMapper.delete(id); + } +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index ecb4d44..63e65f7 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -7,3 +7,7 @@ spring: username: tiny-hacknews password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver + +mybatis: + mapper-locations: classpath:mapper/*.xml + type-aliases-package: com.adlternative.tinyhacknews.entity