Skip to content

Commit 3e4b830

Browse files
authored
Merge branch 'develop' into pallab/group-invite
2 parents 26d4a58 + 71db764 commit 3e4b830

File tree

7 files changed

+135
-34
lines changed

7 files changed

+135
-34
lines changed

.github/workflows/register-commands-staging.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ jobs:
3434
DISCORD_GUILD_ID
3535
CURRENT_ENVIRONMENT
3636
BOT_PRIVATE_KEY
37+
RDS_SERVERLESS_PUBLIC_KEY
3738
CRON_JOBS_PUBLIC_KEY
3839
IDENTITY_SERVICE_PUBLIC_KEY
3940
env:
@@ -43,5 +44,6 @@ jobs:
4344
DISCORD_TOKEN: ${{secrets.DISCORD_TOKEN}}
4445
BOT_PRIVATE_KEY: ${{secrets.BOT_PRIVATE_KEY}}
4546
DISCORD_GUILD_ID: ${{secrets.DISCORD_GUILD_ID}}
47+
RDS_SERVERLESS_PUBLIC_KEY: ${{secrets.RDS_SERVERLESS_PUBLIC_KEY}}
4648
CRON_JOBS_PUBLIC_KEY: ${{secrets.CRON_JOBS_PUBLIC_KEY}}
4749
IDENTITY_SERVICE_PUBLIC_KEY: ${{secrets.IDENTITY_SERVICE_PUBLIC_KEY}}

src/constants/commands.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,12 @@ export const USER = {
115115
type: 6,
116116
required: true,
117117
},
118+
{
119+
name: "dev",
120+
description: "want to see extra details?",
121+
type: 5,
122+
require: false,
123+
},
118124
],
119125
};
120126

