Skip to content

Commit 133dc66

Browse files
authored
feat: add a theme picker (coder#11140)
1 parent 0cd4842 commit 133dc66

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+1280
-314
lines changed

cli/testdata/coder_users_list_--output_json.golden

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@
1616
}
1717
],
1818
"avatar_url": "",
19-
"login_type": "password"
19+
"login_type": "password",
20+
"theme_preference": ""
2021
},
2122
{
2223
"id": "[second user ID]",
@@ -30,6 +31,7 @@
3031
],
3132
"roles": [],
3233
"avatar_url": "",
33-
"login_type": "password"
34+
"login_type": "password",
35+
"theme_preference": ""
3436
}
3537
]

coderd/apidoc/docs.go

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

coderd/apidoc/swagger.json

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

coderd/coderd.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -800,6 +800,7 @@ func New(options *Options) *API {
800800
r.Put("/suspend", api.putSuspendUserAccount())
801801
r.Put("/activate", api.putActivateUserAccount())
802802
})
803+
r.Put("/appearance", api.putUserAppearanceSettings)
803804
r.Route("/password", func(r chi.Router) {
804805
r.Put("/", api.putUserPassword)
805806
})

coderd/database/db2sdk/db2sdk.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ func User(user database.User, organizationIDs []uuid.UUID) codersdk.User {
122122
Roles: make([]codersdk.Role, 0, len(user.RBACRoles)),
123123
AvatarURL: user.AvatarURL,
124124
LoginType: codersdk.LoginType(user.LoginType),
125+
ThemePreference: user.ThemePreference,
125126
}
126127

127128
for _, roleName := range user.RBACRoles {

coderd/database/dbauthz/dbauthz.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2699,6 +2699,17 @@ func (q *querier) UpdateTemplateWorkspacesLastUsedAt(ctx context.Context, arg da
26992699
return fetchAndExec(q.log, q.auth, rbac.ActionUpdate, fetch, q.db.UpdateTemplateWorkspacesLastUsedAt)(ctx, arg)
27002700
}
27012701

2702+
func (q *querier) UpdateUserAppearanceSettings(ctx context.Context, arg database.UpdateUserAppearanceSettingsParams) (database.User, error) {
2703+
u, err := q.db.GetUserByID(ctx, arg.ID)
2704+
if err != nil {
2705+
return database.User{}, err
2706+
}
2707+
if err := q.authorizeContext(ctx, rbac.ActionUpdate, u.UserDataRBACObject()); err != nil {
2708+
return database.User{}, err
2709+
}
2710+
return q.db.UpdateUserAppearanceSettings(ctx, arg)
2711+
}
2712+
27022713
// UpdateUserDeletedByID
27032714
// Deprecated: Delete this function in favor of 'SoftDeleteUserByID'. Deletes are
27042715
// irreversible.

coderd/database/dbauthz/dbauthz_test.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -962,6 +962,14 @@ func (s *MethodTestSuite) TestUser() {
962962
UpdatedAt: u.UpdatedAt,
963963
}).Asserts(u.UserDataRBACObject(), rbac.ActionUpdate).Returns(u)
964964
}))
965+
s.Run("UpdateUserAppearanceSettings", s.Subtest(func(db database.Store, check *expects) {
966+
u := dbgen.User(s.T(), db, database.User{})
967+
check.Args(database.UpdateUserAppearanceSettingsParams{
968+
ID: u.ID,
969+
ThemePreference: u.ThemePreference,
970+
UpdatedAt: u.UpdatedAt,
971+
}).Asserts(u.UserDataRBACObject(), rbac.ActionUpdate).Returns(u)
972+
}))
965973
s.Run("UpdateUserStatus", s.Subtest(func(db database.Store, check *expects) {
966974
u := dbgen.User(s.T(), db, database.User{})
967975
check.Args(database.UpdateUserStatusParams{

coderd/database/dbmem/dbmem.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6222,6 +6222,26 @@ func (q *FakeQuerier) UpdateTemplateWorkspacesLastUsedAt(_ context.Context, arg
62226222
return nil
62236223
}
62246224

6225+
func (q *FakeQuerier) UpdateUserAppearanceSettings(_ context.Context, arg database.UpdateUserAppearanceSettingsParams) (database.User, error) {
6226+
err := validateDatabaseType(arg)
6227+
if err != nil {
6228+
return database.User{}, err
6229+
}
6230+
6231+
q.mutex.Lock()
6232+
defer q.mutex.Unlock()
6233+
6234+
for index, user := range q.users {
6235+
if user.ID != arg.ID {
6236+
continue
6237+
}
6238+
user.ThemePreference = arg.ThemePreference
6239+
q.users[index] = user
6240+
return user, nil
6241+
}
6242+
return database.User{}, sql.ErrNoRows
6243+
}
6244+
62256245
func (q *FakeQuerier) UpdateUserDeletedByID(_ context.Context, params database.UpdateUserDeletedByIDParams) error {
62266246
if err := validateDatabaseType(params); err != nil {
62276247
return err

coderd/database/dbmetrics/dbmetrics.go

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

coderd/database/dbmock/dbmock.go

Lines changed: 15 additions & 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: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries.sql.go

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

coderd/database/queries/users.sql

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,18 @@ SET
8080
avatar_url = $4,
8181
updated_at = $5
8282
WHERE
83-
id = $1 RETURNING *;
83+
id = $1
84+
RETURNING *;
85+
86+
-- name: UpdateUserAppearanceSettings :one
87+
UPDATE
88+
users
89+
SET
90+
theme_preference = $2,
91+
updated_at = $3
92+
WHERE
93+
id = $1
94+
RETURNING *;
8495

8596
-- name: UpdateUserRoles :one
8697
UPDATE
@@ -266,4 +277,3 @@ RETURNING id, email, last_seen_at;
266277
-- AllUserIDs returns all UserIDs regardless of user status or deletion.
267278
-- name: AllUserIDs :many
268279
SELECT DISTINCT id FROM USERS;
269-

0 commit comments

Comments
 (0)