Skip to content

Commit 38859f9

Browse files
committed
impr: adds BlockUser and UnblockUser service to manage user access.
1 parent 5a137ae commit 38859f9

File tree

1 file changed

+94
-0
lines changed

1 file changed

+94
-0
lines changed

src/services/userService.go

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)