게시글 기능 추가

뚜우웅이·2024년 1월 8일

게시글 생성일, 수정일, 활성화 여부

생성일, 수정일, 활성화 여부에 맞는 DB 테이블에 컬럼을 추가해줍니다.

board, boardDTO에 추가

package toyproject.springmvcboard.domain.board;


import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.mapstruct.Mapper;

import java.time.LocalDateTime;

@Entity
@Getter
@NoArgsConstructor
public class Board {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;
    private String title;
    private String content;
    private LocalDateTime createdAt;
    private LocalDateTime updatedAt;
    private int enabled;

    @Builder
    public Board(long id, String title, String content, LocalDateTime createdAt, LocalDateTime updatedAt, int enabled) {
        this.id = id;
        this.title = title;
        this.content = content;
        this.createdAt = createdAt;
        this.updatedAt = updatedAt;
        this.enabled = enabled;
    }

    @Mapper(componentModel = "spring")
    public static interface BoardMapper {
        BoardDTO boardToBoardDTO(Board board);

        Board boardDTOToBoard(BoardDTO boardDTO);
    }
}
package toyproject.springmvcboard.domain.board;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import java.time.LocalDateTime;


@Getter
@Setter
@NoArgsConstructor
public class BoardDTO {
    private long id;
    @NotNull
    @NotBlank
    private String title;
    @NotNull
    @NotBlank
    private String content;
    @NotNull
    private LocalDateTime createdAt;
    @NotNull
    private LocalDateTime updatedAt;
    @NotNull
    private int enabled;

    @Builder
    public BoardDTO(long id, String title, String content, LocalDateTime createdAt, LocalDateTime updatedAt, int enabled) {
        this.id = id;
        this.title = title;
        this.content = content;
        this.createdAt = createdAt;
        this.updatedAt = updatedAt;
        this.enabled = enabled;
    }

}

Mapper 변경

package toyproject.springmvcboard.domain.board;

import org.springframework.stereotype.Component;

import javax.annotation.processing.Generated;

@Generated(
        value = "org.mapstruct.ap.MappingProcessor",
        date = "2023-12-04T17:45:47+0900",
        comments = "version: 1.5.5.Final, compiler: javac, environment: Java 17.0.5 (Azul Systems, Inc.)"
)
@Component
public class BoardMapperImpl implements BoardMapper {

    @Override
    public BoardDTO boardToBoardDTO(Board board) {
        if (board == null) {
            return null;
        }

        BoardDTO.BoardDTOBuilder boardDTO = BoardDTO.builder();

        boardDTO.id(board.getId());
        boardDTO.title(board.getTitle());
        boardDTO.content(board.getContent());
        boardDTO.createdAt(board.getCreatedAt());
        boardDTO.updatedAt(board.getUpdatedAt());
        boardDTO.enabled(board.getEnabled());

        return boardDTO.build();
    }

    @Override
    public Board boardDTOToBoard(BoardDTO boardDTO) {
        if (boardDTO == null) {
            return null;
        }

        Board.BoardBuilder board = Board.builder();

        board.id(boardDTO.getId());
        board.title(boardDTO.getTitle());
        board.content(boardDTO.getContent());
        board.createdAt(boardDTO.getCreatedAt());
        board.updatedAt(boardDTO.getUpdatedAt());
        board.enabled(boardDTO.getEnabled());

        return board.build();
    }
}

게시글 조회 시 작성일 표시

글 작성시 오류

현재 코드에서는 새로운 게시글을 작성할 경우 createdAt와 updatedAt에 null값이 들어가서 오류가 발생하게 됩니다. 이를 해결하기 위해서 게시글 작성 시 현재 시간이 입력되게 해줍니다.

package toyproject.springmvcboard.domain.board;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import java.time.LocalDateTime;


@Getter
@Setter
@NoArgsConstructor
public class BoardDTO {
    private long id;
    @NotNull
    @NotBlank
    private String title;
    @NotNull
    @NotBlank
    private String content;
    @NotNull
    private LocalDateTime createdAt = LocalDateTime.now();
    @NotNull
    private LocalDateTime updatedAt = LocalDateTime.now();
    @NotNull
    private int enabled = 1;

    @Builder
    public BoardDTO(long id, String title, String content, LocalDateTime createdAt, LocalDateTime updatedAt, int enabled) {
        this.id = id;
        this.title = title;
        this.content = content;
        this.createdAt = createdAt;
        this.updatedAt = updatedAt;
        this.enabled = enabled;
    }

}

작성일 표시 형식 변경

작성일을 년, 월, 일, 시간, 분으로 표시하기 위해 format 표현식을 사용해줍니다.

<span margin style="float: right" th:text="${#temporals.format(boardDTO.getCreatedAt(), 'yyyy-MM-dd HH:mm')}">작성일</span>

목록으로 돌아가는 기능 추가

게시글 페이지에 게시글 목록으로 돌아가는 버튼을 추가하고 내용이 표시 되는 칸을 늘려줍니다.

<div class="bg-body-tertiary rounded-3" style="height: 650px">
            <h3 th:text="${boardDTO.getTitle()}">제목</h3>
            <span margin style="float: right" th:text="${#temporals.format(boardDTO.getCreatedAt(), 'yyyy-MM-dd HH:mm')}">작성일</span>
            </br>
            <span>작성자</span>
            <span style="float: right">조회수</span>
            <span style="float: right">추천수</span>
            <span style="float: right">댓글</span>
            <hr>
            <span th:text="${boardDTO.getContent()}"></span>
        </div>

        <div class="text-end" style="margin-top: 15px">
            <a class="btn btn-outline-primary" th:href="@{/board/list}" type="button">목록</a>
        </div>

profile
공부하는 초보 개발자

0개의 댓글