mhpark / Edu_Tech star
박민혁 박민혁 2024-05-27
240527 금오공대 최종본
@73dccad9ccc548b5b92964ad66273bd8f233f826
src/main/java/com/example/educatback/Application/MemberAppService.java
--- src/main/java/com/example/educatback/Application/MemberAppService.java
+++ src/main/java/com/example/educatback/Application/MemberAppService.java
@@ -3,6 +3,7 @@
 import com.example.educatback.DuplicateIdException;
 import com.example.educatback.controller.request.MemberRequest;
 import com.example.educatback.controller.response.MemberResponse;
+import com.example.educatback.controller.response.StudentTotalScoreDTO;
 import com.example.educatback.model.entity.Member;
 import com.example.educatback.model.entity.Solved;
 import com.example.educatback.model.repository.MemberRepository;
@@ -12,8 +13,10 @@
 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 import org.springframework.stereotype.Service;
 
+import java.util.Comparator;
 import java.util.List;
 import java.util.Optional;
+import java.util.stream.Collectors;
 
 @Service
 @RequiredArgsConstructor
@@ -86,4 +89,31 @@
         System.out.println("solved 하고나서");
         return member.get().getSolveds();
     }
+
+    public List<MemberResponse.Detail> getMembersWithNullRole() {
+        List<Member> membersWithNullRole = memberRepository.findByRoleIsNull();
+        return membersWithNullRole.stream()
+                .map(MemberResponse.Detail::of)
+                .sorted(Comparator.comparing(MemberResponse.Detail::getName))  // name으로 정렬
+                .collect(Collectors.toList());
+    }
+
+    public StudentTotalScoreDTO calculateAverageTotalScore() {
+        List<Member> students = memberRepository.findAll();
+        int count = students.size();
+        double totalTotalScore = 0;
+
+        for (Member student : students) {
+            int totalScore = student.getFocus() + student.getExpression() + student.getUnderstand() +
+                    student.getWord() + student.getSentence() + student.getGrammar();
+            totalTotalScore += totalScore;
+        }
+
+        double averageTotalScore = totalTotalScore / count;
+
+        StudentTotalScoreDTO totalScoreDTO = new StudentTotalScoreDTO();
+        totalScoreDTO.setAverageTotalScore(averageTotalScore);
+
+        return totalScoreDTO;
+    }
 }
src/main/java/com/example/educatback/Application/ScoreLogService.java
--- src/main/java/com/example/educatback/Application/ScoreLogService.java
+++ src/main/java/com/example/educatback/Application/ScoreLogService.java
@@ -38,4 +38,10 @@
                 .map(ScoreLogResponseDTO.DailyAverageScore::fromObjectArray)
                 .collect(Collectors.toList());
     }
+    public List<ScoreLogResponseDTO.DailyAverageScore> getDailyAverageScores() {
+        List<Object[]> averages = scoreLogRepository.findDailyAverageScores();
+        return averages.stream()
+                .map(ScoreLogResponseDTO.DailyAverageScore::fromObjectArray)
+                .collect(Collectors.toList());
+    }
 }
src/main/java/com/example/educatback/controller/MemberController.java
--- src/main/java/com/example/educatback/controller/MemberController.java
+++ src/main/java/com/example/educatback/controller/MemberController.java
@@ -3,14 +3,15 @@
 import com.example.educatback.Application.MemberAppService;
 import com.example.educatback.DuplicateIdException;
 import com.example.educatback.controller.request.MemberRequest;
-import com.example.educatback.controller.response.ApiResponse;
-import com.example.educatback.controller.response.MemberResponse;
-import com.example.educatback.controller.response.ResponseCode;
-import com.example.educatback.controller.response.SolvedResponse;
+import com.example.educatback.controller.response.*;
+import com.example.educatback.model.entity.Member;
 import com.example.educatback.model.entity.Solved;
+import com.example.educatback.model.repository.MemberRepository;
 import jakarta.persistence.EntityNotFoundException;
 import jakarta.validation.Valid;
 import lombok.RequiredArgsConstructor;
