@@ -15,6 +15,7 @@ import {
1515 EvidenceGroup ,
1616 Evidence ,
1717 LArbitrator ,
18+ Submitter
1819} from '../generated/schema' ;
1920import {
2021 AppealPossible ,
@@ -104,6 +105,26 @@ CONTRACT_STATUS_NAMES.set(REGISTERED_CODE, 'Registered');
104105CONTRACT_STATUS_NAMES . set ( REGISTRATION_REQUESTED_CODE , 'RegistrationRequested' ) ;
105106CONTRACT_STATUS_NAMES . set ( CLEARING_REQUESTED_CODE , 'ClearingRequested' ) ;
106107
108+ function loadOrCreateSubmitter ( addr : Address ) : Submitter {
109+ let id = addr . toHexString ( ) . toLowerCase ( ) ;
110+ let s = Submitter . load ( id ) ;
111+ if ( s == null ) {
112+ s = new Submitter ( id ) ;
113+ s . totalSubmissions = BigInt . fromI32 ( 0 ) ;
114+ s . ongoingSubmissions = BigInt . fromI32 ( 0 ) ;
115+ s . pastSubmissions = BigInt . fromI32 ( 0 ) ;
116+ s . save ( ) ;
117+ }
118+ return s as Submitter ;
119+ }
120+
121+ function moveRequestToPast ( requester : Address ) : void {
122+ let s = loadOrCreateSubmitter ( requester ) ;
123+ s . ongoingSubmissions = s . ongoingSubmissions . minus ( BigInt . fromI32 ( 1 ) ) ;
124+ s . pastSubmissions = s . pastSubmissions . plus ( BigInt . fromI32 ( 1 ) ) ;
125+ s . save ( ) ;
126+ }
127+
107128function getExtendedStatus ( disputed : boolean , status : string ) : number {
108129 if ( disputed ) {
109130 if ( status == CONTRACT_STATUS_NAMES . get ( REGISTRATION_REQUESTED_CODE ) )
@@ -359,6 +380,11 @@ export function handleRequestSubmitted(event: RequestSubmitted): void {
359380 updateCounters ( previousStatus , newStatus , event . address ) ;
360381 }
361382
383+ let submitter = loadOrCreateSubmitter ( request . requester as Address ) ;
384+ submitter . totalSubmissions = submitter . totalSubmissions . plus ( BigInt . fromI32 ( 1 ) ) ;
385+ submitter . ongoingSubmissions = submitter . ongoingSubmissions . plus ( BigInt . fromI32 ( 1 ) ) ;
386+ submitter . save ( ) ;
387+
362388 round . save ( ) ;
363389 request . save ( ) ;
364390 item . save ( ) ;
@@ -653,6 +679,11 @@ export function handleStatusUpdated(event: ItemStatusChange): void {
653679 // requestInfo.value6 is request.ruling.
654680 request . disputeOutcome = getFinalRuling ( requestInfo . value6 ) ;
655681
682+ if ( item . status == REGISTERED || item . status == ABSENT ) {
683+ // request just moved to a “finished” final state
684+ moveRequestToPast ( request . requester as Address ) ;
685+ }
686+
656687 // Iterate over every contribution and mark it as withdrawable if it is.
657688 // Start from the second round as the first is automatically withdrawn
658689 // when the request resolves.
0 commit comments