-
Notifications
You must be signed in to change notification settings - Fork 8
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
2ccc039
commit f70e048
Showing
13 changed files
with
273 additions
and
2 deletions.
There are no files selected for viewing
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
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,49 @@ | ||
# getUserAwards | ||
|
||
A call to this function will retrieve metadata about the target user's site awards, via their username. | ||
|
||
## Examples | ||
|
||
```ts | ||
import { getUserAwards } from "@retroachievements/api"; | ||
|
||
const userAwards = await getUserAwards(authorization, { userName: "xelnia" }); | ||
``` | ||
|
||
## Returns | ||
|
||
```json | ||
{ | ||
"totalAwardsCount": 10, | ||
"hiddenAwardsCount": 2, | ||
"masteryAwardsCount": 6, | ||
"completionAwardsCount": 0, | ||
"eventAwardsCount": 0, | ||
"siteAwardsCount": 2, | ||
"visibleUserAwards": [ | ||
{ | ||
"awardedAt": "2022-08-26T19:34:43+00:00", | ||
"awardType": "Mastery/Completion", | ||
"awardData": 802, | ||
"awardDataExtra": 1, | ||
"displayOrder": 114, | ||
"title": "WarioWare, Inc.: Mega Microgames!", | ||
"consoleName": "Game Boy Advance", | ||
"flags": null, | ||
"imageIcon": "/Images/034678.png" | ||
} | ||
] | ||
} | ||
``` | ||
|
||
## Parameters | ||
|
||
| Name | Type | Description | | ||
| :-------------- | :------------------------------------------ | :--------------------------------------------------------------------------------------------------------------------------- | | ||
| `authorization` | [`AuthObject`](/v1/data-models/auth-object) | An object that must contain a `userName` and a `webApiKey`. See [this page](/getting-started) for how to create this object. | | ||
| `userName` | `string` | The user for which to retrieve the site awards for. | | ||
|
||
## Source | ||
|
||
[@retroachievements/api, getUserAwards.ts](https://github.dev/RetroAchievements/retroachievements-api-js/blob/main/src/user/getUserAwards.ts) | ||
[RAWeb, API_GetUserAwards.php](https://github.dev/RetroAchievements/RAWeb/blob/master/public/API/API_GetUserAwards.php) |
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,83 @@ | ||
import { rest } from "msw"; | ||
import { setupServer } from "msw/node"; | ||
|
||
import { apiBaseUrl } from "../utils/internal"; | ||
import { buildAuthorization } from "../utils/public"; | ||
import { getUserAwards } from "./getUserAwards"; | ||
import type { GetUserAwardsResponse } from "./models"; | ||
|
||
const server = setupServer(); | ||
|
||
describe("Function: getUserAwards", () => { | ||
// MSW Setup | ||
beforeAll(() => server.listen()); | ||
afterEach(() => server.resetHandlers()); | ||
afterAll(() => server.close()); | ||
|
||
it("is defined #sanity", () => { | ||
// ASSERT | ||
expect(getUserAwards).toBeDefined(); | ||
}); | ||
|
||
it("retrieves a list of a target user awards", async () => { | ||
// ARRANGE | ||
const authorization = buildAuthorization({ | ||
userName: "mockUserName", | ||
webApiKey: "mockWebApiKey" | ||
}); | ||
|
||
const mockResponse: GetUserAwardsResponse = { | ||
TotalAwardsCount: 10, | ||
HiddenAwardsCount: 5, | ||
MasteryAwardsCount: 5, | ||
CompletionAwardsCount: 0, | ||
EventAwardsCount: 0, | ||
SiteAwardsCount: 0, | ||
VisibleUserAwards: [ | ||
{ | ||
AwardedAt: "2022-08-26T19:34:43+00:00", | ||
AwardType: "Mastery/Completion", | ||
AwardData: 802, | ||
AwardDataExtra: 1, | ||
DisplayOrder: 114, | ||
Title: "WarioWare, Inc.: Mega Microgames!", | ||
ConsoleName: "Game Boy Advance", | ||
Flags: null, | ||
ImageIcon: "/Images/034678.png" | ||
} | ||
] | ||
}; | ||
|
||
server.use( | ||
rest.get(`${apiBaseUrl}/API_GetUserAwards.php`, (_, res, ctx) => | ||
res(ctx.json(mockResponse)) | ||
) | ||
); | ||
|
||
// ACT | ||
const response = await getUserAwards(authorization, { userName: "xelnia" }); | ||
|
||
// ASSERT | ||
expect(response).toEqual({ | ||
totalAwardsCount: 10, | ||
hiddenAwardsCount: 5, | ||
masteryAwardsCount: 5, | ||
completionAwardsCount: 0, | ||
eventAwardsCount: 0, | ||
siteAwardsCount: 0, | ||
visibleUserAwards: [ | ||
{ | ||
awardedAt: "2022-08-26T19:34:43+00:00", | ||
awardType: "Mastery/Completion", | ||
awardData: 802, | ||
awardDataExtra: 1, | ||
displayOrder: 114, | ||
title: "WarioWare, Inc.: Mega Microgames!", | ||
consoleName: "Game Boy Advance", | ||
flags: null, | ||
imageIcon: "/Images/034678.png" | ||
} | ||
] | ||
}); | ||
}); | ||
}); |
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,70 @@ | ||
import { | ||
apiBaseUrl, | ||
buildRequestUrl, | ||
call, | ||
serializeProperties | ||
} from "../utils/internal"; | ||
import type { AuthObject } from "../utils/public"; | ||
import type { GetUserAwardsResponse, UserAwards } from "./models"; | ||
|
||
/** | ||
* A call to this function will retrieve metadata about the target user's | ||
* site awards, via their username. | ||
* | ||
* @param authorization An object containing your userName and webApiKey. | ||
* This can be constructed with `buildAuthorization()`. | ||
* | ||
* @param payload.userName The user for which to retrieve the site awards for. | ||
* | ||
* @example | ||
* ``` | ||
* const userAwards = await getUserAwards( | ||
* authorization, | ||
* { userName: "xelnia" } | ||
* ) | ||
* ``` | ||
* | ||
* @returns | ||
* ```json | ||
* { | ||
* totalAwardsCount: 10, | ||
* hiddenAwardsCount: 2, | ||
* masteryAwardsCount: 6, | ||
* completionAwardsCount: 0, | ||
* eventAwardsCount: 0, | ||
* siteAwardsCount: 2, | ||
* visibleUserAwards: [ | ||
* { | ||
* awardedAt: "2022-08-26T19:34:43+00:00", | ||
* awardType: "Mastery/Completion", | ||
* awardData: 802, | ||
* awardDataExtra: 1, | ||
* displayOrder: 114, | ||
* title: "WarioWare, Inc.: Mega Microgames!", | ||
* consoleName: "Game Boy Advance", | ||
* flags: null, | ||
* imageIcon: "/Images/034678.png" | ||
* } | ||
* ] | ||
* } | ||
* ``` | ||
*/ | ||
export const getUserAwards = async ( | ||
authorization: AuthObject, | ||
payload: { userName: string } | ||
): Promise<UserAwards> => { | ||
const { userName } = payload; | ||
|
||
const queryParams: Record<string, string> = { u: userName }; | ||
|
||
const url = buildRequestUrl( | ||
apiBaseUrl, | ||
"/API_GetUserAwards.php", | ||
authorization, | ||
queryParams | ||
); | ||
|
||
const rawResponse = await call<GetUserAwardsResponse>({ url }); | ||
|
||
return serializeProperties(rawResponse); | ||
}; |
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
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,7 @@ | ||
export type AwardType = | ||
| "Mastery/Completion" | ||
| "Achievement Unlocks Yield" | ||
| "Achievement Points Yield" | ||
| "Patreon Supporter" | ||
| "Certified Legend" | ||
| "Invalid or deprecated award type"; |
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,23 @@ | ||
import type { AwardType } from "./award-type.model"; | ||
|
||
interface GetUserAwardsEntity { | ||
AwardedAt: string; | ||
AwardType: AwardType; | ||
AwardData: number; | ||
AwardDataExtra: number; | ||
DisplayOrder: number; | ||
Title: string; | ||
ConsoleName: string; | ||
Flags: number | null; | ||
ImageIcon: string; | ||
} | ||
|
||
export interface GetUserAwardsResponse { | ||
TotalAwardsCount: number; | ||
HiddenAwardsCount: number; | ||
MasteryAwardsCount: number; | ||
CompletionAwardsCount: number; | ||
EventAwardsCount: number; | ||
SiteAwardsCount: number; | ||
VisibleUserAwards: GetUserAwardsEntity[]; | ||
} |
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,23 @@ | ||
import type { AwardType } from "./award-type.model"; | ||
|
||
interface UserAward { | ||
awardedAt: string; | ||
awardType: AwardType; | ||
awardData: number; | ||
awardDataExtra: number; | ||
displayOrder: number; | ||
title: string; | ||
consoleName: string; | ||
flags: number | null; | ||
imageIcon: string; | ||
} | ||
|
||
export interface UserAwards { | ||
totalAwardsCount: number; | ||
hiddenAwardsCount: number; | ||
masteryAwardsCount: number; | ||
completionAwardsCount: number; | ||
eventAwardsCount: number; | ||
siteAwardsCount: number; | ||
visibleUserAwards: UserAward[]; | ||
} |
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
f70e048
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Successfully deployed to the following URLs:
retroachievements-api-js – ./
retroachievements-api-js-retroachievements.vercel.app
retroachievements-api-js-alpha.vercel.app
retroachievements-api-js-git-main-retroachievements.vercel.app
retroachievements-api-js.vercel.app