Skip to content

Commit

Permalink
Merge pull request #7 from sopt-makers/feat/#5-officialpage-admin
Browse files Browse the repository at this point in the history
[Feat]: Main, Admin 도메인 분리 및 메인 홈페이지 데이터 조회 API 개발
  • Loading branch information
Lim-Changi authored Nov 12, 2024
2 parents b61eb5c + 2a5f528 commit d7b551c
Show file tree
Hide file tree
Showing 90 changed files with 1,201 additions and 579 deletions.
50 changes: 25 additions & 25 deletions src/main/java/sopt/org/homepage/admin/AdminController.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,16 @@
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import sopt.org.homepage.admin.dto.request.main.AddMainConfirmRequestDto;
import sopt.org.homepage.admin.dto.request.main.AddMainRequestDto;
import sopt.org.homepage.admin.dto.request.main.GetMainRequestDto;
import sopt.org.homepage.admin.dto.request.news.AddMainNewsRequestDto;
import sopt.org.homepage.admin.dto.request.news.DeleteMainNewsRequestDto;
import sopt.org.homepage.admin.dto.request.news.GetMainNewsRequestDto;
import sopt.org.homepage.admin.dto.response.main.AddMainResponseDto;
import sopt.org.homepage.admin.dto.response.news.GetMainNewsResponseDto;
import sopt.org.homepage.admin.dto.response.main.GetMainResponseDto;
import sopt.org.homepage.admin.service.AdminServiceImpl;
import sopt.org.homepage.admin.dto.request.main.AddAdminConfirmRequestDto;
import sopt.org.homepage.admin.dto.request.main.AddAdminRequestDto;
import sopt.org.homepage.admin.dto.request.main.GetAdminRequestDto;
import sopt.org.homepage.admin.dto.request.news.AddAdminNewsRequestDto;
import sopt.org.homepage.admin.dto.request.news.DeleteAdminNewsRequestDto;
import sopt.org.homepage.admin.dto.request.news.GetAdminNewsRequestDto;
import sopt.org.homepage.admin.dto.response.main.AddAdminResponseDto;
import sopt.org.homepage.admin.dto.response.main.GetAdminResponseDto;
import sopt.org.homepage.admin.dto.response.news.GetAdminNewsResponseDto;
import sopt.org.homepage.admin.service.AdminService;
import sopt.org.homepage.common.constants.SecurityConstants;

