Skip to content

Commit 7be26e5

Browse files
authored
feat(customer): support in-memory backend delegate (#3184)
1 parent 06f29ef commit 7be26e5

9 files changed

+67
-26
lines changed

libs/customer/driver/in-memory/src/backend/address.service.ts

+6-1
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,19 @@ import {
99

1010
import { DaffCustomerAddress } from '@daffodil/customer';
1111
import { DaffCustomerAddressFactory } from '@daffodil/customer/testing';
12+
import { DaffInMemorySingleRouteableBackend } from '@daffodil/driver/in-memory';
13+
14+
import { DAFF_CUSTOMER_ADDRESS_IN_MEMORY_COLLECTION_NAME } from '../collection-names/address.const';
1215

1316
/**
1417
* An in-memory service that handles customer address HTTP requests.
1518
*/
1619
@Injectable({
1720
providedIn: 'root',
1821
})
19-
export class DaffCustomerAddressInMemoryBackendService implements InMemoryDbService {
22+
export class DaffCustomerAddressInMemoryBackendService implements InMemoryDbService, DaffInMemorySingleRouteableBackend {
23+
readonly collectionName = DAFF_CUSTOMER_ADDRESS_IN_MEMORY_COLLECTION_NAME;
24+
2025
addresses: Record<DaffCustomerAddress['id'], DaffCustomerAddress> = {};
2126

2227
constructor(

libs/customer/driver/in-memory/src/backend/customer.service.ts

+6-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ import {
99

1010
import { DaffCustomer } from '@daffodil/customer';
1111
import { DaffCustomerFactory } from '@daffodil/customer/testing';
12+
import { DaffInMemorySingleRouteableBackend } from '@daffodil/driver/in-memory';
13+
14+
import { DAFF_CUSTOMER_IN_MEMORY_COLLECTION_NAME } from '../collection-names/customer.const';
1215

1316
/**
1417
* An in-memory service that delegates customer queries to child backends
@@ -17,7 +20,9 @@ import { DaffCustomerFactory } from '@daffodil/customer/testing';
1720
@Injectable({
1821
providedIn: 'root',
1922
})
20-
export class DaffCustomerInMemoryBackendService implements InMemoryDbService {
23+
export class DaffCustomerInMemoryBackendService implements InMemoryDbService, DaffInMemorySingleRouteableBackend {
24+
readonly collectionName = DAFF_CUSTOMER_IN_MEMORY_COLLECTION_NAME;
25+
2126
customers: Record<DaffCustomer['id'], DaffCustomer> = {};
2227

2328
constructor(
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export const DAFF_CUSTOMER_ADDRESS_IN_MEMORY_COLLECTION_NAME = 'customer-address';
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export const DAFF_CUSTOMER_IN_MEMORY_COLLECTION_NAME = 'customer';

libs/customer/driver/in-memory/src/driver/address.service.spec.ts

+12-5
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
provideHttpClientTesting,
88
} from '@angular/common/http/testing';
99
import { TestBed } from '@angular/core/testing';
10+
import { InMemoryBackendConfig } from 'angular-in-memory-web-api';
1011
import { Observable } from 'rxjs';
1112

1213
import { DaffCustomerAddress } from '@daffodil/customer';
@@ -25,6 +26,12 @@ describe('@daffodil/customer/driver/in-memory | DaffCustomerAddressInMemoryDrive
2526
imports: [],
2627
providers: [
2728
DaffCustomerAddressInMemoryDriver,
29+
{
30+
provide: InMemoryBackendConfig,
31+
useValue: {
32+
apiBase: 'api',
33+
},
34+
},
2835
provideHttpClient(withInterceptorsFromDi()),
2936
provideHttpClientTesting(),
3037
],
@@ -50,7 +57,7 @@ describe('@daffodil/customer/driver/in-memory | DaffCustomerAddressInMemoryDrive
5057
let result: Observable<DaffCustomerAddress[]>;
5158

5259
beforeEach(() => {
53-
url = service.url;
60+
url = service['url'];
5461
result = service.list();
5562
});
5663

@@ -72,7 +79,7 @@ describe('@daffodil/customer/driver/in-memory | DaffCustomerAddressInMemoryDrive
7279
let result: Observable<DaffCustomerAddress>;
7380

7481
beforeEach(() => {
75-
url = service.url;
82+
url = service['url'];
7683
result = service.get(mockAddress.id);
7784
});
7885

@@ -94,7 +101,7 @@ describe('@daffodil/customer/driver/in-memory | DaffCustomerAddressInMemoryDrive
94101
let result: Observable<DaffCustomerAddress[]>;
95102

96103
beforeEach(() => {
97-
url = `${service.url}/${mockAddress.id}`;
104+
url = `${service['url']}/${mockAddress.id}`;
98105
result = service.update(mockAddress);
99106
});
100107

@@ -116,7 +123,7 @@ describe('@daffodil/customer/driver/in-memory | DaffCustomerAddressInMemoryDrive
116123
let result: Observable<DaffCustomerAddress[]>;
117124

118125
beforeEach(() => {
119-
url = service.url;
126+
url = service['url'];
120127
result = service.add(mockAddress);
121128
});
122129

@@ -138,7 +145,7 @@ describe('@daffodil/customer/driver/in-memory | DaffCustomerAddressInMemoryDrive
138145
let result: Observable<DaffCustomerAddress[]>;
139146

140147
beforeEach(() => {
141-
url = `${service.url}/${mockAddress.id}`;
148+
url = `${service['url']}/${mockAddress.id}`;
142149
result = service.delete(mockAddress.id);
143150
});
144151

libs/customer/driver/in-memory/src/driver/address.service.ts

+9-7
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { HttpClient } from '@angular/common/http';
22
import { Injectable } from '@angular/core';
3+
import { InMemoryBackendConfig } from 'angular-in-memory-web-api';
34
import {
45
map,
56
Observable,
@@ -8,6 +9,9 @@ import {
89
import { DaffIdentifiable } from '@daffodil/core';
910
import { DaffCustomerAddress } from '@daffodil/customer';
1011
import { DaffCustomerAddressDriverInterface } from '@daffodil/customer/driver';
12+
import { DaffInMemoryDriverBase } from '@daffodil/driver/in-memory';
13+
14+
import { DAFF_CUSTOMER_ADDRESS_IN_MEMORY_COLLECTION_NAME } from '../collection-names/address.const';
1115

1216
/**
1317
* The customer address in-memory driver to mock the customer address backend service.
@@ -17,15 +21,13 @@ import { DaffCustomerAddressDriverInterface } from '@daffodil/customer/driver';
1721
@Injectable({
1822
providedIn: 'root',
1923
})
20-
export class DaffCustomerAddressInMemoryDriver implements DaffCustomerAddressDriverInterface {
21-
/**
22-
* @docs-private
23-
*/
24-
url = '/api/customer-address';
25-
24+
export class DaffCustomerAddressInMemoryDriver extends DaffInMemoryDriverBase implements DaffCustomerAddressDriverInterface {
2625
constructor(
2726
private http: HttpClient,
28-
) {}
27+
config: InMemoryBackendConfig,
28+
) {
29+
super(config, DAFF_CUSTOMER_ADDRESS_IN_MEMORY_COLLECTION_NAME);
30+
}
2931

3032
list(): Observable<DaffCustomerAddress[]> {
3133
return this.http.get<DaffCustomerAddress[]>(this.url);

libs/customer/driver/in-memory/src/driver/customer-driver.module.ts

+12-1
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,15 @@ import {
88
DaffCustomerAddressDriver,
99
DaffCustomerDriver,
1010
} from '@daffodil/customer/driver';
11+
import {
12+
DaffInMemoryBackendInterface,
13+
provideDaffInMemoryBackends,
14+
} from '@daffodil/driver/in-memory';
1115

1216
import { DaffCustomerAddressInMemoryDriver } from './address.service';
1317
import { DaffCustomerInMemoryDriver } from './customer.service';
18+
import { DaffCustomerAddressInMemoryBackendService } from '../backend/address.service';
19+
import { DaffCustomerInMemoryBackendService } from '../backend/customer.service';
1420

1521
/**
1622
* Provides the {@link DaffCustomerInMemoryDriver} as the {@link DaffCustomerDriver}.
@@ -28,10 +34,15 @@ export class DaffCustomerInMemoryDriverModule {
2834
{
2935
provide: DaffCustomerDriver,
3036
useExisting: DaffCustomerInMemoryDriver,
31-
},{
37+
},
38+
{
3239
provide: DaffCustomerAddressDriver,
3340
useExisting: DaffCustomerAddressInMemoryDriver,
3441
},
42+
provideDaffInMemoryBackends<DaffInMemoryBackendInterface>(
43+
DaffCustomerInMemoryBackendService,
44+
DaffCustomerAddressInMemoryBackendService,
45+
),
3546
],
3647
};
3748
}

libs/customer/driver/in-memory/src/driver/customer.service.spec.ts

+11-4
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
provideHttpClientTesting,
88
} from '@angular/common/http/testing';
99
import { TestBed } from '@angular/core/testing';
10+
import { InMemoryBackendConfig } from 'angular-in-memory-web-api';
1011
import { Observable } from 'rxjs';
1112

1213
import { DaffCustomer } from '@daffodil/customer';
@@ -25,6 +26,12 @@ describe('@daffodil/customer/driver/in-memory | DaffCustomerInMemoryDriver', ()
2526
imports: [],
2627
providers: [
2728
DaffCustomerInMemoryDriver,
29+
{
30+
provide: InMemoryBackendConfig,
31+
useValue: {
32+
apiBase: 'api',
33+
},
34+
},
2835
provideHttpClient(withInterceptorsFromDi()),
2936
provideHttpClientTesting(),
3037
],
@@ -50,7 +57,7 @@ describe('@daffodil/customer/driver/in-memory | DaffCustomerInMemoryDriver', ()
5057
let result: Observable<DaffCustomer>;
5158

5259
beforeEach(() => {
53-
url = service.url;
60+
url = service['url'];
5461
result = service.get();
5562
});
5663

@@ -72,7 +79,7 @@ describe('@daffodil/customer/driver/in-memory | DaffCustomerInMemoryDriver', ()
7279
let result: Observable<DaffCustomer>;
7380

7481
beforeEach(() => {
75-
url = `${service.url}/customer`;
82+
url = `${service['url']}/customer`;
7683
result = service.update(mockResponse);
7784
});
7885

@@ -94,7 +101,7 @@ describe('@daffodil/customer/driver/in-memory | DaffCustomerInMemoryDriver', ()
94101
let result: Observable<DaffCustomer>;
95102

96103
beforeEach(() => {
97-
url = `${service.url}/email`;
104+
url = `${service['url']}/email`;
98105
result = service.changeEmail('email', 'password');
99106
});
100107

@@ -116,7 +123,7 @@ describe('@daffodil/customer/driver/in-memory | DaffCustomerInMemoryDriver', ()
116123
let result: Observable<void>;
117124

118125
beforeEach(() => {
119-
url = `${service.url}/password`;
126+
url = `${service['url']}/password`;
120127
result = service.changePassword('old', 'new');
121128
});
122129

libs/customer/driver/in-memory/src/driver/customer.service.ts

+9-7
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
import { HttpClient } from '@angular/common/http';
22
import { Injectable } from '@angular/core';
3+
import { InMemoryBackendConfig } from 'angular-in-memory-web-api';
34
import {
45
map,
56
Observable,
67
} from 'rxjs';
78

89
import { DaffCustomer } from '@daffodil/customer';
910
import { DaffCustomerDriverInterface } from '@daffodil/customer/driver';
11+
import { DaffInMemoryDriverBase } from '@daffodil/driver/in-memory';
12+
13+
import { DAFF_CUSTOMER_IN_MEMORY_COLLECTION_NAME } from '../collection-names/customer.const';
1014

1115
/**
1216
* The customer inmemory driver to mock the customer backend service.
@@ -16,15 +20,13 @@ import { DaffCustomerDriverInterface } from '@daffodil/customer/driver';
1620
@Injectable({
1721
providedIn: 'root',
1822
})
19-
export class DaffCustomerInMemoryDriver implements DaffCustomerDriverInterface {
20-
/**
21-
* @docs-private
22-
*/
23-
url = '/api/customer';
24-
23+
export class DaffCustomerInMemoryDriver extends DaffInMemoryDriverBase implements DaffCustomerDriverInterface {
2524
constructor(
2625
private http: HttpClient,
27-
) {}
26+
config: InMemoryBackendConfig,
27+
) {
28+
super(config, DAFF_CUSTOMER_IN_MEMORY_COLLECTION_NAME);
29+
}
2830

2931
changeEmail(email: string, password: string): Observable<DaffCustomer> {
3032
return this.http.put<DaffCustomer>(`${this.url}/email`, { email, password });

0 commit comments

Comments
 (0)