11import express , { Response , Router } from 'express' ;
22import 'express-async-errors' ;
33import { AuthenticatedRequest } from 'utils/middleware.js' ;
4+ import User from '../models/user.js' ;
45
56const userRouter : Router = express . Router ( ) ;
67
@@ -16,4 +17,103 @@ userRouter.get('/current', async (request: AuthenticatedRequest, response: Respo
1617 response . status ( 200 ) . json ( user ) ;
1718} ) ;
1819
20+ userRouter . get ( '/friend/:username' , async ( request : AuthenticatedRequest , response : Response ) => {
21+ if ( ! request . user ) {
22+ return response . status ( 401 ) . json ( { error : 'User/token not found' } ) ;
23+ }
24+ const username = request . params . username ;
25+ const user = await User . findOne ( { username : { $regex : new RegExp ( username , 'i' ) } } ) ;
26+ if ( ! user ) {
27+ return response . status ( 400 ) . json ( { error : 'User does not exist.' } ) ;
28+ }
29+ if ( ! request . user . friendsData . friends . map ( friend => friend . toUpperCase ( ) === username . toUpperCase ( ) ) ) {
30+ return response . status ( 401 ) . json ( { error : 'You do not have this user added.' } ) ;
31+ }
32+ await user . populate ( {
33+ path : 'tasks.id' ,
34+ select : '_id name type deadlineOptions recurringOptions discrete daysOfWeek totalTimeToday timeLeftToday daysOld user'
35+ } ) ;
36+ response . status ( 200 ) . json ( user ) ;
37+ } ) ;
38+
39+ userRouter . post ( '/sendFriendRequest/:username' , async ( request : AuthenticatedRequest , response : Response ) => {
40+ const username = request . params . username ;
41+ console . log ( username ) ;
42+ if ( ! request . user ) {
43+ return response . status ( 401 ) . json ( { error : 'User/token not found' } ) ;
44+ }
45+ const user = await User . findOne ( { username : { $regex : new RegExp ( username , 'i' ) } } ) ;
46+ if ( ! user ) {
47+ return response . status ( 400 ) . json ( { error : 'User does not exist.' } ) ;
48+ }
49+ if ( user . friendsData . friendRequests . includes ( request . user . username ) ) {
50+ return response . status ( 400 ) . json ( { error : 'Friend request already sent.' } ) ;
51+ }
52+ if ( user . friendsData . friends . includes ( request . user . username ) ) {
53+ return response . status ( 400 ) . json ( { error : 'Friend already added.' } ) ;
54+ }
55+ user . friendsData . friendRequests . push ( request . user . username ) ;
56+ await user . save ( ) ;
57+ response . status ( 200 ) ;
58+ } ) ;
59+
60+ userRouter . post ( '/acceptFriendRequest/:username' , async ( request : AuthenticatedRequest , response : Response ) => {
61+ const username = request . params . username ;
62+ const user = request . user ;
63+ if ( ! user ) {
64+ return response . status ( 401 ) . json ( { error : 'User/token not found' } ) ;
65+ }
66+ const requestUser = await User . findOne ( { username : { $regex : new RegExp ( username , 'i' ) } } ) ;
67+ if ( ! requestUser ) {
68+ return response . status ( 400 ) . json ( { error : 'User does not exist.' } ) ;
69+ }
70+ if ( ! user . friendsData . friendRequests . map ( request => request . toUpperCase ( ) === username . toUpperCase ( ) ) ) {
71+ return response . status ( 400 ) . json ( { error : 'User never recieved friend request form this user.' } ) ;
72+ }
73+ user . friendsData . friendRequests = user . friendsData . friendRequests . filter ( request => request . toUpperCase ( ) !== username . toUpperCase ( ) ) ;
74+ requestUser . friendsData . friendRequests = requestUser . friendsData . friendRequests . filter ( request => request . toUpperCase ( ) !== user . username . toUpperCase ( ) ) ;
75+ user . friendsData . friends . push ( username ) ;
76+ requestUser . friendsData . friends . push ( user . username ) ;
77+ await user . save ( ) ;
78+ await requestUser . save ( ) ;
79+
80+ response . status ( 200 ) ;
81+ } ) ;
82+
83+ userRouter . post ( '/rejectFriendRequest/:username' , async ( request : AuthenticatedRequest , response : Response ) => {
84+ const username = request . params . username . toUpperCase ( ) ;
85+ const user = request . user ;
86+ if ( ! user ) {
87+ return response . status ( 401 ) . json ( { error : 'User/token not found' } ) ;
88+ }
89+ if ( ! user . friendsData . friendRequests . map ( friend => friend . toUpperCase ( ) === username ) ) {
90+ return response . status ( 400 ) . json ( { error : 'User never recieved friend request from this user.' } ) ;
91+ }
92+ user . friendsData . friendRequests = user . friendsData . friendRequests . filter ( request => request . toUpperCase ( ) !== username ) ;
93+ await user . save ( ) ;
94+
95+ response . status ( 200 ) ;
96+ } ) ;
97+
98+ userRouter . post ( '/removeFriend/:username' , async ( request : AuthenticatedRequest , response : Response ) => {
99+ const username = request . params . username ;
100+ const user = request . user ;
101+ if ( ! user ) {
102+ return response . status ( 401 ) . json ( { error : 'User/token not found' } ) ;
103+ }
104+ const requestUser = await User . findOne ( { username : { $regex : new RegExp ( username , 'i' ) } } ) ;
105+ if ( ! requestUser ) {
106+ return response . status ( 400 ) . json ( { error : 'User does not exist.' } ) ;
107+ }
108+ if ( ! user . friendsData . friends . map ( friend => friend . toUpperCase ( ) === username . toUpperCase ( ) ) ) {
109+ return response . status ( 400 ) . json ( { error : 'This user was never added.' } ) ;
110+ }
111+ user . friendsData . friends = user . friendsData . friends . filter ( request => request . toUpperCase ( ) !== username . toUpperCase ( ) ) ;
112+ requestUser . friendsData . friends = requestUser . friendsData . friends . filter ( request => request . toUpperCase ( ) !== user . username . toUpperCase ( ) ) ;
113+ await user . save ( ) ;
114+ await requestUser . save ( ) ;
115+
116+ response . status ( 200 ) ;
117+ } ) ;
118+
19119export default userRouter ;
0 commit comments