Skip to content

Commit

Permalink
Merge pull request #326 from 6QuizOnTheBlock/be/feat/#325-relation_score
Browse files Browse the repository at this point in the history
feat: 학생 관계 점수 계산
  • Loading branch information
HABINOH authored May 14, 2024
2 parents a90f395 + 33b9db1 commit a5e5e7f
Show file tree
Hide file tree
Showing 4 changed files with 56 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public class Relationship {
Member member1; //memberIdκ°€ μž‘μ€κ²ƒμ΄ member1
@ManyToOne(fetch = FetchType.LAZY)
Member member2;
int relationPoint;
double relationPoint;
int tagGreetingCount;
int designGroupCount;
int freeGroupCount;
Expand All @@ -52,4 +52,8 @@ public int updateFreeGroupCount() {
public void updateSocialCount() {
this.socialCount += 1;
}

public void updateRelationPoint(double relationPoint) {
this.relationPoint += relationPoint;
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.quiz.ourclass.domain.organization.repository;

import com.quiz.ourclass.domain.organization.entity.Relationship;
import java.util.List;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;

Expand All @@ -9,4 +10,6 @@ public interface RelationshipRepository extends JpaRepository<Relationship, Long

Optional<Relationship> findByOrganizationIdAndMember1IdAndMember2Id(
long organizationId, long member1Id, long member2Id);

List<Relationship> findAllByOrganizationIdOrderByMember1(Long orgId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ public RelationResponse getMemberRelation(long id, RelationRequest relationReque
return RelationResponse.builder()
.memberId(targetMember.getId())
.memberName(targetMember.getName())
.relationPoint(relationship.getRelationPoint())
.relationPoint((int) relationship.getRelationPoint())
.groupCount(relationship.getDesignGroupCount() + relationship.getFreeGroupCount())
.tagGreetingCount(relationship.getTagGreetingCount())
.receiveCount(receiveCount)
Expand Down Expand Up @@ -156,7 +156,7 @@ private List<RelationSimpleResponse> getFriendlyResponse(long organizationId, lo
MemberSimpleDTO memberSimpleDTO = memberMapper.memberToMemberSimpleDTO(target);
return RelationSimpleResponse.builder()
.member(memberSimpleDTO)
.relationPoint(relationship.getRelationPoint())
.relationPoint((int) relationship.getRelationPoint())
.build();
}).toList();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,25 +1,71 @@
package com.quiz.ourclass.global.util.scheduler;

import com.quiz.ourclass.domain.organization.entity.Relationship;
import com.quiz.ourclass.domain.organization.repository.RelationshipRepository;
import com.quiz.ourclass.domain.relay.repository.RelayMemberRepository;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.List;
import java.util.function.Consumer;
import lombok.RequiredArgsConstructor;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.TransactionTemplate;

@EnableScheduling
@RequiredArgsConstructor
@Service
public class SchedulingService {

private final TaskScheduler taskScheduler;
private final TransactionTemplate transactionTemplate;
private final RelationshipRepository relationshipRepository;
private final RelayMemberRepository relayMemberRepository;

public <T> void scheduleTask(T target, Consumer<T> action, LocalDateTime executionTime) {
SchedulingTask<T> task = new SchedulingTask<>(target, action, transactionTemplate);
Instant executionDate = executionTime.atZone(ZoneId.systemDefault()).toInstant();

taskScheduler.schedule(task, executionDate);
}

@Transactional
@Scheduled(cron = "0 0 3 * * *")
protected void relationShipScore() {
List<Relationship> relationshipList =
relationshipRepository.findAllByOrganizationIdOrderByMember1(1L);

if (!relationshipList.isEmpty()) {
relationshipList.stream()
.map(this::updateRelationShipScore)
.forEach(relationshipRepository::save);
}
}

private Relationship updateRelationShipScore(Relationship relationship) {
double newScore = calculateScore(relationship);
relationship.updateRelationPoint(newScore);
return relationship;
}

private double calculateScore(Relationship relationship) {
//TODO : relayCount λΉ„μ •κ·œν™”ν•΄μ„œ κ°€μ Έμ˜€κΈ°
int sendCount = relayMemberRepository.countByCurMemberIdAndNextMemberId(
relationship.getMember1().getId(), relationship.getMember2().getId()
);
int receiveCount = relayMemberRepository.countByCurMemberIdAndNextMemberId(
relationship.getMember1().getId(), relationship.getMember2().getId()
);

return relationship.getFreeGroupCount() * 1.5
+ relationship.getSocialCount() * 1.0
+ relationship.getTagGreetingCount() * 0.75
// + relationship.getRelayCount() * 0.5
+ (sendCount + receiveCount) * 0.5
+ relationship.getDesignGroupCount() * 0.25;
}
}

0 comments on commit a5e5e7f

Please sign in to comment.