@@ -63,6 +63,8 @@ dependencies {
|
|||||||
|
|
||||||
implementation group: 'com.squareup.okhttp3', name: 'okhttp', version: '4.12.0'
|
implementation group: 'com.squareup.okhttp3', name: 'okhttp', version: '4.12.0'
|
||||||
|
|
||||||
|
implementation project(':referral')
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.named('test') {
|
tasks.named('test') {
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ package ru.soune
|
|||||||
|
|
||||||
interface Referral {
|
interface Referral {
|
||||||
|
|
||||||
val userId: String
|
val userId: Long
|
||||||
val referralLink: String
|
val referralLink: String
|
||||||
val inviter: String?
|
val inviter: String?
|
||||||
val currentLevel: String
|
val currentLevel: String
|
||||||
|
|||||||
@@ -2,32 +2,32 @@ package ru.soune
|
|||||||
|
|
||||||
interface ReferralRepo {
|
interface ReferralRepo {
|
||||||
|
|
||||||
fun getUserReferralLink(userId: String): String
|
fun getUserReferralLink(userId: Long): String
|
||||||
|
|
||||||
fun getUserIdByLink(link: String): String
|
fun getUserIdByLink(link: String): String
|
||||||
|
|
||||||
fun getInviterIdForUser(userId: String): String?
|
fun getInviterIdForUser(userId: Long): Long?
|
||||||
|
|
||||||
fun getReferralLevelForUser(userId: String): String
|
fun getReferralLevelForUser(userId: Long): String
|
||||||
|
|
||||||
fun getReferralByUserId(userId: String): Referral
|
fun getReferralByUserId(userId: Long): Referral
|
||||||
|
|
||||||
fun getReferralInvitees(userId: String, pageSize: Int, pageNumber: Int): List<ReferralInvitee>
|
fun getReferralInvitees(userId: Long, pageSize: Int, pageNumber: Int): List<ReferralInvitee>
|
||||||
|
|
||||||
// создаем новую запись в БД
|
// создаем новую запись в БД
|
||||||
fun createReferralEntity(entity: Referral)
|
fun createReferralEntity(entity: Referral)
|
||||||
|
|
||||||
// прибавить к totalIncome и availableIncome значение transferAmount
|
// прибавить к totalIncome и availableIncome значение transferAmount
|
||||||
fun increaseIncome(userId: String, transferAmount: Int)
|
fun increaseIncome(userId: Long, transferAmount: Int)
|
||||||
|
|
||||||
// установить active в true
|
// установить active в true
|
||||||
fun activateUser(userId: String): Boolean
|
fun activateUser(userId: Long): Boolean
|
||||||
|
|
||||||
// посчитать записи, у которых inviter == userId и active == true
|
// посчитать записи, у которых inviter == userId и active == true
|
||||||
fun getActiveInviteeForUser(userId: String): Int
|
fun getActiveInviteeForUser(userId: Long): Int
|
||||||
|
|
||||||
// посчитать записи, у которых inviter == userId
|
// посчитать записи, у которых inviter == userId
|
||||||
fun getTotalInviteeForUser(userId: String): Int
|
fun getTotalInviteeForUser(userId: Long): Int
|
||||||
|
|
||||||
fun upgradeReferralLevelForUser(userId: String, newLevelId: String)
|
fun upgradeReferralLevelForUser(userId: Long, newLevelId: String)
|
||||||
}
|
}
|
||||||
@@ -5,7 +5,7 @@ class ReferralService(
|
|||||||
private val referralRepo: ReferralRepo,
|
private val referralRepo: ReferralRepo,
|
||||||
) {
|
) {
|
||||||
|
|
||||||
fun onRegister(userId: String, inviterReferralLink: String?) {
|
fun onRegister(userId: Long, inviterReferralLink: String?) {
|
||||||
val initialReferralLevel = referralLevelProvider.getInitialReferralLevelId()
|
val initialReferralLevel = referralLevelProvider.getInitialReferralLevelId()
|
||||||
val referralLink = referralRepo.getUserReferralLink(userId)
|
val referralLink = referralRepo.getUserReferralLink(userId)
|
||||||
val inviter = inviterReferralLink?.let(referralRepo::getUserIdByLink)
|
val inviter = inviterReferralLink?.let(referralRepo::getUserIdByLink)
|
||||||
@@ -24,7 +24,7 @@ class ReferralService(
|
|||||||
referralRepo.createReferralEntity(referral)
|
referralRepo.createReferralEntity(referral)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun onUserAccountRefill(userId: String, transferAmount: Int) {
|
fun onUserAccountRefill(userId: Long, transferAmount: Int) {
|
||||||
val wasActivated = referralRepo.activateUser(userId)
|
val wasActivated = referralRepo.activateUser(userId)
|
||||||
val inviterId = referralRepo.getInviterIdForUser(userId) ?: return
|
val inviterId = referralRepo.getInviterIdForUser(userId) ?: return
|
||||||
val currentInviterLevel = referralRepo.getReferralLevelForUser(inviterId)
|
val currentInviterLevel = referralRepo.getReferralLevelForUser(inviterId)
|
||||||
@@ -47,11 +47,11 @@ class ReferralService(
|
|||||||
referralLevelProvider.getAvailableReferralLevels()
|
referralLevelProvider.getAvailableReferralLevels()
|
||||||
|
|
||||||
|
|
||||||
fun getReferralLevelForUser(userId: String): ReferralLevel =
|
fun getReferralLevelForUser(userId: Long): ReferralLevel =
|
||||||
referralRepo.getReferralLevelForUser(userId)
|
referralRepo.getReferralLevelForUser(userId)
|
||||||
.let { referralLevelProvider.getReferralLevelById(it) }
|
.let { referralLevelProvider.getReferralLevelById(it) }
|
||||||
|
|
||||||
fun getReferralStatForUser(userId: String): ReferralStat {
|
fun getReferralStatForUser(userId: Long): ReferralStat {
|
||||||
var referral = referralRepo.getReferralByUserId(userId)
|
var referral = referralRepo.getReferralByUserId(userId)
|
||||||
return ReferralStat(
|
return ReferralStat(
|
||||||
totalInvitee = referralRepo.getTotalInviteeForUser(userId),
|
totalInvitee = referralRepo.getTotalInviteeForUser(userId),
|
||||||
@@ -62,6 +62,6 @@ class ReferralService(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getInviteeForUser(userId: String, pageSize: Int, pageNumber: Int): List<ReferralInvitee> =
|
fun getInviteeForUser(userId: Long, pageSize: Int, pageNumber: Int): List<ReferralInvitee> =
|
||||||
referralRepo.getReferralInvitees(userId, pageSize, pageNumber)
|
referralRepo.getReferralInvitees(userId, pageSize, pageNumber)
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package ru.soune.nocopy.configuration;
|
||||||
|
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import ru.soune.ReferralLevelProvider;
|
||||||
|
import ru.soune.ReferralRepo;
|
||||||
|
import ru.soune.ReferralService;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
public class ReferralConfig {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public ReferralService referralService(ReferralLevelProvider referralLevelProvider, ReferralRepo referralRepo) {
|
||||||
|
return new ReferralService(referralLevelProvider, referralRepo);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package ru.soune.nocopy.dto.referral;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import ru.soune.nocopy.entity.user.AuthToken;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Builder
|
||||||
|
public class ReferralRequest {
|
||||||
|
private String token;
|
||||||
|
private Integer amount;
|
||||||
|
private Integer pageSize;
|
||||||
|
private Integer pageNumber;
|
||||||
|
private String action;
|
||||||
|
}
|
||||||
@@ -29,4 +29,6 @@ public class RegRequest {
|
|||||||
private String password;
|
private String password;
|
||||||
|
|
||||||
private String authToken;
|
private String authToken;
|
||||||
|
|
||||||
|
private String referralLink;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,91 @@
|
|||||||
|
package ru.soune.nocopy.handler;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import ru.soune.ReferralInvitee;
|
||||||
|
import ru.soune.ReferralLevel;
|
||||||
|
import ru.soune.ReferralService;
|
||||||
|
import ru.soune.ReferralStat;
|
||||||
|
import ru.soune.nocopy.dto.BaseRequest;
|
||||||
|
import ru.soune.nocopy.dto.BaseResponse;
|
||||||
|
import ru.soune.nocopy.dto.MessageCode;
|
||||||
|
import ru.soune.nocopy.dto.referral.ReferralRequest;
|
||||||
|
import ru.soune.nocopy.entity.user.AuthToken;
|
||||||
|
import ru.soune.nocopy.repository.AuthTokenRepository;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
|
||||||
|
@Component
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class ReferralHandler implements RequestHandler {
|
||||||
|
|
||||||
|
private final ReferralService referralService;
|
||||||
|
|
||||||
|
private final AuthTokenRepository authTokenRepository;
|
||||||
|
|
||||||
|
private final ObjectMapper mapper = new ObjectMapper();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BaseResponse handle(BaseRequest request) throws Exception {
|
||||||
|
ReferralRequest referralRequest = mapper.convertValue(request.getMessageBody(), ReferralRequest.class);
|
||||||
|
String action = referralRequest.getAction();
|
||||||
|
String token = referralRequest.getToken();
|
||||||
|
AuthToken authToken = authTokenRepository.findByToken(token).orElseThrow();
|
||||||
|
|
||||||
|
switch (action) {
|
||||||
|
case "refill":
|
||||||
|
return handleRefill(request, authToken.getUser().getId(), referralRequest.getAmount());
|
||||||
|
case "levels":
|
||||||
|
return handleReferralLevels(request);
|
||||||
|
case "level":
|
||||||
|
return handleUserLevel(request, authToken.getUser().getId());
|
||||||
|
case "userStats" :
|
||||||
|
return handleUserStats(request, authToken.getUser().getId());
|
||||||
|
case "invitees":
|
||||||
|
return handleInvitees(referralRequest, request, authToken.getUser().getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private BaseResponse handleRefill(BaseRequest request, Long userId, Integer amount) {
|
||||||
|
referralService.onUserAccountRefill(userId, amount);
|
||||||
|
|
||||||
|
return new BaseResponse(request.getMsgId(), MessageCode.SUCCESS.getCode(),
|
||||||
|
MessageCode.SUCCESS.getDescription(), Map.of("account", "refill"));
|
||||||
|
}
|
||||||
|
|
||||||
|
private BaseResponse handleReferralLevels(BaseRequest request) {
|
||||||
|
List<ReferralLevel> referralLevels = referralService.getReferralLevels();
|
||||||
|
|
||||||
|
return new BaseResponse(request.getMsgId(), MessageCode.SUCCESS.getCode(),
|
||||||
|
MessageCode.SUCCESS.getDescription(), referralLevels);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private BaseResponse handleUserLevel(BaseRequest request, Long userId) {
|
||||||
|
ReferralLevel referralLevelForUser = referralService.getReferralLevelForUser(userId);
|
||||||
|
|
||||||
|
return new BaseResponse(request.getMsgId(), MessageCode.SUCCESS.getCode(),
|
||||||
|
MessageCode.SUCCESS.getDescription(), referralLevelForUser);
|
||||||
|
}
|
||||||
|
|
||||||
|
private BaseResponse handleUserStats(BaseRequest request, Long userId) {
|
||||||
|
ReferralStat referralStatForUser = referralService.getReferralStatForUser(userId);
|
||||||
|
|
||||||
|
return new BaseResponse(request.getMsgId(), MessageCode.SUCCESS.getCode(),
|
||||||
|
MessageCode.SUCCESS.getDescription(), referralStatForUser);
|
||||||
|
}
|
||||||
|
|
||||||
|
private BaseResponse handleInvitees(ReferralRequest referralRequest, BaseRequest request, Long userId) {
|
||||||
|
List<ReferralInvitee> inviteeForUser = referralService.getInviteeForUser(userId, referralRequest.getPageSize(),
|
||||||
|
referralRequest.getPageNumber());
|
||||||
|
|
||||||
|
return new BaseResponse(request.getMsgId(), MessageCode.SUCCESS.getCode(),
|
||||||
|
MessageCode.SUCCESS.getDescription(), inviteeForUser);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,6 +6,7 @@ import lombok.extern.slf4j.Slf4j;
|
|||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.validation.BeanPropertyBindingResult;
|
import org.springframework.validation.BeanPropertyBindingResult;
|
||||||
import org.springframework.validation.BindingResult;
|
import org.springframework.validation.BindingResult;
|
||||||
|
import ru.soune.ReferralService;
|
||||||
import ru.soune.nocopy.dto.*;
|
import ru.soune.nocopy.dto.*;
|
||||||
import ru.soune.nocopy.dto.register.RegAnswer;
|
import ru.soune.nocopy.dto.register.RegAnswer;
|
||||||
import ru.soune.nocopy.dto.register.RegRequest;
|
import ru.soune.nocopy.dto.register.RegRequest;
|
||||||
@@ -34,6 +35,9 @@ public class RegRequestHandler implements RequestHandler {
|
|||||||
|
|
||||||
private final EmailService emailService;
|
private final EmailService emailService;
|
||||||
|
|
||||||
|
//TODO add when add all referall
|
||||||
|
// private final ReferralService referralService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BaseResponse handle(BaseRequest request) throws ValidationException {
|
public BaseResponse handle(BaseRequest request) throws ValidationException {
|
||||||
RegRequest regRequest = objectMapper.convertValue(request.getMessageBody(), RegRequest.class);
|
RegRequest regRequest = objectMapper.convertValue(request.getMessageBody(), RegRequest.class);
|
||||||
@@ -81,6 +85,8 @@ public class RegRequestHandler implements RequestHandler {
|
|||||||
regAnswer.setToken(token);
|
regAnswer.setToken(token);
|
||||||
regAnswer.setVerified(true);
|
regAnswer.setVerified(true);
|
||||||
regAnswer.setActive(true);
|
regAnswer.setActive(true);
|
||||||
|
//TODO add when add all referall
|
||||||
|
// referralService.onRegister(authToken.getUser().getId(), regRequest.getReferralLink());
|
||||||
|
|
||||||
return new BaseResponse(request.getMsgId(), MessageCode.SUCCESS.getCode(),
|
return new BaseResponse(request.getMsgId(), MessageCode.SUCCESS.getCode(),
|
||||||
MessageCode.SUCCESS.getDescription(), regAnswer);
|
MessageCode.SUCCESS.getDescription(), regAnswer);
|
||||||
|
|||||||
@@ -0,0 +1,31 @@
|
|||||||
|
package ru.soune.nocopy.service.referral;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import ru.soune.ReferralLevel;
|
||||||
|
import ru.soune.ReferralLevelProvider;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class ReferralLevelProviderImpl implements ReferralLevelProvider {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ReferralLevel> getAvailableReferralLevels() {
|
||||||
|
// TODO
|
||||||
|
|
||||||
|
return new ArrayList<ReferralLevel>();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getInitialReferralLevelId() {
|
||||||
|
return "bronze";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ReferralLevel getReferralLevelById(String levelId) {
|
||||||
|
// TODO
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,75 @@
|
|||||||
|
package ru.soune.nocopy.service.referral;
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
import ru.soune.Referral;
|
||||||
|
import ru.soune.ReferralInvitee;
|
||||||
|
import ru.soune.ReferralRepo;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Repository
|
||||||
|
public class ReferralRepoImpl implements ReferralRepo {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getUserIdByLink(String link) {
|
||||||
|
// TODO
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull String getUserReferralLink(long userId) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @Nullable Long getInviterIdForUser(long userId) {
|
||||||
|
return 0L;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull String getReferralLevelForUser(long userId) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull Referral getReferralByUserId(long userId) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull List<ReferralInvitee> getReferralInvitees(long userId, int pageSize, int pageNumber) {
|
||||||
|
return List.of();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void createReferralEntity(@NotNull Referral entity) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void increaseIncome(long userId, int transferAmount) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean activateUser(long userId) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getActiveInviteeForUser(long userId) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getTotalInviteeForUser(long userId) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void upgradeReferralLevelForUser(long userId, @NotNull String newLevelId) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user