33 BodyMembership,
44 CircleMembership,
55 Circle,
6- User
6+ User,
77} = require ( '../models' ) ;
88const helpers = require ( '../lib/helpers' ) ;
99const { sequelize, Sequelize } = require ( '../lib/sequelize' ) ;
@@ -18,41 +18,56 @@ exports.listAllMemberships = async (req, res) => {
1818 }
1919
2020 if ( ! req . permissions . hasPermission ( 'view_members:body' ) ) {
21- return errors . makeForbiddenError ( res , 'Permission view_members:body is required, but not present.' ) ;
21+ return errors . makeForbiddenError (
22+ res ,
23+ 'Permission view_members:body is required, but not present.'
24+ ) ;
2225 }
2326
2427 const result = await BodyMembership . findAndCountAll ( {
2528 where : {
2629 body_id : req . currentBody . id ,
27- ...helpers . filterBy ( req . query . query , constants . FIELDS_TO_QUERY . BODY_MEMBERSHIP )
30+ ...helpers . filterBy (
31+ req . query . query ,
32+ constants . FIELDS_TO_QUERY . BODY_MEMBERSHIP
33+ ) ,
2834 } ,
2935 ...helpers . getPagination ( req . query ) ,
3036 order : helpers . getSorting ( req . query ) ,
31- include : [ User ]
37+ include : [ User ] ,
3238 } ) ;
3339
3440 return res . json ( {
3541 success : true ,
3642 data : result . rows ,
37- meta : { count : result . count }
43+ meta : { count : result . count } ,
3844 } ) ;
3945} ;
4046
4147exports . listAllMembershipsWithPermission = async ( req , res ) => {
4248 if ( ! req . permissions . hasPermission ( 'view_members:body' ) ) {
43- return errors . makeForbiddenError ( res , 'Permission view_members:body is required, but not present.' ) ;
49+ return errors . makeForbiddenError (
50+ res ,
51+ 'Permission view_members:body is required, but not present.'
52+ ) ;
4453 }
4554
46- if ( ! req . query . holds_permission . action || ! req . query . holds_permission . object ) {
47- return errors . makeBadRequestError ( res , 'Action or object is not specified.' ) ;
55+ if (
56+ ! req . query . holds_permission . action
57+ || ! req . query . holds_permission . object
58+ ) {
59+ return errors . makeBadRequestError (
60+ res ,
61+ 'Action or object is not specified.'
62+ ) ;
4863 }
4964
5065 const permission = await Permission . findOne ( {
5166 where : {
5267 scope : 'local' ,
5368 action : req . query . holds_permission . action ,
54- object : req . query . holds_permission . object
55- }
69+ object : req . query . holds_permission . object ,
70+ } ,
5671 } ) ;
5772
5873 if ( ! permission ) {
@@ -67,40 +82,53 @@ exports.listAllMembershipsWithPermission = async (req, res) => {
6782 body_id : req . currentBody . id ,
6883 '$user.circle_memberships.circle_id$' : { [ Sequelize . Op . in ] : circleIds } ,
6984 '$user.circle_memberships.circle.body_id$' : req . currentBody . id ,
70- ...helpers . filterBy ( req . query . query , constants . FIELDS_TO_QUERY . BODY_MEMBERSHIP )
85+ ...helpers . filterBy (
86+ req . query . query ,
87+ constants . FIELDS_TO_QUERY . BODY_MEMBERSHIP
88+ ) ,
7189 } ,
7290 ...helpers . getPagination ( req . query ) ,
7391 order : helpers . getSorting ( req . query ) ,
74- include : [ {
75- model : User ,
76- include : [ {
77- model : CircleMembership ,
78- include : [ Circle ]
79- } ]
80- } ]
92+ include : [
93+ {
94+ model : User ,
95+ include : [
96+ {
97+ model : CircleMembership ,
98+ include : [ Circle ] ,
99+ } ,
100+ ] ,
101+ } ,
102+ ] ,
81103 } ) ;
82104
83105 return res . json ( {
84106 success : true ,
85107 data : result . rows ,
86- meta : { count : result . count }
108+ meta : { count : result . count } ,
87109 } ) ;
88110} ;
89111
90112exports . getMembership = async ( req , res ) => {
91113 if ( ! req . permissions . hasPermission ( 'view_members:body' ) ) {
92- return errors . makeForbiddenError ( res , 'Permission view_members:body is required, but not present.' ) ;
114+ return errors . makeForbiddenError (
115+ res ,
116+ 'Permission view_members:body is required, but not present.'
117+ ) ;
93118 }
94119
95120 return res . json ( {
96121 success : true ,
97- data : req . currentBodyMembership
122+ data : req . currentBodyMembership ,
98123 } ) ;
99124} ;
100125
101126exports . createMembership = async ( req , res ) => {
102127 if ( ! req . permissions . hasPermission ( 'add_member:body' ) ) {
103- return errors . makeForbiddenError ( res , 'Permission add_member:body is required, but not present.' ) ;
128+ return errors . makeForbiddenError (
129+ res ,
130+ 'Permission add_member:body is required, but not present.'
131+ ) ;
104132 }
105133
106134 const user = await User . findByPk ( req . body . user_id ) ;
@@ -111,12 +139,17 @@ exports.createMembership = async (req, res) => {
111139 let membership ;
112140
113141 await sequelize . transaction ( async ( t ) => {
114- const bodyCount = await BodyMembership . count ( { where : { user_id : user . id } } ) ;
115-
116- membership = await BodyMembership . create ( {
117- user_id : user . id ,
118- body_id : req . currentBody . id
119- } , { transaction : t } ) ;
142+ const bodyCount = await BodyMembership . count ( {
143+ where : { user_id : user . id } ,
144+ } ) ;
145+
146+ membership = await BodyMembership . create (
147+ {
148+ user_id : user . id ,
149+ body_id : req . currentBody . id ,
150+ } ,
151+ { transaction : t }
152+ ) ;
120153
121154 if ( bodyCount === 0 ) {
122155 await mailer . sendMail ( {
@@ -127,8 +160,8 @@ exports.createMembership = async (req, res) => {
127160 member_firstname : user . first_name ,
128161 member_lastname : user . last_name ,
129162 body_name : req . currentBody . name ,
130- body_id : req . currentBody . id
131- }
163+ body_id : req . currentBody . id ,
164+ } ,
132165 } ) ;
133166
134167 await mailer . sendMail ( {
@@ -139,46 +172,72 @@ exports.createMembership = async (req, res) => {
139172 member_firstname : user . first_name ,
140173 member_lastname : user . last_name ,
141174 user_id : user . id ,
142- member_email : user . email
143- }
175+ member_email : user . email ,
176+ } ,
144177 } ) ;
145178 }
146179 } ) ;
147180
148181 return res . json ( {
149182 success : true ,
150- data : membership
183+ data : membership ,
151184 } ) ;
152185} ;
153186
154187exports . updateMembership = async ( req , res ) => {
155188 if ( ! req . permissions . hasPermission ( 'update_member:body' ) ) {
156- return errors . makeForbiddenError ( res , 'Permission update_member:body is required, but not present.' ) ;
189+ return errors . makeForbiddenError (
190+ res ,
191+ 'Permission update_member:body is required, but not present.'
192+ ) ;
157193 }
158194
159195 await req . currentBodyMembership . update ( { comment : req . body . comment } ) ;
160196 return res . json ( {
161197 success : true ,
162- data : req . currentBodyMembership
198+ data : req . currentBodyMembership ,
163199 } ) ;
164200} ;
165201
166202exports . deleteMembership = async ( req , res ) => {
167203 if ( ! req . permissions . hasPermission ( 'delete_member:body' ) ) {
168- return errors . makeForbiddenError ( res , 'Permission delete_member:body is required, but not present.' ) ;
204+ return errors . makeForbiddenError (
205+ res ,
206+ 'Permission delete_member:body is required, but not present.'
207+ ) ;
169208 }
170209
171210 await req . currentBodyMembership . destroy ( ) ;
172211
212+ const bodyCount = await BodyMembership . count ( {
213+ where : { user_id : req . currentBodyMembership . user_id } ,
214+ } ) ;
215+
216+ if ( bodyCount === 0 ) {
217+ const user = await User . findByPk ( req . currentBodyMembership . user_id ) ;
218+
219+ await mailer . sendMail ( {
220+ to : config . google_workspace_notifications ,
221+ subject : constants . MAIL_SUBJECTS . WORKSPACE_DELETED_MEMBER ,
222+ template : 'workspace_deleted_member.html' ,
223+ parameters : {
224+ member_firstname : user . first_name ,
225+ member_lastname : user . last_name ,
226+ user_id : user . id ,
227+ member_workspace_email : user . gsuite_id ,
228+ } ,
229+ } ) ;
230+ }
231+
173232 return res . json ( {
174233 success : true ,
175- message : 'Membership is deleted.'
234+ message : 'Membership is deleted' ,
176235 } ) ;
177236} ;
178237
179238exports . deleteOwnMembership = async ( req , res ) => {
180239 const bodyMembership = await BodyMembership . findOne ( {
181- where : { user_id : req . user . id , body_id : req . currentBody . id }
240+ where : { user_id : req . user . id , body_id : req . currentBody . id } ,
182241 } ) ;
183242
184243 if ( ! bodyMembership ) {
@@ -189,6 +248,6 @@ exports.deleteOwnMembership = async (req, res) => {
189248
190249 return res . json ( {
191250 success : true ,
192- message : 'Membership is deleted.'
251+ message : 'Membership is deleted.' ,
193252 } ) ;
194253} ;
0 commit comments