feat: generate identity proxies

#5182
pull/5391/head
mehmet-erim 5 years ago
parent 882e4e44db
commit dba3f21cfc

@ -30,5 +30,13 @@ export const environment = {
url: 'https://localhost:44305',
rootNamespace: 'Volo.Abp',
},
AbpTenantManagement: {
url: 'https://localhost:44305',
rootNamespace: 'Volo.Abp',
},
AbpIdentity: {
url: 'https://localhost:44305',
rootNamespace: 'Volo.Abp',
},
},
} as Config.Environment;

@ -1,9 +1,16 @@
import { Identity } from '../models/identity';
import { ABP } from '@abp/ng.core';
import { ABP, PagedAndSortedResultRequestDto } from '@abp/ng.core';
import {
GetIdentityUsersInput,
IdentityRoleCreateDto,
IdentityRoleUpdateDto,
IdentityUserCreateDto,
IdentityUserUpdateDto,
} from '../proxy/identity/models';
export class GetRoles {
static readonly type = '[Identity] Get Roles';
constructor(public payload?: ABP.PageQueryParams) {}
constructor(public payload?: PagedAndSortedResultRequestDto) {}
}
export class GetRoleById {
@ -18,17 +25,17 @@ export class DeleteRole {
export class CreateRole {
static readonly type = '[Identity] Create Role';
constructor(public payload: Identity.RoleSaveRequest) {}
constructor(public payload: IdentityRoleCreateDto) {}
}
export class UpdateRole {
static readonly type = '[Identity] Update Role';
constructor(public payload: Identity.RoleItem) {}
constructor(public payload: IdentityRoleUpdateDto & { id: string }) {}
}
export class GetUsers {
static readonly type = '[Identity] Get Users';
constructor(public payload?: ABP.PageQueryParams) {}
constructor(public payload?: GetIdentityUsersInput) {}
}
export class GetUserById {
@ -43,12 +50,12 @@ export class DeleteUser {
export class CreateUser {
static readonly type = '[Identity] Create User';
constructor(public payload: Identity.UserSaveRequest) {}
constructor(public payload: IdentityUserCreateDto) {}
}
export class UpdateUser {
static readonly type = '[Identity] Update User';
constructor(public payload: Identity.UserSaveRequest & { id: string }) {}
constructor(public payload: IdentityUserUpdateDto & { id: string }) {}
}
export class GetUserRoles {

@ -1,4 +1,4 @@
import { ListService } from '@abp/ng.core';
import { ListService, PagedAndSortedResultRequestDto } from '@abp/ng.core';
import { ePermissionManagementComponents } from '@abp/ng.permission-management';
import { Confirmation, ConfirmationService } from '@abp/ng.theme.shared';
import { Component, ElementRef, OnInit, ViewChild } from '@angular/core';
@ -13,7 +13,7 @@ import {
GetRoles,
UpdateRole,
} from '../../actions/identity.actions';
import { Identity } from '../../models/identity';
import { IdentityRoleDto } from '../../proxy/identity/models';
import { IdentityState } from '../../states/identity.state';
@Component({
@ -23,14 +23,14 @@ import { IdentityState } from '../../states/identity.state';
})
export class RolesComponent implements OnInit {
@Select(IdentityState.getRoles)
data$: Observable<Identity.RoleItem[]>;
data$: Observable<IdentityRoleDto[]>;
@Select(IdentityState.getRolesTotalCount)
totalCount$: Observable<number>;
form: FormGroup;
selected: Identity.RoleItem;
selected: IdentityRoleDto;
isModalVisible: boolean;
@ -50,7 +50,7 @@ export class RolesComponent implements OnInit {
};
constructor(
public readonly list: ListService,
public readonly list: ListService<PagedAndSortedResultRequestDto>,
private confirmationService: ConfirmationService,
private fb: FormBuilder,
private store: Store,
@ -77,7 +77,7 @@ export class RolesComponent implements OnInit {
}
add() {
this.selected = {} as Identity.RoleItem;
this.selected = {} as IdentityRoleDto;
this.openModal();
}

@ -23,6 +23,13 @@ import {
UpdateUser,
} from '../../actions/identity.actions';
import { Identity } from '../../models/identity';
import { IdentityRoleService } from '../../proxy/identity/identity-role.service';
import { IdentityUserService } from '../../proxy/identity/identity-user.service';
import {
GetIdentityUsersInput,
IdentityRoleDto,
IdentityUserDto,
} from '../../proxy/identity/models';
import { IdentityService } from '../../services/identity.service';
import { IdentityState } from '../../states/identity.state';
@ -33,7 +40,7 @@ import { IdentityState } from '../../states/identity.state';
})
export class UsersComponent implements OnInit {
@Select(IdentityState.getUsers)
data$: Observable<Identity.UserItem[]>;
data$: Observable<IdentityUserDto[]>;
@Select(IdentityState.getUsersTotalCount)
totalCount$: Observable<number>;
@ -43,11 +50,11 @@ export class UsersComponent implements OnInit {
form: FormGroup;
selected: Identity.UserItem;
selected: IdentityUserDto;
selectedUserRoles: Identity.RoleItem[];
selectedUserRoles: IdentityRoleDto[];
roles: Identity.RoleItem[];
roles: IdentityRoleDto[];
visiblePermissions = false;
@ -70,11 +77,12 @@ export class UsersComponent implements OnInit {
}
constructor(
public readonly list: ListService,
public readonly list: ListService<GetIdentityUsersInput>,
private confirmationService: ConfirmationService,
private fb: FormBuilder,
private store: Store,
private identityService: IdentityService,
private identityUserService: IdentityUserService,
) {}
ngOnInit() {
@ -82,7 +90,7 @@ export class UsersComponent implements OnInit {
}
buildForm() {
this.identityService.getUserAssingableRoles().subscribe(({ items }) => {
this.identityUserService.getAssignableRoles().subscribe(({ items }) => {
this.roles = items;
this.form = this.fb.group({
userName: [this.selected.userName || '', [Validators.required, Validators.maxLength(256)]],
@ -125,8 +133,8 @@ export class UsersComponent implements OnInit {
}
add() {
this.selected = {} as Identity.UserItem;
this.selectedUserRoles = [] as Identity.RoleItem[];
this.selected = {} as IdentityUserDto;
this.selectedUserRoles = [] as IdentityRoleDto[];
this.openModal();
}

@ -1,30 +1,46 @@
import { ABP } from '@abp/ng.core';
import { ABP, PagedResultDto } from '@abp/ng.core';
import { IdentityRoleDto, IdentityUserDto } from '../proxy/identity/models';
export namespace Identity {
export interface State {
roles: RoleResponse;
users: UserResponse;
selectedRole: RoleItem;
selectedUser: UserItem;
selectedUserRoles: RoleItem[];
roles: PagedResultDto<IdentityRoleDto>;
users: PagedResultDto<IdentityUserDto>;
selectedRole: IdentityRoleDto;
selectedUser: IdentityUserDto;
selectedUserRoles: IdentityRoleDto[];
}
/**
* @deprecated To be deleted in v4.0.
*/
export type RoleResponse = ABP.PagedResponse<RoleItem>;
/**
* @deprecated To be deleted in v4.0.
*/
export interface RoleSaveRequest {
name: string;
isDefault: boolean;
isPublic: boolean;
}
/**
* @deprecated To be deleted in v4.0.
*/
export interface RoleItem extends RoleSaveRequest {
isStatic: boolean;
concurrencyStamp: string;
id: string;
}
/**
* @deprecated To be deleted in v4.0.
*/
export type UserResponse = ABP.PagedResponse<UserItem>;
/**
* @deprecated To be deleted in v4.0.
*/
export interface UserItem extends User {
tenantId: string;
emailConfirmed: boolean;
@ -34,6 +50,9 @@ export namespace Identity {
id: string;
}
/**
* @deprecated To be deleted in v4.0.
*/
export interface User {
userName: string;
name: string;
@ -44,6 +63,9 @@ export namespace Identity {
lockoutEnabled: true;
}
/**
* @deprecated To be deleted in v4.0.
*/
export interface UserSaveRequest extends User {
password: string;
roleNames: string[];

@ -0,0 +1,58 @@
import type { ListResultDto, PagedAndSortedResultRequestDto, PagedResultDto } from '@abp/ng.core';
import { RestService } from '@abp/ng.core';
import { Injectable } from '@angular/core';
import type { IdentityRoleCreateDto, IdentityRoleDto, IdentityRoleUpdateDto } from './models';
@Injectable({
providedIn: 'root',
})
export class IdentityRoleService {
apiName = 'AbpIdentity';
create = (input: IdentityRoleCreateDto) =>
this.restService.request<any, IdentityRoleDto>({
method: 'POST',
url: '/api/identity/roles',
body: input,
},
{ apiName: this.apiName });
delete = (id: string) =>
this.restService.request<any, void>({
method: 'DELETE',
url: `/api/identity/roles/${id}`,
},
{ apiName: this.apiName });
get = (id: string) =>
this.restService.request<any, IdentityRoleDto>({
method: 'GET',
url: `/api/identity/roles/${id}`,
},
{ apiName: this.apiName });
getAllList = () =>
this.restService.request<any, ListResultDto<IdentityRoleDto>>({
method: 'GET',
url: '/api/identity/roles/all',
},
{ apiName: this.apiName });
getList = (input: PagedAndSortedResultRequestDto) =>
this.restService.request<any, PagedResultDto<IdentityRoleDto>>({
method: 'GET',
url: '/api/identity/roles',
params: { sorting: input.sorting, skipCount: input.skipCount, maxResultCount: input.maxResultCount },
},
{ apiName: this.apiName });
update = (id: string, input: IdentityRoleUpdateDto) =>
this.restService.request<any, IdentityRoleDto>({
method: 'PUT',
url: `/api/identity/roles/${id}`,
body: input,
},
{ apiName: this.apiName });
constructor(private restService: RestService) {}
}

@ -0,0 +1,44 @@
import type { UserLookupCountInputDto, UserLookupSearchInputDto } from './models';
import { RestService } from '@abp/ng.core';
import type { ListResultDto } from '@abp/ng.core';
import { Injectable } from '@angular/core';
import type { UserData } from '../users/models';
@Injectable({
providedIn: 'root',
})
export class IdentityUserLookupService {
apiName = 'AbpIdentity';
findById = (id: string) =>
this.restService.request<any, UserData>({
method: 'GET',
url: `/api/identity/users/lookup/${id}`,
},
{ apiName: this.apiName });
findByUserName = (userName: string) =>
this.restService.request<any, UserData>({
method: 'GET',
url: `/api/identity/users/lookup/by-username/${userName}`,
},
{ apiName: this.apiName });
getCount = (input: UserLookupCountInputDto) =>
this.restService.request<any, number>({
method: 'GET',
url: '/api/identity/users/lookup/count',
params: { filter: input.filter },
},
{ apiName: this.apiName });
search = (input: UserLookupSearchInputDto) =>
this.restService.request<any, ListResultDto<UserData>>({
method: 'GET',
url: '/api/identity/users/lookup/search',
params: { filter: input.filter, sorting: input.sorting, skipCount: input.skipCount, maxResultCount: input.maxResultCount },
},
{ apiName: this.apiName });
constructor(private restService: RestService) {}
}

@ -0,0 +1,87 @@
import type { GetIdentityUsersInput, IdentityRoleDto, IdentityUserCreateDto, IdentityUserDto, IdentityUserUpdateDto, IdentityUserUpdateRolesDto } from './models';
import { RestService } from '@abp/ng.core';
import type { ListResultDto, PagedResultDto } from '@abp/ng.core';
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root',
})
export class IdentityUserService {
apiName = 'AbpIdentity';
create = (input: IdentityUserCreateDto) =>
this.restService.request<any, IdentityUserDto>({
method: 'POST',
url: '/api/identity/users',
body: input,
},
{ apiName: this.apiName });
delete = (id: string) =>
this.restService.request<any, void>({
method: 'DELETE',
url: `/api/identity/users/${id}`,
},
{ apiName: this.apiName });
findByEmail = (email: string) =>
this.restService.request<any, IdentityUserDto>({
method: 'GET',
url: `/api/identity/users/by-email/${email}`,
},
{ apiName: this.apiName });
findByUsername = (username: string) =>
this.restService.request<any, IdentityUserDto>({
method: 'GET',
url: '/api/identity/users/by-username/{userName}',
},
{ apiName: this.apiName });
get = (id: string) =>
this.restService.request<any, IdentityUserDto>({
method: 'GET',
url: `/api/identity/users/${id}`,
},
{ apiName: this.apiName });
getAssignableRoles = () =>
this.restService.request<any, ListResultDto<IdentityRoleDto>>({
method: 'GET',
url: '/api/identity/users/assignable-roles',
},
{ apiName: this.apiName });
getList = (input: GetIdentityUsersInput) =>
this.restService.request<any, PagedResultDto<IdentityUserDto>>({
method: 'GET',
url: '/api/identity/users',
params: { filter: input.filter, sorting: input.sorting, skipCount: input.skipCount, maxResultCount: input.maxResultCount },
},
{ apiName: this.apiName });
getRoles = (id: string) =>
this.restService.request<any, ListResultDto<IdentityRoleDto>>({
method: 'GET',
url: `/api/identity/users/${id}/roles`,
},
{ apiName: this.apiName });
update = (id: string, input: IdentityUserUpdateDto) =>
this.restService.request<any, IdentityUserDto>({
method: 'PUT',
url: `/api/identity/users/${id}`,
body: input,
},
{ apiName: this.apiName });
updateRoles = (id: string, input: IdentityUserUpdateRolesDto) =>
this.restService.request<any, void>({
method: 'PUT',
url: `/api/identity/users/${id}/roles`,
body: input,
},
{ apiName: this.apiName });
constructor(private restService: RestService) {}
}

@ -0,0 +1,5 @@
export * from './identity-role.service';
export * from './identity-user-lookup.service';
export * from './identity-user.service';
export * from './models';
export * from './profile.service';

@ -0,0 +1,96 @@
import type { ExtensibleEntityDto, ExtensibleFullAuditedEntityDto, ExtensibleObject, PagedAndSortedResultRequestDto } from '@abp/ng.core';
export interface ChangePasswordInput {
currentPassword: string;
newPassword: string;
}
export interface GetIdentityUsersInput extends PagedAndSortedResultRequestDto {
filter: string;
}
export interface IdentityRoleCreateDto extends IdentityRoleCreateOrUpdateDtoBase {
}
export interface IdentityRoleCreateOrUpdateDtoBase extends ExtensibleObject {
name: string;
isDefault: boolean;
isPublic: boolean;
}
export interface IdentityRoleDto extends ExtensibleEntityDto<string> {
name: string;
isDefault: boolean;
isStatic: boolean;
isPublic: boolean;
concurrencyStamp: string;
}
export interface IdentityRoleUpdateDto extends IdentityRoleCreateOrUpdateDtoBase {
concurrencyStamp: string;
}
export interface IdentityUserCreateDto extends IdentityUserCreateOrUpdateDtoBase {
password: string;
}
export interface IdentityUserCreateOrUpdateDtoBase extends ExtensibleObject {
userName: string;
name: string;
surname: string;
email: string;
phoneNumber: string;
twoFactorEnabled: boolean;
lockoutEnabled: boolean;
roleNames: string[];
}
export interface IdentityUserDto extends ExtensibleFullAuditedEntityDto<string> {
tenantId?: string;
userName: string;
name: string;
surname: string;
email: string;
emailConfirmed: boolean;
phoneNumber: string;
phoneNumberConfirmed: boolean;
twoFactorEnabled: boolean;
lockoutEnabled: boolean;
lockoutEnd?: string;
concurrencyStamp: string;
}
export interface IdentityUserUpdateDto extends IdentityUserCreateOrUpdateDtoBase {
password: string;
concurrencyStamp: string;
}
export interface IdentityUserUpdateRolesDto {
roleNames: string[];
}
export interface ProfileDto extends ExtensibleObject {
userName: string;
email: string;
name: string;
surname: string;
phoneNumber: string;
isExternal: boolean;
hasPassword: boolean;
}
export interface UpdateProfileDto extends ExtensibleObject {
userName: string;
email: string;
name: string;
surname: string;
phoneNumber: string;
}
export interface UserLookupCountInputDto {
filter: string;
}
export interface UserLookupSearchInputDto extends PagedAndSortedResultRequestDto {
filter: string;
}

@ -0,0 +1,35 @@
import type { ChangePasswordInput, ProfileDto, UpdateProfileDto } from './models';
import { RestService } from '@abp/ng.core';
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root',
})
export class ProfileService {
apiName = 'AbpIdentity';
changePassword = (input: ChangePasswordInput) =>
this.restService.request<any, void>({
method: 'POST',
url: '/api/identity/my-profile/change-password',
body: input,
},
{ apiName: this.apiName });
get = () =>
this.restService.request<any, ProfileDto>({
method: 'GET',
url: '/api/identity/my-profile',
},
{ apiName: this.apiName });
update = (input: UpdateProfileDto) =>
this.restService.request<any, ProfileDto>({
method: 'PUT',
url: '/api/identity/my-profile',
body: input,
},
{ apiName: this.apiName });
constructor(private restService: RestService) {}
}

@ -0,0 +1,12 @@
export interface UserData {
id: string;
tenantId?: string;
userName: string;
name: string;
surname: string;
email: string;
emailConfirmed: boolean;
phoneNumber: string;
phoneNumberConfirmed: boolean;
}

@ -1,5 +1,6 @@
import { Injectable } from '@angular/core';
import { Action, Selector, State, StateContext } from '@ngxs/store';
import { switchMap, tap, pluck } from 'rxjs/operators';
import { pluck, tap } from 'rxjs/operators';
import {
CreateRole,
CreateUser,
@ -8,14 +9,15 @@ import {
GetRoleById,
GetRoles,
GetUserById,
GetUserRoles,
GetUsers,
UpdateRole,
UpdateUser,
GetUserRoles,
} from '../actions/identity.actions';
import { Identity } from '../models/identity';
import { IdentityService } from '../services/identity.service';
import { Injectable } from '@angular/core';
import { IdentityRoleService } from '../proxy/identity/identity-role.service';
import { IdentityUserService } from '../proxy/identity/identity-user.service';
import { IdentityUserDto } from '../proxy/identity/models';
@State<Identity.State>({
name: 'IdentityState',
@ -34,7 +36,7 @@ export class IdentityState {
}
@Selector()
static getUsers({ users }: Identity.State): Identity.UserItem[] {
static getUsers({ users }: Identity.State): IdentityUserDto[] {
return users.items || [];
}
@ -43,11 +45,14 @@ export class IdentityState {
return users.totalCount || 0;
}
constructor(private identityService: IdentityService) {}
constructor(
private identityUserService: IdentityUserService,
private identityRoleService: IdentityRoleService,
) {}
@Action(GetRoles)
getRoles({ patchState }: StateContext<Identity.State>, { payload }: GetRoles) {
return this.identityService.getRoles(payload).pipe(
return this.identityRoleService.getList(payload).pipe(
tap(roles =>
patchState({
roles,
@ -58,7 +63,7 @@ export class IdentityState {
@Action(GetRoleById)
getRole({ patchState }: StateContext<Identity.State>, { payload }: GetRoleById) {
return this.identityService.getRoleById(payload).pipe(
return this.identityRoleService.get(payload).pipe(
tap(selectedRole =>
patchState({
selectedRole,
@ -69,22 +74,22 @@ export class IdentityState {
@Action(DeleteRole)
deleteRole(_, { payload }: GetRoleById) {
return this.identityService.deleteRole(payload);
return this.identityRoleService.delete(payload);
}
@Action(CreateRole)
addRole(_, { payload }: CreateRole) {
return this.identityService.createRole(payload);
return this.identityRoleService.create(payload);
}
@Action(UpdateRole)
updateRole({ getState }: StateContext<Identity.State>, { payload }: UpdateRole) {
return this.identityService.updateRole({ ...getState().selectedRole, ...payload });
return this.identityRoleService.update(payload.id, { ...getState().selectedRole, ...payload });
}
@Action(GetUsers)
getUsers({ patchState }: StateContext<Identity.State>, { payload }: GetUsers) {
return this.identityService.getUsers(payload).pipe(
return this.identityUserService.getList(payload).pipe(
tap(users =>
patchState({
users,
@ -95,7 +100,7 @@ export class IdentityState {
@Action(GetUserById)
getUser({ patchState }: StateContext<Identity.State>, { payload }: GetUserById) {
return this.identityService.getUserById(payload).pipe(
return this.identityUserService.get(payload).pipe(
tap(selectedUser =>
patchState({
selectedUser,
@ -106,22 +111,22 @@ export class IdentityState {
@Action(DeleteUser)
deleteUser(_, { payload }: GetUserById) {
return this.identityService.deleteUser(payload);
return this.identityUserService.delete(payload);
}
@Action(CreateUser)
addUser(_, { payload }: CreateUser) {
return this.identityService.createUser(payload);
return this.identityUserService.create(payload);
}
@Action(UpdateUser)
updateUser({ getState }: StateContext<Identity.State>, { payload }: UpdateUser) {
return this.identityService.updateUser({ ...getState().selectedUser, ...payload });
return this.identityUserService.update(payload.id, { ...getState().selectedUser, ...payload });
}
@Action(GetUserRoles)
getUserRoles({ patchState }: StateContext<Identity.State>, { payload }: GetUserRoles) {
return this.identityService.getUserRoles(payload).pipe(
return this.identityUserService.getRoles(payload).pipe(
pluck('items'),
tap(selectedUserRoles =>
patchState({

@ -9,3 +9,5 @@ export * from './lib/components';
export * from './lib/models/identity';
export * from './lib/services';
export * from './lib/states/identity.state';
export * from './lib/proxy/identity';
export * from './lib/proxy/users';

Loading…
Cancel
Save