-
Notifications
You must be signed in to change notification settings - Fork 9
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1205 from multiversx/SERVICES-1877-farm-v-2-events
[SERVICES-1877] farm v2 events
- Loading branch information
Showing
6 changed files
with
175 additions
and
128 deletions.
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,162 @@ | ||
import { | ||
BaseFarmEvent, | ||
BaseRewardsEvent, | ||
ClaimRewardsEventV2, | ||
EnterFarmEventV1_2, | ||
EnterFarmEventV1_3, | ||
EnterFarmEventV2, | ||
ExitFarmEventV1_2, | ||
ExitFarmEventV1_3, | ||
ExitFarmEventV2, | ||
FARM_EVENTS, | ||
RawEventType, | ||
RewardsEventV1_2, | ||
RewardsEventV1_3, | ||
} from '@multiversx/sdk-exchange'; | ||
import { Inject, Injectable } from '@nestjs/common'; | ||
import { RedisPubSub } from 'graphql-redis-subscriptions'; | ||
import { WINSTON_MODULE_PROVIDER } from 'nest-winston'; | ||
import { PUB_SUB } from 'src/services/redis.pubSub.module'; | ||
import { farmVersion } from 'src/utils/farm.utils'; | ||
import { Logger } from 'winston'; | ||
import { FarmVersion } from '../../farm/models/farm.model'; | ||
import { FarmSetterFactory } from '../../farm/farm.setter.factory'; | ||
import { FarmAbiFactory } from '../../farm/farm.abi.factory'; | ||
|
||
@Injectable() | ||
export class FarmHandlerService { | ||
constructor( | ||
private readonly farmAbiFactory: FarmAbiFactory, | ||
private readonly farmSetterFactory: FarmSetterFactory, | ||
@Inject(PUB_SUB) private pubSub: RedisPubSub, | ||
@Inject(WINSTON_MODULE_PROVIDER) private readonly logger: Logger, | ||
) {} | ||
|
||
async handleEnterFarmEvent(rawEvent: RawEventType): Promise<void> { | ||
const version = farmVersion(rawEvent.address); | ||
switch (version) { | ||
case FarmVersion.V1_2: | ||
await this.handleEnterFarmEventV1_3( | ||
new EnterFarmEventV1_2(rawEvent), | ||
); | ||
return; | ||
case FarmVersion.V1_3: | ||
await this.handleEnterFarmEventV1_3( | ||
new EnterFarmEventV1_3(rawEvent), | ||
); | ||
return; | ||
case FarmVersion.V2: | ||
await this.handleEnterFarmEventV2( | ||
new EnterFarmEventV2(rawEvent), | ||
); | ||
return; | ||
} | ||
} | ||
|
||
async handleExitFarmEvent(rawEvent: RawEventType): Promise<void> { | ||
const version = farmVersion(rawEvent.address); | ||
switch (version) { | ||
case FarmVersion.V1_2: | ||
await this.handleExitFarmEventV1_3( | ||
new ExitFarmEventV1_2(rawEvent), | ||
); | ||
return; | ||
case FarmVersion.V1_3: | ||
await this.handleExitFarmEventV1_3( | ||
new ExitFarmEventV1_3(rawEvent), | ||
); | ||
return; | ||
case FarmVersion.V2: | ||
await this.handleExitFarmEventV2(new ExitFarmEventV2(rawEvent)); | ||
return; | ||
} | ||
} | ||
|
||
async handleRewardsEvent(rawEvent: RawEventType): Promise<void> { | ||
const version = farmVersion(rawEvent.address); | ||
switch (version) { | ||
case FarmVersion.V1_2: | ||
await this.handleClaimRewardsEventV1_3( | ||
new RewardsEventV1_2(rawEvent), | ||
); | ||
return; | ||
case FarmVersion.V1_3: | ||
await this.handleClaimRewardsEventV1_3( | ||
new RewardsEventV1_3(rawEvent), | ||
); | ||
return; | ||
case FarmVersion.V2: | ||
await this.handleClaimRewardsEventV2( | ||
new ClaimRewardsEventV2(rawEvent), | ||
); | ||
return; | ||
} | ||
} | ||
|
||
private async handleEnterFarmEventV1_3( | ||
event: BaseFarmEvent, | ||
): Promise<void> { | ||
const cacheKey = await this.farmSetterFactory | ||
.useSetter(event.getAddress()) | ||
.setFarmTokenSupply(event.getAddress(), event.farmSupply.toFixed()); | ||
await this.deleteCacheKeys([cacheKey]); | ||
await this.pubSub.publish(FARM_EVENTS.ENTER_FARM, { | ||
enterFarmEvent: event, | ||
}); | ||
} | ||
|
||
private async handleExitFarmEventV1_3(event: BaseFarmEvent): Promise<void> { | ||
const cacheKey = await this.farmSetterFactory | ||
.useSetter(event.address) | ||
.setFarmTokenSupply(event.address, event.farmSupply.toFixed()); | ||
await this.deleteCacheKeys([cacheKey]); | ||
await this.pubSub.publish(FARM_EVENTS.EXIT_FARM, { | ||
exitFarmEvent: event, | ||
}); | ||
} | ||
|
||
private async handleClaimRewardsEventV1_3( | ||
event: BaseRewardsEvent, | ||
): Promise<void> { | ||
const rewardPerShare = await this.farmAbiFactory | ||
.useAbi(event.address) | ||
.rewardPerShare(event.address); | ||
const cacheKey = await this.farmSetterFactory | ||
.useSetter(event.address) | ||
.setRewardPerShare(event.getAddress(), rewardPerShare); | ||
await this.deleteCacheKeys([cacheKey]); | ||
|
||
await this.pubSub.publish(FARM_EVENTS.CLAIM_REWARDS, { | ||
rewardsEvent: event, | ||
}); | ||
} | ||
|
||
private async handleEnterFarmEventV2( | ||
event: EnterFarmEventV2, | ||
): Promise<void> { | ||
const cacheKey = await this.farmSetterFactory | ||
.useSetter(event.address) | ||
.setFarmTokenSupply(event.address, event.farmSupply.toFixed()); | ||
await this.deleteCacheKeys([cacheKey]); | ||
} | ||
|
||
private async handleExitFarmEventV2(event: ExitFarmEventV2): Promise<void> { | ||
const cacheKey = await this.farmSetterFactory | ||
.useSetter(event.address) | ||
.setFarmTokenSupply(event.address, event.farmSupply.toFixed()); | ||
await this.deleteCacheKeys([cacheKey]); | ||
} | ||
|
||
private async handleClaimRewardsEventV2( | ||
event: ClaimRewardsEventV2, | ||
): Promise<void> { | ||
const cacheKey = await this.farmSetterFactory | ||
.useSetter(event.address) | ||
.setFarmTokenSupply(event.address, event.farmSupply.toFixed()); | ||
await this.deleteCacheKeys([cacheKey]); | ||
} | ||
|
||
private async deleteCacheKeys(invalidatedKeys: string[]) { | ||
await this.pubSub.publish('deleteCacheKeys', invalidatedKeys); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters