Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat/certification #4

Merged
merged 3 commits into from
Apr 6, 2024
Merged
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
30 changes: 27 additions & 3 deletions src/main/java/com/kukerton/controller/CertificationController.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,15 @@
import com.kukerton.global.enums.GlobalSuccessCode;
import com.kukerton.global.response.BfResponse;
import com.kukerton.service.CertificationService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
Expand All @@ -24,12 +27,33 @@ public class CertificationController {

private final CertificationService certificationService;

@Operation(summary = "인증 글 생성 APII", description = "인증 글 생성을 위한 api 입니다.")
@PostMapping()
public ResponseEntity<BfResponse<?>> createCertification(
@Valid @RequestBody CertificationRequestDto dto){
log.info("controller 실행~~!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
@Valid @RequestBody CertificationRequestDto dto) {
return ResponseEntity.status(HttpStatus.CREATED)
.body(new BfResponse<>(GlobalSuccessCode.CREATE,certificationService.createCertification(dto)));
.body(new BfResponse<>(GlobalSuccessCode.CREATE,
certificationService.createCertification(dto)));
}

@Operation(summary = "미완료 인증 조회 API", description = "미완료(완료하지 못한) 미션 목록 조회 api 입니다.")
@GetMapping("/members/{memberId}")
public ResponseEntity<BfResponse<?>> getCertificationList(
@PathVariable("memberId") Long memberId) {
return ResponseEntity.status(HttpStatus.OK)
.body(new BfResponse<>(GlobalSuccessCode.SUCCESS,
certificationService.getUnclearCertification(memberId)));
}


@Operation(summary = "인증글 상세 조회 API", description = "완료 인증글 상세 조회 api입니다.")
@GetMapping("/{certificationId}")
public ResponseEntity<BfResponse<?>> getCertification(
@PathVariable("certificationId") Long certificationId) {
return ResponseEntity.status(HttpStatus.OK)
.body(new BfResponse<>(GlobalSuccessCode.SUCCESS,
certificationService.getCertification(certificationId)));
}


}
4 changes: 3 additions & 1 deletion src/main/java/com/kukerton/controller/ImageController.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import java.util.List;
import java.util.Map;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
Expand All @@ -30,7 +31,8 @@ public ResponseEntity<BfResponse<?>> uploadImage(
@RequestPart List<MultipartFile> images) {

return ResponseEntity.status(HttpStatus.CREATED)
.body(new BfResponse<>(GlobalSuccessCode.CREATE, imageService.uploadImage(images)));
.body(new BfResponse<>(GlobalSuccessCode.CREATE,
Map.of("image_url", imageService.uploadImage(images))));
}

}
11 changes: 11 additions & 0 deletions src/main/java/com/kukerton/controller/MemberController.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
Expand All @@ -45,6 +46,16 @@ public ResponseEntity<BfResponse<?>> login(@RequestParam(name = "code") String c
Map.of("id", memberService.getUserInfoFromResourceServer(code))));
}


@Operation(summary = "쿠폰 목록 조회 API", description = "회원 프로필에서 쿠폰 목록 조회 api입니다.")
@GetMapping("/{memberId}")
public ResponseEntity<BfResponse<?>> getCoupon(@PathVariable("memberId") Long memberId) {
return ResponseEntity.status(HttpStatus.OK)
.body(new BfResponse<>(GlobalSuccessCode.SUCCESS,
memberService.getCoupon(memberId)));
}


@Operation(summary = "온보딩 화면 API", description = "온보딩 화면에서 관심분야, 자제분야를 저장하는 API 입니다.")
@PostMapping("/onboarding")
public ResponseEntity<BfResponse<?>> onboarding(@Validated @RequestBody OnboardingRequest onboardingRequest, BindingResult bindingResult){
Expand Down
7 changes: 6 additions & 1 deletion src/main/java/com/kukerton/domain/entity/Coupon.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package com.kukerton.domain.entity;

import jakarta.persistence.*;
import java.time.LocalDate;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;

@Entity
@Getter
Expand All @@ -16,7 +18,10 @@ public class Coupon {
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private String content;
private String content; // 할인 내용

@DateTimeFormat(pattern = "yyyy-mm-dd")
private LocalDate endDate; // 쿠폰 유효 기간

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "member_id")
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/com/kukerton/domain/entity/Store.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@ public class Store {
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private String name;
private String name; //가게 이름

private String category;
private String category; //

private Double latitude;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,15 @@
package com.kukerton.domain.repository;

import com.kukerton.domain.entity.Coupon;
import java.time.LocalDate;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

public interface CouponRepository extends JpaRepository<Coupon, Long> {

@Query("select c from Coupon c where c.member.id = :memberId and c.endDate >= :endDate")
List<Coupon> getcoupons(@Param("memberId") Long memberId, @Param("endDate")LocalDate localDate);

}
Original file line number Diff line number Diff line change
@@ -1,11 +1,18 @@
package com.kukerton.domain.repository;

import com.kukerton.domain.entity.Certification;
import com.kukerton.domain.entity.Member;
import java.util.List;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

public interface MemberRepository extends JpaRepository<Member, Long> {

Optional<Member> findByAuthId(Long authId);

@Query("select c from Certification c where c.member.id = :memberId and c.is_cleared = false")
List<Certification> getUnClearedCertification(@Param("memberId") Long memberId);

}
21 changes: 21 additions & 0 deletions src/main/java/com/kukerton/dto/response/CouponResponseDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.kukerton.dto.response;

import com.kukerton.domain.entity.Coupon;
import java.time.LocalDate;
import lombok.Builder;

@Builder
public record CouponResponseDto(
String content,

LocalDate endDate
) {

public static CouponResponseDto fromEntity(Coupon coupon) {
return CouponResponseDto.builder()
.content(coupon.getContent())
.endDate(coupon.getEndDate())
.build();
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.kukerton.dto.response;

import lombok.Builder;

@Builder
public record UnClearCertificationResponseDto(
Long certificationId,
String taskTitle
) {

}
33 changes: 33 additions & 0 deletions src/main/java/com/kukerton/service/CertificationService.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,11 @@
import com.kukerton.domain.repository.MemberRepository;
import com.kukerton.dto.request.CertificationRequestDto;
import com.kukerton.dto.response.CertificationResponseDto;
import com.kukerton.dto.response.UnClearCertificationResponseDto;
import com.kukerton.global.enums.CertificationErrorCode;
import com.kukerton.global.exception.CertificationException;
import java.util.ArrayList;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
Expand All @@ -31,4 +34,34 @@ public CertificationResponseDto createCertification(CertificationRequestDto dto)

}

@Transactional(readOnly = true)
public List<UnClearCertificationResponseDto> getUnclearCertification(Long memberId) {

List<UnClearCertificationResponseDto> response = new ArrayList<>();

List<Certification> unClearedCertifications = memberRepository.getUnClearedCertification(
memberId);

if (!unClearedCertifications.isEmpty()) {

unClearedCertifications.forEach(certification -> {
response.add(UnClearCertificationResponseDto.builder()
.taskTitle(certification.getTaskTitle())
.certificationId(certification.getId())
.build());
});
}

return response;
}

@Transactional(readOnly = true)
public CertificationResponseDto getCertification(Long certificationId) {

Certification certification = certificationRepository.findById(certificationId)
.orElseThrow(() -> new CertificationException(CertificationErrorCode.NOT_FOUND));

return CertificationResponseDto.fromEntity(certification);
}

}
23 changes: 23 additions & 0 deletions src/main/java/com/kukerton/service/MemberService.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
package com.kukerton.service;



import com.kukerton.domain.entity.Coupon;
import com.kukerton.domain.repository.CouponRepository;
import com.kukerton.dto.response.CouponResponseDto;
import com.kukerton.domain.entity.Config;
import com.kukerton.domain.entity.Member;
import com.kukerton.domain.repository.ConfigRepository;
Expand All @@ -12,6 +16,8 @@
import com.kukerton.global.enums.Category;
import com.kukerton.global.enums.MemberErrorCode;
import com.kukerton.global.exception.MemberException;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import lombok.RequiredArgsConstructor;
Expand All @@ -35,6 +41,8 @@ public class MemberService {

private final ImageService imageService;

private final CouponRepository couponRepository;


private final String clientId = "5cd984f686b2785bcc5e6f25ecbbc27d";
private final String redirectUrl = "http://localhost:5173/auth";
Expand Down Expand Up @@ -123,6 +131,21 @@ public Optional<Member> isMember(Long authId) {

}

@Transactional(readOnly = true)
public List<CouponResponseDto> getCoupon(Long memberId) {

List<CouponResponseDto> response = new ArrayList<>();

List<Coupon> getcoupons = couponRepository.getcoupons(memberId, LocalDate.now());

if(!getcoupons.isEmpty()){
getcoupons.forEach(coupon -> {
response.add(CouponResponseDto.fromEntity(coupon));
});
}
return response;
}


public void createOnboardingConfig(OnboardingRequest onboardingRequest) {

Expand Down
19 changes: 15 additions & 4 deletions src/main/resources/data.sql
Original file line number Diff line number Diff line change
@@ -1,5 +1,16 @@
INSERT INTO member(id,nickname,auth_id,level,start_time,end_time)
values (1, 'lee',null,null,null,null);
INSERT INTO member(id, nickname, auth_id, level, start_time, end_time)
values (1, 'lee', null, null, null, null);

INSERT INTO certification(id,img_url,task_title,user_title,review,local_date,is_cleared,member_id)
values (1,null,'task-title',null,null,'2024-12-12',false,1);
INSERT INTO certification(id, img_url, task_title, user_title, review, local_date, is_cleared,
member_id)
values (1, null, 'task-title1', null, null, '2024-12-12', false, 1);

INSERT INTO certification(id, img_url, task_title, user_title, review, local_date, is_cleared,
member_id)
values (2, null, 'task-title2', null, null, '2024-12-12', false, 1);

INSERT INTO coupon (id, content, end_date, member_id, store_id)
values (1, 'coupon1', '2024-12-01', 1, null);

INSERT INTO coupon (id, content, end_date, member_id, store_id)
values (2, 'coupon2', '2023-12-01', 1, null);
Loading