Skip to content
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
12 changes: 5 additions & 7 deletions MathCaptain/weakness/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,13 @@ dependencies {
implementation 'org.springframework.boot:spring-boot-starter-websocket'
implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect'
implementation 'io.jsonwebtoken:jjwt-api:0.12.3'
implementation 'commons-codec:commons-codec:1.5'
implementation 'org.springframework.ai:spring-ai-openai-spring-boot-starter'
implementation 'commons-codec:commons-codec:1.13'
implementation 'org.webjars:webjars-locator-core'
implementation 'org.webjars:sockjs-client:1.5.1'
implementation 'org.webjars:stomp-websocket:2.3.4'
implementation 'com.h2database:h2'
runtimeOnly 'mysql:mysql-connector-java:8.0.33'
implementation 'org.postgresql:postgresql:42.7.1'
implementation 'com.auth0:java-jwt:3.13.0'
runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.12.3'
runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.12.3'
Expand All @@ -57,11 +60,6 @@ dependencies {
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.10.0'
}

dependencyManagement {
imports {
mavenBom "org.springframework.ai:spring-ai-bom:$springAiVersion"
}
}

tasks.named('test') {
useJUnitPlatform()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,13 @@
import MathCaptain.weakness.domain.Group.entity.Group;
import MathCaptain.weakness.domain.Group.entity.RelationBetweenUserAndGroup;
import MathCaptain.weakness.domain.Group.enums.CategoryStatus;
import MathCaptain.weakness.domain.Group.enums.GroupRole;
import MathCaptain.weakness.domain.Group.repository.GroupRepository;
import MathCaptain.weakness.domain.Group.repository.RelationRepository;
import MathCaptain.weakness.domain.Record.entity.ActivityRecord;
import MathCaptain.weakness.domain.Record.repository.RecordRepository;
import MathCaptain.weakness.domain.Record.repository.record.RecordRepository;
import MathCaptain.weakness.domain.Recruitment.dto.request.CreateRecruitmentRequest;
import MathCaptain.weakness.domain.Recruitment.entity.Comment;
import MathCaptain.weakness.domain.Recruitment.entity.Recruitment;
import MathCaptain.weakness.domain.Recruitment.enums.RecruitmentStatus;
import MathCaptain.weakness.domain.Recruitment.repository.CommentRepository;
import MathCaptain.weakness.domain.Recruitment.repository.RecruitmentRepository;
import MathCaptain.weakness.domain.User.dto.request.SaveUserRequest;
Expand All @@ -33,7 +31,7 @@
@Component
@RequiredArgsConstructor
@Transactional
@DependsOn("entityManagerFactory")
@DependsOn("primaryEntityManagerFactory")
public class TestInit {

private final UserRepository userRepository;
Expand Down Expand Up @@ -104,7 +102,7 @@ public void init() {
CategoryStatus.FITNESS, 2, 3, 0L, null, "test2", 3, 4);

GroupCreateRequest groupCreateRequest3 = GroupCreateRequest.of(users1.getUserId(), "testGroup3",
CategoryStatus.READING, 2, 3, 0L, null, "test3", 3, 4);
CategoryStatus.RUNNING, 2, 3, 0L, null, "test3", 3, 4);

Group group1 = Group.of(groupCreateRequest1);
Group group2 = Group.of(groupCreateRequest2);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,12 @@
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

@EnableJpaAuditing
@SpringBootApplication(exclude = SecurityAutoConfiguration.class)
@ComponentScan(basePackages = "MathCaptain")
public class WeaknessApplication {

public static void main(String[] args) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ public class Group {
@CollectionTable(name = "group_weekly_goal_achieve", joinColumns = @JoinColumn(name = "group_id"))
@MapKeyColumn(name = "day_of_week") // 요일을 키로 사용
@Column(name = "goal_count") // 카운트를 값으로 사용
private Map<DayOfWeek, Integer> weeklyGoalAchieveMap = new EnumMap<>(DayOfWeek.class);
private final Map<DayOfWeek, Integer> weeklyGoalAchieveMap = new EnumMap<>(DayOfWeek.class);

@OneToMany(mappedBy = "recruitGroup")
private List<Recruitment> recruitments;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
public enum CategoryStatus {
FITNESS,
STUDY,
READING
RUNNING
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import MathCaptain.weakness.domain.Group.dto.response.GroupResponse;
import MathCaptain.weakness.domain.Group.dto.response.RelationResponse;
import MathCaptain.weakness.domain.Group.repository.GroupRepository;
import MathCaptain.weakness.domain.Record.repository.RecordRepository;
import MathCaptain.weakness.domain.Record.repository.record.RecordRepository;
import MathCaptain.weakness.domain.User.dto.response.UserResponse;
import MathCaptain.weakness.domain.Group.enums.GroupRole;
import MathCaptain.weakness.domain.Group.repository.RelationRepository;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package MathCaptain.weakness.domain.Record.controller;

import MathCaptain.weakness.domain.Record.service.ActivityDetailService;
import MathCaptain.weakness.global.Api.ApiResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

@RestController
@RequiredArgsConstructor
@RequestMapping("/record/detail")
public class ActivityDetailController {

private final ActivityDetailService activityDetailService;

@GetMapping("/fitness/{activityId}")
public ApiResponse<?> getFitnessLog(@PathVariable Long activityId) {
return ApiResponse.ok(activityDetailService.getFitnessLog(activityId));
}

@GetMapping("/study/{activityId}")
public ApiResponse<?> getStudyLog(@PathVariable Long activityId) {
return ApiResponse.ok(activityDetailService.getStudyLog(activityId));
}

@GetMapping("/running/{activityId}")
public ApiResponse<?> getRunningLog(@PathVariable Long activityId) {
return ApiResponse.ok(activityDetailService.getRunningLog(activityId));
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package MathCaptain.weakness.domain.Record.controller;

import MathCaptain.weakness.domain.Record.dto.request.recordEndRequest;
import MathCaptain.weakness.domain.Record.dto.request.FitnessLogEnrollRequest;
import MathCaptain.weakness.domain.Record.dto.request.RecordEndRequest;
import MathCaptain.weakness.domain.Record.dto.request.RunningLogEnrollRequest;
import MathCaptain.weakness.domain.Record.dto.request.StudyLogEnrollRequest;
import MathCaptain.weakness.domain.Record.dto.response.RecordSummaryResponse;
import MathCaptain.weakness.domain.Record.service.RecordService;
import MathCaptain.weakness.domain.User.entity.Users;
Expand All @@ -10,15 +13,36 @@
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import static MathCaptain.weakness.domain.Group.enums.CategoryStatus.*;

@RestController
@RequiredArgsConstructor
@RequestMapping("/record/")
@RequestMapping("/record")
public class RecordController {

private final RecordService recordService;

@PostMapping("/end/{groupId}")
public ApiResponse<RecordSummaryResponse> endActivity(@Valid @LoginUser Users loginUser, @PathVariable Long groupId, @RequestBody recordEndRequest requestDto) {
return ApiResponse.ok(recordService.endActivity(loginUser, groupId, requestDto));
@PostMapping("/end/fitness/{groupId}")
public ApiResponse<RecordSummaryResponse> endFitnessActivity(
@Valid @LoginUser Users loginUser,
@PathVariable Long groupId,
@RequestBody FitnessLogEnrollRequest logRequest) {
return ApiResponse.ok(recordService.endActivity(loginUser, groupId, logRequest, FITNESS));
}

@PostMapping("/end/running/{groupId}")
public ApiResponse<RecordSummaryResponse> endRunningActivity(
@Valid @LoginUser Users loginUser,
@PathVariable Long groupId,
@RequestBody RunningLogEnrollRequest logRequest) {
return ApiResponse.ok(recordService.endActivity(loginUser, groupId, logRequest, RUNNING));
}

@PostMapping("/end/study/{groupId}")
public ApiResponse<RecordSummaryResponse> endStudyActivity(
@Valid @LoginUser Users loginUser,
@PathVariable Long groupId,
@RequestBody StudyLogEnrollRequest logRequest) {
return ApiResponse.ok(recordService.endActivity(loginUser, groupId, logRequest, STUDY));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package MathCaptain.weakness.domain.Record.dto.request;

import lombok.Getter;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;

@Getter
@NoArgsConstructor
public class ActivityLogEnrollRequest {

private Long activityTime;

private LocalDateTime startTime;

private LocalDateTime endTime;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package MathCaptain.weakness.domain.Record.dto.request;

import MathCaptain.weakness.domain.Record.entity.UserLog.ExerciseInfo;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;
import java.util.List;

@Getter
@NoArgsConstructor
public class FitnessLogEnrollRequest extends ActivityLogEnrollRequest {

private Long activityTime;

private LocalDateTime startTime;

private LocalDateTime endTime;

private List<ExerciseInfo> exerciseInfoList;
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

@Getter
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class recordEndRequest {
public class RecordEndRequest {

// 수행 시간 (분)
private Long activityTime;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package MathCaptain.weakness.domain.Record.dto.request;

import lombok.Getter;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;

@Getter
@NoArgsConstructor
public class RunningLogEnrollRequest extends ActivityLogEnrollRequest {

private Long activityTime;

private LocalDateTime startTime;

private LocalDateTime endTime;

private Long distance;

private String memo;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package MathCaptain.weakness.domain.Record.dto.request;

import lombok.Getter;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;

@Getter
@NoArgsConstructor
public class StudyLogEnrollRequest extends ActivityLogEnrollRequest{

private Long activityTime;

private LocalDateTime startTime;

private LocalDateTime endTime;

private String subject;

private String memo;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package MathCaptain.weakness.domain.Record.dto.response;

import MathCaptain.weakness.domain.Record.entity.UserLog.ExerciseInfo;
import MathCaptain.weakness.domain.Record.entity.UserLog.FitnessDetail;
import jakarta.persistence.Column;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.util.List;

@Getter
@NoArgsConstructor
public class FitnessLogResponse {

private Long activityId;

private Long duration;

private String date;

private List<ExerciseInfo> exerciseInfoList;

private FitnessLogResponse(Long activityId, Long duration, String date, List<ExerciseInfo> exerciseInfoList) {
this.activityId = activityId;
this.duration = duration;
this.date = date;
this.exerciseInfoList = exerciseInfoList;
}

public static FitnessLogResponse of(FitnessDetail fitnessDetail) {
return new FitnessLogResponse(
fitnessDetail.getActivityId(),
fitnessDetail.getDuration(),
fitnessDetail.getDate().toString(),
fitnessDetail.getExerciseInfoList()
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,16 @@ public class RecordSummaryResponse {
// 사용자가 설정한 주간 목표
private int personalWeeklyGoal;

@Builder
private RecordSummaryResponse(String userName, String groupName, Long durationInMinutes,
boolean dailyGoalAchieved, boolean weeklyGoalAchieved,
Long remainingDailyGoalMinutes, int remainingWeeklyGoalDays,
Long personalDailyGoal, int personalWeeklyGoal) {
private FitnessLogResponse fitnessLogResponse;

private RunningLogResponse runningLogResponse;

private StudyLogResponse studyLogResponse;

private RecordSummaryResponse(String userName, String groupName, Long durationInMinutes, boolean dailyGoalAchieved,
boolean weeklyGoalAchieved, Long remainingDailyGoalMinutes, int remainingWeeklyGoalDays,
Long personalDailyGoal, int personalWeeklyGoal, FitnessLogResponse fitnessLogResponse,
RunningLogResponse runningLogResponse, StudyLogResponse studyLogResponse) {
this.userName = userName;
this.groupName = groupName;
this.durationInMinutes = durationInMinutes;
Expand All @@ -49,19 +54,31 @@ private RecordSummaryResponse(String userName, String groupName, Long durationIn
this.remainingWeeklyGoalDays = remainingWeeklyGoalDays;
this.personalDailyGoal = personalDailyGoal;
this.personalWeeklyGoal = personalWeeklyGoal;
this.fitnessLogResponse = fitnessLogResponse;
this.runningLogResponse = runningLogResponse;
this.studyLogResponse = studyLogResponse;
}

public static RecordSummaryResponse of(ActivityRecord record, RelationBetweenUserAndGroup relation) {
return RecordSummaryResponse.builder()
.userName(record.getUser().getName())
.groupName(record.getGroup().getName())
.durationInMinutes(record.getDurationInMinutes())
.dailyGoalAchieved(record.isDailyGoalAchieved())
.weeklyGoalAchieved(record.isWeeklyGoalAchieved())
.remainingDailyGoalMinutes(relation.remainingDailyGoalMinutes())
.remainingWeeklyGoalDays(relation.remainingWeeklyGoalDays())
.personalDailyGoal(relation.getPersonalDailyGoal() * 60L)
.personalWeeklyGoal(relation.getPersonalWeeklyGoal())
.build();
public static RecordSummaryResponse of(
ActivityRecord record,
RelationBetweenUserAndGroup relation,
FitnessLogResponse fitnessLog,
RunningLogResponse runningLog,
StudyLogResponse studyLog
) {
return new RecordSummaryResponse(
record.getUser().getName(),
record.getGroup().getName(),
record.getDurationInMinutes(),
record.isDailyGoalAchieved(),
record.isWeeklyGoalAchieved(),
relation.remainingDailyGoalMinutes(),
relation.remainingWeeklyGoalDays(),
relation.getPersonalDailyGoal() * 60L,
relation.getPersonalWeeklyGoal(),
fitnessLog,
runningLog,
studyLog
);
}
}
Loading