+import org.springframework.data.repository.query.Param;
+import org.springframework.http.ResponseEntity;
 import org.springframework.security.core.annotation.AuthenticationPrincipal;
 import org.springframework.security.core.userdetails.UserDetails;
 import org.springframework.web.bind.MethodArgumentNotValidException;
@@ -24,7 +25,7 @@
 @RequiredArgsConstructor
 public class MemberController {
     private final MemberAppService memberAppService;
-
+    private final MemberRepository memberRepository;
     @PostMapping("/register")
     public ApiResponse<MemberResponse.Detail> create(@Valid @RequestBody MemberRequest.Create memberRequest) {
         try {
@@ -58,6 +59,15 @@
             return handleException(e);
         }
     }
+    @GetMapping("/member/student")
+    public ApiResponse<Object> show1(@RequestParam String userId) {
+        try {
+            MemberResponse.Detail member = memberAppService.getMember(userId);
+            return ApiResponse.response(true, ResponseCode.OK, member);
+        } catch (Exception e) {
+            return handleException(e);
+        }
+    }
     @GetMapping("/member/solved")
     public ApiResponse<List<SolvedResponse>> listSolvedByMember(@AuthenticationPrincipal UserDetails user) {
         try {
@@ -68,6 +78,40 @@
             return handleException(e);
         }
     }
+    @GetMapping("/parents/solved")
+    public ApiResponse<List<SolvedResponse>> listSolvedByParents(@RequestParam String userId) {
+        try {
+            List<Solved> solveds = memberAppService.getSolvedByMember(userId);
+            List<SolvedResponse> solvedResponses = solveds.stream().map(SolvedResponse::from).collect(Collectors.toList());
+            return ApiResponse.response(true, ResponseCode.OK, solvedResponses);
+        } catch (Exception e) {
+            return handleException(e);
+        }
+    }
+    @GetMapping("/studentAll")
+    public List<MemberResponse.Detail> getMembersWithNullRole() {
+        return memberAppService.getMembersWithNullRole();
+    }
+
+    @GetMapping("/average-total-score")
+    public ResponseEntity<StudentTotalScoreDTO> getAverageTotalScore() {
+        StudentTotalScoreDTO totalScoreDTO = memberAppService.calculateAverageTotalScore();
+        return ResponseEntity.ok(totalScoreDTO);
+    }
+    @PutMapping("/updateComment")
+    public ApiResponse<String> updateComment(@RequestBody MemberRequest.UpdateCommment comment) {
+        String memberId = comment.getId();
+        String newComment = comment.getComment();
+
+        Member member = memberRepository.findById(memberId)
+                .orElseThrow(() -> new RuntimeException("해당 ID를 가진 회원을 찾을 수 없습니다: " + memberId));
+
+        member.setComment(newComment);
+        memberRepository.save(member);
+        return ApiResponse.response(true, ResponseCode.OK, "Comment가 업데이트 되었습니다.");
+    }
+
+
 
     private <T> ApiResponse<T> handleException(Exception e) {
         if (e instanceof MethodArgumentNotValidException) {
src/main/java/com/example/educatback/controller/ScoreLogController.java
--- src/main/java/com/example/educatback/controller/ScoreLogController.java
+++ src/main/java/com/example/educatback/controller/ScoreLogController.java
@@ -3,6 +3,7 @@
 import com.example.educatback.Application.ScoreLogService;
 import com.example.educatback.controller.response.ScoreLogResponseDTO;
 import com.example.educatback.model.entity.Member;
+import com.example.educatback.model.entity.ScoreLog;
 import com.example.educatback.model.repository.MemberRepository;
 import lombok.RequiredArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -10,9 +11,11 @@
 import org.springframework.security.core.userdetails.UserDetails;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.List;
+import java.util.stream.Collectors;
 
 @RestController
 @RequestMapping("/scorelog")
@@ -25,9 +28,23 @@
     public List<ScoreLogResponseDTO> getLatestScoreLogs(@AuthenticationPrincipal UserDetails user) {
         return scoreLogService.getScoreLogsForMember(user.getUsername());
     }
-
+    @GetMapping("/parents/latest")
+    public List<ScoreLogResponseDTO> getLatestScoreLogs1(@RequestParam String userId) {
+        return scoreLogService.getScoreLogsForMember(userId);
+    }
+    @GetMapping("/parents/sum")
+    public List<ScoreLogResponseDTO.sumScore> getLatestScoreLogs2(@RequestParam String userId) {
+        List<ScoreLogResponseDTO> scoreLogs = scoreLogService.getScoreLogsForMember(userId);
+        return scoreLogs.stream()
+                .map(ScoreLogResponseDTO.sumScore::fromScoreLogResponseDTO)
+                .collect(Collectors.toList());
+    }
     @GetMapping("/averages")
     public List<ScoreLogResponseDTO.DailyAverageScore> getDailyAverageScores(@AuthenticationPrincipal UserDetails user) {
         return scoreLogService.getDailyAverageScoresForMember(user.getUsername());
     }
+    @GetMapping("/averages/all")
+    public List<ScoreLogResponseDTO.DailyAverageScore> getDailyAverageScoresForAll() {
+        return scoreLogService.getDailyAverageScores();
+    }
 }
src/main/java/com/example/educatback/controller/request/MemberRequest.java
--- src/main/java/com/example/educatback/controller/request/MemberRequest.java
+++ src/main/java/com/example/educatback/controller/request/MemberRequest.java
@@ -28,5 +28,11 @@
         private String password;
     }
 
-
+        @Data
+        public static class UpdateCommment{
+            @NotBlank
+            private String id;
+            @NotBlank
+            private String comment;
+        }
 }
