Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

import java.util.List;

import org.sopt.pawkey.backendapi.domain.auth.annotation.UserId;
import org.sopt.pawkey.backendapi.domain.post.api.dto.request.PostCreateRequestDto;
import org.sopt.pawkey.backendapi.domain.post.api.dto.response.PostRegisterResponseDto;
import org.sopt.pawkey.backendapi.domain.post.api.dto.response.PostResponseDto;
Expand All @@ -12,7 +13,6 @@
import org.sopt.pawkey.backendapi.domain.post.application.facade.command.PostRegisterFacade;
import org.sopt.pawkey.backendapi.domain.post.application.facade.query.PostQueryFacade;
import org.sopt.pawkey.backendapi.domain.review.api.dto.response.ReviewResponseDto;
import org.sopt.pawkey.backendapi.domain.auth.annotation.UserId;
import org.sopt.pawkey.backendapi.global.response.ApiResponse;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@

import static org.sopt.pawkey.backendapi.global.constants.AppConstants.*;

import org.sopt.pawkey.backendapi.domain.auth.annotation.UserId;
import org.sopt.pawkey.backendapi.domain.category.api.dto.response.CategorySelectListResponseDto;
import org.sopt.pawkey.backendapi.domain.category.application.facade.query.CategorySelectFacade;
import org.sopt.pawkey.backendapi.domain.post.api.dto.request.FilterPostsRequestDto;
import org.sopt.pawkey.backendapi.domain.post.api.dto.response.PostListResponseDto;
import org.sopt.pawkey.backendapi.domain.post.application.facade.query.PostQueryFacade;
import org.sopt.pawkey.backendapi.domain.auth.annotation.UserId;
import org.sopt.pawkey.backendapi.global.response.ApiResponse;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

import static org.sopt.pawkey.backendapi.global.constants.AppConstants.*;

import org.sopt.pawkey.backendapi.domain.post.application.facade.command.PostLikeFacade;
import org.sopt.pawkey.backendapi.domain.auth.annotation.UserId;
import org.sopt.pawkey.backendapi.domain.post.application.facade.command.PostLikeFacade;
import org.sopt.pawkey.backendapi.global.response.ApiResponse;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,6 @@ public PostEntity savePost(UserEntity writer,

post.getPostImageEntityList().add(postImage);
}
pet.incrementWalkCount();
postRepository.save(post);
return post;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package org.sopt.pawkey.backendapi.domain.post.domain.repository;

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

import org.sopt.pawkey.backendapi.domain.post.infra.persistence.entity.PostLikeEntity;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package org.sopt.pawkey.backendapi.domain.post.infra.persistence.entity;

import org.hibernate.annotations.BatchSize;
import org.sopt.pawkey.backendapi.domain.image.domain.model.ImageType;
import org.sopt.pawkey.backendapi.domain.image.infra.persistence.entity.ImageEntity;
import org.sopt.pawkey.backendapi.global.infra.persistence.entity.BaseEntity;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package org.sopt.pawkey.backendapi.domain.post.infra.persistence.repository;

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

import org.sopt.pawkey.backendapi.domain.post.domain.repository.PostLikeRepository;
import org.sopt.pawkey.backendapi.domain.post.infra.persistence.entity.PostLikeEntity;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package org.sopt.pawkey.backendapi.domain.post.infra.persistence.repository;

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

import org.sopt.pawkey.backendapi.domain.post.infra.persistence.entity.PostLikeEntity;
import org.springframework.data.jpa.repository.JpaRepository;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,20 @@

import static org.sopt.pawkey.backendapi.global.constants.AppConstants.*;

