-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathmember.controller.ts
More file actions
158 lines (117 loc) · 4.61 KB
/
member.controller.ts
File metadata and controls
158 lines (117 loc) · 4.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
import { Request, Response } from "express";
import * as memberService from "../services/member.service";
import { ApiError } from "../utils/apiError";
import { uploadImage } from "../utils/imageUtils";
import { SupabaseClient } from "@supabase/supabase-js";
// List all approved members
export const listAllApprovedMembers = async (req: Request, res: Response) => {
const {email} = req.query;
if(email) {
const user = await memberService.getUserByEmail(email as string);
if(!user) throw new ApiError('Incorrect email or password', 400);
res.status(200).json({
success: true,
user
})
}
else {
const user = await memberService.approvedMembers();
res
.status(200)
.json({ user, success: true });
}
};
// Get details of a single user
export const getUserDetails = async (req: Request, res: Response) => {
const { memberId } = req.params;
if (!memberId) throw new ApiError("No memberId provided", 400);
const user = await memberService.getDetails(memberId);
if (!user) throw new ApiError("No member found", 404);
res.json({ success: true, user, message: "Fetched user details" });
};
// Create a new member
export const createAMember =
(supabase: SupabaseClient) => async (req: Request, res: Response) => {
const {email, name, password, passoutYear, provider} = req.body;
if (!email || !name || !password || !passoutYear || !provider) {
throw new ApiError("Required fields absent", 400);
}
let imageUrl: string | undefined;
if (req.file) {
imageUrl = await uploadImage(supabase, req.file, "members");
}
const user = await memberService.createMember(
email,
name,
provider,
password,
passoutYear,
imageUrl,
);
if (!user) throw new ApiError("Error creating user", 500);
res.status(201).json({ success: true, user });
};
// Update an existing member
export const updateAMember =
(supabase: SupabaseClient) => async (req: Request, res: Response) => {
const { memberId } = req.params;
if(!memberId) throw new ApiError("No memberId provided", 400);
const parsedBody = JSON.parse(req.body.memberData);
let imageUrl: undefined | string;
if (req.file) {
const oldData = await memberService.getDetails(memberId);
const oldImage = oldData?.profilePhoto;
if(oldImage) imageUrl = await uploadImage(supabase, req.file, "members", oldImage);
else imageUrl = await uploadImage(supabase, req.file, "members");
}
if (imageUrl) parsedBody.profilePhoto = imageUrl;
if(parsedBody.password) await memberService.updatePassword(memberId, parsedBody.password);
else await memberService.updateMember(memberId, parsedBody);
const updatedData = await memberService.getDetails(memberId);
res
.status(200)
.json({ success: true, user: updatedData });
};
// Get all unapproved members
export const getUnapprovedMembers = async (req: Request, res: Response) => {
const unapprovedMembers = await memberService.unapprovedMembers();
res.status(200).json({ success: true, unapprovedMembers });
};
// Approve or reject member request
export const updateRequest = async (req: Request, res: Response) => {
const { memberId } = req.params;
const { isApproved, adminId } = req.body;
if (!memberId || !adminId || isApproved === undefined) {
throw new ApiError("No essential creds provided", 400);
}
if(!isApproved) throw new ApiError("Someone interrupting the backend flow", 400);
const update = await memberService.approveRequest(
isApproved,
adminId,
memberId,
);
res
.status(200)
.json({ success: true, update, message: "Approve Request Checked" });
};
// Get achievements of a member
export const getUserAchievements = async (req: Request, res: Response) => {
const { memberId } = req.params;
if (!memberId) throw new ApiError("No memberId provided", 400);
const achievements = await memberService.getAchievements(memberId);
res.status(200).json({ success: true, achievements });
};
// Get projects of a member
export const getUserProjects = async (req: Request, res: Response) => {
const { memberId } = req.params;
if (!memberId) throw new ApiError("No memberId provided", 400);
const projects = await memberService.getProjects(memberId);
res.status(200).json({ success: true, projects });
};
// Get interviews of a member
export const getUserInterviews = async (req: Request, res: Response) => {
const { memberId } = req.params;
if (!memberId) throw new ApiError("No memberId provided", 400);
const interviews = await memberService.getInterviews(memberId);
res.status(200).json({ success: true, interviews });
};