@RestController
Expand All @@ -28,59 +28,59 @@
@Tag(name = "Admin")
@SecurityRequirement(name = SecurityConstants.SCHEME_NAME)
public class AdminController {
private final AdminServiceImpl adminService;
private final AdminService adminService;

@Operation(summary = "어드민 메인 데이터 배포", description = "어드민 메인 데이터를 배포합니다")
@PostMapping("")
public ResponseEntity<AddMainResponseDto> addMain (
@RequestBody @Valid AddMainRequestDto addMainRequestDto
public ResponseEntity<AddAdminResponseDto> addMain (
@RequestBody @Valid AddAdminRequestDto addAdminRequestDto
) {
AddMainResponseDto result = adminService.addMainData(addMainRequestDto);
AddAdminResponseDto result = adminService.addMainData(addAdminRequestDto);
return ResponseEntity.status(HttpStatus.CREATED).body(result);
}

@Operation(summary = "어드민 메인 데이터 배포 확인", description = "어드민 메인 데이터 배포를 확인합니다")
@PostMapping("confirm")
public ResponseEntity<String> addMainConfirm (
@RequestBody @Valid AddMainConfirmRequestDto addMainRequestDto
@RequestBody @Valid AddAdminConfirmRequestDto addMainRequestDto
) {
adminService.addMainDataConfirm(addMainRequestDto);
return ResponseEntity.status(HttpStatus.CREATED).body("Success");
}

@Operation(summary = "어드민 메인 데이터 조회", description = "어드민 메인 데이터를 조회합니다")
@GetMapping("")
public ResponseEntity<GetMainResponseDto> getMain (
@ParameterObject @ModelAttribute GetMainRequestDto getMainRequestDto
public ResponseEntity<GetAdminResponseDto> getMain (
@ParameterObject @ModelAttribute GetAdminRequestDto getAdminRequestDto
) {
GetMainResponseDto result = adminService.getMain(getMainRequestDto);
GetAdminResponseDto result = adminService.getMain(getAdminRequestDto);
return ResponseEntity.status(HttpStatus.OK).body(result);
}

@Operation(summary = "최신소식 추가", description = "최신소식을 추가합니다")
@PostMapping(value = "/news", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ResponseEntity<String> addMainNews(
@ModelAttribute @Valid AddMainNewsRequestDto addMainNewsRequestDto
@ModelAttribute @Valid AddAdminNewsRequestDto addAdminNewsRequestDto
) {
adminService.addMainNews(addMainNewsRequestDto);
adminService.addMainNews(addAdminNewsRequestDto);
return ResponseEntity.status(HttpStatus.CREATED).body("최신소식을 추가 성공");
}

@Operation(summary = "최신소식 삭제", description = "최신소식을 삭제합니다")
@DeleteMapping(value = "/news")
public ResponseEntity<String> deleteMainNews(
@RequestBody @Valid DeleteMainNewsRequestDto deleteMainNewsRequestDto
@RequestBody @Valid DeleteAdminNewsRequestDto deleteAdminNewsRequestDto
) {
adminService.deleteMainNews(deleteMainNewsRequestDto);
adminService.deleteMainNews(deleteAdminNewsRequestDto);
return ResponseEntity.status(HttpStatus.OK).body("success");
}

@Operation(summary = "최신소식 조회", description = "최신소식을 조회합니다")
@GetMapping(value = "/news")
public ResponseEntity<GetMainNewsResponseDto> getMainNews(
@ParameterObject @ModelAttribute GetMainNewsRequestDto getMainNewsRequestDto
public ResponseEntity<GetAdminNewsResponseDto> getMainNews(
@ParameterObject @ModelAttribute GetAdminNewsRequestDto getAdminNewsRequestDto
) {
GetMainNewsResponseDto result = adminService.getMainNews(getMainNewsRequestDto);
GetAdminNewsResponseDto result = adminService.getMainNews(getAdminNewsRequestDto);
return ResponseEntity.status(HttpStatus.OK).body(result);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,16 @@

import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Positive;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.multipart.MultipartFile;

@Validated
@Schema(description = "어드민 배포 확인")
@Getter
@RequiredArgsConstructor
public class AddMainConfirmRequestDto {
public class AddAdminConfirmRequestDto {
@Schema(description = "기수", requiredMode = Schema.RequiredMode.REQUIRED, example = "34")
@NotEmpty(message = "generation must not be empty")
@Positive(message = "generation must be a positive number")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,15 @@
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.springframework.validation.annotation.Validated;
import sopt.org.homepage.admin.dto.request.main.branding.AddMainBrandingColorRequestDto;
import sopt.org.homepage.admin.dto.request.main.button.AddMainMainButtonRequestDto;
import sopt.org.homepage.admin.dto.request.main.core.AddMainCoreValueRequestDto;
import sopt.org.homepage.admin.dto.request.main.curriculum.AddMainPartCurriculumRequestDto;
import sopt.org.homepage.admin.dto.request.main.introduction.AddMainPartIntroductionRequestDto;
import sopt.org.homepage.admin.dto.request.main.member.AddMainMemberRequestDto;
import sopt.org.homepage.admin.dto.request.main.recruit.curriculum.AddMainRecruitPartCurriculumRequestDto;
import sopt.org.homepage.admin.dto.request.main.recruit.question.AddMainRecruitQuestionRequestDto;
import sopt.org.homepage.admin.dto.request.main.recruit.schedule.AddMainRecruitScheduleRequestDto;
import sopt.org.homepage.admin.dto.request.main.branding.AddAdminBrandingColorRequestDto;
import sopt.org.homepage.admin.dto.request.main.button.AddAdminMainButtonRequestDto;
import sopt.org.homepage.admin.dto.request.main.core.AddAdminCoreValueRequestDto;
import sopt.org.homepage.admin.dto.request.main.curriculum.AddAdminPartCurriculumRequestDto;
import sopt.org.homepage.admin.dto.request.main.introduction.AddAdminPartIntroductionRequestDto;
import sopt.org.homepage.admin.dto.request.main.member.AddAdminMemberRequestDto;
import sopt.org.homepage.admin.dto.request.main.recruit.curriculum.AddAdminRecruitPartCurriculumRequestDto;
import sopt.org.homepage.admin.dto.request.main.recruit.question.AddAdminRecruitQuestionRequestDto;
import sopt.org.homepage.admin.dto.request.main.recruit.schedule.AddAdminRecruitScheduleRequestDto;

import java.util.List;

Expand All @@ -24,7 +24,7 @@
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class AddMainRequestDto {
public class AddAdminRequestDto {

@Schema(description = "기수", requiredMode = Schema.RequiredMode.REQUIRED, example = "34")
@NotEmpty(message = "generation must not be empty")
Expand All @@ -35,25 +35,25 @@ public class AddMainRequestDto {
@NotEmpty(message = "name must not be empty")
private String name;

private List<AddMainRecruitScheduleRequestDto> recruitSchedule;
private AddMainBrandingColorRequestDto brandingColor;
private AddMainMainButtonRequestDto mainButton;
private List<AddMainPartIntroductionRequestDto> partIntroduction;
private List<AddAdminRecruitScheduleRequestDto> recruitSchedule;
private AddAdminBrandingColorRequestDto brandingColor;
private AddAdminMainButtonRequestDto mainButton;
private List<AddAdminPartIntroductionRequestDto> partIntroduction;

@Schema(description = "헤더 이미지 파일명", requiredMode = Schema.RequiredMode.REQUIRED, example = "header.png")
@NotEmpty(message = "headerImageFileName must not be empty")
private String headerImageFileName;

private List<AddMainCoreValueRequestDto> coreValue;
private List<AddMainPartCurriculumRequestDto> partCurriculum;
private List<AddMainMemberRequestDto> member;
private List<AddAdminCoreValueRequestDto> coreValue;
private List<AddAdminPartCurriculumRequestDto> partCurriculum;
private List<AddAdminMemberRequestDto> member;

@Schema(description = "지원하기 헤더 이미지 파일명", requiredMode = Schema.RequiredMode.REQUIRED, example = "recruit_header.png")
@NotEmpty(message = "recruitHeaderImageFileName must not be empty")
private String recruitHeaderImageFileName;

private List<AddMainRecruitPartCurriculumRequestDto> recruitPartCurriculum;
private List<AddMainRecruitQuestionRequestDto> recruitQuestion;
private List<AddAdminRecruitPartCurriculumRequestDto> recruitPartCurriculum;
private List<AddAdminRecruitQuestionRequestDto> recruitQuestion;
}


Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
@Schema(description = "어드민 데이터 조회하기")
@Getter
@RequiredArgsConstructor
public class GetMainRequestDto {
public class GetAdminRequestDto {
@Schema(description = "기수", requiredMode = Schema.RequiredMode.REQUIRED, example = "35")
@NotNull(message = "generation must not be null")
private final int generation;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@
import jakarta.validation.constraints.Pattern;
import lombok.Getter;
import lombok.NoArgsConstructor;
import sopt.org.homepage.admin.entity.sub.BrandingColorEntity;
import sopt.org.homepage.main.entity.sub.BrandingColorEntity;

@Schema(description = "브랜딩 컬러")
@Getter
@NoArgsConstructor
public class AddMainBrandingColorRequestDto {
public class AddAdminBrandingColorRequestDto {
@Schema(description = "메인 컬러", example = "#FF0000", requiredMode = Schema.RequiredMode.REQUIRED)
@Pattern(regexp = "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$", message = "올바른 HEX 컬러 코드를 입력해주세요")
private String main;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@
import jakarta.validation.constraints.Pattern;
import lombok.Getter;
import lombok.NoArgsConstructor;
import sopt.org.homepage.admin.entity.sub.MainButtonEntity;
import sopt.org.homepage.main.entity.sub.MainButtonEntity;

@Schema(description = "메인 버튼 스타일")
@Getter
@NoArgsConstructor
public class AddMainMainButtonRequestDto {
public class AddAdminMainButtonRequestDto {
@Schema(description = "버튼 텍스트", example = "지원하기", requiredMode = Schema.RequiredMode.REQUIRED)
@NotBlank(message = "버튼 텍스트를 입력해주세요")
private String text;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,15 @@
import jakarta.validation.constraints.NotBlank;
import lombok.Getter;
import lombok.NoArgsConstructor;
import sopt.org.homepage.admin.entity.sub.CoreValueEntity;
import sopt.org.homepage.main.entity.sub.CoreValueEntity;

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

@Schema(description = "핵심 가치")
@Getter
@NoArgsConstructor
public class AddMainCoreValueRequestDto {
public class AddAdminCoreValueRequestDto {
@Schema(description = "핵심 가치", example = "용기", requiredMode = Schema.RequiredMode.REQUIRED)
@NotBlank(message = "핵심 가치를 입력해주세요")
private String value;
Expand All @@ -34,13 +33,13 @@ public CoreValueEntity toEntity(String image) {
.build();
}

public static List<CoreValueEntity> toEntityList(List<AddMainCoreValueRequestDto> dtos, List<String> images) {
public static List<CoreValueEntity> toEntityList(List<AddAdminCoreValueRequestDto> dtos, List<String> images) {
if (dtos.size() != images.size()) {
throw new IllegalArgumentException("DTOs and images lists must have the same size");
}

return IntStream.range(0, dtos.size())
.mapToObj(i -> dtos.get(i).toEntity(images.get(i)))
.collect(Collectors.toList());
.toList();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,14 @@
import jakarta.validation.constraints.NotBlank;
import lombok.Getter;
import lombok.NoArgsConstructor;
import sopt.org.homepage.admin.entity.sub.CurriculumWeekEntity;
import sopt.org.homepage.main.entity.sub.CurriculumWeekEntity;

import java.util.List;
import java.util.stream.Collectors;

@Schema(description = "주차별 커리큘럼 정보")
@Getter
@NoArgsConstructor
public class AddMainCurriculumWeekRequestDto {
public class AddAdminCurriculumWeekRequestDto {
@Schema(description = "주차", example = "1", minimum = "1", maximum = "8", requiredMode = Schema.RequiredMode.REQUIRED)
@Min(value = 1, message = "주차는 1 이상이어야 합니다")
@Max(value = 8, message = "주차는 8 이하여야 합니다")
Expand All @@ -31,9 +30,9 @@ public CurriculumWeekEntity toEntity() {
.build();
}

public static List<CurriculumWeekEntity> toEntityList(List<AddMainCurriculumWeekRequestDto> dtos) {
public static List<CurriculumWeekEntity> toEntityList(List<AddAdminCurriculumWeekRequestDto> dtos) {
return dtos.stream()
.map(AddMainCurriculumWeekRequestDto::toEntity)
.collect(Collectors.toList());
.map(AddAdminCurriculumWeekRequestDto::toEntity)
.toList();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,33 +5,32 @@
import jakarta.validation.constraints.NotEmpty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import sopt.org.homepage.admin.entity.sub.PartCurriculumEntity;
import sopt.org.homepage.main.entity.sub.PartCurriculumEntity;

import java.util.List;
import java.util.stream.Collectors;

@Schema(description = "파트별 커리큘럼")
@Getter
@NoArgsConstructor
public class AddMainPartCurriculumRequestDto {
public class AddAdminPartCurriculumRequestDto {
@Schema(description = "파트명", example = "안드로이드", requiredMode = Schema.RequiredMode.REQUIRED)
@NotBlank(message = "파트명을 입력해주세요")
private String part;

@Schema(description = "주차별 커리큘럼", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "커리큘럼을 입력해주세요")
private List<AddMainCurriculumWeekRequestDto> weeks;
private List<AddAdminCurriculumWeekRequestDto> weeks;

public PartCurriculumEntity toEntity() {
return PartCurriculumEntity.builder()
.part(this.part)
.weeks(AddMainCurriculumWeekRequestDto.toEntityList(this.weeks))
.weeks(AddAdminCurriculumWeekRequestDto.toEntityList(this.weeks))
.build();
}

public static List<PartCurriculumEntity> toEntityList(List<AddMainPartCurriculumRequestDto> dtos) {
public static List<PartCurriculumEntity> toEntityList(List<AddAdminPartCurriculumRequestDto> dtos) {
return dtos.stream()
.map(AddMainPartCurriculumRequestDto::toEntity)
.collect(Collectors.toList());
.map(AddAdminPartCurriculumRequestDto::toEntity)
.toList();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,14 @@
import jakarta.validation.constraints.NotBlank;
import lombok.Getter;
import lombok.NoArgsConstructor;
import sopt.org.homepage.admin.entity.sub.PartIntroductionEntity;
import sopt.org.homepage.main.entity.sub.PartIntroductionEntity;

import java.util.List;
import java.util.stream.Collectors;

@Schema(description = "파트 소개")
@Getter
@NoArgsConstructor
public class AddMainPartIntroductionRequestDto {
public class AddAdminPartIntroductionRequestDto {
@Schema(description = "파트명", example = "안드로이드", requiredMode = Schema.RequiredMode.REQUIRED)
@NotBlank(message = "파트명을 입력해주세요")
private String part;
Expand All @@ -28,9 +27,9 @@ public PartIntroductionEntity toEntity() {
.build();
}

public static List<PartIntroductionEntity> toEntityList(List<AddMainPartIntroductionRequestDto> dtos) {
public static List<PartIntroductionEntity> toEntityList(List<AddAdminPartIntroductionRequestDto> dtos) {
return dtos.stream()
.map(AddMainPartIntroductionRequestDto::toEntity)
.collect(Collectors.toList());
.map(AddAdminPartIntroductionRequestDto::toEntity)
.toList();
}
}
Loading

0 comments on commit d7b551c

Please sign in to comment.