@@ -9,8 +9,14 @@ import {
9
9
type PlayerAchievements ,
10
10
type Validity ,
11
11
} from '@paima/utils-backend' ;
12
- import { Controller , Get , Header , Path , Query , Route } from 'tsoa' ;
12
+ import { Controller , Get , Header , Path , Query , Response , Route } from 'tsoa' ;
13
13
import { EngineService } from '../EngineService.js' ;
14
+ import { StatusCodes } from 'http-status-codes' ;
15
+ import type {
16
+ FailedResult ,
17
+ InternalServerErrorResult ,
18
+ ValidateErrorResult ,
19
+ } from './BasicControllers.js' ;
14
20
15
21
// ----------------------------------------------------------------------------
16
22
// Controller and routes per PRC-1
@@ -38,21 +44,24 @@ export class AchievementsController extends Controller {
38
44
private async meta ( ) : Promise < AchievementMetadata > {
39
45
const meta = EngineService . INSTANCE . achievements ;
40
46
if ( ! meta ) {
41
- this . setStatus ( 501 ) ;
47
+ this . setStatus ( StatusCodes . NOT_IMPLEMENTED ) ;
42
48
throw new Error ( 'Achievements are not supported by this game' ) ;
43
49
}
44
50
return await meta ;
45
51
}
46
52
47
53
private async validity ( ) : Promise < Validity > {
48
54
return {
49
- // Note : will need updating when we support non-EVM data availability layers.
55
+ // TODO : will need updating when we support non-EVM data availability layers.
50
56
caip2 : `eip155:${ ENV . CHAIN_ID } ` ,
51
57
block : await EngineService . INSTANCE . getSM ( ) . latestProcessedBlockHeight ( ) ,
52
58
time : new Date ( ) . toISOString ( ) ,
53
59
} ;
54
60
}
55
61
62
+ @Response < FailedResult > ( StatusCodes . NOT_IMPLEMENTED )
63
+ @Response < InternalServerErrorResult > ( StatusCodes . INTERNAL_SERVER_ERROR )
64
+ @Response < ValidateErrorResult > ( StatusCodes . UNPROCESSABLE_ENTITY )
56
65
@Get ( 'public/list' )
57
66
public async public_list (
58
67
@Query ( ) category ?: string ,
@@ -78,6 +87,8 @@ export class AchievementsController extends Controller {
78
87
} ;
79
88
}
80
89
90
+ @Response < InternalServerErrorResult > ( StatusCodes . INTERNAL_SERVER_ERROR )
91
+ @Response < ValidateErrorResult > ( StatusCodes . UNPROCESSABLE_ENTITY )
81
92
@Get ( 'wallet/{wallet}' )
82
93
public async wallet (
83
94
@Path ( ) wallet : string ,
@@ -115,6 +126,10 @@ export class AchievementsController extends Controller {
115
126
} ;
116
127
}
117
128
129
+ @Response < FailedResult > ( StatusCodes . NOT_FOUND )
130
+ @Response < FailedResult > ( StatusCodes . NOT_IMPLEMENTED )
131
+ @Response < InternalServerErrorResult > ( StatusCodes . INTERNAL_SERVER_ERROR )
132
+ @Response < ValidateErrorResult > ( StatusCodes . UNPROCESSABLE_ENTITY )
118
133
@Get ( 'erc/{erc}/{cde}/{token_id}' )
119
134
public async nft (
120
135
@Path ( ) erc : string ,
@@ -131,12 +146,12 @@ export class AchievementsController extends Controller {
131
146
return await this . wallet ( wallet , name ) ;
132
147
} else {
133
148
// Future improvement: throw a different error if no CDE with that name exists
134
- this . setStatus ( 404 ) ;
149
+ this . setStatus ( StatusCodes . NOT_FOUND ) ;
135
150
throw new Error ( 'No owner for that NFT' ) ;
136
151
}
137
152
// Future improvement: erc6551
138
153
default :
139
- this . setStatus ( 404 ) ;
154
+ this . setStatus ( StatusCodes . NOT_IMPLEMENTED ) ;
140
155
throw new Error ( `No support for /erc/${ erc } ` ) ;
141
156
}
142
157
}
0 commit comments