Skip to content

Commit 94c129c

Browse files
fix!: omit name, avatar_url and last_seen_at from responses when empty (#18005)
User name, avatar URL, and last seen at, are not required fields so they can be empty. Instead of returning the 0 values from Go, we want to make it more agnostic, and omit them when they are empty. This make the docs and usage way clearer for consumers.
1 parent 96f69b8 commit 94c129c

File tree

11 files changed

+21
-25
lines changed

11 files changed

+21
-25
lines changed

cli/testdata/coder_list_--output_json.golden

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
"workspace_name": "test-workspace",
2525
"workspace_owner_id": "==========[first user ID]===========",
2626
"workspace_owner_name": "testuser",
27-
"workspace_owner_avatar_url": "",
2827
"template_version_id": "============[version ID]============",
2928
"template_version_name": "===========[version name]===========",
3029
"build_number": 1,

cli/testdata/coder_users_list_--output_json.golden

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
{
33
"id": "==========[first user ID]===========",
44
"username": "testuser",
5-
"avatar_url": "",
65
"name": "Test User",
76
"email": "testuser@coder.com",
87
"created_at": "====[timestamp]=====",
@@ -23,8 +22,6 @@
2322
{
2423
"id": "==========[second user ID]==========",
2524
"username": "testuser2",
26-
"avatar_url": "",
27-
"name": "",
2825
"email": "testuser2@coder.com",
2926
"created_at": "====[timestamp]=====",
3027
"updated_at": "====[timestamp]=====",

codersdk/organizations.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,8 @@ type OrganizationMember struct {
7474

7575
type OrganizationMemberWithUserData struct {
7676
Username string `table:"username,default_sort" json:"username"`
77-
Name string `table:"name" json:"name"`
78-
AvatarURL string `json:"avatar_url"`
77+
Name string `table:"name" json:"name,omitempty"`
78+
AvatarURL string `json:"avatar_url,omitempty"`
7979
Email string `json:"email"`
8080
GlobalRoles []SlimRole `json:"global_roles"`
8181
OrganizationMember `table:"m,recursive_inline"`

codersdk/users.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ type UsersRequest struct {
4040
type MinimalUser struct {
4141
ID uuid.UUID `json:"id" validate:"required" table:"id" format:"uuid"`
4242
Username string `json:"username" validate:"required" table:"username,default_sort"`
43-
AvatarURL string `json:"avatar_url" format:"uri"`
43+
AvatarURL string `json:"avatar_url,omitempty" format:"uri"`
4444
}
4545

4646
// ReducedUser omits role and organization information. Roles are deduced from
@@ -49,11 +49,11 @@ type MinimalUser struct {
4949
// required by the frontend.
5050
type ReducedUser struct {
5151
MinimalUser `table:"m,recursive_inline"`
52-
Name string `json:"name"`
52+
Name string `json:"name,omitempty"`
5353
Email string `json:"email" validate:"required" table:"email" format:"email"`
5454
CreatedAt time.Time `json:"created_at" validate:"required" table:"created at" format:"date-time"`
5555
UpdatedAt time.Time `json:"updated_at" table:"updated at" format:"date-time"`
56-
LastSeenAt time.Time `json:"last_seen_at" format:"date-time"`
56+
LastSeenAt time.Time `json:"last_seen_at,omitempty" format:"date-time"`
5757

5858
Status UserStatus `json:"status" table:"status" enums:"active,suspended"`
5959
LoginType LoginType `json:"login_type"`

codersdk/workspacebuilds.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ type WorkspaceBuild struct {
5858
WorkspaceName string `json:"workspace_name"`
5959
WorkspaceOwnerID uuid.UUID `json:"workspace_owner_id" format:"uuid"`
6060
WorkspaceOwnerName string `json:"workspace_owner_name"`
61-
WorkspaceOwnerAvatarURL string `json:"workspace_owner_avatar_url"`
61+
WorkspaceOwnerAvatarURL string `json:"workspace_owner_avatar_url,omitempty"`
6262
TemplateVersionID uuid.UUID `json:"template_version_id" format:"uuid"`
6363
TemplateVersionName string `json:"template_version_name"`
6464
BuildNumber int32 `json:"build_number"`

site/src/api/typesGenerated.ts

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

site/src/components/UserAutocomplete/UserAutocomplete.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import { prepareQuery } from "utils/filters";
2020

2121
// The common properties between users and org members that we need.
2222
export type SelectedUser = {
23-
avatar_url: string;
23+
avatar_url?: string;
2424
email: string;
2525
username: string;
2626
};

site/src/pages/ChatPage/ChatLanding.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ const ChatLanding: FC = () => {
6262
textAlign: "center",
6363
}}
6464
>
65-
Good evening, {user?.name.split(" ")[0]}
65+
Good evening, {(user.name ?? user.username).split(" ")[0]}
6666
</h1>
6767
<p
6868
css={{

site/src/pages/UserSettingsPage/AccountPage/AccountForm.test.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ describe("AccountForm", () => {
1313
// Given
1414
const mockInitialValues: UpdateUserProfileRequest = {
1515
username: MockUserMember.username,
16-
name: MockUserMember.name,
16+
name: MockUserMember.name ?? MockUserMember.username,
1717
};
1818

1919
// When
@@ -44,7 +44,7 @@ describe("AccountForm", () => {
4444
// Given
4545
const mockInitialValues: UpdateUserProfileRequest = {
4646
username: MockUserMember.username,
47-
name: MockUserMember.name,
47+
name: MockUserMember.name ?? MockUserMember.username,
4848
};
4949

5050
// When

site/src/pages/UserSettingsPage/AccountPage/AccountPage.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ const AccountPage: FC = () => {
2929
email={me.email}
3030
updateProfileError={updateProfileError}
3131
isLoading={isUpdatingProfile}
32-
initialValues={{ username: me.username, name: me.name }}
32+
initialValues={{ username: me.username, name: me.name ?? "" }}
3333
onSubmit={updateProfile}
3434
/>
3535
</Section>

site/src/testHelpers/entities.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -539,8 +539,8 @@ export const MockOrganizationMember: TypesGen.OrganizationMemberWithUserData = {
539539
user_id: MockUserOwner.id,
540540
username: MockUserOwner.username,
541541
email: MockUserOwner.email,
542-
created_at: "",
543-
updated_at: "",
542+
updated_at: "2025-05-22T17:51:49.49745Z",
543+
created_at: "2025-05-22T17:51:49.497449Z",
544544
name: MockUserOwner.name,
545545
avatar_url: MockUserOwner.avatar_url,
546546
global_roles: MockUserOwner.roles,
@@ -553,8 +553,8 @@ export const MockOrganizationMember2: TypesGen.OrganizationMemberWithUserData =
553553
user_id: MockUserMember.id,
554554
username: MockUserMember.username,
555555
email: MockUserMember.email,
556-
created_at: "",
557-
updated_at: "",
556+
updated_at: "2025-05-22T17:51:49.49745Z",
557+
created_at: "2025-05-22T17:51:49.497449Z",
558558
name: MockUserMember.name,
559559
avatar_url: MockUserMember.avatar_url,
560560
global_roles: MockUserMember.roles,

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy