From 6dbab6442f222fe12b9dfc0c97aa966b553505d8 Mon Sep 17 00:00:00 2001 From: tanshu Date: Tue, 12 May 2020 01:31:21 +0530 Subject: [PATCH] Renamed groups to roles in the frontend Working: Account Cost Centre Employee Product Group Product Role User Client --- brewman/models/master.py | 6 +- brewman/routers/account.py | 4 +- brewman/routers/account_types.py | 2 +- brewman/routers/auth/client.py | 2 +- brewman/routers/auth/role.py | 12 +-- brewman/routers/auth/user.py | 8 +- brewman/routers/cost_centre.py | 14 ++-- brewman/routers/employee.py | 4 +- brewman/routers/product.py | 4 +- brewman/routers/product_group.py | 4 +- brewman/schemas/auth.py | 4 +- overlord/src/app/app-routing.module.ts | 4 +- overlord/src/app/auth/auth-guard.service.ts | 5 +- overlord/src/app/client/client.service.ts | 3 +- overlord/src/app/core/account.service.ts | 20 ++--- .../app/core/nav-bar/nav-bar.component.html | 2 +- .../app/cost-centre/cost-centre.service.ts | 7 +- overlord/src/app/employee/employee.service.ts | 9 +-- .../app/group/group-resolver.service.spec.ts | 15 ---- .../app/group/group-routing.module.spec.ts | 13 ---- overlord/src/app/group/group.module.spec.ts | 13 ---- overlord/src/app/group/group.service.spec.ts | 15 ---- overlord/src/app/group/group.service.ts | 73 ------------------- .../product-group/product-group.service.ts | 7 +- .../product-detail.component.html | 2 +- overlord/src/app/product/product.service.ts | 21 ++---- .../role-detail/role-detail.component.css} | 0 .../role-detail/role-detail.component.html} | 2 +- .../role-detail.component.spec.ts} | 12 +-- .../role-detail/role-detail.component.ts} | 26 +++---- .../role-list-resolver.service.spec.ts} | 2 +- .../role-list-resolver.service.ts} | 10 +-- .../role-list/role-list-datasource.ts} | 12 +-- .../role-list/role-list.component.css} | 0 .../role-list/role-list.component.html} | 6 +- .../role-list/role-list.component.spec.ts} | 12 +-- .../role-list/role-list.component.ts} | 20 ++--- .../app/role/role-resolver.service.spec.ts | 15 ++++ .../role-resolver.service.ts} | 10 +-- .../src/app/role/role-routing.module.spec.ts | 13 ++++ .../role-routing.module.ts} | 30 ++++---- overlord/src/app/role/role.module.spec.ts | 13 ++++ .../group.module.ts => role/role.module.ts} | 14 ++-- overlord/src/app/role/role.service.spec.ts | 15 ++++ overlord/src/app/role/role.service.ts | 64 ++++++++++++++++ .../src/app/{group/group.ts => role/role.ts} | 2 +- .../user-detail/user-detail.component.html | 2 +- .../user/user-detail/user-detail.component.ts | 2 +- .../user/user-list/user-list.component.html | 2 +- overlord/src/app/user/user.service.ts | 10 +-- 50 files changed, 272 insertions(+), 295 deletions(-) delete mode 100644 overlord/src/app/group/group-resolver.service.spec.ts delete mode 100644 overlord/src/app/group/group-routing.module.spec.ts delete mode 100644 overlord/src/app/group/group.module.spec.ts delete mode 100644 overlord/src/app/group/group.service.spec.ts delete mode 100644 overlord/src/app/group/group.service.ts rename overlord/src/app/{group/group-detail/group-detail.component.css => role/role-detail/role-detail.component.css} (100%) rename overlord/src/app/{group/group-detail/group-detail.component.html => role/role-detail/role-detail.component.html} (96%) rename overlord/src/app/{group/group-detail/group-detail.component.spec.ts => role/role-detail/role-detail.component.spec.ts} (54%) rename overlord/src/app/{group/group-detail/group-detail.component.ts => role/role-detail/role-detail.component.ts} (80%) rename overlord/src/app/{group/group-list-resolver.service.spec.ts => role/role-list-resolver.service.spec.ts} (83%) rename overlord/src/app/{group/group-list-resolver.service.ts => role/role-list-resolver.service.ts} (58%) rename overlord/src/app/{group/group-list/group-list-datasource.ts => role/role-list/role-list-datasource.ts} (85%) rename overlord/src/app/{group/group-list/group-list.component.css => role/role-list/role-list.component.css} (100%) rename overlord/src/app/{group/group-list/group-list.component.html => role/role-list/role-list.component.html} (85%) rename overlord/src/app/{group/group-list/group-list.component.spec.ts => role/role-list/role-list.component.spec.ts} (54%) rename overlord/src/app/{group/group-list/group-list.component.ts => role/role-list/role-list.component.ts} (58%) create mode 100644 overlord/src/app/role/role-resolver.service.spec.ts rename overlord/src/app/{group/group-resolver.service.ts => role/role-resolver.service.ts} (62%) create mode 100644 overlord/src/app/role/role-routing.module.spec.ts rename overlord/src/app/{group/group-routing.module.ts => role/role-routing.module.ts} (52%) create mode 100644 overlord/src/app/role/role.module.spec.ts rename overlord/src/app/{group/group.module.ts => role/role.module.ts} (80%) create mode 100644 overlord/src/app/role/role.service.spec.ts create mode 100644 overlord/src/app/role/role.service.ts rename overlord/src/app/{group/group.ts => role/role.ts} (86%) diff --git a/brewman/models/master.py b/brewman/models/master.py index 943c7fda..677ec1af 100644 --- a/brewman/models/master.py +++ b/brewman/models/master.py @@ -106,14 +106,14 @@ class Product(Base): return True, "" @classmethod - def query(cls, term, is_purchased=None, active=None, db=None): + def query(cls, q, is_purchased=None, active=None, db=None): query_ = db.query(Product) if active is not None: query_ = query_.filter(Product.is_active == active) if is_purchased is not None: query_ = query_.filter(Product.is_purchased == is_purchased) - if term is not None: - for item in term.split(): + if q is not None: + for item in q.split(): if item.strip() != "": query_ = query_.filter(Product.name.ilike("%" + item + "%")) return query_ diff --git a/brewman/routers/account.py b/brewman/routers/account.py index 51a732ed..77ea2fef 100644 --- a/brewman/routers/account.py +++ b/brewman/routers/account.py @@ -27,7 +27,7 @@ def get_db() -> Session: db.close() -@router.post("/", response_model=schemas.Account) +@router.post("", response_model=schemas.Account) def save( data: schemas.AccountIn, db: Session = Depends(get_db), @@ -115,7 +115,7 @@ def delete( ) -@router.get("/") +@router.get("") def show_blank( db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["accounts"]) ): diff --git a/brewman/routers/account_types.py b/brewman/routers/account_types.py index 47b65a59..24d69a9f 100644 --- a/brewman/routers/account_types.py +++ b/brewman/routers/account_types.py @@ -7,7 +7,7 @@ from brewman.models.master import AccountType router = APIRouter() -@router.get("/") +@router.get("") def account_type_list(user: UserToken = Depends(get_user)): return [ {"id": item.id, "name": item.name} diff --git a/brewman/routers/auth/client.py b/brewman/routers/auth/client.py index 725b3479..41c5cb05 100644 --- a/brewman/routers/auth/client.py +++ b/brewman/routers/auth/client.py @@ -24,7 +24,7 @@ def get_db(): db.close() -@router.put("/{id_}", response_model=schemas.Client) +@router.put("/{id_}") def update( id_: uuid.UUID, data: schemas.ClientIn, diff --git a/brewman/routers/auth/role.py b/brewman/routers/auth/role.py index ad46b4d2..d96c3a97 100644 --- a/brewman/routers/auth/role.py +++ b/brewman/routers/auth/role.py @@ -24,7 +24,7 @@ def get_db(): db.close() -@router.post("/", response_model=schemas.Role) +@router.post("", response_model=schemas.Role) def save( data: schemas.RoleIn, db: Session = Depends(get_db), @@ -113,7 +113,7 @@ def delete( ) -@router.get("/") +@router.get("") def show_blank( db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["users"]), @@ -163,10 +163,10 @@ def role_info(item: Optional[Role], db): "name": item.name, "permissions": [ { - "id": item.id, - "name": item.name, - "enabled": True if item in item.permissions else False, + "id": p.id, + "name": p.name, + "enabled": True if p in item.permissions else False, } - for item in db.query(Role).order_by(Role.name).all() + for p in db.query(Permission).order_by(Permission.name).all() ], } diff --git a/brewman/routers/auth/user.py b/brewman/routers/auth/user.py index 65ae6b39..92a79eed 100644 --- a/brewman/routers/auth/user.py +++ b/brewman/routers/auth/user.py @@ -24,7 +24,7 @@ def get_db(): db.close() -@router.post("/", response_model=schemas.User) +@router.post("", response_model=schemas.User) def save( data: schemas.UserIn, db: Session = Depends(get_db), @@ -65,7 +65,7 @@ def update_me( ): try: item: User = db.query(User).filter(User.id == user.id_).first() - if "advanced-delete" in user.permissions: + if "users" in user.permissions: item.name = data.name item.locked_out = data.locked_out add_roles(item, data.roles, db) @@ -151,7 +151,7 @@ def delete( ) -@router.get("/") +@router.get("") def show_blank( db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["users"]), @@ -185,7 +185,7 @@ async def show_active( ] -@router.get("/{id_}", response_model=schemas.Role) +@router.get("/{id_}", response_model=schemas.User) def show_id( id_: uuid.UUID, db: Session = Depends(get_db), diff --git a/brewman/routers/cost_centre.py b/brewman/routers/cost_centre.py index 0d0e488b..f18b8c36 100644 --- a/brewman/routers/cost_centre.py +++ b/brewman/routers/cost_centre.py @@ -23,7 +23,7 @@ def get_db(): db.close() -@router.post("/", response_model=schemas.CostCentre) +@router.post("", response_model=schemas.CostCentre) def save( data: schemas.CostCentreIn, db: Session = Depends(get_db), @@ -33,7 +33,7 @@ def save( item = CostCentre(name=data.name) db.add(item) db.commit() - return cost_centre_info(item, db) + return cost_centre_info(item) except SQLAlchemyError as e: db.rollback() raise HTTPException( @@ -64,7 +64,7 @@ def update( ) item.name = data.name db.commit() - return cost_centre_info(item, db) + return cost_centre_info(item) except SQLAlchemyError as e: db.rollback() raise HTTPException( @@ -111,12 +111,12 @@ def delete( ) -@router.get("/") +@router.get("") def show_blank( db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["cost-centres"]), ): - return cost_centre_info(None, db) + return cost_centre_info(None) @router.get("/list", response_model=List[schemas.CostCentre]) @@ -134,10 +134,10 @@ def show_id( user: UserToken = Security(get_user, scopes=["cost-centres"]), ): item = db.query(CostCentre).filter(CostCentre.id == id_).first() - return cost_centre_info(item, db) + return cost_centre_info(item) -def cost_centre_info(item: Optional[CostCentre], db: Session): +def cost_centre_info(item: Optional[CostCentre]): if item is None: return { "name": "", diff --git a/brewman/routers/employee.py b/brewman/routers/employee.py index 84b3ccea..fe9a3b9a 100644 --- a/brewman/routers/employee.py +++ b/brewman/routers/employee.py @@ -27,7 +27,7 @@ def get_db(): db.close() -@router.post("/", response_model=schemas.Employee) +@router.post("", response_model=schemas.Employee) def save( data: schemas.EmployeeIn, db: Session = Depends(get_db), @@ -118,7 +118,7 @@ def delete( ) -@router.get("/") +@router.get("") def show_blank( db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["employees"]) ): diff --git a/brewman/routers/product.py b/brewman/routers/product.py index 375f66a0..8e248ce1 100644 --- a/brewman/routers/product.py +++ b/brewman/routers/product.py @@ -161,7 +161,7 @@ def show_list(db: Session = Depends(get_db), user: UserToken = Depends(get_user) @router.get("/query") async def show_term( - t: str = None, + q: str = None, a: bool = None, c: int = None, p: bool = None, @@ -172,7 +172,7 @@ async def show_term( count = c extended = e list_ = [] - for index, item in enumerate(Product.query(t, p, a, db)): + for index, item in enumerate(Product.query(q, p, a, db)): list_.append( { "id": item.id, diff --git a/brewman/routers/product_group.py b/brewman/routers/product_group.py index 1d3b5a8a..3d186726 100644 --- a/brewman/routers/product_group.py +++ b/brewman/routers/product_group.py @@ -23,7 +23,7 @@ def get_db(): db.close() -@router.post("/", response_model=schemas.ProductGroup) +@router.post("", response_model=schemas.ProductGroup) def save( data: schemas.ProductGroupIn, db: Session = Depends(get_db), @@ -111,7 +111,7 @@ def delete( ) -@router.get("/") +@router.get("") def show_blank( db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["product-groups"]), diff --git a/brewman/schemas/auth.py b/brewman/schemas/auth.py index 54f7a5c6..f7b2030f 100644 --- a/brewman/schemas/auth.py +++ b/brewman/schemas/auth.py @@ -1,5 +1,5 @@ import uuid -from typing import List +from typing import List, Optional from datetime import datetime from pydantic import BaseModel @@ -12,7 +12,7 @@ def to_camel(string: str) -> str: class ClientIn(BaseModel): name: str enabled: bool - otp: int + otp: Optional[int] class Client(ClientIn): diff --git a/overlord/src/app/app-routing.module.ts b/overlord/src/app/app-routing.module.ts index 25dc15b4..574e02f6 100644 --- a/overlord/src/app/app-routing.module.ts +++ b/overlord/src/app/app-routing.module.ts @@ -55,8 +55,8 @@ const appRoutes: Routes = [ loadChildren: () => import('./employee-functions/employee-functions.module').then(mod => mod.EmployeeFunctionsModule) }, { - path: 'groups', - loadChildren: () => import('./group/group.module').then(mod => mod.GroupModule) + path: 'roles', + loadChildren: () => import('./role/role.module').then(mod => mod.RoleModule) }, { path: 'incentive', diff --git a/overlord/src/app/auth/auth-guard.service.ts b/overlord/src/app/auth/auth-guard.service.ts index 42bba6a6..d254c94b 100644 --- a/overlord/src/app/auth/auth-guard.service.ts +++ b/overlord/src/app/auth/auth-guard.service.ts @@ -15,13 +15,14 @@ export class AuthGuard implements CanActivate { canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { const user = this.authService.user; - const permission = route.data['permission'].replace(/ /g, '-').toLowerCase(); + const permission = (route.data['permission'] === undefined) ? route.data['permission'] : route.data['permission'] + .replace(/ /g, '-') + .toLowerCase(); if (!user) { // not logged in so redirect to login page with the return url this.router.navigate(['/login'], {queryParams: {returnUrl: state.url}}); return false; } - console.log(permission, user.perms.indexOf(permission)); if (permission !== undefined && user.perms.indexOf(permission) === -1) { this.toaster.show('Danger', 'You do not have the permission to access this area.'); return false; diff --git a/overlord/src/app/client/client.service.ts b/overlord/src/app/client/client.service.ts index b80a5776..1bdafb0a 100644 --- a/overlord/src/app/client/client.service.ts +++ b/overlord/src/app/client/client.service.ts @@ -27,8 +27,7 @@ export class ClientService { } list(): Observable { - const options = {params: new HttpParams().set('l', '')}; - return >this.http.get(url, options) + return >this.http.get(`${url}/list`) .pipe( catchError(this.log.handleError(serviceName, 'list')) ); diff --git a/overlord/src/app/core/account.service.ts b/overlord/src/app/core/account.service.ts index deec5327..e20a2ff3 100644 --- a/overlord/src/app/core/account.service.ts +++ b/overlord/src/app/core/account.service.ts @@ -19,7 +19,7 @@ export class AccountService { } get(id: string): Observable { - const getUrl: string = (id === null) ? `${url}/` : `${url}/${id}`; + const getUrl: string = (id === null) ? `${url}` : `${url}/${id}`; return >this.http.get(getUrl) .pipe( catchError(this.log.handleError(serviceName, `get id=${id}`)) @@ -33,16 +33,16 @@ export class AccountService { ); } - paymentAutocomplete(term: string): Observable { - const options = {params: new HttpParams().set('q', term).set('t', '1')}; + paymentAutocomplete(query: string): Observable { + const options = {params: new HttpParams().set('q', query).set('t', '1')}; return >this.http.get(`${url}/query`, options) .pipe( catchError(this.log.handleError(serviceName, 'list')) ); } - receiptAutocomplete(term: string): Observable { - const options = {params: new HttpParams().set('q', term).set('t', '1')}; + receiptAutocomplete(query: string): Observable { + const options = {params: new HttpParams().set('q', query).set('t', '1')}; return >this.http.get(`${url}/query`, options) .pipe( catchError(this.log.handleError(serviceName, 'list')) @@ -50,7 +50,7 @@ export class AccountService { } save(account: Account): Observable { - return >this.http.post(`${url}/`, account, httpOptions) + return >this.http.post(`${url}`, account, httpOptions) .pipe( catchError(this.log.handleError(serviceName, 'save')) ); @@ -78,8 +78,8 @@ export class AccountService { ); } - autocomplete(term: string): Observable { - const options = {params: new HttpParams().set('q', term)}; + autocomplete(query: string): Observable { + const options = {params: new HttpParams().set('q', query)}; return >this.http.get(`${url}/query`, options) .pipe( catchError(this.log.handleError(serviceName, 'autocomplete')) @@ -87,8 +87,8 @@ export class AccountService { } balance(id: string, date: string): Observable { - const options = {params: new HttpParams().set('b', 'true').set('d', date)}; - return >this.http.get(`${url}/${id}`, options) + const options = {params: new HttpParams().set('d', date)}; + return >this.http.get(`${url}/${id}/balance`, options) .pipe( catchError(this.log.handleError(serviceName, 'balance')) ); diff --git a/overlord/src/app/core/nav-bar/nav-bar.component.html b/overlord/src/app/core/nav-bar/nav-bar.component.html index 0dcf77c3..c659fc1d 100644 --- a/overlord/src/app/core/nav-bar/nav-bar.component.html +++ b/overlord/src/app/core/nav-bar/nav-bar.component.html @@ -67,7 +67,7 @@ Logout {{(auth.currentUser | async)?.name}} Change Password Users - Groups + Roles Clients Settings diff --git a/overlord/src/app/cost-centre/cost-centre.service.ts b/overlord/src/app/cost-centre/cost-centre.service.ts index 0a6a09e7..4fddd0d3 100644 --- a/overlord/src/app/cost-centre/cost-centre.service.ts +++ b/overlord/src/app/cost-centre/cost-centre.service.ts @@ -19,7 +19,7 @@ export class CostCentreService { } get(id: string): Observable { - const getUrl: string = (id === null) ? `${url}/new` : `${url}/${id}`; + const getUrl: string = (id === null) ? `${url}` : `${url}/${id}`; return >this.http.get(getUrl) .pipe( catchError(this.log.handleError(serviceName, `get id=${id}`)) @@ -27,15 +27,14 @@ export class CostCentreService { } list(): Observable { - const options = {params: new HttpParams().set('l', '')}; - return >this.http.get(url, options) + return >this.http.get(`${url}/list`) .pipe( catchError(this.log.handleError(serviceName, 'list')) ); } save(costCentre: CostCentre): Observable { - return >this.http.post(`${url}/new`, costCentre, httpOptions) + return >this.http.post(`${url}`, costCentre, httpOptions) .pipe( catchError(this.log.handleError(serviceName, 'save')) ); diff --git a/overlord/src/app/employee/employee.service.ts b/overlord/src/app/employee/employee.service.ts index 95985ee8..cc38d762 100644 --- a/overlord/src/app/employee/employee.service.ts +++ b/overlord/src/app/employee/employee.service.ts @@ -19,7 +19,7 @@ export class EmployeeService { } get(id: string): Observable { - const getUrl: string = (id === null) ? `${url}/new` : `${url}/${id}`; + const getUrl: string = (id === null) ? `${url}` : `${url}/${id}`; return >this.http.get(getUrl) .pipe( catchError(this.log.handleError(serviceName, `get id=${id}`)) @@ -27,15 +27,14 @@ export class EmployeeService { } list(): Observable { - const options = {params: new HttpParams().set('l', '')}; - return >this.http.get(url, options) + return >this.http.get(`${url}/list`) .pipe( catchError(this.log.handleError(serviceName, 'list')) ); } save(employee: Employee): Observable { - return >this.http.post(`${url}/new`, employee, httpOptions) + return >this.http.post(`${url}`, employee, httpOptions) .pipe( catchError(this.log.handleError(serviceName, 'save')) ); @@ -65,7 +64,7 @@ export class EmployeeService { autocomplete(term: string): Observable { const options = {params: new HttpParams().set('q', term)}; - return >this.http.get(url, options) + return >this.http.get(`${url}/query`, options) .pipe( catchError(this.log.handleError(serviceName, 'autocomplete')) ); diff --git a/overlord/src/app/group/group-resolver.service.spec.ts b/overlord/src/app/group/group-resolver.service.spec.ts deleted file mode 100644 index 0032bdcd..00000000 --- a/overlord/src/app/group/group-resolver.service.spec.ts +++ /dev/null @@ -1,15 +0,0 @@ -import {inject, TestBed} from '@angular/core/testing'; - -import {GroupResolverService} from './group-resolver.service'; - -describe('GroupResolverService', () => { - beforeEach(() => { - TestBed.configureTestingModule({ - providers: [GroupDetailResolverService] - }); - }); - - it('should be created', inject([GroupDetailResolverService], (service: GroupDetailResolverService) => { - expect(service).toBeTruthy(); - })); -}); diff --git a/overlord/src/app/group/group-routing.module.spec.ts b/overlord/src/app/group/group-routing.module.spec.ts deleted file mode 100644 index 55cbcc26..00000000 --- a/overlord/src/app/group/group-routing.module.spec.ts +++ /dev/null @@ -1,13 +0,0 @@ -import {UserRoutingModule} from './group-routing.module'; - -describe('UserRoutingModule', () => { - let groupRoutingModule: UserRoutingModule; - - beforeEach(() => { - groupRoutingModule = new UserRoutingModule(); - }); - - it('should create an instance', () => { - expect(groupRoutingModule).toBeTruthy(); - }); -}); diff --git a/overlord/src/app/group/group.module.spec.ts b/overlord/src/app/group/group.module.spec.ts deleted file mode 100644 index 6b893121..00000000 --- a/overlord/src/app/group/group.module.spec.ts +++ /dev/null @@ -1,13 +0,0 @@ -import {GroupModule} from './group.module'; - -describe('GroupModule', () => { - let groupModule: GroupModule; - - beforeEach(() => { - groupModule = new GroupModule(); - }); - - it('should create an instance', () => { - expect(groupModule).toBeTruthy(); - }); -}); diff --git a/overlord/src/app/group/group.service.spec.ts b/overlord/src/app/group/group.service.spec.ts deleted file mode 100644 index b4507afe..00000000 --- a/overlord/src/app/group/group.service.spec.ts +++ /dev/null @@ -1,15 +0,0 @@ -import {inject, TestBed} from '@angular/core/testing'; - -import {GroupService} from './group.service'; - -describe('GroupService', () => { - beforeEach(() => { - TestBed.configureTestingModule({ - providers: [GroupService] - }); - }); - - it('should be created', inject([GroupService], (service: GroupService) => { - expect(service).toBeTruthy(); - })); -}); diff --git a/overlord/src/app/group/group.service.ts b/overlord/src/app/group/group.service.ts deleted file mode 100644 index 02f878b8..00000000 --- a/overlord/src/app/group/group.service.ts +++ /dev/null @@ -1,73 +0,0 @@ -import {Injectable} from '@angular/core'; -import {HttpClient, HttpHeaders, HttpParams} from '@angular/common/http'; -import {ErrorLoggerService} from '../core/error-logger.service'; -import {catchError} from 'rxjs/operators'; -import {Observable} from 'rxjs/internal/Observable'; -import {Group} from './group'; - -const httpOptions = { - headers: new HttpHeaders({'Content-Type': 'application/json'}) -}; -const url = '/api/groups'; -const serviceName = 'GroupService'; - -@Injectable({ - providedIn: 'root' -}) -export class GroupService { - constructor(private http: HttpClient, private log: ErrorLoggerService) { - } - - get(id: string): Observable { - const getUrl: string = (id === null) ? `${url}/new` : `${url}/${id}`; - return >this.http.get(getUrl) - .pipe( - catchError(this.log.handleError(serviceName, `get id=${id}`)) - ); - } - - list(): Observable { - const options = {params: new HttpParams().set('l', '')}; - return >this.http.get(url, options) - .pipe( - catchError(this.log.handleError(serviceName, 'list')) - ); - } - - listOfNames(): Observable { - const options = {params: new HttpParams().set('n', '')}; - return >this.http.get(url, options) - .pipe( - catchError(this.log.handleError(serviceName, 'list')) - ); - } - - save(group: Group): Observable { - return >this.http.post(`${url}/new`, group, httpOptions) - .pipe( - catchError(this.log.handleError(serviceName, 'save')) - ); - } - - update(group: Group): Observable { - return >this.http.put(`${url}/${group.id}`, group, httpOptions) - .pipe( - catchError(this.log.handleError(serviceName, 'update')) - ); - } - - saveOrUpdate(group: Group): Observable { - if (!group.id) { - return this.save(group); - } else { - return this.update(group); - } - } - - delete(id: string): Observable { - return >this.http.delete(`${url}/${id}`, httpOptions) - .pipe( - catchError(this.log.handleError(serviceName, 'delete')) - ); - } -} diff --git a/overlord/src/app/product-group/product-group.service.ts b/overlord/src/app/product-group/product-group.service.ts index afb00e44..03fd2d5d 100644 --- a/overlord/src/app/product-group/product-group.service.ts +++ b/overlord/src/app/product-group/product-group.service.ts @@ -19,7 +19,7 @@ export class ProductGroupService { } get(id: string): Observable { - const getUrl: string = (id === null) ? `${url}/new` : `${url}/${id}`; + const getUrl: string = (id === null) ? `${url}` : `${url}/${id}`; return >this.http.get(getUrl) .pipe( catchError(this.log.handleError(serviceName, `get id=${id}`)) @@ -27,15 +27,14 @@ export class ProductGroupService { } list(): Observable { - const options = {params: new HttpParams().set('l', '')}; - return >this.http.get(url, options) + return >this.http.get(`${url}/list`) .pipe( catchError(this.log.handleError(serviceName, 'list')) ); } save(productGroup: ProductGroup): Observable { - return >this.http.post(`${url}/new`, productGroup, httpOptions) + return >this.http.post(`${url}`, productGroup, httpOptions) .pipe( catchError(this.log.handleError(serviceName, 'save')) ); diff --git a/overlord/src/app/product/product-detail/product-detail.component.html b/overlord/src/app/product/product-detail/product-detail.component.html index 71d1c848..1236787e 100644 --- a/overlord/src/app/product/product-detail/product-detail.component.html +++ b/overlord/src/app/product/product-detail/product-detail.component.html @@ -35,7 +35,7 @@ Yield - +
{ - const getUrl: string = (id === null) ? `${url}/new` : `${url}/${id}`; + const getUrl: string = (id === null) ? `${url}` : `${url}/${id}`; return >this.http.get(getUrl) .pipe( catchError(this.log.handleError(serviceName, `get id=${id}`)) @@ -27,15 +27,14 @@ export class ProductService { } list(): Observable { - const options = {params: new HttpParams().set('l', '')}; - return >this.http.get(url, options) + return >this.http.get(`${url}/list`) .pipe( catchError(this.log.handleError(serviceName, 'getList')) ); } save(product: Product): Observable { - return >this.http.post(`${url}/new`, product, httpOptions) + return >this.http.post(`${url}`, product, httpOptions) .pipe( catchError(this.log.handleError(serviceName, 'save')) ); @@ -63,19 +62,11 @@ export class ProductService { ); } - autocomplete(term: string): Observable { - const options = {params: new HttpParams().set('t', term)}; - return >this.http.get(url, options) + autocomplete(query: string): Observable { + const options = {params: new HttpParams().set('q', query)}; + return >this.http.get(`${url}/query`, options) .pipe( catchError(this.log.handleError(serviceName, 'autocomplete')) ); } - - balance(id: string, date: string): Observable { - const options = {params: new HttpParams().set('b', 'true').set('d', date)}; - return >this.http.get(`${url}/${id}`, options) - .pipe( - catchError(this.log.handleError(serviceName, 'balance')) - ); - } } diff --git a/overlord/src/app/group/group-detail/group-detail.component.css b/overlord/src/app/role/role-detail/role-detail.component.css similarity index 100% rename from overlord/src/app/group/group-detail/group-detail.component.css rename to overlord/src/app/role/role-detail/role-detail.component.css diff --git a/overlord/src/app/group/group-detail/group-detail.component.html b/overlord/src/app/role/role-detail/role-detail.component.html similarity index 96% rename from overlord/src/app/group/group-detail/group-detail.component.html rename to overlord/src/app/role/role-detail/role-detail.component.html index 5ebd575b..690a6775 100644 --- a/overlord/src/app/group/group-detail/group-detail.component.html +++ b/overlord/src/app/role/role-detail/role-detail.component.html @@ -1,7 +1,7 @@
- Group + Role
diff --git a/overlord/src/app/group/group-detail/group-detail.component.spec.ts b/overlord/src/app/role/role-detail/role-detail.component.spec.ts similarity index 54% rename from overlord/src/app/group/group-detail/group-detail.component.spec.ts rename to overlord/src/app/role/role-detail/role-detail.component.spec.ts index 94956fb7..9c216c1a 100644 --- a/overlord/src/app/group/group-detail/group-detail.component.spec.ts +++ b/overlord/src/app/role/role-detail/role-detail.component.spec.ts @@ -1,20 +1,20 @@ import {async, ComponentFixture, TestBed} from '@angular/core/testing'; -import {GroupDetailComponent} from './group-detail.component'; +import {RoleDetailComponent} from './role-detail.component'; -describe('GroupDetailComponent', () => { - let component: GroupDetailComponent; - let fixture: ComponentFixture; +describe('RoleDetailComponent', () => { + let component: RoleDetailComponent; + let fixture: ComponentFixture; beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [GroupDetailComponent] + declarations: [RoleDetailComponent] }) .compileComponents(); })); beforeEach(() => { - fixture = TestBed.createComponent(GroupDetailComponent); + fixture = TestBed.createComponent(RoleDetailComponent); component = fixture.componentInstance; fixture.detectChanges(); }); diff --git a/overlord/src/app/group/group-detail/group-detail.component.ts b/overlord/src/app/role/role-detail/role-detail.component.ts similarity index 80% rename from overlord/src/app/group/group-detail/group-detail.component.ts rename to overlord/src/app/role/role-detail/role-detail.component.ts index 232e1b4e..624a88e1 100644 --- a/overlord/src/app/group/group-detail/group-detail.component.ts +++ b/overlord/src/app/role/role-detail/role-detail.component.ts @@ -1,22 +1,22 @@ import {AfterViewInit, Component, ElementRef, OnInit, ViewChild} from '@angular/core'; import {ActivatedRoute, Router} from '@angular/router'; -import {GroupService} from '../group.service'; -import {Group} from '../group'; +import {RoleService} from '../role.service'; +import {Role} from '../role'; import {ToasterService} from '../../core/toaster.service'; import {ConfirmDialogComponent} from '../../shared/confirm-dialog/confirm-dialog.component'; import { MatDialog } from '@angular/material/dialog'; import {FormArray, FormBuilder, FormGroup} from '@angular/forms'; @Component({ - selector: 'app-group-detail', - templateUrl: './group-detail.component.html', - styleUrls: ['./group-detail.component.css'] + selector: 'app-role-detail', + templateUrl: './role-detail.component.html', + styleUrls: ['./role-detail.component.css'] }) -export class GroupDetailComponent implements OnInit, AfterViewInit { +export class RoleDetailComponent implements OnInit, AfterViewInit { @ViewChild('nameElement', { static: true }) nameElement: ElementRef; form: FormGroup; - item: Group; + item: Role; constructor( private route: ActivatedRoute, @@ -24,7 +24,7 @@ export class GroupDetailComponent implements OnInit, AfterViewInit { private fb: FormBuilder, private toaster: ToasterService, private dialog: MatDialog, - private ser: GroupService + private ser: RoleService ) { this.createForm(); } @@ -38,7 +38,7 @@ export class GroupDetailComponent implements OnInit, AfterViewInit { ngOnInit() { this.route.data - .subscribe((data: { item: Group }) => { + .subscribe((data: { item: Role }) => { this.item = data.item; this.form.get('name').setValue(this.item.name); this.form.setControl('permissions', this.fb.array( @@ -62,7 +62,7 @@ export class GroupDetailComponent implements OnInit, AfterViewInit { .subscribe( (result) => { this.toaster.show('Success', ''); - this.router.navigateByUrl('/groups'); + this.router.navigateByUrl('/roles'); }, (error) => { this.toaster.show('Danger', error.error); @@ -75,7 +75,7 @@ export class GroupDetailComponent implements OnInit, AfterViewInit { .subscribe( (result) => { this.toaster.show('Success', ''); - this.router.navigateByUrl('/groups'); + this.router.navigateByUrl('/roles'); }, (error) => { this.toaster.show('Danger', error.error); @@ -86,7 +86,7 @@ export class GroupDetailComponent implements OnInit, AfterViewInit { confirmDelete(): void { const dialogRef = this.dialog.open(ConfirmDialogComponent, { width: '250px', - data: {title: 'Delete Group?', content: 'Are you sure? This cannot be undone.'} + data: {title: 'Delete Role?', content: 'Are you sure? This cannot be undone.'} }); dialogRef.afterClosed().subscribe((result: boolean) => { @@ -96,7 +96,7 @@ export class GroupDetailComponent implements OnInit, AfterViewInit { }); } - getItem(): Group { + getItem(): Role { const formModel = this.form.value; this.item.name = formModel.name; const array = this.form.get('permissions') as FormArray; diff --git a/overlord/src/app/group/group-list-resolver.service.spec.ts b/overlord/src/app/role/role-list-resolver.service.spec.ts similarity index 83% rename from overlord/src/app/group/group-list-resolver.service.spec.ts rename to overlord/src/app/role/role-list-resolver.service.spec.ts index 7e39a3ee..c09b8003 100644 --- a/overlord/src/app/group/group-list-resolver.service.spec.ts +++ b/overlord/src/app/role/role-list-resolver.service.spec.ts @@ -1,6 +1,6 @@ import {inject, TestBed} from '@angular/core/testing'; -import {ClientListResolverService} from './group-list-resolver.service'; +import {ClientListResolverService} from './role-list-resolver.service'; describe('ClientListResolverService', () => { beforeEach(() => { diff --git a/overlord/src/app/group/group-list-resolver.service.ts b/overlord/src/app/role/role-list-resolver.service.ts similarity index 58% rename from overlord/src/app/group/group-list-resolver.service.ts rename to overlord/src/app/role/role-list-resolver.service.ts index 1edbfa25..88e98f9d 100644 --- a/overlord/src/app/group/group-list-resolver.service.ts +++ b/overlord/src/app/role/role-list-resolver.service.ts @@ -1,18 +1,18 @@ import {Injectable} from '@angular/core'; import {ActivatedRouteSnapshot, Resolve, Router, RouterStateSnapshot} from '@angular/router'; -import {Group} from './group'; +import {Role} from './role'; import {Observable} from 'rxjs/internal/Observable'; -import {GroupService} from './group.service'; +import {RoleService} from './role.service'; @Injectable({ providedIn: 'root' }) -export class GroupListResolver implements Resolve { +export class RoleListResolver implements Resolve { - constructor(private ser: GroupService, private router: Router) { + constructor(private ser: RoleService, private router: Router) { } - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { return this.ser.list(); } } diff --git a/overlord/src/app/group/group-list/group-list-datasource.ts b/overlord/src/app/role/role-list/role-list-datasource.ts similarity index 85% rename from overlord/src/app/group/group-list/group-list-datasource.ts rename to overlord/src/app/role/role-list/role-list-datasource.ts index 18fca3d1..bb585bfe 100644 --- a/overlord/src/app/group/group-list/group-list-datasource.ts +++ b/overlord/src/app/role/role-list/role-list-datasource.ts @@ -3,15 +3,15 @@ import { MatPaginator } from '@angular/material/paginator'; import { MatSort } from '@angular/material/sort'; import {map} from 'rxjs/operators'; import {merge, Observable, of as observableOf} from 'rxjs'; -import {Group} from '../group'; +import {Role} from '../role'; -export class GroupListDataSource extends DataSource { +export class RoleListDatasource extends DataSource { - constructor(private paginator: MatPaginator, private sort: MatSort, public data: Group[]) { + constructor(private paginator: MatPaginator, private sort: MatSort, public data: Role[]) { super(); } - connect(): Observable { + connect(): Observable { const dataMutations = [ observableOf(this.data), this.paginator.page, @@ -29,12 +29,12 @@ export class GroupListDataSource extends DataSource { disconnect() { } - private getPagedData(data: Group[]) { + private getPagedData(data: Role[]) { const startIndex = this.paginator.pageIndex * this.paginator.pageSize; return data.splice(startIndex, this.paginator.pageSize); } - private getSortedData(data: Group[]) { + private getSortedData(data: Role[]) { if (!this.sort.active || this.sort.direction === '') { return data; } diff --git a/overlord/src/app/group/group-list/group-list.component.css b/overlord/src/app/role/role-list/role-list.component.css similarity index 100% rename from overlord/src/app/group/group-list/group-list.component.css rename to overlord/src/app/role/role-list/role-list.component.css diff --git a/overlord/src/app/group/group-list/group-list.component.html b/overlord/src/app/role/role-list/role-list.component.html similarity index 85% rename from overlord/src/app/group/group-list/group-list.component.html rename to overlord/src/app/role/role-list/role-list.component.html index 57645756..c0b18269 100644 --- a/overlord/src/app/group/group-list/group-list.component.html +++ b/overlord/src/app/role/role-list/role-list.component.html @@ -1,7 +1,7 @@ - Groups - + Roles + add_box Add @@ -12,7 +12,7 @@ Name - {{row.name}} + {{row.name}} diff --git a/overlord/src/app/group/group-list/group-list.component.spec.ts b/overlord/src/app/role/role-list/role-list.component.spec.ts similarity index 54% rename from overlord/src/app/group/group-list/group-list.component.spec.ts rename to overlord/src/app/role/role-list/role-list.component.spec.ts index 560a01a0..4de7c527 100644 --- a/overlord/src/app/group/group-list/group-list.component.spec.ts +++ b/overlord/src/app/role/role-list/role-list.component.spec.ts @@ -1,18 +1,18 @@ import {ComponentFixture, fakeAsync, TestBed} from '@angular/core/testing'; -import {GroupListComponent} from './group-list.component'; +import {RoleListComponent} from './role-list.component'; -describe('GroupListComponent', () => { - let component: GroupListComponent; - let fixture: ComponentFixture; +describe('RoleListComponent', () => { + let component: RoleListComponent; + let fixture: ComponentFixture; beforeEach(fakeAsync(() => { TestBed.configureTestingModule({ - declarations: [GroupListComponent] + declarations: [RoleListComponent] }) .compileComponents(); - fixture = TestBed.createComponent(GroupListComponent); + fixture = TestBed.createComponent(RoleListComponent); component = fixture.componentInstance; fixture.detectChanges(); })); diff --git a/overlord/src/app/group/group-list/group-list.component.ts b/overlord/src/app/role/role-list/role-list.component.ts similarity index 58% rename from overlord/src/app/group/group-list/group-list.component.ts rename to overlord/src/app/role/role-list/role-list.component.ts index a07b8441..9286df38 100644 --- a/overlord/src/app/group/group-list/group-list.component.ts +++ b/overlord/src/app/role/role-list/role-list.component.ts @@ -1,20 +1,20 @@ import {Component, OnInit, ViewChild} from '@angular/core'; import { MatPaginator } from '@angular/material/paginator'; import { MatSort } from '@angular/material/sort'; -import {GroupListDataSource} from './group-list-datasource'; -import {Group} from '../group'; +import {RoleListDatasource} from './role-list-datasource'; +import {Role} from '../role'; import {ActivatedRoute} from '@angular/router'; @Component({ - selector: 'app-group-list', - templateUrl: './group-list.component.html', - styleUrls: ['./group-list.component.css'] + selector: 'app-role-list', + templateUrl: './role-list.component.html', + styleUrls: ['./role-list.component.css'] }) -export class GroupListComponent implements OnInit { +export class RoleListComponent implements OnInit { @ViewChild(MatPaginator, { static: true }) paginator: MatPaginator; @ViewChild(MatSort, { static: true }) sort: MatSort; - dataSource: GroupListDataSource; - list: Group[]; + dataSource: RoleListDatasource; + list: Role[]; /** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */ displayedColumns = ['name', 'permissions']; @@ -23,9 +23,9 @@ export class GroupListComponent implements OnInit { ngOnInit() { this.route.data - .subscribe((data: { list: Group[] }) => { + .subscribe((data: { list: Role[] }) => { this.list = data.list; }); - this.dataSource = new GroupListDataSource(this.paginator, this.sort, this.list); + this.dataSource = new RoleListDatasource(this.paginator, this.sort, this.list); } } diff --git a/overlord/src/app/role/role-resolver.service.spec.ts b/overlord/src/app/role/role-resolver.service.spec.ts new file mode 100644 index 00000000..b68881b6 --- /dev/null +++ b/overlord/src/app/role/role-resolver.service.spec.ts @@ -0,0 +1,15 @@ +import {inject, TestBed} from '@angular/core/testing'; + +import {RoleResolverService} from './role-resolver.service'; + +describe('RoleResolverService', () => { + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [RoleDetailResolverService] + }); + }); + + it('should be created', inject([RoleDetailResolverService], (service: RoleDetailResolverService) => { + expect(service).toBeTruthy(); + })); +}); diff --git a/overlord/src/app/group/group-resolver.service.ts b/overlord/src/app/role/role-resolver.service.ts similarity index 62% rename from overlord/src/app/group/group-resolver.service.ts rename to overlord/src/app/role/role-resolver.service.ts index f9f5e963..c996cad5 100644 --- a/overlord/src/app/group/group-resolver.service.ts +++ b/overlord/src/app/role/role-resolver.service.ts @@ -1,18 +1,18 @@ import {Injectable} from '@angular/core'; import {ActivatedRouteSnapshot, Resolve, Router, RouterStateSnapshot} from '@angular/router'; -import {Group} from './group'; +import {Role} from './role'; import {Observable} from 'rxjs/internal/Observable'; -import {GroupService} from './group.service'; +import {RoleService} from './role.service'; @Injectable({ providedIn: 'root' }) -export class GroupResolver implements Resolve { +export class RoleResolver implements Resolve { - constructor(private ser: GroupService, private router: Router) { + constructor(private ser: RoleService, private router: Router) { } - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { const id = route.paramMap.get('id'); return this.ser.get(id); } diff --git a/overlord/src/app/role/role-routing.module.spec.ts b/overlord/src/app/role/role-routing.module.spec.ts new file mode 100644 index 00000000..826b8999 --- /dev/null +++ b/overlord/src/app/role/role-routing.module.spec.ts @@ -0,0 +1,13 @@ +import {RoleRoutingModule} from './role-routing.module'; + +describe('RoleRoutingModule', () => { + let roleRoutingModule: RoleRoutingModule; + + beforeEach(() => { + roleRoutingModule = new RoleRoutingModule(); + }); + + it('should create an instance', () => { + expect(roleRoutingModule).toBeTruthy(); + }); +}); diff --git a/overlord/src/app/group/group-routing.module.ts b/overlord/src/app/role/role-routing.module.ts similarity index 52% rename from overlord/src/app/group/group-routing.module.ts rename to overlord/src/app/role/role-routing.module.ts index a85f7e20..191f9726 100644 --- a/overlord/src/app/group/group-routing.module.ts +++ b/overlord/src/app/role/role-routing.module.ts @@ -1,44 +1,44 @@ import {NgModule} from '@angular/core'; import {CommonModule} from '@angular/common'; import {RouterModule, Routes} from '@angular/router'; -import {GroupListResolver} from './group-list-resolver.service'; -import {GroupResolver} from './group-resolver.service'; -import {GroupListComponent} from './group-list/group-list.component'; -import {GroupDetailComponent} from './group-detail/group-detail.component'; +import {RoleListResolver} from './role-list-resolver.service'; +import {RoleResolver} from './role-resolver.service'; +import {RoleListComponent} from './role-list/role-list.component'; +import {RoleDetailComponent} from './role-detail/role-detail.component'; import {AuthGuard} from '../auth/auth-guard.service'; -const groupRoutes: Routes = [ +const roleRoutes: Routes = [ { path: '', - component: GroupListComponent, + component: RoleListComponent, canActivate: [AuthGuard], data: { permission: 'Users' }, resolve: { - list: GroupListResolver + list: RoleListResolver } }, { path: 'new', - component: GroupDetailComponent, + component: RoleDetailComponent, canActivate: [AuthGuard], data: { permission: 'Users' }, resolve: { - item: GroupResolver, + item: RoleResolver, } }, { path: ':id', - component: GroupDetailComponent, + component: RoleDetailComponent, canActivate: [AuthGuard], data: { permission: 'Users' }, resolve: { - item: GroupResolver + item: RoleResolver } } ]; @@ -46,16 +46,16 @@ const groupRoutes: Routes = [ @NgModule({ imports: [ CommonModule, - RouterModule.forChild(groupRoutes) + RouterModule.forChild(roleRoutes) ], exports: [ RouterModule ], providers: [ - GroupListResolver, - GroupResolver + RoleListResolver, + RoleResolver ] }) -export class GroupRoutingModule { +export class RoleRoutingModule { } diff --git a/overlord/src/app/role/role.module.spec.ts b/overlord/src/app/role/role.module.spec.ts new file mode 100644 index 00000000..e73eae4c --- /dev/null +++ b/overlord/src/app/role/role.module.spec.ts @@ -0,0 +1,13 @@ +import {RoleModule} from './role.module'; + +describe('RoleModule', () => { + let roleModule: RoleModule; + + beforeEach(() => { + roleModule = new RoleModule(); + }); + + it('should create an instance', () => { + expect(roleModule).toBeTruthy(); + }); +}); diff --git a/overlord/src/app/group/group.module.ts b/overlord/src/app/role/role.module.ts similarity index 80% rename from overlord/src/app/group/group.module.ts rename to overlord/src/app/role/role.module.ts index 309719cf..efaf0171 100644 --- a/overlord/src/app/group/group.module.ts +++ b/overlord/src/app/role/role.module.ts @@ -1,9 +1,9 @@ import {NgModule} from '@angular/core'; import {CommonModule} from '@angular/common'; -import {GroupListComponent} from './group-list/group-list.component'; -import {GroupDetailComponent} from './group-detail/group-detail.component'; -import {GroupRoutingModule} from './group-routing.module'; +import {RoleListComponent} from './role-list/role-list.component'; +import {RoleDetailComponent} from './role-detail/role-detail.component'; +import {RoleRoutingModule} from './role-routing.module'; import { MatButtonModule } from '@angular/material/button'; import { MatCardModule } from '@angular/material/card'; import { MatCheckboxModule } from '@angular/material/checkbox'; @@ -36,12 +36,12 @@ import {FlexLayoutModule} from '@angular/flex-layout'; MatTableModule, ReactiveFormsModule, SharedModule, - GroupRoutingModule + RoleRoutingModule ], declarations: [ - GroupListComponent, - GroupDetailComponent + RoleListComponent, + RoleDetailComponent ] }) -export class GroupModule { +export class RoleModule { } diff --git a/overlord/src/app/role/role.service.spec.ts b/overlord/src/app/role/role.service.spec.ts new file mode 100644 index 00000000..8bfe2350 --- /dev/null +++ b/overlord/src/app/role/role.service.spec.ts @@ -0,0 +1,15 @@ +import {inject, TestBed} from '@angular/core/testing'; + +import {RoleService} from './role.service'; + +describe('RoleService', () => { + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [RoleService] + }); + }); + + it('should be created', inject([RoleService], (service: RoleService) => { + expect(service).toBeTruthy(); + })); +}); diff --git a/overlord/src/app/role/role.service.ts b/overlord/src/app/role/role.service.ts new file mode 100644 index 00000000..0bf91846 --- /dev/null +++ b/overlord/src/app/role/role.service.ts @@ -0,0 +1,64 @@ +import {Injectable} from '@angular/core'; +import {HttpClient, HttpHeaders, HttpParams} from '@angular/common/http'; +import {ErrorLoggerService} from '../core/error-logger.service'; +import {catchError} from 'rxjs/operators'; +import {Observable} from 'rxjs/internal/Observable'; +import {Role} from './role'; + +const httpOptions = { + headers: new HttpHeaders({'Content-Type': 'application/json'}) +}; +const url = '/api/roles'; +const serviceName = 'RoleService'; + +@Injectable({ + providedIn: 'root' +}) +export class RoleService { + constructor(private http: HttpClient, private log: ErrorLoggerService) { + } + + get(id: string): Observable { + const getUrl: string = (id === null) ? `${url}` : `${url}/${id}`; + return >this.http.get(getUrl) + .pipe( + catchError(this.log.handleError(serviceName, `get id=${id}`)) + ); + } + + list(): Observable { + return >this.http.get(`${url}/list`) + .pipe( + catchError(this.log.handleError(serviceName, 'list')) + ); + } + + save(role: Role): Observable { + return >this.http.post(`${url}`, role, httpOptions) + .pipe( + catchError(this.log.handleError(serviceName, 'save')) + ); + } + + update(role: Role): Observable { + return >this.http.put(`${url}/${role.id}`, role, httpOptions) + .pipe( + catchError(this.log.handleError(serviceName, 'update')) + ); + } + + saveOrUpdate(role: Role): Observable { + if (!role.id) { + return this.save(role); + } else { + return this.update(role); + } + } + + delete(id: string): Observable { + return >this.http.delete(`${url}/${id}`, httpOptions) + .pipe( + catchError(this.log.handleError(serviceName, 'delete')) + ); + } +} diff --git a/overlord/src/app/group/group.ts b/overlord/src/app/role/role.ts similarity index 86% rename from overlord/src/app/group/group.ts rename to overlord/src/app/role/role.ts index 8d99f118..5e4908bb 100644 --- a/overlord/src/app/group/group.ts +++ b/overlord/src/app/role/role.ts @@ -1,4 +1,4 @@ -export class Group { +export class Role { id: string; name: string; permissions: Permission[]; diff --git a/overlord/src/app/user/user-detail/user-detail.component.html b/overlord/src/app/user/user-detail/user-detail.component.html index 4a4dc864..2baf0133 100644 --- a/overlord/src/app/user/user-detail/user-detail.component.html +++ b/overlord/src/app/user/user-detail/user-detail.component.html @@ -29,7 +29,7 @@
- {{r.name}} + {{r.name}}
diff --git a/overlord/src/app/user/user-detail/user-detail.component.ts b/overlord/src/app/user/user-detail/user-detail.component.ts index b549bb95..ddb53653 100644 --- a/overlord/src/app/user/user-detail/user-detail.component.ts +++ b/overlord/src/app/user/user-detail/user-detail.component.ts @@ -114,7 +114,7 @@ export class UserDetailComponent implements OnInit, AfterViewInit { this.item.lockedOut = formModel.lockedOut; const array = this.form.get('roles') as FormArray; this.item.roles.forEach((item, index) => { - item.enabled = array.controls[index].value.group; + item.enabled = array.controls[index].value.role; }); return this.item; } diff --git a/overlord/src/app/user/user-list/user-list.component.html b/overlord/src/app/user/user-list/user-list.component.html index 916c5972..a85bc3ea 100644 --- a/overlord/src/app/user/user-list/user-list.component.html +++ b/overlord/src/app/user/user-list/user-list.component.html @@ -12,7 +12,7 @@ Name - {{row.name}} + {{row.name}} diff --git a/overlord/src/app/user/user.service.ts b/overlord/src/app/user/user.service.ts index 252a6e7d..ca7f5941 100644 --- a/overlord/src/app/user/user.service.ts +++ b/overlord/src/app/user/user.service.ts @@ -19,7 +19,7 @@ export class UserService { } get(id: string): Observable { - const getUrl: string = (id === null) ? `${url}/new` : `${url}/${id}`; + const getUrl: string = (id === null) ? `${url}` : `${url}/${id}`; return >this.http.get(getUrl) .pipe( catchError(this.log.handleError(serviceName, `get id=${id}`)) @@ -27,23 +27,21 @@ export class UserService { } list(): Observable { - const options = {params: new HttpParams().set('l', '')}; - return >this.http.get(url, options) + return >this.http.get(`${url}/list`) .pipe( catchError(this.log.handleError(serviceName, 'list')) ); } listOfNames(): Observable { - const options = {params: new HttpParams().set('n', '')}; - return >this.http.get(url, options) + return >this.http.get(`${url}/active`) .pipe( catchError(this.log.handleError(serviceName, 'list')) ); } save(user: User): Observable { - return >this.http.post(`${url}/new`, user, httpOptions) + return >this.http.post(`${url}`, user, httpOptions) .pipe( catchError(this.log.handleError(serviceName, 'save')) );