blob: e61071cbfc05eea961e2d30c31cb36d80aea39c0 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import {Inject, Injectable} from '@angular/core';
import {HttpClients} from '../http/http.service';
import {Observable} from 'rxjs/Observable';
import {ProductDefinition} from './domain/definition/product-definition.model';
import {ProductDefinitionCommand} from './domain/definition/product-definition-command.model';
import {ProductInstance} from './domain/instance/product-instance.model';
import {RequestOptionsArgs, URLSearchParams} from '@angular/http';
import {Action} from './domain/definition/action.model';
import {DividendDistribution} from './domain/definition/dividend-distribution.model';
import {AvailableTransactionType} from './domain/instance/available-transaction-type.model';
@Injectable()
export class DepositAccountService {
constructor(private http: HttpClients, @Inject('depositAccountBaseUrl') private baseUrl: string) {
}
createProductDefinition(productDefinition: ProductDefinition): Observable<void> {
return this.http.post(`${this.baseUrl}/definitions`, productDefinition);
}
updateProductDefinition(productDefinition: ProductDefinition): Observable<void> {
return this.http.put(`${this.baseUrl}/definitions/${productDefinition.identifier}`, productDefinition);
}
deleteProductDefinition(identifier: string): Observable<void> {
return this.http.delete(`${this.baseUrl}/definitions/${identifier}`);
}
fetchProductDefinitions(): Observable<ProductDefinition[]> {
return this.http.get(`${this.baseUrl}/definitions`);
}
findProductDefinition(identifier: string): Observable<ProductDefinition> {
return this.http.get(`${this.baseUrl}/definitions/${identifier}`);
}
processCommand(identifier: string, command: ProductDefinitionCommand): Observable<void> {
return this.http.post(`${this.baseUrl}/definitions/${identifier}/commands`, command);
}
fetchDividendDistributions(identifier: string): Observable<DividendDistribution[]> {
return this.http.get(`${this.baseUrl}/definitions/${identifier}/dividends`);
}
distributeDividend(identifier: string, dividendDistribution: DividendDistribution): Observable<void> {
return this.http.post(`${this.baseUrl}/definitions/${identifier}/dividends`, dividendDistribution);
}
createProductInstance(productInstance: ProductInstance): Observable<void> {
return this.http.post(`${this.baseUrl}/instances`, productInstance);
}
updateProductInstance(productInstance: ProductInstance): Observable<void> {
return this.http.put(`${this.baseUrl}/instances/${productInstance.accountIdentifier}`, productInstance);
}
findProductInstance(identifier: string): Observable<ProductInstance> {
return this.http.get(`${this.baseUrl}/instances/${identifier}`);
}
fetchProductInstances(customerIdentifier: string, productIdentifier?: string): Observable<ProductInstance[]> {
const search = new URLSearchParams();
search.append('customer', customerIdentifier);
search.append('product', productIdentifier);
const requestOptions: RequestOptionsArgs = {
search
};
return this.http.get(`${this.baseUrl}/instances`, requestOptions);
}
fetchActions(): Observable<Action[]> {
return this.http.get(`${this.baseUrl}/actions`);
}
fetchPossibleTransactionTypes(customerIdentifier: string): Observable<AvailableTransactionType[]> {
const search = new URLSearchParams();
search.append('customer', customerIdentifier);
const requestOptions: RequestOptionsArgs = {
search
};
return this.http.get(`${this.baseUrl}/instances/transactiontypes`, requestOptions);
}
}