Skip to content

Commit

Permalink
Merge pull request #11 from 7th-UMC-Hackathon-TeamV/feat/post
Browse files Browse the repository at this point in the history
Feat/post
  • Loading branch information
chaechaen authored Jan 11, 2025
2 parents 581a6be + eaed2c1 commit e6bfd7f
Show file tree
Hide file tree
Showing 11 changed files with 100 additions and 39 deletions.
16 changes: 16 additions & 0 deletions src/main/java/banban/springboot/domain/entity/Group.java
Original file line number Diff line number Diff line change
@@ -1,4 +1,20 @@
package banban.springboot.domain.entity;

import jakarta.persistence.*;
import lombok.*;

@Entity
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Group {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(nullable = false, length = 6)
private String groupKey;
}
10 changes: 5 additions & 5 deletions src/main/java/banban/springboot/domain/entity/News.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,12 @@ public class News {
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "member_id", nullable = false)
private Member member;

@Column(nullable = false, length = 20)
private String headline;;
private String headline;

@Column(nullable = false, length = 1000)
private String content;
Expand All @@ -42,8 +46,4 @@ public class News {
@Column(nullable = false)
private LocalDateTime createdAt = LocalDateTime.now();

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "member_id",nullable = false)
private Member member;

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,13 @@

import banban.springboot.domain.entity.Member;
import org.apache.catalina.User;
import banban.springboot.domain.entity.Member;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Optional;
import java.util.Optional;

@Repository
public interface MemberRepository extends JpaRepository<Member, Long> {
Expand Down
32 changes: 30 additions & 2 deletions src/main/java/banban/springboot/service/NewsService.java
Original file line number Diff line number Diff line change
@@ -1,18 +1,46 @@
package banban.springboot.service;

import banban.springboot.apiPayload.code.status.ErrorStatus;
import banban.springboot.apiPayload.exception.GeneralException;
import banban.springboot.apiPayload.exception.handler.NewsHandler;
import banban.springboot.domain.entity.Member;
import banban.springboot.domain.entity.News;
import banban.springboot.repository.MemberRepository;
import banban.springboot.repository.NewsRepository;
import banban.springboot.web.dto.request.NewsRequestDTO;
import banban.springboot.web.dto.response.NewsResponseDTO;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@RequiredArgsConstructor
@Transactional(readOnly = true)
public class NewsService {
private final NewsRepository newsRepository;
private final MemberRepository memberRepository;

@Autowired
private NewsRepository newsRepository;
@Transactional
public NewsResponseDTO.NewsCreateResponseDTO createNews(Long groupId, Long memberId, NewsRequestDTO newsRequestDTO) {

Member member = memberRepository.findById(memberId)
.orElseThrow(() -> new GeneralException(ErrorStatus.MEMBER_NOT_FOUND));

News news = News.builder()

.member(member)
.headline(newsRequestDTO.getHeadline())
.content(newsRequestDTO.getContent())
.isBreakingNews(newsRequestDTO.isBreakingNews())
.likes(0)
.newsCategories(newsRequestDTO.getNewsCategories())
.createdAt(newsRequestDTO.getCreatedAt())
.build();

news = newsRepository.save(news);
return NewsResponseDTO.NewsCreateResponseDTO.from(news);
}
// 뉴스 공감 누르기
public News addNewsLike(Long newsId){
News existNews = newsRepository.findById(newsId)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@
import banban.springboot.web.dto.response.MemberResponseDTO;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

@RestController
Expand All @@ -17,31 +15,22 @@ public class MemberController {

private final MemberService memberService;

/**
* 사용자 생성 API
*/
/* 사용자 생성 API*/
@PostMapping("/users/login")
public ApiResponse<MemberResponseDTO> createUser(@RequestBody @Valid MemberRequestDTO memberRequestDTO) {
MemberResponseDTO MemberResponseDTO = memberService.createUser(memberRequestDTO);
return ApiResponse.onSuccess(MemberResponseDTO);
}
return ApiResponse.onSuccess(MemberResponseDTO);}

/**
* ID로 사용자 조회 API
*/
/* ID로 사용자 조회 API */
@GetMapping("/users/login/{memberId}")
public ApiResponse<MemberResponseDTO> getUserById(@PathVariable Long memberId) {
MemberResponseDTO MemberResponseDTO = memberService.findMemberById(memberId);
return ApiResponse.onSuccess(MemberResponseDTO);
}
return ApiResponse.onSuccess(MemberResponseDTO);}

/**
* Username으로 사용자 조회 API
*/
@GetMapping("/users/login/username")
Username으로 사용자 조회 API*/@GetMapping("/users/login/username")
public ApiResponse<MemberResponseDTO> getUserByUsername(@RequestParam String username) {
MemberResponseDTO MemberResponseDTO = memberService.getMemberByUsername(username);
return ApiResponse.onSuccess(MemberResponseDTO);
}
}

return ApiResponse.onSuccess(MemberResponseDTO);}
}
11 changes: 11 additions & 0 deletions src/main/java/banban/springboot/web/controller/NewsController.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,11 @@
import banban.springboot.apiPayload.ApiResponse;
import banban.springboot.domain.entity.News;
import banban.springboot.service.NewsService;
import banban.springboot.web.dto.request.NewsRequestDTO;
import banban.springboot.web.dto.response.NewsResponseDTO;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
Expand All @@ -12,6 +16,7 @@
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

