Skip to content

Commit

Permalink
feat: 패널 생성 기능 (#28)
Browse files Browse the repository at this point in the history
  • Loading branch information
soomanbaek committed Aug 12, 2023
1 parent bf20302 commit 5938214
Show file tree
Hide file tree
Showing 5 changed files with 106 additions and 1 deletion.
20 changes: 19 additions & 1 deletion src/main/java/blacktokkies/toquiz/domain/panel/api/PanelApi.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,23 @@
package blacktokkies.toquiz.domain.panel.api;

public class PanelApi {
import blacktokkies.toquiz.domain.panel.application.PanelService;
import blacktokkies.toquiz.domain.panel.dto.request.CreatePanelRequest;
import blacktokkies.toquiz.domain.panel.dto.response.CreatePanelResponse;
import blacktokkies.toquiz.global.common.response.SuccessResponse;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequiredArgsConstructor
public class PanelApi {
private final PanelService panelService;
@PostMapping("api/panel")
ResponseEntity<SuccessResponse<CreatePanelResponse>> create(@RequestBody @Valid CreatePanelRequest createPanelRequest){
CreatePanelResponse response = panelService.create(createPanelRequest);
return ResponseEntity.ok(new SuccessResponse<>(response));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package blacktokkies.toquiz.domain.panel.application;

import blacktokkies.toquiz.domain.member.domain.Member;
import blacktokkies.toquiz.domain.panel.dao.PanelRepository;
import blacktokkies.toquiz.domain.panel.domain.Panel;
import blacktokkies.toquiz.domain.panel.dto.request.CreatePanelRequest;
import blacktokkies.toquiz.domain.panel.dto.response.CreatePanelResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
public class PanelService {
private final PanelRepository panelRepository;
public CreatePanelResponse create(CreatePanelRequest createPanelRequest) {
Member member = (Member) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
Panel panel = panelRepository.save(createPanelRequest.toPanelWith(member));
return CreatePanelResponse.toDto(panel);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package blacktokkies.toquiz.domain.panel.dao;

import blacktokkies.toquiz.domain.panel.domain.Panel;
import org.springframework.data.jpa.repository.JpaRepository;

public interface PanelRepository extends JpaRepository<Panel, Long> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package blacktokkies.toquiz.domain.panel.dto.request;

import blacktokkies.toquiz.domain.member.domain.Member;
import blacktokkies.toquiz.domain.panel.domain.Panel;
import jakarta.validation.constraints.NotBlank;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Length;

import java.util.Optional;

import static blacktokkies.toquiz.global.common.validation.ValidationErrorMessage.*;

@Getter
@NoArgsConstructor
public class CreatePanelRequest {
@NotBlank(message = TITLE_EMPTY_MESSAGE)
@Length(min = 3, max = 40, message = TITLE_LENGTH_MESSAGE)
private String title;

@Length(max = 50, message = DESCRIPTION_LENGTH_MESSAGE)
private String description;

public Panel toPanelWith(Member member){
return Panel.builder()
.member(member)
.title(title)
.description(Optional.ofNullable(description).orElse(""))
.isArchived(false)
.scarpNum(0)
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package blacktokkies.toquiz.domain.panel.dto.response;

import blacktokkies.toquiz.domain.panel.domain.Panel;
import lombok.*;

@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class CreatePanelResponse {
private Long panel_id;
private Long member_id;
private String title;
private String description;
private final int scrapNum = 0;
private final boolean isArchived = false;

public static CreatePanelResponse toDto(Panel panel){
return CreatePanelResponse.builder()
.title(panel.getTitle())
.panel_id(panel.getId())
.member_id(panel.getMember().getId())
.description(panel.getDescription())
.build();
}
}

0 comments on commit 5938214

Please sign in to comment.