33 * interface that drives generated API documentation.
44 */
55
6- import type { RawUserGetResponse } from './users.types' ;
6+ import type {
7+ RawUserGetResponse ,
8+ UserCreateData ,
9+ UserCreateOptions ,
10+ UserOperationResult ,
11+ UserUpdateOptions ,
12+ UserUpdateResponse ,
13+ } from './users.types' ;
714
815/**
9- * User returned by the Users service.
16+ * User with attached methods
1017 */
11- export interface UserGetResponse extends RawUserGetResponse { }
18+ export type UserGetResponse = RawUserGetResponse & UserMethods ;
19+
20+ /**
21+ * Response from `create()`.
22+ *
23+ * `result` reflects the request as a whole; `users` contains the created users.
24+ */
25+ export interface UserCreateResponse {
26+ /** Overall outcome of the create request. */
27+ result : UserOperationResult ;
28+ /** The created users. */
29+ users : UserGetResponse [ ] ;
30+ }
1231
1332/**
1433 * Service model for managing users in a UiPath organization.
1534 *
16- * Provides organization-level user administration.
35+ * Provides organization-level user administration: retrieving, updating and
36+ * deleting users, creating users in bulk, and inviting users by email.
1737 *
1838 * ### Usage
1939 *
@@ -31,17 +51,157 @@ export interface UserServiceModel {
3151 * Gets a user by ID.
3252 *
3353 * Returns the full user details including profile fields, group membership,
34- * activity flags and invitation state.
54+ * activity flags and invitation state, with entity methods attached
55+ * (`update`, `delete`).
3556 *
3657 * @param userId - User GUID
37- * @returns Promise resolving to the user
58+ * @returns Promise resolving to the user with methods
3859 * {@link UserGetResponse}
3960 *
4061 * @example
4162 * ```typescript
4263 * const user = await users.getById('<userId>');
4364 * console.log(`${user.displayName} (${user.email}) — active: ${user.isActive}`);
65+ *
66+ * // Operate on the user directly via bound methods
67+ * await user.update({ displayName: 'New Name' });
4468 * ```
4569 */
4670 getById ( userId : string ) : Promise < UserGetResponse > ;
71+
72+ /**
73+ * Updates a user. Only the provided fields are changed.
74+ *
75+ * @param userId - User GUID
76+ * @param options - Fields to update
77+ * @returns Promise resolving to the operation outcome
78+ * {@link UserUpdateResponse}
79+ *
80+ * @example
81+ * ```typescript
82+ * // First, get the user with users.getById() or from users.create()
83+ * const result = await users.updateById('<userId>', { displayName: 'New Name' });
84+ * if (result.succeeded) {
85+ * console.log('User updated');
86+ * }
87+ * ```
88+ *
89+ * @example Manage group membership
90+ * ```typescript
91+ * await users.updateById('<userId>', {
92+ * groupIdsToAdd: ['<groupId-1>'],
93+ * groupIdsToRemove: ['<groupId-2>'],
94+ * });
95+ * ```
96+ */
97+ updateById ( userId : string , options : UserUpdateOptions ) : Promise < UserUpdateResponse > ;
98+
99+ /**
100+ * Deletes a user.
101+ *
102+ * @param userId - User GUID
103+ * @returns Promise that resolves when the user is deleted
104+ *
105+ * @example
106+ * ```typescript
107+ * await users.deleteById('<userId>');
108+ * ```
109+ */
110+ deleteById ( userId : string ) : Promise < void > ;
111+
112+ /**
113+ * Creates users in bulk.
114+ *
115+ * Returns the created users with entity methods attached (`update`, `delete`).
116+ * A single invalid user fails the whole request — check `result.errors` for
117+ * the reason.
118+ *
119+ * @param users - Users to create
120+ * @param organizationId - Organization GUID the users belong to
121+ * @param options - Optional group assignment applied to every created user
122+ * @returns Promise resolving to the overall outcome and the created users
123+ * {@link UserCreateResponse}
124+ *
125+ * @example
126+ * ```typescript
127+ * const response = await users.create(
128+ * [{ userName: 'jdoe', email: 'jdoe@acme .com', name: 'Jane', surname: 'Doe' }],
129+ * '<organizationId>'
130+ * );
131+ * if (response.result.succeeded) {
132+ * console.log(`Created ${response.users[0].id}`);
133+ * }
134+ * ```
135+ *
136+ * @example Add every created user to groups
137+ * ```typescript
138+ * const response = await users.create(
139+ * [{ userName: 'jdoe', email: 'jdoe@acme .com' }],
140+ * '<organizationId>',
141+ * { groupIds: ['<groupId>'] }
142+ * );
143+ * ```
144+ */
145+ create (
146+ users : UserCreateData [ ] ,
147+ organizationId : string ,
148+ options ?: UserCreateOptions
149+ ) : Promise < UserCreateResponse > ;
150+
151+ }
152+
153+ /**
154+ * Methods attached to user objects returned by `getById()` and `create()`.
155+ */
156+ export interface UserMethods {
157+ /**
158+ * Updates this user. Only the provided fields are changed.
159+ *
160+ * @param options - Fields to update
161+ * @returns Promise resolving to the operation outcome
162+ */
163+ update ( options : UserUpdateOptions ) : Promise < UserUpdateResponse > ;
164+
165+ /**
166+ * Deletes this user.
167+ *
168+ * @returns Promise that resolves when the user is deleted
169+ */
170+ delete ( ) : Promise < void > ;
171+ }
172+
173+ /**
174+ * Creates methods for a user
175+ *
176+ * @param userData - The user data (response from API)
177+ * @param service - The user service instance
178+ * @returns Object containing user methods
179+ */
180+ function createUserMethods ( userData : RawUserGetResponse , service : UserServiceModel ) : UserMethods {
181+ return {
182+ async update ( options : UserUpdateOptions ) : Promise < UserUpdateResponse > {
183+ if ( ! userData . id ) throw new Error ( 'User ID is undefined' ) ;
184+ return service . updateById ( userData . id , options ) ;
185+ } ,
186+
187+ async delete ( ) : Promise < void > {
188+ if ( ! userData . id ) throw new Error ( 'User ID is undefined' ) ;
189+ return service . deleteById ( userData . id ) ;
190+ } ,
191+ } ;
192+ }
193+
194+ /**
195+ * Attaches methods to a user object
196+ *
197+ * @param userData - The user data (response from API)
198+ * @param service - The user service instance
199+ * @returns User data with methods attached
200+ */
201+ export function createUserWithMethods (
202+ userData : RawUserGetResponse ,
203+ service : UserServiceModel
204+ ) : UserGetResponse {
205+ const methods = createUserMethods ( userData , service ) ;
206+ return Object . assign ( { } , userData , methods ) ;
47207}
0 commit comments