@Tag(name = "뉴스")
@RestController
@RequiredArgsConstructor
@Validated
Expand All @@ -20,6 +25,12 @@ public class NewsController {

private final NewsService newsService;

@Operation(summary = "뉴스 생성")
@PostMapping("/{groupId}/users/news/{memberId}")
public ApiResponse<NewsResponseDTO.NewsCreateResponseDTO> createNews(@PathVariable Long groupId, @PathVariable Long memberId, @Valid @RequestBody NewsRequestDTO newsRequestDTO) {
NewsResponseDTO.NewsCreateResponseDTO news = newsService.createNews(groupId, memberId, newsRequestDTO);
return ApiResponse.onSuccess(news);
}
// 뉴스 공감 누르기
@PostMapping("/news/{newsId}/likes")
@Operation(summary = "공감 누르기 API",description = "뉴스에 공감 누르는 API입니다.")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,4 @@ public class MemberRequestDTO {

@Size(max=20)
private String password;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public class NewsRequestDTO {
@Size(max = 1000, message = "뉴스 본문은 최대 1000자입니다.")
private String content;

private List<MultipartFile> images; // 사용자가 업로드한 이미지
//private List<MultipartFile> images; // 사용자가 업로드한 이미지

private boolean isBreakingNews; // 속보 여부

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
package banban.springboot.web.dto.response;

public class GroupResponseDTO {

}
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,4 @@
public class MemberResponseDTO {
private Long id;
private String username;
}
}
Original file line number Diff line number Diff line change
@@ -1,19 +1,33 @@
package banban.springboot.web.dto.response;

import banban.springboot.domain.entity.News;
import lombok.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

@Getter
@Setter
@NoArgsConstructor
@Builder
@AllArgsConstructor

public class NewsResponseDTO {
private Long id;
private String headline;
private String content;
private List<MultipartFile> images;
private boolean isBreakingNews;

@Getter
@Setter
@NoArgsConstructor
@Builder
@AllArgsConstructor
public static class NewsCreateResponseDTO {
private Long newsId;
private String headline;
private String content;
//private List<MultipartFile> images;
private boolean isBreakingNews;

public static NewsCreateResponseDTO from(News news) {
return NewsCreateResponseDTO.builder()
.newsId(news.getId())
.headline(news.getHeadline())
.content(news.getContent())
.isBreakingNews(news.isBreakingNews())
.build();
}
}
}

0 comments on commit e6bfd7f

Please sign in to comment.