src/main/java/com/example/educatback/controller/response/MemberResponse.java
--- src/main/java/com/example/educatback/controller/response/MemberResponse.java
+++ src/main/java/com/example/educatback/controller/response/MemberResponse.java
@@ -13,12 +13,20 @@
         private String password;
         private String name;
         private int grade;
+        private String role;
+        private int sum;
+        private String gender;
+        private String comment;
         public static Detail of(Member member) {
             return Detail.builder()
                     .id(member.getUsername())
                     .password(member.getPassword())
                     .name(member.getName())
                     .grade(member.getGrade())
+                    .role(member.getRole())
+                    .gender(member.getGender())
+                    .comment(member.getComment())
+                    .sum(member.getFocus()+member.getExpression()+member.getUnderstand()+member.getSentence()+member.getWord()+member.getGrammar())
                     .build();
         }
     }
@@ -43,6 +51,7 @@
         private int word;
         private int sentence;
         private int grammar;
+        private String role;
 
         public static Rating of(Member member) {
             return Rating.builder()
@@ -52,8 +61,8 @@
                     .word(member.getWord())
                     .sentence(member.getSentence())
                     .grammar(member.getGrammar())
+                    .role(member.getRole())
                     .build();
         }
     }
-
 }
src/main/java/com/example/educatback/controller/response/ScoreLogResponseDTO.java
--- src/main/java/com/example/educatback/controller/response/ScoreLogResponseDTO.java
+++ src/main/java/com/example/educatback/controller/response/ScoreLogResponseDTO.java
@@ -4,7 +4,7 @@
 import lombok.Builder;
 import lombok.Data;
 
-import java.sql.Date;
+
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 
@@ -37,7 +37,7 @@
     @Data
     @Builder
     public static class DailyAverageScore {
-        private LocalDateTime dateTime;
+        private LocalDate date;
         private double avgFocus;
         private double avgExpression;
         private double avgUnderstand;
@@ -46,12 +46,18 @@
         private double avgGrammar;
 
         public static DailyAverageScore fromObjectArray(Object[] objects) {
-            // Convert java.sql.Date to LocalDateTime
-            LocalDate date = ((Date) objects[0]).toLocalDate();
-            LocalDateTime dateTime = date.atStartOfDay(); // If you want to convert date to start of the day
+            // Check if the date string is valid
+            String dateString = (String) objects[0];
+            if (dateString == null || dateString.isEmpty() || dateString.equals("0000-00-00")) {
+                // Handle invalid date string
+                return null;
+            }
+
+            // Convert java.sql.Date to LocalDate
+            LocalDate date = LocalDate.parse(dateString);
 
             return DailyAverageScore.builder()
-                    .dateTime(dateTime)
+                    .date(date)
                     .avgFocus((double) objects[1])
                     .avgExpression((double) objects[2])
                     .avgUnderstand((double) objects[3])
@@ -61,4 +67,17 @@
                     .build();
         }
     }
