동아리(백엔드)

류한선·2024년 6월 2일

4차 프로젝트

목록 보기
52/53

컨트롤러

package com.app.businessBridge.domain.Club.Controller;

import com.app.businessBridge.domain.Article.Controller.ApiV1ArticleController;
import com.app.businessBridge.domain.Article.DTO.ArticleDto;
import com.app.businessBridge.domain.Article.Entity.Article;
import com.app.businessBridge.domain.Club.DTO.ClubDto;
import com.app.businessBridge.domain.Club.Entity.Club;
import com.app.businessBridge.domain.Club.Service.ClubService;
import com.app.businessBridge.global.RsData.RsCode;
import com.app.businessBridge.global.RsData.RsData;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotBlank;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

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

@RestController
@RequiredArgsConstructor
@RequestMapping("/api/v1/clubs")
public class ApiV1ClubController {

    private final ClubService clubService;

    @GetMapping("")
    public RsData<ClubsResponse> getClubs() {
        List<ClubDto> clubDtoList = this.clubService
                .getList()
                .stream()
                .map(club -> new ClubDto(club))
                .toList();

        return RsData.of(RsCode.S_01, "성공", new ApiV1ClubController.ClubsResponse(clubDtoList));
    }

    @GetMapping("/{id}")
    public RsData<ClubResponse> getClub(@PathVariable("id") Long id) {
        return clubService.getclub(id).map(club -> RsData.of(RsCode.S_01,
                "성공",
                new ApiV1ClubController.ClubResponse(new ClubDto(club))
        )).orElseGet(() -> RsData.of(RsCode.F_01,
                "%d 번 게시물은 존재하지 않습니다.".formatted(id),
                null
        ));
    }
    @PostMapping("")
    public RsData<WriteResponse> write(@Valid @RequestBody WriteRequest writeRequest) {

        RsData<Club> writeRs = this.clubService.create(writeRequest.getClubName());

//        if (writeRs.isFail()) return (RsData) writeRs;

        return RsData.of(
                writeRs.getRsCode(),
                writeRs.getMsg(),
                new ApiV1ClubController.WriteResponse(new ClubDto(writeRs.getData()))
        );
    }
    @PatchMapping("/{id}")
    public RsData<ModifyResponse> modify(@Valid @RequestBody ModifyRequest modifyRequest, @PathVariable("id") Long id) {
        Optional<Club> optionalClub = this.clubService.findById(id);

        if (optionalClub.isEmpty()) return RsData.of(RsCode.F_01,
                "%d번 게시물은 존재하지 않습니다.".formatted(id),
                null
        );

        RsData<Club> modifyRs = this.clubService.modify(optionalClub.get(),modifyRequest.getClubName());

        return RsData.of(
                modifyRs.getRsCode(),
                modifyRs.getMsg(),
                new ApiV1ClubController.ModifyResponse(modifyRs.getData())
        );
    }

    @DeleteMapping("/{id}")
    public RsData<RemoveResponse> remove(@PathVariable("id") Long id) {
        Optional<Club> optionalClub = this.clubService.findById(id);

        if (optionalClub.isEmpty()) return RsData.of(RsCode.F_01,
                "%d번 게시물은 존재하지 않습니다.".formatted(id),
                null
        );

        RsData<Club> deleteRs = clubService.deleteById(id);

        return RsData.of(
                deleteRs.getRsCode(),
                deleteRs.getMsg(),
                new ApiV1ClubController.RemoveResponse(optionalClub.get())
        );
    }
    @AllArgsConstructor
    @Getter
    public static class ClubsResponse {
        private final List<ClubDto> club;
    }

    @AllArgsConstructor
    @Getter
    public static class ClubResponse {
        private final ClubDto clubDto;
    }

    @Data
    public static class WriteRequest {
        @NotBlank
        private String clubName;
    }

    @AllArgsConstructor
    @Getter
    public static class WriteResponse {
        private final ClubDto clubDto;
    }
    @Data
    public static class ModifyRequest {
        @NotBlank
        private String clubName;
    }

    @AllArgsConstructor
    @Getter
    public static class ModifyResponse {
        private final Club club;
    }

    @AllArgsConstructor
    @Getter
    public static class RemoveResponse {
        private final Club club;
    }
}

디티오

package com.app.businessBridge.domain.Club.DTO;

import com.app.businessBridge.domain.Club.Entity.Club;
import lombok.AllArgsConstructor;
import lombok.Getter;

@Getter
@AllArgsConstructor
public class ClubDto {
    private Long id;
    private String clubName;

    public  ClubDto (Club club){
        this.id= club.getId();
        this.clubName= club.getClubName();
    }
}

엔티티

package com.app.businessBridge.domain.Club.Entity;

import com.app.businessBridge.domain.Answer.Entity.Answer;
import com.app.businessBridge.domain.Article.Entity.Article;
import com.app.businessBridge.global.Jpa.BaseEntity;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.OneToMany;
import lombok.*;
import lombok.experimental.SuperBuilder;

import java.util.ArrayList;
import java.util.List;

@Entity
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@SuperBuilder
@ToString(callSuper = true)
public class Club extends BaseEntity {
    private String clubName;// 동아리 이름



    @OneToMany(mappedBy = "club", cascade = CascadeType.REMOVE, fetch = FetchType.LAZY)
    private List<Article> articleList = new ArrayList<>();

}

서비스

package com.app.businessBridge.domain.Club.Service;

import com.app.businessBridge.domain.Article.Entity.Article;
import com.app.businessBridge.domain.Club.Entity.Club;
import com.app.businessBridge.domain.Club.Repository.ClubRepository;
import com.app.businessBridge.global.RsData.RsCode;
import com.app.businessBridge.global.RsData.RsData;
import jakarta.transaction.Transactional;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

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

@Service
@RequiredArgsConstructor
public class ClubService {
    private final ClubRepository clubRepository;

    public List<Club> getList() {
        return this.clubRepository.findAll();
    }
    public Optional<Club> findById(Long id) {
        return this.clubRepository.findById(id);
    }
    @Transactional
    public RsData<Club> create(String clubName) {
        Club club = Club.builder()
                .clubName(clubName)
                .articleList(new ArrayList<>())
                .build();

        this.clubRepository.save(club);

        return RsData.of(RsCode.S_02,
                "동아리가 생성 되었습니다.",
                club
        );
    }
    public Optional<Club> getclub(Long id) {
        return this.clubRepository.findById(id);
    }
    public RsData<Club> modify(Club club, String clubName) {
        club.setClubName(clubName);
        clubRepository.save(club);

        return RsData.of(RsCode.S_03,
                "%d번 동아리가 수정 되었습니다.".formatted(club.getId()),
                club
        );
    }

    public RsData<Club> deleteById(Long id) {
        clubRepository.deleteById(id);

        return RsData.of(RsCode.S_04,
                "%d번 동아리가 삭제 되었습니다.".formatted(id),
                null
        );
    }


}

0개의 댓글