@@ -114,6 +114,10 @@ func (us *userService) GetUser(ctx context.Context, req *userspb.GetUserRequest)
114114 return nil , status .Error (codes .NotFound , fmt .Sprintf ("User Not Found: %v" , err ))
115115 }
116116
117+ if user .Access == "BLOCKED" {
118+ return nil , status .Error (codes .PermissionDenied , fmt .Sprintln ("User Access Blocked" ))
119+ }
120+
117121 log .Println ("User Found Successfully" )
118122 return & userspb.UserResponse {
119123 Email : user .Email ,
@@ -125,3 +129,93 @@ func (us *userService) GetUser(ctx context.Context, req *userspb.GetUserRequest)
125129 Access : models .AccessStrToAccess (user .Access ),
126130 }, nil
127131}
132+
133+ func (us * userService ) BlockUser (ctx context.Context , req * userspb.UserAccessUpdateRequest ) (* userspb.UserResponse , error ) {
134+ if req .Email == "" {
135+ return nil , status .Error (codes .InvalidArgument , "Invalid Input: email required" )
136+ }
137+
138+ stmt , names := qb .Select (us .table .Name ()).
139+ Columns ("email" , "first_name" , "last_name" , "ph_number" , "gender" , "dob" , "access" ).
140+ Where (qb .Eq ("email" )).
141+ ToCql ()
142+
143+ var existingUser models.User
144+
145+ executor := us .session .Query (stmt , names ).BindMap (qb.M {"email" : req .Email })
146+
147+ if err := executor .GetRelease (& existingUser ); err != nil {
148+ return nil , status .Error (codes .NotFound , fmt .Sprintf ("User not found: %v" , err ))
149+ }
150+
151+ stmt , names = qb .Update (us .table .Name ()).
152+ Set ("access" ).
153+ Where (qb .Eq ("email" )).
154+ ToCql ()
155+
156+ executor = us .session .Query (stmt , names ).BindMap (qb.M {
157+ "access" : "BLOCKED" ,
158+ "email" : req .Email ,
159+ })
160+
161+ existingUser .Access = "BLOCKED"
162+
163+ if err := executor .ExecRelease (); err != nil {
164+ return nil , status .Error (codes .Internal , fmt .Sprintf ("Error blocking user: %v" , err ))
165+ }
166+
167+ return & userspb.UserResponse {
168+ Email : existingUser .Email ,
169+ FirstName : existingUser .FirstName ,
170+ LastName : existingUser .LastName ,
171+ PhNumber : existingUser .PhNumber ,
172+ Gender : models .GenderStrToGender (existingUser .Gender ),
173+ Dob : existingUser .Dob .Format (time .RFC3339 ),
174+ Access : models .AccessStrToAccess (existingUser .Access ),
175+ }, nil
176+ }
177+
178+ func (us * userService ) UnblockUser (ctx context.Context , req * userspb.UserAccessUpdateRequest ) (* userspb.UserResponse , error ) {
179+ if req .Email == "" {
180+ return nil , status .Error (codes .InvalidArgument , "Invalid Input: email required" )
181+ }
182+
183+ stmt , names := qb .Select (us .table .Name ()).
184+ Columns ("email" , "first_name" , "last_name" , "ph_number" , "gender" , "dob" , "access" ).
185+ Where (qb .Eq ("email" )).
186+ ToCql ()
187+
188+ var existingUser models.User
189+
190+ executor := us .session .Query (stmt , names ).BindMap (qb.M {"email" : req .Email })
191+
192+ if err := executor .GetRelease (& existingUser ); err != nil {
193+ return nil , status .Error (codes .NotFound , fmt .Sprintf ("User not found: %v" , err ))
194+ }
195+
196+ stmt , names = qb .Update (us .table .Name ()).
197+ Set ("access" ).
198+ Where (qb .Eq ("email" )).
199+ ToCql ()
200+
201+ executor = us .session .Query (stmt , names ).BindMap (qb.M {
202+ "access" : "UNBLOCKED" ,
203+ "email" : req .Email ,
204+ })
205+
206+ existingUser .Access = "UNBLOCKED"
207+
208+ if err := executor .ExecRelease (); err != nil {
209+ return nil , status .Error (codes .Internal , fmt .Sprintf ("Error unblocking user: %v" , err ))
210+ }
211+
212+ return & userspb.UserResponse {
213+ Email : existingUser .Email ,
214+ FirstName : existingUser .FirstName ,
215+ LastName : existingUser .LastName ,
216+ PhNumber : existingUser .PhNumber ,
217+ Gender : models .GenderStrToGender (existingUser .Gender ),
218+ Dob : existingUser .Dob .Format (time .RFC3339 ),
219+ Access : models .AccessStrToAccess (existingUser .Access ),
220+ }, nil
221+ }
0 commit comments