-}
(파일 끝에 줄바꿈 문자 없음)
+    @Data
+    @Builder
+    public static class sumScore {
+        private double sum;
+        private LocalDateTime createdAt;
+        public static sumScore fromScoreLogResponseDTO(ScoreLogResponseDTO dto) {
+            return sumScore.builder()
+                    .sum(dto.getExpression() + dto.getWord() + dto.getSentence() + dto.getGrammar() + dto.getFocus() + dto.getUnderstand())
+                    .createdAt(dto.getCreatedAt())
+                    .build();
+        }
+    }
+
+}
 
src/main/java/com/example/educatback/controller/response/StudentTotalScoreDTO.java (added)
+++ src/main/java/com/example/educatback/controller/response/StudentTotalScoreDTO.java
@@ -0,0 +1,8 @@
+package com.example.educatback.controller.response;
+
+import lombok.Data;
+
+@Data
+public class StudentTotalScoreDTO {
+    private double averageTotalScore;
+}
src/main/java/com/example/educatback/model/entity/Member.java
--- src/main/java/com/example/educatback/model/entity/Member.java
+++ src/main/java/com/example/educatback/model/entity/Member.java
@@ -32,7 +32,7 @@
     @Column(name = "grade")
     private int grade;
     @Column
-    private String role;
+    private String role = "student";
 
     @Column(name = "focus")
     private int focus;
@@ -58,6 +58,10 @@
 
     @OneToMany(mappedBy = "member")
     private List<ScoreLog> scoreLogs;
+
+    @Column(name = "comment")
+    private String Comment;
+
     @Override
     public Collection<? extends GrantedAuthority> getAuthorities() {
 
src/main/java/com/example/educatback/model/repository/MemberRepository.java
--- src/main/java/com/example/educatback/model/repository/MemberRepository.java
+++ src/main/java/com/example/educatback/model/repository/MemberRepository.java
@@ -3,5 +3,8 @@
 import com.example.educatback.model.entity.Member;
 import org.springframework.data.jpa.repository.JpaRepository;
 
+import java.util.List;
+
 public interface MemberRepository extends JpaRepository<Member, String> {
+    List<Member> findByRoleIsNull();
 }
src/main/java/com/example/educatback/model/repository/ScoreLogRepository.java
--- src/main/java/com/example/educatback/model/repository/ScoreLogRepository.java
+++ src/main/java/com/example/educatback/model/repository/ScoreLogRepository.java
@@ -18,4 +18,10 @@
             "AVG(s.word) as avgWord, AVG(s.sentence) as avgSentence, AVG(s.grammar) as avgGrammar " +
             "FROM ScoreLog s WHERE s.member = :member GROUP BY FUNCTION('date', s.createdAt)")
     List<Object[]> findDailyAverageScoresByMember(Member member);
+
+    @Query("SELECT DATE_FORMAT(s.createdAt, '%Y-%m-%d') as date, " +
+            "AVG(s.focus) as avgFocus, AVG(s.expression) as avgExpression, AVG(s.understand) as avgUnderstand, " +
+            "AVG(s.word) as avgWord, AVG(s.sentence) as avgSentence, AVG(s.grammar) as avgGrammar " +
+            "FROM ScoreLog s GROUP BY DATE_FORMAT(s.createdAt, '%Y-%m-%d')")
+    List<Object[]> findDailyAverageScores();
 }
Add a comment
List