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

6 feat 러닝 기능 구현 #17

Merged
merged 3 commits into from
Nov 21, 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
3 changes: 3 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,12 @@ dependencies {
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'jakarta.persistence:jakarta.persistence-api:3.1.0'
implementation 'org.mapstruct:mapstruct:1.5.5.Final'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.mysql:mysql-connector-j'
annotationProcessor 'org.projectlombok:lombok'
annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.5.Final'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.security:spring-security-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
Expand Down
2 changes: 1 addition & 1 deletion settings.gradle
Original file line number Diff line number Diff line change
@@ -1 +1 @@
rootProject.name = 'dorundorun-Be'
//rootProject.name = 'dorundorun-BE'
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package com.alom.dorundorunbe.domain.RunningRecord.mapper;

import com.alom.dorundorunbe.domain.RunningRecord.domain.RunningRecord;
import com.alom.dorundorunbe.domain.RunningRecord.dto.RunningRecordEndRequestDto;
import com.alom.dorundorunbe.domain.RunningRecord.dto.RunningRecordResponseDto;
import com.alom.dorundorunbe.domain.RunningRecord.dto.RunningRecordStartRequestDto;
import javax.annotation.processing.Generated;
import org.springframework.stereotype.Component;

@Generated(
value = "org.mapstruct.ap.MappingProcessor",
date = "2024-11-19T21:28:17+0900",
comments = "version: 1.5.5.Final, compiler: javac, environment: Java 17.0.13 (Amazon.com Inc.)"
)
@Component
public class RunningRecordMapperImpl implements RunningRecordMapper {

@Override
public RunningRecordResponseDto toResponseDto(RunningRecord runningRecord) {
if ( runningRecord == null ) {
return null;
}

RunningRecordResponseDto.RunningRecordResponseDtoBuilder runningRecordResponseDto = RunningRecordResponseDto.builder();

runningRecordResponseDto.id( runningRecord.getId() );
runningRecordResponseDto.date( runningRecord.getDate() );
runningRecordResponseDto.startTime( runningRecord.getStartTime() );
runningRecordResponseDto.endTime( runningRecord.getEndTime() );
runningRecordResponseDto.distance( runningRecord.getDistance() );
runningRecordResponseDto.cadence( runningRecord.getCadence() );
runningRecordResponseDto.elapsedTime( runningRecord.getElapsedTime() );
runningRecordResponseDto.speed( runningRecord.getSpeed() );

return runningRecordResponseDto.build();
}

@Override
public RunningRecord toEntityFromStartRequestDto(RunningRecordStartRequestDto startRequestDto) {
if ( startRequestDto == null ) {
return null;
}

RunningRecord.RunningRecordBuilder runningRecord = RunningRecord.builder();

runningRecord.date( startRequestDto.getDate() );
runningRecord.startTime( startRequestDto.getStartTime() );

return runningRecord.build();
}

@Override
public RunningRecord toEntityFromEndRequestDto(RunningRecordEndRequestDto endRequestDto) {
if ( endRequestDto == null ) {
return null;
}

RunningRecord.RunningRecordBuilder runningRecord = RunningRecord.builder();

runningRecord.id( endRequestDto.getId() );
runningRecord.endTime( endRequestDto.getEndTime() );
runningRecord.distance( endRequestDto.getDistance() );
runningRecord.cadence( endRequestDto.getCadence() );
runningRecord.elapsedTime( endRequestDto.getElapsedTime() );
runningRecord.speed( endRequestDto.getSpeed() );

return runningRecord.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
package com.alom.dorundorunbe.domain.RunningRecord.controller;

import com.alom.dorundorunbe.domain.RunningRecord.dto.ResponseDto;
import com.alom.dorundorunbe.domain.RunningRecord.dto.RunningRecordEndRequestDto;
import com.alom.dorundorunbe.domain.RunningRecord.dto.RunningRecordResponseDto;
import com.alom.dorundorunbe.domain.RunningRecord.dto.RunningRecordStartRequestDto;
import com.alom.dorundorunbe.domain.RunningRecord.service.RunningRecordService;
import lombok.AllArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

@RestController
@AllArgsConstructor
@RequestMapping("/records")
public class RunningRecordController {
private final RunningRecordService runningRecordService;

@PostMapping
public ResponseEntity<ResponseDto<RunningRecordResponseDto>> createStartRunningRecord(RunningRecordStartRequestDto startRequestDto){
RunningRecordResponseDto result = runningRecordService.saveStartRecord(startRequestDto);
ResponseDto<RunningRecordResponseDto> response = new ResponseDto<>();
response.setSuccess(true);
response.setCode(HttpStatus.CREATED.value());
response.setMessage("러닝 시작 시간이 성공적으로 저장되었습니다.");
response.setResult(result);

return new ResponseEntity<>(response, HttpStatus.CREATED);
}

@PostMapping("/end")
public ResponseEntity<ResponseDto<RunningRecordResponseDto>> createEndRunningRecord(RunningRecordEndRequestDto endRequestDto){
RunningRecordResponseDto result = runningRecordService.saveEndRecord(endRequestDto);
ResponseDto<RunningRecordResponseDto> response = new ResponseDto<>();
response.setSuccess(true);
response.setCode(HttpStatus.CREATED.value());
response.setMessage("러닝 기록이 성공적으로 생성되었습니다.");
response.setResult(result);

return new ResponseEntity<>(response, HttpStatus.CREATED);
}

@GetMapping("/{id}")
public ResponseEntity<ResponseDto<RunningRecordResponseDto>> fetchRunningRecord(@PathVariable Long id){
RunningRecordResponseDto result = runningRecordService.findRunningRecord(id);
ResponseDto<RunningRecordResponseDto> response = new ResponseDto<>();
response.setSuccess(true);
response.setCode(HttpStatus.OK.value());
response.setMessage("요청에 성공하였습니다.");
response.setResult(result);

return new ResponseEntity<>(response, HttpStatus.OK);
}

// @GetMapping("/{userId}")
// public ResponseEntity<ResponseDto<RunningRecordResponseDto>> fetchRunningRecords(@PathVariable Long userId,
// @RequestParam(defaultValue = "0") int page,
// @RequestParam(defaultValue = "5") int size){
// Pageable pageable = PageRequest.of(page, size);
// Page<RunningRecordResponseDto> result = runningRecordService.findRunningRecords(userId, pageable);
// ResponseDto<RunningRecordResponseDto> response = new ResponseDto<>();
// response.setSuccess(true);
// response.setCode(HttpStatus.OK.value());
// response.setMessage("요청에 성공하였습니다.");
// response.setResult(result);
//
// return new ResponseEntity<>(response, HttpStatus.OK);
// }


}
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,15 @@
import com.alom.dorundorunbe.domain.user.domain.User;
import com.alom.dorundorunbe.global.util.BaseEntity;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.*;

import java.time.LocalDateTime;

import static jakarta.persistence.FetchType.LAZY;

@Entity @Getter
@Entity
@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
Expand All @@ -29,9 +28,17 @@ public class RunningRecord extends BaseEntity {

private LocalDateTime date;

private long distance;
private LocalDateTime startTime;

private LocalDateTime endTime;

private double distance;

private int cadence;

private long time;
private long elapsedTime;

private double speed;

private boolean isFinished = false;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.alom.dorundorunbe.domain.RunningRecord.dto;

import lombok.*;

@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class ResponseDto<T> {
private boolean isSuccess;
private int code;
private String message;
private T result;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.alom.dorundorunbe.domain.RunningRecord.dto;

import jakarta.persistence.Entity;
import lombok.*;

import java.time.LocalDateTime;


@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class RunningRecordEndRequestDto {
private Long id;

private double distance;

private int cadence;

private long elapsedTime;

private LocalDateTime endTime;

private double speed;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.alom.dorundorunbe.domain.RunningRecord.dto;

import lombok.*;

import java.time.LocalDateTime;

@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class RunningRecordResponseDto {
private Long id;

private LocalDateTime date;

private LocalDateTime startTime;

private LocalDateTime endTime;

private double distance;

private int cadence;

private long elapsedTime;

private double speed;

private boolean isFinished;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.alom.dorundorunbe.domain.RunningRecord.dto;

import lombok.*;

import java.time.LocalDateTime;

@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class RunningRecordStartRequestDto {
private Long userId;

private LocalDateTime date;

private LocalDateTime startTime;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.alom.dorundorunbe.domain.RunningRecord.mapper;

import com.alom.dorundorunbe.domain.RunningRecord.domain.RunningRecord;
import com.alom.dorundorunbe.domain.RunningRecord.dto.RunningRecordEndRequestDto;
import com.alom.dorundorunbe.domain.RunningRecord.dto.RunningRecordResponseDto;
import com.alom.dorundorunbe.domain.RunningRecord.dto.RunningRecordStartRequestDto;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;

@Mapper(componentModel = "spring")
public interface RunningRecordMapper {
RunningRecordResponseDto toResponseDto(RunningRecord runningRecord);
@Mapping(target = "id", ignore = true)
RunningRecord toEntityFromStartRequestDto(RunningRecordStartRequestDto startRequestDto);
RunningRecord toEntityFromEndRequestDto(RunningRecordEndRequestDto endRequestDto);

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.alom.dorundorunbe.domain.RunningRecord.repository;

import com.alom.dorundorunbe.domain.RunningRecord.domain.RunningRecord;
import com.alom.dorundorunbe.domain.user.domain.User;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface RunningRecordRepository extends JpaRepository<RunningRecord, Long> {
Page<RunningRecord> findByUser(User user, Pageable pageable);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package com.alom.dorundorunbe.domain.RunningRecord.service;

import com.alom.dorundorunbe.domain.RunningRecord.domain.RunningRecord;
import com.alom.dorundorunbe.domain.RunningRecord.dto.RunningRecordEndRequestDto;
import com.alom.dorundorunbe.domain.RunningRecord.dto.RunningRecordResponseDto;
import com.alom.dorundorunbe.domain.RunningRecord.dto.RunningRecordStartRequestDto;
import com.alom.dorundorunbe.domain.RunningRecord.mapper.RunningRecordMapper;
import com.alom.dorundorunbe.domain.RunningRecord.repository.RunningRecordRepository;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;

@Service
@AllArgsConstructor
public class RunningRecordService {
private final RunningRecordRepository runningRecordRepository;
private final RunningRecordMapper runningRecordMapper;
// private final UserRepository userRepository;

public RunningRecordResponseDto saveStartRecord(RunningRecordStartRequestDto startRequestDto){
// User user = userRepository.findById(startRequestDto.getUserId());
RunningRecord runningRecord = runningRecordMapper.toEntityFromStartRequestDto(startRequestDto);
// runningRecord.setUser(user);
return runningRecordMapper.toResponseDto(runningRecordRepository.save(runningRecord));
}

public RunningRecordResponseDto saveEndRecord(RunningRecordEndRequestDto endRequestDto){
RunningRecord runningRecord = runningRecordMapper.toEntityFromEndRequestDto(endRequestDto);
runningRecord.setFinished(true);
return runningRecordMapper.toResponseDto(runningRecord);
}

// user별 최신순 특정 개수의 기록 조회
// public Page<RunningRecordResponseDto> findRunningRecords(Long userId, Pageable pageable){
// User user = userRepository.findById(userId);
// Page<RunningRecord> records = runningRecordRepository.findByUser(user, pageable);
// return records.map(runningRecordMapper::toResponseDto);
// }

// 특정 기록의 상세 조회
public RunningRecordResponseDto findRunningRecord(Long id){
return runningRecordMapper.toResponseDto(runningRecordRepository.findById(id)
.orElseThrow(() -> new IllegalStateException("Running record with id "+id+" does not exist")));
}
}
Loading