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
6 changes: 5 additions & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.example.umc9th.domain.location.repository;

import com.example.umc9th.domain.location.entity.Location;
import org.springframework.data.jpa.repository.JpaRepository;

public interface LocationRepository extends JpaRepository<Location, Long> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.example.umc9th.domain.member.controller;

import com.example.umc9th.domain.member.dto.MemberMissionRequestDTO;
import com.example.umc9th.domain.member.dto.MemberMissionResponseDTO;
import com.example.umc9th.domain.member.service.MemberMissionService;
import com.example.umc9th.global.apiPayload.ApiResponse;
import com.example.umc9th.global.apiPayload.code.GeneralSuccessCode;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api/member-missions")
@RequiredArgsConstructor
public class MemberMissionController {

private final MemberMissionService memberMissionService;

@PostMapping("/challenge")
public ApiResponse<MemberMissionResponseDTO.ChallengeResultDTO> challengeMission(
@RequestBody MemberMissionRequestDTO.ChallengeDTO request
) {
MemberMissionResponseDTO.ChallengeResultDTO result = memberMissionService.challengeMission(request);
return ApiResponse.onSuccess(GeneralSuccessCode.CREATED, result);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.example.umc9th.domain.member.converter;

import com.example.umc9th.domain.member.dto.MemberMissionResponseDTO;
import com.example.umc9th.domain.member.entity.mapping.MemberMission;
import org.springframework.stereotype.Component;

@Component
public class MemberMissionConverter {

public MemberMissionResponseDTO.ChallengeResultDTO toChallengeResultDTO(MemberMission memberMission) {
return MemberMissionResponseDTO.ChallengeResultDTO.builder()
.memberMissionId(memberMission.getId())
.memberName(memberMission.getMember().getName())
.storeName(memberMission.getMission().getStore().getName())
.missionCondition(memberMission.getMission().getCondition())
.missionDeadline(memberMission.getMission().getDeadline())
.point(memberMission.getMission().getPoint())
.isComplete(memberMission.getIsComplete())
.challengedAt(memberMission.getCreatedAt())
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.example.umc9th.domain.member.dto;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

public class MemberMissionRequestDTO {

@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public static class ChallengeDTO {
private Long missionId; // 도전할 미션 ID
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.example.umc9th.domain.member.dto;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.time.LocalDate;
import java.time.LocalDateTime;

public class MemberMissionResponseDTO {

@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public static class ChallengeResultDTO {
private Long memberMissionId;
private String memberName;
private String storeName;
private String missionCondition;
private LocalDate missionDeadline;
private Integer point;
private Boolean isComplete;
private LocalDateTime challengedAt;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package com.example.umc9th.domain.member.exception.code;

public class MemberException {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package com.example.umc9th.domain.member.exception;

public class MemberErrorCode {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package com.example.umc9th.domain.member.exception;

public class MemberSuccessCode {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.example.umc9th.domain.member.service;

import com.example.umc9th.domain.member.dto.MemberMissionRequestDTO;
import com.example.umc9th.domain.member.dto.MemberMissionResponseDTO;

public interface MemberMissionService {
MemberMissionResponseDTO.ChallengeResultDTO challengeMission(MemberMissionRequestDTO.ChallengeDTO request);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package com.example.umc9th.domain.member.service;

import com.example.umc9th.domain.member.converter.MemberMissionConverter;
import com.example.umc9th.domain.member.dto.MemberMissionRequestDTO;
import com.example.umc9th.domain.member.dto.MemberMissionResponseDTO;
import com.example.umc9th.domain.member.entity.Member;
import com.example.umc9th.domain.member.entity.mapping.MemberMission;
import com.example.umc9th.domain.member.repository.MemberRepository;
import com.example.umc9th.domain.member.repository.mapping.MemberMissionRepository;
import com.example.umc9th.domain.mission.entity.Mission;
import com.example.umc9th.domain.mission.repository.MissionRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@RequiredArgsConstructor
@Transactional(readOnly = true)
public class MemberMissionServiceImpl implements MemberMissionService {

private final MemberMissionRepository memberMissionRepository;
private final MissionRepository missionRepository;
private final MemberRepository memberRepository;
private final MemberMissionConverter memberMissionConverter;

@Override
@Transactional
public MemberMissionResponseDTO.ChallengeResultDTO challengeMission(MemberMissionRequestDTO.ChallengeDTO request) {
// 1. 하드코딩된 유저 조회 (DB에 있는 첫 번째 회원)
Member member = memberRepository.findById(1L)
.orElseThrow(() -> new RuntimeException("회원을 찾을 수 없습니다. DB에 회원 데이터를 추가해주세요."));

// 2. 미션 조회
Mission mission = missionRepository.findById(request.getMissionId())
.orElseThrow(() -> new RuntimeException("해당 미션을 찾을 수 없습니다."));

// 3. 이미 도전중인 미션인지 확인
if (memberMissionRepository.existsByMemberIdAndMissionId(member.getId(), mission.getId())) {
throw new RuntimeException("이미 도전중인 미션입니다.");
}

// 4. MemberMission 엔티티 생성
MemberMission memberMission = MemberMission.builder()
.member(member)
.mission(mission)
.isComplete(false)
.build();

// 5. DB 저장
MemberMission savedMemberMission = memberMissionRepository.save(memberMission);

// 6. 응답 DTO 변환
return memberMissionConverter.toChallengeResultDTO(savedMemberMission);
}
}

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package com.example.umc9th.domain.member.service.command;

public class MemberCommandService {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package com.example.umc9th.domain.member.service.command;

public class MemberCommandServiceImpl {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package com.example.umc9th.domain.member.service.query;

public class MemberQueryService {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package com.example.umc9th.domain.member.service.query;

public class MemberQueryServiceImpl {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.example.umc9th.domain.review.controller;

import com.example.umc9th.domain.review.dto.ReviewRequestDTO;
import com.example.umc9th.domain.review.dto.ReviewResponseDTO;
import com.example.umc9th.domain.review.service.ReviewService;
import com.example.umc9th.global.apiPayload.ApiResponse;
import com.example.umc9th.global.apiPayload.code.GeneralSuccessCode;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api/reviews")
@RequiredArgsConstructor
public class ReviewController {

private final ReviewService reviewService;

@PostMapping
public ApiResponse<ReviewResponseDTO.CreateResultDTO> createReview(
@RequestBody ReviewRequestDTO.CreateDTO request
) {
ReviewResponseDTO.CreateResultDTO result = reviewService.createReview(request);
return ApiResponse.onSuccess(GeneralSuccessCode.CREATED, result);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.example.umc9th.domain.review.converter;

import com.example.umc9th.domain.review.dto.ReviewResponseDTO;
import com.example.umc9th.domain.review.entity.Review;
import org.springframework.stereotype.Component;

@Component
public class ReviewConverter {

public ReviewResponseDTO.CreateResultDTO toCreateResultDTO(Review review) {
return ReviewResponseDTO.CreateResultDTO.builder()
.reviewId(review.getId())
.storeName(review.getStore().getName())
.memberName(review.getMember().getName())
.content(review.getContent())
.rate(review.getRate())
.createdAt(review.getCreatedAt())
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.example.umc9th.domain.review.dto;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

public class ReviewRequestDTO {

@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public static class CreateDTO {
private Long storeId; // 가게 ID
private String content; // 리뷰 내용
private Float rate; // 평점 (0.0 ~ 5.0)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.example.umc9th.domain.review.dto;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;

public class ReviewResponseDTO {

@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public static class CreateResultDTO {
private Long reviewId;
private String storeName;
private String memberName;
private String content;
private Float rate;
private LocalDateTime createdAt;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.example.umc9th.domain.store.controller;

import com.example.umc9th.domain.store.dto.StoreRequestDTO;
import com.example.umc9th.domain.store.dto.StoreResponseDTO;
import com.example.umc9th.domain.store.service.StoreService;
import com.example.umc9th.global.apiPayload.ApiResponse;
import com.example.umc9th.global.apiPayload.code.GeneralSuccessCode;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api/stores")
@RequiredArgsConstructor
public class StoreController {

private final StoreService storeService;

@PostMapping
public ApiResponse<StoreResponseDTO.CreateResultDTO> createStore(
@RequestBody StoreRequestDTO.CreateDTO request
) {
StoreResponseDTO.CreateResultDTO result = storeService.createStore(request);
return ApiResponse.onSuccess(GeneralSuccessCode.CREATED, result);
}
}
Loading