src/controllers/baseHandler.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,10 @@ export async function baseHandler(
156156

157157
case getCommandName(USER): {
158158
const data = message.data?.options as Array<messageRequestDataOptions>;
159-
return await userCommand(data[0].value, env);
159+
const dev = data.find(
160+
(item) => item.name === "dev"
161+
) as unknown as DevFlag;
162+
return await userCommand(data[0].value, env, dev);
160163
}
161164

162165
case getCommandName(GROUP_INVITE): {

src/controllers/userCommand.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,17 @@ import { env } from "../typeDefinitions/default.types";
22
import { discordTextResponse } from "../utils/discordResponse";
33
import { getUserDetails } from "../utils/getUserDetails";
44
import { formatUserDetails } from "../utils/formatUserDetails";
5+
import { DevFlag } from "../typeDefinitions/filterUsersByRole";
56
import { USER_NOT_FOUND } from "../constants/responses";
67

7-
export async function userCommand(discordId: string, env: env) {
8+
export async function userCommand(discordId: string, env: env, dev?: DevFlag) {
89
try {
10+
const flag = dev?.value || false;
911
const userDetails = await getUserDetails(discordId);
1012
if (!userDetails.user?.discordId) {
1113
return discordTextResponse(USER_NOT_FOUND);
1214
}
13-
const formattedUserDetails = formatUserDetails(userDetails);
15+
const formattedUserDetails = formatUserDetails(userDetails, flag);
1416
return discordTextResponse(formattedUserDetails);
1517
} catch (error) {
1618
return discordTextResponse("Trouble in fetching user details.");

src/utils/formatUserDetails.ts

Lines changed: 43 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { UserResponseType } from "../typeDefinitions/rdsUser";
22

3-
export function convertTimeStamp(userDetails: UserResponseType) {
3+
export function convertTimeStamp(userDetails: UserResponseType, flag: boolean) {
44
const timestamp = userDetails.user?.discordJoinedAt;
55

66
if (timestamp) {
@@ -9,19 +9,55 @@ export function convertTimeStamp(userDetails: UserResponseType) {
99
const day = String(date.getDate()).padStart(2, "0");
1010
const month = String(date.getMonth() + 1).padStart(2, "0");
1111
const year = date.getFullYear();
12+
if (flag) {
13+
const monthName = date.toLocaleString("default", { month: "short" });
14+
const formattedDate = `${day} ${monthName}, ${year}`;
15+
return formattedDate;
16+
}
1217
const formattedDate = `${day}/${month}/${year}`;
1318
return formattedDate;
1419
}
1520

1621
return "N/A";
1722
}
23+
export function convertEpochToDate(timestamp: number | undefined) {
24+
if (timestamp) {
25+
const date = new Date(timestamp);
26+
27+
const day = String(date.getDate()).padStart(2, "0");
28+
const month = date.toLocaleString("default", { month: "short" });
29+
const year = date.getFullYear();
30+
const formattedDate = `${day} ${month}, ${year}`;
31+
32+
return formattedDate;
33+
}
34+
35+
return "N/A";
36+
}
37+
38+
export function formatUserDetails(
39+
userDetails: UserResponseType,
40+
flag: boolean
41+
) {
42+
const convertedTimestamp = convertTimeStamp(userDetails, flag);
43+
const accountCreationDate = convertEpochToDate(userDetails.user?.created_at);
1844

19-
export function formatUserDetails(userDetails: UserResponseType) {
20-
const convertedTimestamp = convertTimeStamp(userDetails);
45+
const userId = " ".repeat(30) + `**Id:** ${userDetails.user?.id}`;
46+
const userName =
47+
" ".repeat(13) + `**Username:** ${userDetails.user?.username}`;
48+
const userFullName = `${
49+
flag ? " ".repeat(13) + "**Full Name:**" : "**Full Name :**"
50+
} ${userDetails.user?.first_name} ${userDetails.user?.last_name}`;
51+
const userState = `${flag ? " ".repeat(23) + "**State:**" : "**State :**"} ${
52+
userDetails.user?.state
53+
}`;
54+
const discordJoinedAt = `${
55+
flag ? " ".repeat(4) + "**Joined Discord:**" : "**Joined Server on :**"
56+
} ${convertedTimestamp}`;
57+
const accountCreated = `**Account Created:** ${accountCreationDate}`;
2158

22-
const userFullName = `**Full Name :** ${userDetails.user?.first_name} ${userDetails.user?.last_name}`;
23-
const discordJoinedAt = `**Joined Server on :** ${convertedTimestamp}`;
24-
const userState = `**State :** ${userDetails.user?.state}`;
59+
if (!flag)
60+
return `## User Details\n${userFullName}\n${userState}\n${discordJoinedAt}`;
2561

26-
return `## User Details\n${userFullName}\n${discordJoinedAt}\n${userState}`;
62+
return `## User Details\n${userName}\n${userState}\n\n${userFullName}\n${userId}\n\n${accountCreated}\n${discordJoinedAt}`;
2763
}

tests/fixtures/user.ts

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ export const user = {
22
id: "iODXB6ns8jaZB9p0XlBw",
33
incompleteUserDetails: false,
44
discordJoinedAt: "2023-08-08T11:40:42.522000+00:00",
5+
created_at: 1692748800000,
56
discordId: "858838385330487336",
6-
github_display_name: "Sunny Sahsi",
7+
github_display_name: "John Doe",
78
updated_at: 1694888822719,
89
roles: {
910
archived: false,
@@ -12,10 +13,10 @@ export const user = {
1213
super_user: false,
1314
archive: false,
1415
},
15-
last_name: "Sahsi",
16-
github_id: "sahsisunny",
17-
first_name: "Sunny",
18-
username: "sunny",
16+
last_name: "Doe",
17+
github_id: "johndoe",
18+
first_name: "John",
19+
username: "johndoe",
1920
state: "ACTIVE",
2021
};
2122

@@ -178,8 +179,9 @@ export const userWithoutDiscordJoinedAt = {
178179
id: "DWcTUhbC5lRXfDjZRp06",
179180
incompleteUserDetails: false,
180181
discordJoinedAt: "",
182+
created_at: 1692748800000,
181183
discordId: "504855562094247953",
182-
github_display_name: "Jyotsna Mehta",
184+
github_display_name: "John Doe",
183185
updated_at: 1694888822719,
184186
roles: {
185187
archived: false,
@@ -188,10 +190,10 @@ export const userWithoutDiscordJoinedAt = {
188190
super_user: false,
189191
archive: false,
190192
},
191-
last_name: "Mehta",
192-
github_id: "j24m",
193-
first_name: "Jyotsna",
194-
username: "jyotsna",
193+
last_name: "Doe",
194+
github_id: "johndoe",
195+
first_name: "John",
196+
username: "johndoe",
195197
state: "IDLE",
196198
};
197199

tests/unit/utils/formatUserDetails.test.ts

Lines changed: 64 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,38 +4,88 @@ import {
44
userResponse,
55
userWithoutDiscordJoinedAtResponse,
66
} from "../../fixtures/user";
7-
import { convertTimeStamp } from "../../../src/utils/formatUserDetails";
7+
import {
8+
convertTimeStamp,
9+
convertEpochToDate,
10+
} from "../../../src/utils/formatUserDetails";
811

912
describe("formatUserDetails function", () => {
1013
it("Should return a string", () => {
1114
const userData: UserResponseType = userResponse;
12-
const formattedUserDetails = formatUserDetails(userData);
15+
const formattedUserDetails = formatUserDetails(userData, true);
1316
expect(typeof formattedUserDetails).toBe("string");
1417
});
1518

16-
it("should format user details correctly", () => {
17-
const formattedDetails = formatUserDetails(userResponse).trim();
19+
it("should format user details correctly in dev mode", () => {
20+
const formattedDetails = formatUserDetails(userResponse, true).trim();
1821

19-
const userFullName = `**Full Name :** Sunny Sahsi`;
20-
const discordJoinedAt = `**Joined Server on :** ${convertTimeStamp(
21-
userResponse
22+
const userId = " ".repeat(30) + `**Id:** iODXB6ns8jaZB9p0XlBw`;
23+
const userName = " ".repeat(13) + `**Username:** johndoe`;
24+
const userFullName = " ".repeat(13) + `**Full Name:** John Doe`;
25+
const userState = " ".repeat(23) + `**State:** ACTIVE`;
26+
const discordJoinedAt =
27+
" ".repeat(4) +
28+
`**Joined Discord:** ${convertTimeStamp(userResponse, true)}`;
29+
const accountCreated = `**Account Created:** ${convertEpochToDate(
30+
userResponse.user.created_at
2231
)}`;
32+
33+
const expectedFormattedDetails = `## User Details\n${userName}\n${userState}\n\n${userFullName}\n${userId}\n\n${accountCreated}\n${discordJoinedAt}`;
34+
expect(formattedDetails).toEqual(expectedFormattedDetails);
35+
});
36+
37+
it("should format user details correctly when not in dev mode", () => {
38+
const formattedDetails = formatUserDetails(userResponse, false).trim();
39+
40+
const userFullName = `**Full Name :** John Doe`;
2341
const userState = `**State :** ACTIVE`;
42+
const discordJoinedAt = `**Joined Server on :** ${convertTimeStamp(
43+
userResponse,
44+
false
45+
)}`;
2446

25-
const expectedFormattedDetails = `## User Details\n${userFullName}\n${discordJoinedAt}\n${userState}`;
47+
const expectedFormattedDetails = `## User Details\n${userFullName}\n${userState}\n${discordJoinedAt}`;
2648
expect(formattedDetails).toEqual(expectedFormattedDetails);
2749
});
2850

29-
it("should return empty string if discordJoinedAt is undefined", () => {
51+
it("should return empty string if discordJoinedAt is undefined in dev mode", () => {
3052
const formattedDetails = formatUserDetails(
31-
userWithoutDiscordJoinedAtResponse
53+
userWithoutDiscordJoinedAtResponse,
54+
true
3255
).trim();
33-
const userFullName = `**Full Name :** Jyotsna Mehta`;
34-
const discordJoinedAt = `**Joined Server on :** ${convertTimeStamp(
35-
userWithoutDiscordJoinedAtResponse
56+
57+
const userId = " ".repeat(30) + `**Id:** DWcTUhbC5lRXfDjZRp06`;
58+
const userName = " ".repeat(13) + `**Username:** johndoe`;
59+
const userFullName = " ".repeat(13) + `**Full Name:** John Doe`;
60+
const userState = " ".repeat(23) + `**State:** IDLE`;
61+
const discordJoinedAt =
62+
" ".repeat(4) +
63+
`**Joined Discord:** ${convertTimeStamp(
64+
userWithoutDiscordJoinedAtResponse,
65+
true
66+
)}`;
67+
const accountCreated = `**Account Created:** ${convertEpochToDate(
68+
userResponse.user.created_at
3669
)}`;
70+
71+
const expectedFormattedDetails = `## User Details\n${userName}\n${userState}\n\n${userFullName}\n${userId}\n\n${accountCreated}\n${discordJoinedAt}`;
72+
expect(formattedDetails).toEqual(expectedFormattedDetails);
73+
});
74+
75+
it("should return empty string if discordJoinedAt is undefined when not in dev mode", () => {
76+
const formattedDetails = formatUserDetails(
77+
userWithoutDiscordJoinedAtResponse,
78+
false
79+
).trim();
80+
81+
const userFullName = `**Full Name :** John Doe`;
3782
const userState = `**State :** IDLE`;
38-
const expectedFormattedDetails = `## User Details\n${userFullName}\n${discordJoinedAt}\n${userState}`;
83+
const discordJoinedAt = `**Joined Server on :** ${convertTimeStamp(
84+
userWithoutDiscordJoinedAtResponse,
85+
false
86+
)}`;
87+
88+
const expectedFormattedDetails = `## User Details\n${userFullName}\n${userState}\n${discordJoinedAt}`;
3989
expect(formattedDetails).toEqual(expectedFormattedDetails);
4090
});
4191
});

0 commit comments

Comments
 (0)