diff --git a/cli/testdata/coder_list_--output_json.golden b/cli/testdata/coder_list_--output_json.golden index 9cdaa98c3f813..c37c89c4efe2a 100644 --- a/cli/testdata/coder_list_--output_json.golden +++ b/cli/testdata/coder_list_--output_json.golden @@ -24,7 +24,6 @@ "workspace_name": "test-workspace", "workspace_owner_id": "==========[first user ID]===========", "workspace_owner_name": "testuser", - "workspace_owner_avatar_url": "", "template_version_id": "============[version ID]============", "template_version_name": "===========[version name]===========", "build_number": 1, diff --git a/cli/testdata/coder_users_list_--output_json.golden b/cli/testdata/coder_users_list_--output_json.golden index 61b17e026d290..7243200f6bdb1 100644 --- a/cli/testdata/coder_users_list_--output_json.golden +++ b/cli/testdata/coder_users_list_--output_json.golden @@ -2,7 +2,6 @@ { "id": "==========[first user ID]===========", "username": "testuser", - "avatar_url": "", "name": "Test User", "email": "testuser@coder.com", "created_at": "====[timestamp]=====", @@ -23,8 +22,6 @@ { "id": "==========[second user ID]==========", "username": "testuser2", - "avatar_url": "", - "name": "", "email": "testuser2@coder.com", "created_at": "====[timestamp]=====", "updated_at": "====[timestamp]=====", diff --git a/codersdk/organizations.go b/codersdk/organizations.go index dd2eab50cf57e..728540ef2e6e1 100644 --- a/codersdk/organizations.go +++ b/codersdk/organizations.go @@ -74,8 +74,8 @@ type OrganizationMember struct { type OrganizationMemberWithUserData struct { Username string `table:"username,default_sort" json:"username"` - Name string `table:"name" json:"name"` - AvatarURL string `json:"avatar_url"` + Name string `table:"name" json:"name,omitempty"` + AvatarURL string `json:"avatar_url,omitempty"` Email string `json:"email"` GlobalRoles []SlimRole `json:"global_roles"` OrganizationMember `table:"m,recursive_inline"` diff --git a/codersdk/users.go b/codersdk/users.go index 3d9d95e683066..3207e3fbabaa1 100644 --- a/codersdk/users.go +++ b/codersdk/users.go @@ -40,7 +40,7 @@ type UsersRequest struct { type MinimalUser struct { ID uuid.UUID `json:"id" validate:"required" table:"id" format:"uuid"` Username string `json:"username" validate:"required" table:"username,default_sort"` - AvatarURL string `json:"avatar_url" format:"uri"` + AvatarURL string `json:"avatar_url,omitempty" format:"uri"` } // ReducedUser omits role and organization information. Roles are deduced from @@ -49,11 +49,11 @@ type MinimalUser struct { // required by the frontend. type ReducedUser struct { MinimalUser `table:"m,recursive_inline"` - Name string `json:"name"` + Name string `json:"name,omitempty"` Email string `json:"email" validate:"required" table:"email" format:"email"` CreatedAt time.Time `json:"created_at" validate:"required" table:"created at" format:"date-time"` UpdatedAt time.Time `json:"updated_at" table:"updated at" format:"date-time"` - LastSeenAt time.Time `json:"last_seen_at" format:"date-time"` + LastSeenAt time.Time `json:"last_seen_at,omitempty" format:"date-time"` Status UserStatus `json:"status" table:"status" enums:"active,suspended"` LoginType LoginType `json:"login_type"` diff --git a/codersdk/workspacebuilds.go b/codersdk/workspacebuilds.go index 7b67dc3b86171..ee31876f44fab 100644 --- a/codersdk/workspacebuilds.go +++ b/codersdk/workspacebuilds.go @@ -58,7 +58,7 @@ type WorkspaceBuild struct { WorkspaceName string `json:"workspace_name"` WorkspaceOwnerID uuid.UUID `json:"workspace_owner_id" format:"uuid"` WorkspaceOwnerName string `json:"workspace_owner_name"` - WorkspaceOwnerAvatarURL string `json:"workspace_owner_avatar_url"` + WorkspaceOwnerAvatarURL string `json:"workspace_owner_avatar_url,omitempty"` TemplateVersionID uuid.UUID `json:"template_version_id" format:"uuid"` TemplateVersionName string `json:"template_version_name"` BuildNumber int32 `json:"build_number"` diff --git a/site/src/api/typesGenerated.ts b/site/src/api/typesGenerated.ts index 95546529feac9..74631c2be32fd 100644 --- a/site/src/api/typesGenerated.ts +++ b/site/src/api/typesGenerated.ts @@ -1366,7 +1366,7 @@ export interface MinimalOrganization { export interface MinimalUser { readonly id: string; readonly username: string; - readonly avatar_url: string; + readonly avatar_url?: string; } // From netcheck/netcheck.go @@ -1639,8 +1639,8 @@ export interface OrganizationMember { // From codersdk/organizations.go export interface OrganizationMemberWithUserData extends OrganizationMember { readonly username: string; - readonly name: string; - readonly avatar_url: string; + readonly name?: string; + readonly avatar_url?: string; readonly email: string; readonly global_roles: readonly SlimRole[]; } @@ -2253,11 +2253,11 @@ export interface RateLimitConfig { // From codersdk/users.go export interface ReducedUser extends MinimalUser { - readonly name: string; + readonly name?: string; readonly email: string; readonly created_at: string; readonly updated_at: string; - readonly last_seen_at: string; + readonly last_seen_at?: string; readonly status: UserStatus; readonly login_type: LoginType; readonly theme_preference?: string; @@ -3609,7 +3609,7 @@ export interface WorkspaceBuild { readonly workspace_name: string; readonly workspace_owner_id: string; readonly workspace_owner_name: string; - readonly workspace_owner_avatar_url: string; + readonly workspace_owner_avatar_url?: string; readonly template_version_id: string; readonly template_version_name: string; readonly build_number: number; diff --git a/site/src/components/UserAutocomplete/UserAutocomplete.tsx b/site/src/components/UserAutocomplete/UserAutocomplete.tsx index e375116cd2d22..c1b86e4d23afc 100644 --- a/site/src/components/UserAutocomplete/UserAutocomplete.tsx +++ b/site/src/components/UserAutocomplete/UserAutocomplete.tsx @@ -20,7 +20,7 @@ import { prepareQuery } from "utils/filters"; // The common properties between users and org members that we need. export type SelectedUser = { - avatar_url: string; + avatar_url?: string; email: string; username: string; }; diff --git a/site/src/pages/ChatPage/ChatLanding.tsx b/site/src/pages/ChatPage/ChatLanding.tsx index fb49c609e6639..2902ae8663da5 100644 --- a/site/src/pages/ChatPage/ChatLanding.tsx +++ b/site/src/pages/ChatPage/ChatLanding.tsx @@ -62,7 +62,7 @@ const ChatLanding: FC = () => { textAlign: "center", }} > - Good evening, {user?.name.split(" ")[0]} + Good evening, {(user.name ?? user.username).split(" ")[0]}

{ // Given const mockInitialValues: UpdateUserProfileRequest = { username: MockUserMember.username, - name: MockUserMember.name, + name: MockUserMember.name ?? MockUserMember.username, }; // When @@ -44,7 +44,7 @@ describe("AccountForm", () => { // Given const mockInitialValues: UpdateUserProfileRequest = { username: MockUserMember.username, - name: MockUserMember.name, + name: MockUserMember.name ?? MockUserMember.username, }; // When diff --git a/site/src/pages/UserSettingsPage/AccountPage/AccountPage.tsx b/site/src/pages/UserSettingsPage/AccountPage/AccountPage.tsx index c013e9086b242..7772d00fba856 100644 --- a/site/src/pages/UserSettingsPage/AccountPage/AccountPage.tsx +++ b/site/src/pages/UserSettingsPage/AccountPage/AccountPage.tsx @@ -29,7 +29,7 @@ const AccountPage: FC = () => { email={me.email} updateProfileError={updateProfileError} isLoading={isUpdatingProfile} - initialValues={{ username: me.username, name: me.name }} + initialValues={{ username: me.username, name: me.name ?? "" }} onSubmit={updateProfile} /> diff --git a/site/src/testHelpers/entities.ts b/site/src/testHelpers/entities.ts index 1e8d6f3aa7b0b..0b0041ffdf18c 100644 --- a/site/src/testHelpers/entities.ts +++ b/site/src/testHelpers/entities.ts @@ -539,8 +539,8 @@ export const MockOrganizationMember: TypesGen.OrganizationMemberWithUserData = { user_id: MockUserOwner.id, username: MockUserOwner.username, email: MockUserOwner.email, - created_at: "", - updated_at: "", + updated_at: "2025-05-22T17:51:49.49745Z", + created_at: "2025-05-22T17:51:49.497449Z", name: MockUserOwner.name, avatar_url: MockUserOwner.avatar_url, global_roles: MockUserOwner.roles, @@ -553,8 +553,8 @@ export const MockOrganizationMember2: TypesGen.OrganizationMemberWithUserData = user_id: MockUserMember.id, username: MockUserMember.username, email: MockUserMember.email, - created_at: "", - updated_at: "", + updated_at: "2025-05-22T17:51:49.49745Z", + created_at: "2025-05-22T17:51:49.497449Z", name: MockUserMember.name, avatar_url: MockUserMember.avatar_url, global_roles: MockUserMember.roles,