import org.sopt.pawkey.backendapi.domain.auth.api.dto.request.AppleLoginRequestDTO;
import org.sopt.pawkey.backendapi.domain.auth.application.service.login.verifier.test.KakaoAuthService;
import org.sopt.pawkey.backendapi.domain.user.application.facade.UserLoginFacade;
import org.sopt.pawkey.backendapi.domain.auth.annotation.UserId;
import org.sopt.pawkey.backendapi.domain.auth.api.dto.request.AppleLoginRequestDTO;
import org.sopt.pawkey.backendapi.domain.auth.api.dto.request.LoginRequestDTO;
import org.sopt.pawkey.backendapi.domain.auth.api.dto.request.LogoutRequestDTO;
import org.sopt.pawkey.backendapi.domain.auth.api.dto.request.RefreshTokenRequestDTO;
import org.sopt.pawkey.backendapi.domain.auth.api.dto.request.WithdrawRequestDTO;
import org.sopt.pawkey.backendapi.domain.auth.api.dto.response.SocialLoginResponseDTO;
import org.sopt.pawkey.backendapi.domain.auth.api.dto.response.TokenResponseDTO;
import org.sopt.pawkey.backendapi.domain.auth.application.service.login.verifier.test.KakaoAuthService;
import org.sopt.pawkey.backendapi.domain.auth.application.service.token.TokenService;

import org.sopt.pawkey.backendapi.domain.user.application.facade.UserLoginFacade;
import org.sopt.pawkey.backendapi.domain.user.application.facade.UserWithdrawFacade;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,32 +1,34 @@
package org.sopt.pawkey.backendapi.domain.auth.application.service.login.verifier.apple;

import com.fasterxml.jackson.databind.ObjectMapper;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.ExpiredJwtException;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.MalformedJwtException;
import io.jsonwebtoken.SignatureException; // io.jsonwebtoken.SignatureException을 import합니다.
import io.jsonwebtoken.io.Decoders;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import java.security.PublicKey;
import java.util.HashMap;
import java.util.Map;

import org.sopt.pawkey.backendapi.domain.auth.exception.AuthBusinessException;
import org.sopt.pawkey.backendapi.domain.auth.exception.AuthErrorCode;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.*;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.HttpClientErrorException;
import org.springframework.web.client.RestTemplate;

// 커스텀 예외 및 오류 코드
import org.sopt.pawkey.backendapi.domain.auth.exception.AuthBusinessException;
import org.sopt.pawkey.backendapi.domain.auth.exception.AuthErrorCode;
// 의존성 서비스 (AppleAuthKeyService)
import com.fasterxml.jackson.databind.ObjectMapper;

import java.security.PublicKey; // 명확성을 위해 PublicKey를 명시적으로 import합니다.
import java.util.Map;
import java.util.HashMap;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.ExpiredJwtException;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.MalformedJwtException;
import io.jsonwebtoken.SignatureException;
import io.jsonwebtoken.io.Decoders;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Service
@RequiredArgsConstructor
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,15 @@

import org.sopt.pawkey.backendapi.domain.auth.exception.AuthBusinessException;
import org.sopt.pawkey.backendapi.domain.auth.exception.AuthErrorCode;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Service;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import org.springframework.beans.factory.annotation.Value;

import lombok.RequiredArgsConstructor;

@Service("GOOGLE")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,10 @@

import org.sopt.pawkey.backendapi.domain.auth.infra.persistence.converter.AppleRefreshTokenEncryptor;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import jakarta.persistence.Column;
import jakarta.persistence.Convert;
import jakarta.persistence.Entity;
import jakarta.persistence.EntityListeners;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.AccessLevel;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,32 +2,17 @@

import static org.sopt.pawkey.backendapi.global.constants.AppConstants.*;

import java.util.List;

import org.sopt.pawkey.backendapi.domain.pet.api.dto.response.PetTraitCategoryListResponseDto;
import org.sopt.pawkey.backendapi.domain.pet.application.dto.response.PetTraitCategoryResult;
import org.sopt.pawkey.backendapi.domain.pet.application.service.PetQueryService;
import org.sopt.pawkey.backendapi.global.response.ApiResponse;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import lombok.RequiredArgsConstructor;

@RestController
@RequiredArgsConstructor
@RequestMapping(API_PREFIX + "/pets/traits")
@RequestMapping(API_PREFIX + "/pets")
public class PetController {

private final PetQueryService petQueryService;

@GetMapping("/categories")
public ResponseEntity<ApiResponse<PetTraitCategoryListResponseDto>> getPetTraitCategories() {
List<PetTraitCategoryResult> resultList = petQueryService.getAllPetTraitCategories();
PetTraitCategoryListResponseDto response = PetTraitCategoryListResponseDto.from(resultList);

return ResponseEntity.status(HttpStatus.OK).body(ApiResponse.success(response));
}
}
Original file line number Diff line number Diff line change
@@ -1,25 +1,25 @@
package org.sopt.pawkey.backendapi.domain.pet.api.dto.request;

import java.util.List;
import java.time.LocalDate;

import org.sopt.pawkey.backendapi.domain.pet.application.dto.SelectedOptionForPetTraitCategory;
import org.sopt.pawkey.backendapi.domain.pet.application.dto.request.CreatePetCommand;

import com.fasterxml.jackson.annotation.JsonFormat;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.constraints.Positive;

public record PetRequestDto(
@NotBlank(message = "반려동물 이름은 필수값입니다.") String name,
@NotBlank(message = "성별은 필수값입니다.") @Pattern(regexp = "^(M|F)$", message = "성별은 M 또는 F이어야 합니다.") String gender,
@Positive(message = "나이는 양수여야 합니다.") int age,
boolean isAgeKnown,
@NotBlank(message = "성별은 필수값입니다.")
@Pattern(regexp = "^(M|F)$", message = "성별은 M 또는 F이어야 합니다.") String gender,
@NotNull(message = "생년월일은 필수값입니다.")
@JsonFormat(pattern = "yyyy-MM-dd") LocalDate birth,
boolean isNeutered,
@NotBlank(message = "품종은 필수값입니다.") String breed,
@NotNull(message = "반려동물 성향은 필수값입니다.") List<SelectedOptionForPetTraitCategory> petTraits
@NotBlank(message = "품종은 필수값입니다.") String breed
) {
public CreatePetCommand toCommand() {
return CreatePetCommand.of(name, gender, age, isAgeKnown, isNeutered, breed, petTraits);
return CreatePetCommand.of(name, gender, birth, isNeutered, breed);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package org.sopt.pawkey.backendapi.domain.pet.api.dto.request;

import java.time.LocalDate;

import org.sopt.pawkey.backendapi.domain.pet.application.dto.request.UpdatePetCommand;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.PastOrPresent;
import jakarta.validation.constraints.Pattern;

public record UpdatePetRequestDto(
@NotBlank String name,

@PastOrPresent(message = "생년월일은 현재 또는 과거 날짜여야 합니다")
@NotNull LocalDate birth,

@Pattern(regexp = "^(M|F)$", message = "성별은 M 또는 F이어야 합니다.")
@NotBlank String gender,

@NotNull Boolean isNeutered,

@NotBlank String breed
) {
public UpdatePetCommand toCommand() {
return new UpdatePetCommand(name, birth, gender, isNeutered, breed);
}
}
Original file line number Diff line number Diff line change
@@ -1,22 +1,53 @@
package org.sopt.pawkey.backendapi.domain.pet.api.dto.response;

import java.util.List;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;

import org.sopt.pawkey.backendapi.domain.pet.infra.persistence.entity.PetEntity;

public record PetProfileResponseDto(
Long petId,
String imageUrl,
String name,
LocalDate birth,
long age,
String gender,
boolean isNeutered,
int age,
boolean isAgeKnown,
String breed,
String imageUrl,
List<TraitDto> traits,
int walkCount

// 추후 dbti 엔티티 생성 시에, dbti 소개 문구로 변경할 예정
String dbti
) {
public record TraitDto(
String category,
String option
) {
public static PetProfileResponseDto from(PetEntity pet) {
return new PetProfileResponseDto(
pet.getPetId(),
pet.getProfileImage() != null ? pet.getProfileImage().getImageUrl() : null,
pet.getName(),
pet.getBirth(),
calculateAgeInMonths(pet.getBirth()),
convertGender(pet.getGender()),
pet.isNeutered(),
pet.getBreed(),
parseDbti(pet.getDbti())
);
}

private static long calculateAgeInMonths(LocalDate birth) {
if (birth == null)
return 0;
return ChronoUnit.MONTHS.between(birth, LocalDate.now());
}

private static String convertGender(String gender) {
if ("M".equals(gender)) {
return "남아";
} else if ("F".equals(gender)) {
return "여아";
}
throw new IllegalArgumentException("올바르지 않은 성별 값입니다: " + gender);
}

private static String parseDbti(String dbti) {
return (dbti == null || dbti.isBlank()) ? "DBTI 검사 미완료" : dbti;
}
}

This file was deleted.

Loading