Skip to content

Commit

Permalink
API - v0.1.0
Browse files Browse the repository at this point in the history
* [feat] archiving 정보 보여주기 기능 구현 (#58)

* [feat] 아카이빙 정보 가져오기 기능 구현 #52

* [refac] 아카이빙 제목 보기 response 변경 #52

* [refac] user 리팩토링 (#60)

* [refac] validation 분리, user response 변경 #57

* [feat] content 생성시 archving 데이터 업데이트 로직 추가 #57

* [refac] 검색 리팩토링 및 최근 검색어 삭제 기능 추가 (#62)

* [feat] 최근 검색어 삭제 기능 추가 #59

* [refac] 최근 검색어 불러오기 response 변경 #59

* [chore] spotless 적용 #61

* [refac] 검색어 검색 http method 변경 #61

* [feat] 강제 데이터 주입 기능 추가 #61

* [refac] 연관 검색어 기능 로직 수정 및 코드 정리 #61

* [refac] 연관 검색어 range 수정 #61

* [refac] 점색어 자동완성 get 으로 변환 #61

* [feat] 태그 검색 기능 추가 및 validation 추가 (#64)

* [feat] 검색하기 최근 검색어 중복 판별 로직 추가 #63

* [feat] 최근 검색어 삭제 전체, 다중 삭제 가능하도록 변경 #63

* [feat] 태그도 검색 되도록 수정 #63

* [chore] spotless 적용 #63

* [feat] tag 데이터 검색 데이터 추가 #63

* [fix] 빈 파람값 validation 추가 (#67)

* [refac] oauth 탈퇴 provider 로직 수정, 애플 로그인 변수 적용 및 로직 변경 (#69)

* [refac] oauth 탈퇴 provider 부분 변경 #65

* [refac] apple 로그인 변수 수정 #35

* [feat] apple 로그인 테스트용 deploy 수정 #35

* [feat] apple 로그인 테스트용 deploy 수정2 #35

* [fix] apple authkey property로 변경 #35

* [fix] apple authkey property pem 형식으로 전환 #35

* [fix] apple authkey log 추가 #35

* [fix] apple authkey 개행문자 대체 로직 변경 #35

* [fix] apple authkey 개행문자 대체 로직 변경 #35

* [chore] 미사용 변수 제거 #35

* [chore] spotless 적용 #35

* [fix] action 원상복구 #35

* [feat] 유저 회원가입시 유저 정보 가져오기 구현 (#70)

* [feat] 회원가입시 유저 정보 가져오기 기능 구현 #68

* [chore] spotless 적용 #68

* [fix] email 가져오기 로직 변경 #68

* [refac] transaction 범위 수정 #68

* [fix] security 허용 변경

* [refac] recycle 리팩토링 및 s3 object 삭제 추가 (#73)

* [refac] recycle 복구, 가져오기 validation 정리 및 함수 네이밍 변경 #71

* [refac] recycle 삭제 validation 코드 정리, report도 삭제 #71

* [feat] s3 객체 삭제 로직 추가 #72

* [chore] spotless 적용

* [refac] report, block 리팩토링 (#75)

* [refac] 차단하기 validation 정리 #74

* [refac] 차단 풀기 validation 추가 및 정리 #74

* [refac] 신고하기 함수 정리 #74

* [fix] 아카이빙 스크랩 안되는 오류 해결 (#77)

* [fix] scrap validation 수정 #76

* [fix] enum value 대문자로 변경 #76

* [feat] swagger 비밀번호 설정 (#79)

* [refac] 차단하기 validation 정리 #74

* [refac] 차단 풀기 validation 추가 및 정리 #74

* [refac] 신고하기 함수 정리 #74

* [feat] swagger 비밀번호 설정 #78

* [fix] 컨텐츠 개수 구하기 로직 수정 (#81)

* [fix] user 정보 불러오기 count 오류 해결 (#83)

* [refac] validation 수정 (#85)

* [fix] archiving 기능관련 쿼리 deleteStatus 조건 수정 #84

* [feat] 컨텐츠 삭제 validation 추가 #84

* [feat] 아카이빙 삭제하기 삭제 여부 validation 추가 #84

* [fix] 컨텐츠 가져오기 public validation 수정 #84

* [refac] tag validation 분리 #84

* [chore] spotless 적용 #84

* [feat] 컨텐츠 정보 수정시 사용할 정보 가져오기 기능 추가 (#87)

* [feat] 컨텐츠 정보 가져오기 기능 구현 #86

* [chore] spotless 적용 #86

* [refac] exception 세분화 및 validation 정리 (#89)

* [refac] archiving, content 소유자 response에 추가 #88

* [refac] archiving api validation exception 세분화 #88

* [refac] content api validation exception 세분화 #88

* [refac] recycle api validation exception 세분화 #88

* [refac] search api validation exception 세분화 #88

* [refac] user api validation exception 세분화 #88

* [refac] validation 정리 #88

* [chore] spotless 적용 #88

* [fix] 컨텐츠 수정시 아카이빙 count 개수 안변함 (#91)

* [fix] 컨텐츠 수정 count 로직 추가 #90

* [chore] spotless 적용 #90

* [refac] const 적용 #90

* [fix] 유저 presigned url 로직 수정

* [fix] asset url return 로직 수정

* [fix] 컨텐츠 업데이트 로직 변경 #92

* [chore] spotless 적용 #92

* [fix] 아카이빙 컨텐츠 개수 에러 (#94)

* [feat] content 삭제시 archiving count 수정 로직 추가 #93

* [fix] 삭제 컨텐츠 복구시 archiving count 변경 로직 추가 #93

* [chore] spotless 적용 #93

* [fix] archiving response 변경 #93

* [refac] 검색하기 로직 수정 (#98)

* [refac] 검색하기 쿼리 변경 #95

* [chore] spotless 적용 #95

* [feat] 인기 아카이빙 리스트 불러오기 (#99)

* [fix] response 네이밍 변경 #96

* [feat] 인기 아카이빙 가져오기 기능 구현 #96

* [chore] spotless 적용 #96

* [fix] response 변경 #96

* [feat] custom jsonNaming strategy 적용 #96

* [fix] apple 토큰 오류 해결 (#100)

* [feat] kakao 로그인 app id 웹 앱 분리 #97

* [feat] apple 로그인 app id 웹 앱 분리 #97

* [fix] apple 토큰 오류 해결 (#101)

* [feat] kakao 로그인 app id 웹 앱 분리 #97

* [feat] apple 로그인 app id 웹 앱 분리 #97

* [fix] client secret 생성 개발용 서비스용 분리 #97

* [add] 에러 확인용 log 추가 #97

* [fix] archiving response 스크랩 여부 포함하기 (#103)

* [fix] archiving content response 변경 및 스크랩 여부 판별 로직 추가 #102

* [chore] auth 부분 log 지우기 #102

* [fix] archiving popular response 변경 및 스크랩 여부 판별 로직 추가 #102

* [chore] spotless 적용 #102

* [feat] 애플 로그인 탈퇴 구현 (#105)

* [feat] apple 탈퇴 구현 #104

* [feat] 개발용 회원탈퇴 구현 #104

* [chore] spotless 적용 #104

* [feat] 검색 결과 response에 총 검색 결과 개수 추가 (#107)

* [feat] 검색 response page로 전환 #106

* [chore] spotless 적용 #106

* [feat] 검색 로직 수정 (#109)

* [fix] 검색 로직 수정 #108

* [chore] spotless 적용 #108

* [feat] archiving response 변경 #108

* [feat] archiving content response dateFormating 추가

* [feat] 회원가입시 유저 마케팅, 알람 동의 여부 포함 (#111)

* [feat] user 엔티티 마케팅 정보 동의 속성 추가, 회원가입 로직 수정 #110

* [chore] spotless 적용 #110
  • Loading branch information
wjdtkdgns authored Aug 18, 2023
1 parent 6dfb9c7 commit 6864c57
Show file tree
Hide file tree
Showing 135 changed files with 1,931 additions and 547 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -42,4 +42,5 @@ out/
.env.*


Domain/src/main/generated/**/*.java
Domain/src/main/generated/**/*.java
Core/src/main/resources/static/apple/**.p8
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import allchive.server.api.archiving.model.dto.response.ArchivingContentsResponse;
import allchive.server.api.archiving.model.dto.response.ArchivingResponse;
import allchive.server.api.archiving.model.dto.response.ArchivingTitleResponse;
import allchive.server.api.archiving.model.dto.response.ArchivingsResponse;
import allchive.server.api.archiving.service.*;
import allchive.server.api.common.slice.SliceResponse;
import allchive.server.domain.domains.archiving.domain.enums.Category;
Expand All @@ -26,6 +27,7 @@
public class ArchivingController {
private final CreateArchivingUseCase createArchivingUseCase;
private final UpdateArchivingUseCase updateArchivingUseCase;
private final GetArchivingInfoUseCase getArchivingInfoUseCase;
private final DeleteArchivingUseCase deleteArchivingUseCase;
private final GetArchivingUseCase getArchivingUseCase;
private final GetArchivedArchivingUseCase getArchivedArchivingUseCase;
Expand All @@ -34,13 +36,20 @@ public class ArchivingController {
private final GetArchivingContentsUseCase getArchivingContentsUseCase;
private final UpdateArchivingScrapUseCase updateArchivingScrapUseCase;
private final UpdateArchivingPinUseCase updateArchivingPinUseCase;
private final GetPopularArchivingUseCase getPopularArchivingUseCase;

@Operation(summary = "아카이빙을 생성합니다.")
@PostMapping()
public void createArchiving(@RequestBody CreateArchivingRequest createArchivingRequest) {
createArchivingUseCase.execute(createArchivingRequest);
}

@Operation(summary = "아카이빙 정보 수정시 보여줄 정보를 가져옵니다.")
@GetMapping(value = "/{archivingId}")
public ArchivingResponse getArchiving(@PathVariable("archivingId") Long archivingId) {
return getArchivingInfoUseCase.execute(archivingId);
}

@Operation(summary = "아카이빙을 수정합니다.")
@PatchMapping(value = "/{archivingId}")
public void updateArchiving(
Expand Down Expand Up @@ -91,6 +100,12 @@ public ArchivingTitleResponse getScrapArchiving() {
return getArchivingTitleUseCase.execute();
}

@Operation(summary = "인기있는 아카이빙 5개를 가져옵니다")
@GetMapping(value = "/popular")
public ArchivingsResponse getPopularArchiving() {
return getPopularArchivingUseCase.execute();
}

@Operation(summary = "아카이빙별 컨텐츠 리스트를 가져옵니다.")
@GetMapping(value = "/{archivingId}/contents")
public ArchivingContentsResponse getArchivingContents(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,12 @@

import allchive.server.api.common.slice.SliceResponse;
import allchive.server.api.content.model.dto.response.ContentResponse;
import allchive.server.core.annotation.DateFormat;
import allchive.server.domain.domains.archiving.domain.Archiving;
import allchive.server.domain.domains.archiving.domain.enums.Category;
import allchive.server.domain.domains.user.domain.User;
import io.swagger.v3.oas.annotations.media.Schema;
import java.time.LocalDateTime;
import lombok.Builder;
import lombok.Getter;

Expand All @@ -15,39 +19,78 @@ public class ArchivingContentsResponse {
@Schema(description = "아카이빙 제목")
private String archivingTitle;

@Schema(description = "아카이빙 카테고리")
private Category category;

@Schema(description = "아카이빙 고유번호")
private Long archivingId;

@DateFormat
@Schema(description = "아카이빙 생성일")
private LocalDateTime createdAt;

@Schema(description = "아카이빙의 총 컨텐츠 개수")
private Long totalContentsCount;

@Schema(description = "아카이빙 소유자 고유번호")
private Long ownerId;

@Schema(description = "아카이빙 소유자 닉네임")
private String ownerNickname;

@Schema(description = "아카이빙 소유자 프로픨 이미지")
private String ownerProfileImgUrl;

@Schema(description = "유저 소유 여부")
private Boolean isMine;

@Schema(description = "아카이빙 스크랩 여부")
private Boolean isScrap;

@Builder
private ArchivingContentsResponse(
SliceResponse<ContentResponse> contents,
String archivingTitle,
Category category,
Long archivingId,
LocalDateTime createdAt,
Long totalContentsCount,
Boolean isMine) {
Long ownerId,
String ownerNickname,
String ownerProfileImgUrl,
Boolean isMine,
Boolean isScrap) {
this.contents = contents;
this.archivingTitle = archivingTitle;
this.category = category;
this.archivingId = archivingId;
this.createdAt = createdAt;
this.totalContentsCount = totalContentsCount;
this.ownerId = ownerId;
this.ownerNickname = ownerNickname;
this.ownerProfileImgUrl = ownerProfileImgUrl;
this.isMine = isMine;
this.isScrap = isScrap;
}

public static ArchivingContentsResponse of(
SliceResponse<ContentResponse> contentResponseSlice,
Archiving archiving,
Boolean isMine) {
User user,
Boolean isMine,
Boolean isScrap) {
return ArchivingContentsResponse.builder()
.archivingId(archiving.getId())
.createdAt(archiving.getCreatedAt())
.archivingTitle(archiving.getTitle())
.totalContentsCount(archiving.getScrapCnt() + archiving.getImgCnt())
.category(archiving.getCategory())
.totalContentsCount(archiving.getLinkCnt() + archiving.getImgCnt())
.contents(contentResponseSlice)
.ownerId(user.getId())
.ownerNickname(user.getNickname())
.ownerProfileImgUrl(user.getProfileImgUrl())
.isMine(isMine)
.isScrap(isScrap)
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,9 @@ public class ArchivingResponse {
@Schema(description = "아카이빙 스크랩/고정 여부, true == 스크랩/고정됨")
private boolean markStatus;

@Schema(description = "아카이빙 공개 여부")
private boolean publicStatus;

@Builder
private ArchivingResponse(
Long archivingId,
Expand All @@ -54,7 +57,8 @@ private ArchivingResponse(
Long imgCnt,
Long linkCnt,
Long scrapCnt,
boolean markStatus) {
boolean markStatus,
boolean publicStatus) {
this.archivingId = archivingId;
this.title = title;
this.imageUrl = imageUrl;
Expand All @@ -64,6 +68,7 @@ private ArchivingResponse(
this.linkCnt = linkCnt;
this.scrapCnt = scrapCnt;
this.markStatus = markStatus;
this.publicStatus = publicStatus;
}

public static ArchivingResponse of(Archiving archiving, boolean markStatus) {
Expand All @@ -77,6 +82,7 @@ public static ArchivingResponse of(Archiving archiving, boolean markStatus) {
.linkCnt(archiving.getLinkCnt())
.scrapCnt(archiving.getScrapCnt())
.markStatus(markStatus)
.publicStatus(archiving.getPublicStatus())
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,92 +2,95 @@


import allchive.server.api.archiving.model.vo.TitleContentCntVo;
import allchive.server.api.common.json.naming.UpperCaseStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import java.util.ArrayList;
import java.util.List;
import lombok.Builder;
import lombok.Getter;

@Getter
@JsonNaming(UpperCaseStrategy.class)
public class ArchivingTitleResponse {
private List<TitleContentCntVo> food;
private List<TitleContentCntVo> life;
private List<TitleContentCntVo> homeLiving;
private List<TitleContentCntVo> shopping;
private List<TitleContentCntVo> sport;
private List<TitleContentCntVo> selfImprovement;
private List<TitleContentCntVo> tech;
private List<TitleContentCntVo> design;
private List<TitleContentCntVo> trend;
private List<TitleContentCntVo> FOOD;
private List<TitleContentCntVo> LIFE;
private List<TitleContentCntVo> HOME_LIVING;
private List<TitleContentCntVo> SHOPPING;
private List<TitleContentCntVo> SPORT;
private List<TitleContentCntVo> SELF_IMPROVEMENT;
private List<TitleContentCntVo> TECH;
private List<TitleContentCntVo> DESIGN;
private List<TitleContentCntVo> TREND;

@Builder
private ArchivingTitleResponse(
List<TitleContentCntVo> food,
List<TitleContentCntVo> life,
List<TitleContentCntVo> homeLiving,
List<TitleContentCntVo> shopping,
List<TitleContentCntVo> sport,
List<TitleContentCntVo> selfImprovement,
List<TitleContentCntVo> tech,
List<TitleContentCntVo> design,
List<TitleContentCntVo> trend) {
this.food = food;
this.life = life;
this.homeLiving = homeLiving;
this.shopping = shopping;
this.sport = sport;
this.selfImprovement = selfImprovement;
this.tech = tech;
this.design = design;
this.trend = trend;
List<TitleContentCntVo> FOOD,
List<TitleContentCntVo> LIFE,
List<TitleContentCntVo> HOME_LIVING,
List<TitleContentCntVo> SHOPPING,
List<TitleContentCntVo> SPORT,
List<TitleContentCntVo> SELF_IMPROVEMENT,
List<TitleContentCntVo> TECH,
List<TitleContentCntVo> DESIGN,
List<TitleContentCntVo> TREND) {
this.FOOD = FOOD;
this.LIFE = LIFE;
this.HOME_LIVING = HOME_LIVING;
this.SHOPPING = SHOPPING;
this.SPORT = SPORT;
this.SELF_IMPROVEMENT = SELF_IMPROVEMENT;
this.TECH = TECH;
this.DESIGN = DESIGN;
this.TREND = TREND;
}

public static ArchivingTitleResponse init() {
return ArchivingTitleResponse.builder()
.food(new ArrayList<>())
.life(new ArrayList<>())
.homeLiving(new ArrayList<>())
.shopping(new ArrayList<>())
.sport(new ArrayList<>())
.selfImprovement(new ArrayList<>())
.tech(new ArrayList<>())
.design(new ArrayList<>())
.trend(new ArrayList<>())
.FOOD(new ArrayList<>())
.LIFE(new ArrayList<>())
.HOME_LIVING(new ArrayList<>())
.SHOPPING(new ArrayList<>())
.SPORT(new ArrayList<>())
.SELF_IMPROVEMENT(new ArrayList<>())
.TECH(new ArrayList<>())
.DESIGN(new ArrayList<>())
.TREND(new ArrayList<>())
.build();
}

public void addFood(TitleContentCntVo vo) {
this.food.add(vo);
this.FOOD.add(vo);
}

public void addLife(TitleContentCntVo vo) {
this.life.add(vo);
this.LIFE.add(vo);
}

public void addHomeLiving(TitleContentCntVo vo) {
this.homeLiving.add(vo);
this.HOME_LIVING.add(vo);
}

public void addShopping(TitleContentCntVo vo) {
this.shopping.add(vo);
this.SHOPPING.add(vo);
}

public void addSport(TitleContentCntVo vo) {
this.sport.add(vo);
this.SPORT.add(vo);
}

public void addSelfImprovement(TitleContentCntVo vo) {
this.selfImprovement.add(vo);
this.SELF_IMPROVEMENT.add(vo);
}

public void addTech(TitleContentCntVo vo) {
this.tech.add(vo);
this.TECH.add(vo);
}

public void addDesign(TitleContentCntVo vo) {
this.design.add(vo);
this.DESIGN.add(vo);
}

public void addTrend(TitleContentCntVo vo) {
this.trend.add(vo);
this.TREND.add(vo);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package allchive.server.api.archiving.model.dto.response;


import java.util.List;
import lombok.Builder;
import lombok.Getter;

@Getter
public class ArchivingsResponse {
List<ArchivingResponse> archivings;

@Builder
private ArchivingsResponse(List<ArchivingResponse> archivings) {
this.archivings = archivings;
}

public static ArchivingsResponse of(List<ArchivingResponse> archivings) {
return ArchivingsResponse.builder().archivings(archivings).build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,21 +8,26 @@

@Getter
public class TitleContentCntVo {
@Schema(description = "아카이빙 고유 아이디")
private Long archivingId;

@Schema(defaultValue = "아카이빙 제목", description = "아카이빙 제목")
private String title;

@Schema(defaultValue = "1", description = "아카이빙에 속한 컨텐츠 총 개수")
private Long contentCnt;

@Builder
private TitleContentCntVo(String title, Long contentCnt) {
private TitleContentCntVo(Long archivingId, String title, Long contentCnt) {
this.archivingId = archivingId;
this.title = title;
this.contentCnt = contentCnt;
}

public static TitleContentCntVo from(Archiving archiving) {
return TitleContentCntVo.builder()
.contentCnt(archiving.getImgCnt() + archiving.getScrapCnt())
.archivingId(archiving.getId())
.contentCnt(archiving.getImgCnt() + archiving.getLinkCnt())
.title(archiving.getTitle())
.build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,5 +30,6 @@ public void execute(Long archivingId) {

private void validateExecution(Long archivingId, Long userId) {
archivingValidator.verifyUser(userId, archivingId);
archivingValidator.validateNotDeleted(archivingId);
}
}
Loading

0 comments on commit 6864c57

Please sign in to comment.