Referral screen
This commit is contained in:
@@ -113,8 +113,8 @@ public class UserController {
|
||||
|
||||
/**
|
||||
* Gets referrals for a specific level with pagination.
|
||||
* Always returns 50 results per page.
|
||||
*
|
||||
* Returns 10 results per page, ordered by commission DESC, then id DESC.
|
||||
*
|
||||
* @param level The referral level (1, 2, or 3)
|
||||
* @param page Page number (0-indexed, defaults to 0)
|
||||
* @return Page of referrals with name and commission
|
||||
|
||||
@@ -53,34 +53,34 @@ public interface UserDRepository extends JpaRepository<UserD, Integer> {
|
||||
/**
|
||||
* Finds referrals for level 1 (where referer_id_1 = userId).
|
||||
* Returns referrals with their screen_name and to_referer_1 commission.
|
||||
* Ordered by commission DESC, then id DESC.
|
||||
*/
|
||||
@Query("SELECT new com.honey.honey.dto.ReferralDto(" +
|
||||
"ud.screenName, ud.toReferer1) " +
|
||||
@Query("SELECT new com.honey.honey.dto.ReferralDto(ud.screenName, ud.toReferer1) " +
|
||||
"FROM UserD ud " +
|
||||
"WHERE ud.refererId1 = :userId AND ud.refererId1 > 0 " +
|
||||
"ORDER BY ud.toReferer1 DESC")
|
||||
"ORDER BY ud.toReferer1 DESC, ud.id DESC")
|
||||
Page<ReferralDto> findReferralsLevel1(@Param("userId") Integer userId, Pageable pageable);
|
||||
|
||||
|
||||
/**
|
||||
* Finds referrals for level 2 (where referer_id_2 = userId).
|
||||
* Returns referrals with their screen_name and to_referer_2 commission.
|
||||
* Ordered by commission DESC, then id DESC.
|
||||
*/
|
||||
@Query("SELECT new com.honey.honey.dto.ReferralDto(" +
|
||||
"ud.screenName, ud.toReferer2) " +
|
||||
@Query("SELECT new com.honey.honey.dto.ReferralDto(ud.screenName, ud.toReferer2) " +
|
||||
"FROM UserD ud " +
|
||||
"WHERE ud.refererId2 = :userId AND ud.refererId2 > 0 " +
|
||||
"ORDER BY ud.toReferer2 DESC")
|
||||
"ORDER BY ud.toReferer2 DESC, ud.id DESC")
|
||||
Page<ReferralDto> findReferralsLevel2(@Param("userId") Integer userId, Pageable pageable);
|
||||
|
||||
|
||||
/**
|
||||
* Finds referrals for level 3 (where referer_id_3 = userId).
|
||||
* Returns referrals with their screen_name and to_referer_3 commission.
|
||||
* Ordered by commission DESC, then id DESC.
|
||||
*/
|
||||
@Query("SELECT new com.honey.honey.dto.ReferralDto(" +
|
||||
"ud.screenName, ud.toReferer3) " +
|
||||
@Query("SELECT new com.honey.honey.dto.ReferralDto(ud.screenName, ud.toReferer3) " +
|
||||
"FROM UserD ud " +
|
||||
"WHERE ud.refererId3 = :userId AND ud.refererId3 > 0 " +
|
||||
"ORDER BY ud.toReferer3 DESC")
|
||||
"ORDER BY ud.toReferer3 DESC, ud.id DESC")
|
||||
Page<ReferralDto> findReferralsLevel3(@Param("userId") Integer userId, Pageable pageable);
|
||||
|
||||
/**
|
||||
|
||||
@@ -455,16 +455,15 @@ public class UserService {
|
||||
|
||||
/**
|
||||
* Gets referrals for a specific level with pagination.
|
||||
* Always returns 50 results per page.
|
||||
*
|
||||
* Returns 10 results per page, ordered by commission DESC, then id DESC.
|
||||
*
|
||||
* @param userId The user ID to get referrals for
|
||||
* @param level The referral level (1, 2, or 3)
|
||||
* @param page Page number (0-indexed)
|
||||
* @return Page of referrals with name and commission
|
||||
*/
|
||||
public Page<ReferralDto> getReferrals(Integer userId, Integer level, Integer page) {
|
||||
// Fixed page size of 50 to prevent database overload
|
||||
Pageable pageable = PageRequest.of(page, 50);
|
||||
Pageable pageable = PageRequest.of(page, 10);
|
||||
|
||||
return switch (level) {
|
||||
case 1 -> userDRepository.findReferralsLevel1(userId, pageable);
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
-- Extend referral commission indexes to include id DESC so ORDER BY commission DESC, id DESC
|
||||
-- is fully satisfied by the index. Avoids expensive filesort when many referrals share the same
|
||||
-- commission (e.g. 20k with 0 commission).
|
||||
DROP INDEX idx_users_d_referer1_commission ON db_users_d;
|
||||
DROP INDEX idx_users_d_referer2_commission ON db_users_d;
|
||||
DROP INDEX idx_users_d_referer3_commission ON db_users_d;
|
||||
|
||||
CREATE INDEX idx_users_d_referer1_commission ON db_users_d (referer_id_1, to_referer_1 DESC, id DESC);
|
||||
CREATE INDEX idx_users_d_referer2_commission ON db_users_d (referer_id_2, to_referer_2 DESC, id DESC);
|
||||
CREATE INDEX idx_users_d_referer3_commission ON db_users_d (referer_id_3, to_referer_3 DESC, id DESC);
|
||||
Reference in New Issue
Block a user