1+ import { Request , Response } from "express" ;
2+ import * as memberService from "../services/member.service" ;
3+ import { ApiError } from "../utils/apiError" ;
4+ import { deleteImage , uploadImage } from "../utils/imageUtils" ;
5+ import { SupabaseClient } from "@supabase/supabase-js" ;
6+
7+ // List all approved members
8+ export const listAllApprovedMembers = async ( req : Request , res : Response ) => {
9+ const user = await memberService . approvedMembers ( ) ;
10+ res
11+ . status ( 200 )
12+ . json ( { user, success : true , message : "Fetched approved users" } ) ;
13+ } ;
14+
15+ // Get details of a single user
16+ export const getUserDetails = async ( req : Request , res : Response ) => {
17+ const { memberId } = req . params ;
18+
19+ if ( ! memberId ) throw new ApiError ( "No memberId provided" , 400 ) ;
20+
21+ const user = await memberService . getDetails ( memberId ) ;
22+ if ( ! user ) throw new ApiError ( "No member found" , 404 ) ;
23+
24+ res . json ( { success : true , user, message : "Fetched user details" } ) ;
25+ } ;
26+
27+ // Create a new member
28+ export const createAMember =
29+ ( supabase : SupabaseClient ) => async ( req : Request , res : Response ) => {
30+ const { email, name, password, passoutYear } = req . body ;
31+
32+ if ( ! email || ! name || ! password || ! passoutYear ) {
33+ throw new ApiError ( "Required fields absent" , 400 ) ;
34+ }
35+
36+ let imageUrl : string | undefined ;
37+ if ( req . file ) {
38+ imageUrl = await uploadImage ( supabase , req . file , "members" ) ;
39+ }
40+
41+ const user = await memberService . createMember (
42+ email ,
43+ name ,
44+ password ,
45+ passoutYear ,
46+ imageUrl ,
47+ ) ;
48+
49+ if ( ! user ) throw new ApiError ( "Error creating user" , 500 ) ;
50+
51+ res . status ( 201 ) . json ( { success : true , user } ) ;
52+ } ;
53+
54+ // Update an existing member
55+ export const updateAMember =
56+ ( supabase : SupabaseClient ) => async ( req : Request , res : Response ) => {
57+ const { memberId } = req . params ;
58+
59+ if ( ! memberId ) throw new ApiError ( "No memberId provided" , 400 ) ;
60+
61+ const body = req . body ;
62+
63+ if ( req . file ) {
64+ const oldData = await memberService . getDetails ( memberId ) ;
65+ const oldImage = oldData ?. profilePhoto ;
66+
67+ if ( oldImage ) await deleteImage ( supabase , oldImage ) ;
68+
69+ const imageUrl = await uploadImage ( supabase , req . file , "members" ) ;
70+ body . profilePhoto = imageUrl ;
71+ }
72+
73+ await memberService . updateMember ( memberId , body ) ;
74+
75+ res
76+ . status ( 200 )
77+ . json ( { success : true , message : "Updated member details successfully" } ) ;
78+ } ;
79+
80+ // Get all unapproved members
81+ export const getUnapprovedMembers = async ( req : Request , res : Response ) => {
82+ const unapprovedMembers = await memberService . unapprovedMembers ( ) ;
83+ res . status ( 200 ) . json ( { success : true , unapprovedMembers } ) ;
84+ } ;
85+
86+ // Approve or reject member request
87+ export const updateRequest = async ( req : Request , res : Response ) => {
88+ const { memberId } = req . params ;
89+ const { isApproved, adminId } = req . body ;
90+
91+ if ( ! memberId || ! adminId || isApproved === undefined ) {
92+ throw new ApiError ( "No essential creds provided" , 400 ) ;
93+ }
94+
95+ if ( ! isApproved ) throw new ApiError ( "Someone interrupting the backend flow" , 400 ) ;
96+
97+ const update = await memberService . approveRequest (
98+ isApproved ,
99+ adminId ,
100+ memberId ,
101+ ) ;
102+
103+ res
104+ . status ( 200 )
105+ . json ( { success : true , update, message : "Approve Request Checked" } ) ;
106+ } ;
107+
108+ // Get achievements of a member
109+ export const getUserAchievements = async ( req : Request , res : Response ) => {
110+ const { memberId } = req . params ;
111+
112+ if ( ! memberId ) throw new ApiError ( "No memberId provided" , 400 ) ;
113+
114+ const achievements = await memberService . getAchievements ( memberId ) ;
115+ res . status ( 200 ) . json ( { success : true , achievements } ) ;
116+ } ;
117+
118+ // Get projects of a member
119+ export const getUserProjects = async ( req : Request , res : Response ) => {
120+ const { memberId } = req . params ;
121+
122+ if ( ! memberId ) throw new ApiError ( "No memberId provided" , 400 ) ;
123+
124+ const projects = await memberService . getProjects ( memberId ) ;
125+ res . status ( 200 ) . json ( { success : true , projects } ) ;
126+ } ;
127+
128+ // Get interviews of a member
129+ export const getUserInterviews = async ( req : Request , res : Response ) => {
130+ const { memberId } = req . params ;
131+
132+ if ( ! memberId ) throw new ApiError ( "No memberId provided" , 400 ) ;
133+
134+ const interviews = await memberService . getInterviews ( memberId ) ;
135+ res . status ( 200 ) . json ( { success : true , interviews } ) ;
136+ } ;
0 commit comments