import { ResourceUtils, Resource, InstanceResource, HasInstanceResource, GetEnabled, UpdateEnabled, CreateEnabled, DeleteEnabled, PaginatedListEnabled, Paginated, Sortable, PaginatedListResponse, EmptyResponse, EntityUtils } from '../../../lib/core-sdk' export interface CreateUserRequest{ name : string, position : string, fullProfileUrl : string } function normalizeUserDetail(userDetail : UserDetail) : UserDetail{ EntityUtils.addIdProperty(userDetail,"userId") EntityUtils.renameProperty(userDetail,"full_profile_url","fullProfileUrl") return userDetail } export interface UpdateUserRequest extends CreateUserRequest{ } export enum UsersSortableFields { NAME = 'name', USER_ID = 'userId', } export interface UserListParameters extends Paginated, Sortable {} export interface UserDetail{ id : number userId : number, name : string, position : string fullProfileUrl : string } export interface User{ id : number, userId : number, name : string } export class UsersResource extends Resource implements HasInstanceResource, CreateEnabled, PaginatedListEnabled { withId = (id: any):UserDetailResource =>{ return new UserDetailResource(id,this.getPath(),this.getClient()); }; create = (request : CreateUserRequest) : Promise =>{ request = EntityUtils.copyData(request); EntityUtils.renameProperty(request,"fullProfileUrl","full_profile_url") return ResourceUtils.CallCreate(this,request).then((data:UserDetail) => { return normalizeUserDetail(data); }) } list = (parameters : UserListParameters) : Promise> =>{ return ResourceUtils.CallPaginatedListWithSuffix(this,null,"users",parameters,(response) => { response.items.forEach((val:User) => { EntityUtils.addIdProperty(val,"userId") }); return response; }); } } export class UserDetailResource extends InstanceResource implements GetEnabled, UpdateEnabled, DeleteEnabled { get = ():Promise =>{ return ResourceUtils.CallGet(this,null).then(normalizeUserDetail); } update = (request:UpdateUserRequest):Promise=>{ request = EntityUtils.copyData(request); (request).userId = this.id EntityUtils.renameProperty(request,"fullProfileUrl","full_profile_url") return ResourceUtils.CallUpdate(this,request).then(normalizeUserDetail) } delete = () : Promise => { return ResourceUtils.CallDelete(this,null); } }