Table of Contents

Class ReferralService

Namespace
UsluzionicaServer.Services
Assembly
UsluzionicaServer.dll

Referral nagrada se isplaćuje u DVE rate:

  1. rata — pozvani potvrdi email → pozivalac dobija SignupRewardTokens (2)
  2. rata — pozvani aktivira provajdera → pozivalac dobija ActivationRewardTokens (3)

Zašto prva rata ide na potvrdu emaila a ne na samu registraciju: registracija je besplatna i neograničena, pa bi isplata na registraciju značila da svako može da otvara naloge sa sopstvenim kodom i uzima tokene bez ikakvog rada. Potvrda emaila zahteva stvarnu, jedinstvenu i funkcionalnu adresu po nalogu. Uz to, nalog bez potvrđenog emaila ne može ni da se prijavi (AuthService. LoginAsync ga odbija), pa u ovom sistemu ionako još nije pravi nalog.

Obe metode su IDEMPOTENTNE i bezbedne pod istovremenim pozivima. To nije teorijska briga: verifikacioni link se lako aktivira dvaput (mail klijent ga prefetch-uje, pa korisnik klikne), a ResetPasswordAsync je drugi put kroz koji email može biti potvrđen.

public sealed class ReferralService
Inheritance
ReferralService
Inherited Members

Constructors

ReferralService(AppDbContext, NotificationService, IConfiguration, ILogger<ReferralService>)

Referral nagrada se isplaćuje u DVE rate:

  1. rata — pozvani potvrdi email → pozivalac dobija SignupRewardTokens (2)
  2. rata — pozvani aktivira provajdera → pozivalac dobija ActivationRewardTokens (3)

Zašto prva rata ide na potvrdu emaila a ne na samu registraciju: registracija je besplatna i neograničena, pa bi isplata na registraciju značila da svako može da otvara naloge sa sopstvenim kodom i uzima tokene bez ikakvog rada. Potvrda emaila zahteva stvarnu, jedinstvenu i funkcionalnu adresu po nalogu. Uz to, nalog bez potvrđenog emaila ne može ni da se prijavi (AuthService. LoginAsync ga odbija), pa u ovom sistemu ionako još nije pravi nalog.

Obe metode su IDEMPOTENTNE i bezbedne pod istovremenim pozivima. To nije teorijska briga: verifikacioni link se lako aktivira dvaput (mail klijent ga prefetch-uje, pa korisnik klikne), a ResetPasswordAsync je drugi put kroz koji email može biti potvrđen.

Methods

TryRewardActivationAsync(string)

Isplaćuje drugu ratu kada pozvani aktivira provajder nalog.

Prihvata i status Pending, ne samo Registered: aktivacija provajdera ionako zahteva potvrđen email, ali postoje referrali iz vremena pre ove izmene koji su ostali Pending. Bez toga bi njihovi pozivaoci ostali bez druge rate.

TryRewardSignupAsync(string)

Isplaćuje prvu ratu pozivaocu korisnika koji je upravo potvrdio email. Nikad ne baca — greška u referralu ne sme oboriti potvrdu emaila.