Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 | 25x 25x 25x 25x 25x 25x 8x 2x 2x 2x 1x 1x 1x 1x 1x 1x 1x 1x 1x | import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { concatMap, first, map } from 'rxjs/operators';
import { AppFacade } from 'ish-core/facades/app.facade';
import { AddressMapper } from 'ish-core/models/address/address.mapper';
import { Address } from 'ish-core/models/address/address.model';
import { Link } from 'ish-core/models/link/link.model';
import { ApiService, unpackEnvelope } from 'ish-core/services/api/api.service';
/**
* The Address Service handles the interaction with the REST API concerning addresses.
*/
@Injectable({ providedIn: 'root' })
export class AddressService {
constructor(private apiService: ApiService, private appFacade: AppFacade) {}
/**
* Gets the addresses for the given customer id. Falls back to '-' as customer id to get the addresses for the current user.
*
* @param customerId The customer id.
* @returns The customer's addresses.
*/
getCustomerAddresses(customerId: string = '-'): Observable<Address[]> {
return this.appFacade.customerRestResource$.pipe(
first(),
concatMap(restResource =>
this.apiService.get(`${restResource}/${this.apiService.encodeResourceId(customerId)}/addresses`).pipe(
unpackEnvelope<Link>(),
this.apiService.resolveLinks<Address>(),
map(addressesData => addressesData.map(AddressMapper.fromData))
)
)
);
}
/**
* Creates an address for the given customer id. Falls back to '-' as customer id if no customer id is given
*
* @param customerId The customer id.
* @param address The address which should be created
* @returns The new customer's address.
*/
createCustomerAddress(customerId: string = '-', address: Address): Observable<Address> {
const customerAddress = {
...address,
mainDivision: address.mainDivisionCode,
};
return this.appFacade.customerRestResource$.pipe(
first(),
concatMap(restResource =>
this.apiService
.post(`${restResource}/${this.apiService.encodeResourceId(customerId)}/addresses`, customerAddress)
.pipe(this.apiService.resolveLink<Address>(), map(AddressMapper.fromData))
)
);
}
/**
* Updates an address for the given customer id. Falls back to '-' as customer id if no customer id is given
*
* @param customerId The customer id.
* @param address The address
*/
updateCustomerAddress(customerId: string = '-', address: Address): Observable<Address> {
const customerAddress = {
...address,
mainDivision: address.mainDivisionCode,
};
return this.appFacade.customerRestResource$.pipe(
first(),
concatMap(restResource =>
this.apiService
.put(
`${restResource}/${this.apiService.encodeResourceId(
customerId
)}/addresses/${this.apiService.encodeResourceId(address.id)}`,
customerAddress
)
.pipe(map(AddressMapper.fromData))
)
);
}
/**
* Deletes an address for the given customer id. Falls back to '-' as customer id if no customer id is given
*
* @param customerId The customer id.
* @param address The address id
* @returns The id of the deleted address.
*/
deleteCustomerAddress(customerId: string = '-', addressId: string): Observable<string> {
return this.appFacade.customerRestResource$.pipe(
first(),
concatMap(restResource =>
this.apiService
.delete(
`${restResource}/${this.apiService.encodeResourceId(
customerId
)}/addresses/${this.apiService.encodeResourceId(addressId)}`
)
.pipe(map(() => addressId))
)
);
}
}
|