Skip to content

Commit 04c5d1d

Browse files
committed
Merge branch 'main' into entfactor
2 parents fd05de9 + 850a830 commit 04c5d1d

27 files changed

+514
-71
lines changed

coderd/coderd.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,7 @@ func New(options *Options) *API {
351351
})
352352
r.Route("/{user}", func(r chi.Router) {
353353
r.Use(httpmw.ExtractUserParam(options.Database))
354+
r.Delete("/", api.deleteUser)
354355
r.Get("/", api.userByName)
355356
r.Put("/profile", api.putUserProfile)
356357
r.Route("/status", func(r chi.Router) {

coderd/database/databasefake/databasefake.go

Lines changed: 42 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -284,7 +284,7 @@ func (q *fakeQuerier) GetUserByEmailOrUsername(_ context.Context, arg database.G
284284
defer q.mutex.RUnlock()
285285

286286
for _, user := range q.users {
287-
if user.Email == arg.Email || user.Username == arg.Username {
287+
if (user.Email == arg.Email || user.Username == arg.Username) && user.Deleted == arg.Deleted {
288288
return user, nil
289289
}
290290
}
@@ -307,7 +307,13 @@ func (q *fakeQuerier) GetUserCount(_ context.Context) (int64, error) {
307307
q.mutex.RLock()
308308
defer q.mutex.RUnlock()
309309

310-
return int64(len(q.users)), nil
310+
existing := int64(0)
311+
for _, u := range q.users {
312+
if !u.Deleted {
313+
existing++
314+
}
315+
}
316+
return existing, nil
311317
}
312318

313319
func (q *fakeQuerier) GetActiveUserCount(_ context.Context) (int64, error) {
@@ -316,13 +322,27 @@ func (q *fakeQuerier) GetActiveUserCount(_ context.Context) (int64, error) {
316322

317323
active := int64(0)
318324
for _, u := range q.users {
319-
if u.Status == database.UserStatusActive {
325+
if u.Status == database.UserStatusActive && !u.Deleted {
320326
active++
321327
}
322328
}
323329
return active, nil
324330
}
325331

332+
func (q *fakeQuerier) UpdateUserDeletedByID(_ context.Context, params database.UpdateUserDeletedByIDParams) error {
333+
q.mutex.Lock()
334+
defer q.mutex.Unlock()
335+
336+
for i, u := range q.users {
337+
if u.ID == params.ID {
338+
u.Deleted = params.Deleted
339+
q.users[i] = u
340+
return nil
341+
}
342+
}
343+
return sql.ErrNoRows
344+
}
345+
326346
func (q *fakeQuerier) GetUsers(_ context.Context, params database.GetUsersParams) ([]database.User, error) {
327347
q.mutex.RLock()
328348
defer q.mutex.RUnlock()
@@ -341,6 +361,16 @@ func (q *fakeQuerier) GetUsers(_ context.Context, params database.GetUsersParams
341361
return a.CreatedAt.Before(b.CreatedAt)
342362
})
343363

364+
if params.Deleted {
365+
tmp := make([]database.User, 0, len(users))
366+
for _, user := range users {
367+
if user.Deleted {
368+
tmp = append(tmp, user)
369+
}
370+
}
371+
users = tmp
372+
}
373+
344374
if params.AfterID != uuid.Nil {
345375
found := false
346376
for i, v := range users {
@@ -409,16 +439,19 @@ func (q *fakeQuerier) GetUsers(_ context.Context, params database.GetUsersParams
409439
return users, nil
410440
}
411441

412-
func (q *fakeQuerier) GetUsersByIDs(_ context.Context, ids []uuid.UUID) ([]database.User, error) {
442+
func (q *fakeQuerier) GetUsersByIDs(_ context.Context, params database.GetUsersByIDsParams) ([]database.User, error) {
413443
q.mutex.RLock()
414444
defer q.mutex.RUnlock()
415445

416446
users := make([]database.User, 0)
417447
for _, user := range q.users {
418-
for _, id := range ids {
448+
for _, id := range params.IDs {
419449
if user.ID.String() != id.String() {
420450
continue
421451
}
452+
if user.Deleted != params.Deleted {
453+
continue
454+
}
422455
users = append(users, user)
423456
}
424457
}
@@ -879,8 +912,8 @@ func (q *fakeQuerier) ParameterValues(_ context.Context, arg database.ParameterV
879912
}
880913
}
881914

882-
if len(arg.Ids) > 0 {
883-
if !slice.Contains(arg.Ids, parameterValue.ID) {
915+
if len(arg.IDs) > 0 {
916+
if !slice.Contains(arg.IDs, parameterValue.ID) {
884917
continue
885918
}
886919
}
@@ -961,9 +994,9 @@ func (q *fakeQuerier) GetTemplatesWithFilter(_ context.Context, arg database.Get
961994
continue
962995
}
963996

964-
if len(arg.Ids) > 0 {
997+
if len(arg.IDs) > 0 {
965998
match := false
966-
for _, id := range arg.Ids {
999+
for _, id := range arg.IDs {
9671000
if template.ID == id {
9681001
match = true
9691002
break

coderd/database/dump.sql

Lines changed: 5 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
ALTER TABLE users
2+
DROP COLUMN deleted;
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
ALTER TABLE users
2+
ADD COLUMN deleted boolean DEFAULT false NOT NULL;
3+
4+
DROP INDEX idx_users_email;
5+
DROP INDEX idx_users_username;
6+
DROP INDEX users_username_lower_idx;
7+
CREATE UNIQUE INDEX idx_users_email ON users USING btree (email) WHERE deleted = false;
8+
CREATE UNIQUE INDEX idx_users_username ON users USING btree (username) WHERE deleted = false;
9+
CREATE UNIQUE INDEX users_username_lower_idx ON users USING btree (lower(username)) WHERE deleted = false;

coderd/database/models.go

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/querier.go

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)