@@ -3,26 +3,37 @@ import { InjectModel } from "@nestjs/mongoose";
3
3
import { User , UserDocument } from "./schema/user.schema" ;
4
4
import mongoose , { Model } from "mongoose" ;
5
5
import { Post , PostDocument } from "../post/schema/post.schema" ;
6
+ import { Follower , FollowerDocument } from "./schema/follower.schema" ;
6
7
7
8
@Injectable ( )
8
9
export class UserService {
9
10
constructor (
10
11
@InjectModel ( User . name ) private userModel : Model < UserDocument > ,
11
12
@InjectModel ( Post . name ) private postModel : Model < PostDocument > ,
13
+ @InjectModel ( Follower . name ) private followerModel : Model < FollowerDocument > ,
12
14
) { }
13
15
14
- async getUserById ( userId : string ) {
16
+ async getUserById ( userId : string , currentUser : UserDocument ) {
15
17
let user = await this . userModel . findById ( userId ) . lean ( ) ;
16
18
if ( ! user . settings . public ) {
17
19
return {
18
20
user : {
21
+ _id : user . _id ,
19
22
avatar : user . avatar ,
20
23
username : user . username ,
21
24
settings : { public : false } ,
22
25
} ,
23
26
} ;
24
27
}
25
- return { user } ;
28
+ const followersInfo : any = { } ;
29
+ followersInfo . followers = await this . followerModel . countDocuments ( { user : user . _id } ) ;
30
+ followersInfo . following = await this . followerModel . countDocuments ( { follower : user . _id } ) ;
31
+ followersInfo . isFollowing = ! ! ( await this . followerModel . countDocuments ( { user : user . _id , follower : currentUser . _id } ) ) ;
32
+ const userData = {
33
+ ...user ,
34
+ followersInfo,
35
+ } ;
36
+ return { user : userData } ;
26
37
}
27
38
28
39
async getUserPosts ( userId : string ) {
@@ -62,4 +73,23 @@ export class UserService {
62
73
] ) ;
63
74
return { posts } ;
64
75
}
76
+
77
+ async toggleFollowing ( userId : string , currentUser : UserDocument ) {
78
+ const follower = await this . followerModel . findOne ( {
79
+ user : userId ,
80
+ follower : currentUser . _id ,
81
+ } ) ;
82
+ if ( follower ) {
83
+ await follower . deleteOne ( ) ;
84
+ } else {
85
+ const newFollower = new this . followerModel ( {
86
+ user : userId ,
87
+ follower : currentUser . _id ,
88
+ } ) ;
89
+ await newFollower . save ( ) ;
90
+ }
91
+ const { user } = await this . getUserById ( userId , currentUser ) ;
92
+
93
+ return { user } ;
94
+ }
65
95
}
0 commit comments