Skip to content
This repository was archived by the owner on Apr 19, 2023. It is now read-only.

Commit 1628cd3

Browse files
✨ Add CRUD helpers for orgs/members
1 parent 821b085 commit 1628cd3

File tree

4 files changed

+134
-2
lines changed

4 files changed

+134
-2
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
"@types/jest": "^24.0.11",
2121
"@types/jsonwebtoken": "^8.3.2",
2222
"@types/marked": "^0.6.5",
23+
"@types/mustache": "^0.8.32",
2324
"@types/mysql": "^2.15.5",
2425
"@types/node": "^11.13.6",
2526
"concurrently": "^4.1.0",
@@ -34,7 +35,6 @@
3435
"typescript": "^3.4.4"
3536
},
3637
"dependencies": {
37-
"@types/mustache": "^0.8.32",
3838
"bcrypt": "^3.0.6",
3939
"express-async-handler": "^1.1.4",
4040
"fs-extra": "^7.0.1",

src/crud/email.ts

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import { query, tableValues, setValues } from "../helpers/mysql";
22
import { Email } from "../interfaces/tables/emails";
33
import { dateToDateTime } from "../helpers/utils";
44
import { KeyValue } from "../interfaces/general";
5+
import { User } from "../interfaces/tables/user";
6+
import { getUser } from "./user";
57

68
export const createEmail = async (email: Email, sendVerification = true) => {
79
// Clean up values
@@ -24,6 +26,40 @@ export const updateEmail = async (id: number, email: KeyValue) => {
2426
]);
2527
};
2628

29+
export const deleteEmail = async (id: number) => {
30+
return await query("DELETE FROM emails WHERE id = ?", [id]);
31+
};
32+
2733
export const getEmail = async (id: number) => {
28-
return (<Email[]>await query("SELECT * FROM emails WHERE id = ?", [id]))[0];
34+
return (<Email[]>(
35+
await query("SELECT * FROM emails WHERE id = ? LIMIT 1", [id])
36+
))[0];
37+
};
38+
39+
export const getUserPrimaryEmailObject = async (user: User | number) => {
40+
let userObject: User;
41+
if (typeof user === "number") {
42+
userObject = await getUser(user);
43+
} else {
44+
userObject = user;
45+
}
46+
const primaryEmailId = userObject.primaryEmail;
47+
if (!primaryEmailId) throw new Error("no-primary-email");
48+
return await getEmail(primaryEmailId);
49+
};
50+
51+
export const getUserPrimaryEmail = async (user: User | number) => {
52+
return (await getUserPrimaryEmailObject(user)).email;
53+
};
54+
55+
export const getUserEmails = async (userId: number) => {
56+
return <Email>await query("SELECT * FROM emails WHERE userId = ?", [userId]);
57+
};
58+
59+
export const getUserVerifiedEmails = async (userId: number) => {
60+
return <Email>(
61+
await query("SELECT * FROM emails WHERE userId = ? AND isVerified = 1", [
62+
userId
63+
])
64+
);
2965
};

src/crud/membership.ts

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import { query, tableValues, setValues } from "../helpers/mysql";
2+
import { Membership } from "../interfaces/tables/memberships";
3+
import { dateToDateTime } from "../helpers/utils";
4+
import { KeyValue } from "../interfaces/general";
5+
import { User } from "../interfaces/tables/user";
6+
import { getOrganization } from "./organization";
7+
8+
export const createMembership = async (membership: Membership) => {
9+
membership.createdAt = new Date();
10+
membership.updatedAt = membership.createdAt;
11+
return await query(
12+
`INSERT INTO memberships ${tableValues(membership)}`,
13+
Object.values(membership)
14+
);
15+
};
16+
17+
export const updateMembership = async (id: number, membership: KeyValue) => {
18+
membership.updatedAt = dateToDateTime(new Date());
19+
return await query(
20+
`UPDATE memberships SET ${setValues(membership)} WHERE id = ?`,
21+
[...Object.values(membership), id]
22+
);
23+
};
24+
25+
export const deleteMembership = async (id: number) => {
26+
return await query("DELETE FROM memberships WHERE id = ?", [id]);
27+
};
28+
29+
export const getMembership = async (id: number) => {
30+
return (<Membership[]>(
31+
await query("SELECT * FROM memberships WHERE id = ? LIMIT 1", [id])
32+
))[0];
33+
};
34+
35+
export const getUserMembershipObject = async (user: User | number) => {
36+
let userId: number = 0;
37+
if (typeof user === "number") {
38+
userId = user;
39+
} else if (user.id) {
40+
userId = user.id;
41+
}
42+
if (!userId) throw new Error("user id not found");
43+
return <Membership>(
44+
await query(`SELECT * FROM memberships WHERE userId = ? LIMIT 1`, [userId])
45+
);
46+
};
47+
48+
export const getUserOrganizationId = async (user: User | number) => {
49+
return (await getUserMembershipObject(user)).organizationId;
50+
};
51+
52+
export const getUserOrganization = async (user: User | number) => {
53+
const organizationId = await getUserOrganizationId(user);
54+
return await getOrganization(organizationId);
55+
};

src/crud/organization.ts

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import { query, tableValues, setValues } from "../helpers/mysql";
2+
import { Organization } from "../interfaces/tables/organization";
3+
import { capitalizeFirstAndLastLetter, dateToDateTime } from "../helpers/utils";
4+
import { KeyValue } from "../interfaces/general";
5+
6+
export const listAllOrganizations = async () => {
7+
return <Organization[]>await query("SELECT * from organizations");
8+
};
9+
10+
export const createOrganization = async (organization: Organization) => {
11+
if (organization.name)
12+
organization.name = capitalizeFirstAndLastLetter(organization.name);
13+
organization.createdAt = new Date();
14+
organization.updatedAt = organization.createdAt;
15+
// Create organization
16+
return await query(
17+
`INSERT INTO organizations ${tableValues(organization)}`,
18+
Object.values(organization)
19+
);
20+
};
21+
22+
export const getOrganization = async (id: number) => {
23+
return (<Organization[]>(
24+
await query(`SELECT * FROM organizations WHERE id = ? LIMIT 1`, [id])
25+
))[0];
26+
};
27+
28+
export const updateOrganization = async (
29+
id: number,
30+
organization: KeyValue
31+
) => {
32+
organization.updatedAt = dateToDateTime(new Date());
33+
return await query(
34+
`UPDATE organizations SET ${setValues(organization)} WHERE id = ?`,
35+
[...Object.values(organization), id]
36+
);
37+
};
38+
39+
export const deleteOrganization = async (id: number) => {
40+
return await query("DELETE FROM organizations WHERE id = ?", [id]);
41+
};

0 commit comments

Comments
 (0)