Skip to content

Commit a5ba083

Browse files
Merge pull request #18 from call-0f-code/minor-fixes
Added conditional routing to get approved members route
2 parents 9263d8c + 230a7af commit a5ba083

3 files changed

Lines changed: 56 additions & 17 deletions

File tree

src/controllers/member.controller.ts

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,27 @@ import { SupabaseClient } from "@supabase/supabase-js";
66

77
// List all approved members
88
export const listAllApprovedMembers = async (req: Request, res: Response) => {
9+
10+
const {email, password} = req.query;
11+
12+
if(email && password) {
13+
14+
const user = await memberService.getUserByEmail(email as string, password as string);
15+
16+
if(!user) throw new ApiError('Incorrect email or password', 400);
17+
18+
res.status(200).json({
19+
success: true,
20+
user
21+
})
22+
}
23+
else {
924
const user = await memberService.approvedMembers();
1025
res
1126
.status(200)
12-
.json({ user, success: true, message: "Fetched approved users" });
27+
.json({ user, success: true });
28+
}
29+
1330
};
1431

1532
// Get details of a single user
@@ -27,7 +44,7 @@ export const getUserDetails = async (req: Request, res: Response) => {
2744
// Create a new member
2845
export const createAMember =
2946
(supabase: SupabaseClient) => async (req: Request, res: Response) => {
30-
const { email, name, password, passoutYear } = req.body;
47+
const {email, name, password, passoutYear, provider} = req.body;
3148

3249
if (!email || !name || !password || !passoutYear) {
3350
throw new ApiError("Required fields absent", 400);
@@ -44,6 +61,7 @@ export const createAMember =
4461
password,
4562
passoutYear,
4663
imageUrl,
64+
provider,
4765
);
4866

4967
if (!user) throw new ApiError("Error creating user", 500);

src/routes/members.ts

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ export default function membersRouter(
1111
const router = express.Router();
1212

1313
/**
14-
* @api {get} /members/details/:memberId Get a member's details
14+
* @api {get} /members/:memberId Get a member's details
1515
* @apiName GetUserDetails
1616
* @apiGroup Member
1717
*
@@ -23,11 +23,21 @@ export default function membersRouter(
2323
router.get("/:memberId", memberCtrl.getUserDetails);
2424

2525
/**
26-
* @api {get} /members List all approved members
26+
* @api {get} /members List all approved members or get member by email
2727
* @apiName ListAllApprovedMembers
2828
* @apiGroup Member
2929
*
30-
* @apiSuccess {Object[]} user List of approved members.
30+
* @apiDescription
31+
* - Returns a list of all approved members if no email query parameter is provided.
32+
* - If `email` query parameter is provided, returns the member associated with that email.
33+
*
34+
* @apiQuery {String} [email] Optional email to fetch a specific member.
35+
*
36+
* @apiSuccess {Object} user Single user object when email provided.
37+
+ * @apiSuccess {Object[]} user Array of approved members when no email provided.
38+
* @apiSuccess {String} [message] Message in case of full list fetch.
39+
*
40+
* @apiError (400) IncorrectEmail The provided email does not match any user.
3141
*/
3242
router.get("/", memberCtrl.listAllApprovedMembers);
3343

src/services/member.service.ts

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,24 @@
11
import { prisma } from "../db/client";
22
import { ApiError } from "../utils/apiError";
33

4-
export const checkAdmin = async (adminId: string) => {
4+
export const getUserByEmail = async(email: string, hashedPassword: string) => {
55
return await prisma.member.findUnique({
66
where: {
7-
id: adminId,
8-
isManager: true,
7+
email: email
98
},
10-
});
11-
};
9+
select: {
10+
id: true,
11+
isApproved: true,
12+
isManager: true,
13+
accounts: {
14+
where: {
15+
provider: 'credentials',
16+
password: hashedPassword,
17+
},
18+
},
19+
}
20+
})
21+
}
1222

1323
export const approvedMembers = async () => {
1424
return await prisma.member.findMany({
@@ -29,24 +39,25 @@ export const getDetails = async (memberId: string) => {
2939
export const createMember = async (
3040
email: string,
3141
name: string,
32-
password: string,
33-
passoutYear: number,
42+
provider: "google" | "github" | "credentials",
43+
passoutYear?: number,
3444
imageUrl?: string,
45+
password?: string
3546
) => {
3647
const newMember = await prisma.member.create({
3748
data: {
38-
email: email,
39-
name: name,
40-
passoutYear: new Date(passoutYear),
49+
email,
50+
name,
51+
passoutYear: passoutYear === undefined ? "" : new Date(passoutYear),
4152
profilePhoto: imageUrl,
4253
},
4354
});
4455

4556
await prisma.account.create({
4657
data: {
47-
provider: "credentials",
58+
provider,
4859
providerAccountId: email,
49-
password: password,
60+
password: provider === "credentials" ? password : null,
5061
memberId: newMember.id,
5162
},
5263
});

0 commit comments

Comments
 (0)