Skip to content
This repository has been archived by the owner on Sep 5, 2023. It is now read-only.

Commit

Permalink
FRONTEND-3555 :: Feature :: Merge Logger & AbstractLogger and improve…
Browse files Browse the repository at this point in the history
… API (#124)

**Asana: https://app.asana.com/0/1109863238977521/1203172481263555/f**

- Merge `Logger` interface and `AbstractLogger` into an abstract `Logger`
- Make logging APIs compatible with `console.*`
- Add `withTag()` factory method. This creates a new logger from a logger, but with a "tag" applied. Tags are strings that are preprended to log messages.
    - This can be a `string` or a `Type<T>`. [This is convenient (note that there aren't string quotes in `withTag()`)](https://github.com/mobilejazz/harmony-typescript/blob/de3b94b0a1cc4edd905b4b00cdf1744689b04a84/examples/angular/src/features/hacker-news-story/hacker-news-story.provider.ts#L93) as it allows to set a class as the tag and is refactor friendly (e.g. "rename symbol").
  • Loading branch information
doup authored Dec 12, 2022
1 parent b4cefa8 commit ba5bcf7
Show file tree
Hide file tree
Showing 11 changed files with 247 additions and 226 deletions.
6 changes: 4 additions & 2 deletions examples/angular/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,10 @@
"@angular/platform-browser": "~13.3.0",
"@angular/platform-browser-dynamic": "~13.3.0",
"@angular/router": "~13.3.0",
"@mobilejazz/harmony-angular": "^0.11.2",
"@mobilejazz/harmony-core": "^0.11.2",
"@bugfender/sdk": "^2.2.0",
"@mobilejazz/harmony-angular": "*",
"@mobilejazz/harmony-bugfender": "*",
"@mobilejazz/harmony-core": "*",
"rxjs": "~7.5.0",
"tslib": "^2.3.0",
"zone.js": "~0.11.4"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { GetInteractor } from '@mobilejazz/harmony-core';
import { GetInteractor, Logger } from '@mobilejazz/harmony-core';

import { GetHackerNewsLatestAskStoriesQuery } from '../../data/queries/hacker-news.query';
import { HackerNewsStory } from '../models/hacker-news-story.model';
Expand All @@ -8,9 +8,12 @@ export class GetHackerNewsLatestAskStoriesInteractor {
constructor(
private readonly getStory: GetHackerNewsStoryInteractor,
private readonly getLatestAskStoryIds: GetInteractor<number[]>,
private readonly logger: Logger,
) { }

public async execute(limit: number = 5): Promise<HackerNewsStory[]> {
public async execute(limit = 5): Promise<HackerNewsStory[]> {
this.logger.log('Getting latest news from Hacker News');

const ids = await this.getLatestAskStoryIds.execute(new GetHackerNewsLatestAskStoriesQuery());

return Promise.all(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
import { GetInteractor } from '@mobilejazz/harmony-core';
import { GetInteractor, Logger } from '@mobilejazz/harmony-core';

import { GetHackerNewsStoryQuery } from '../../data/queries/hacker-news.query';
import { HackerNewsStory } from '../models/hacker-news-story.model';

export class GetHackerNewsStoryInteractor {
constructor(
private readonly getStory: GetInteractor<HackerNewsStory>,
private readonly logger: Logger,
) { }

public async execute(id: number): Promise<HackerNewsStory> {
this.logger.log('Getting story: %s', id);
return this.getStory.execute(new GetHackerNewsStoryQuery(id));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@ import { HackerNewsStoryDefaultProvider } from "./hacker-news-story.provider";
providers: createAngularProviders(
{
provide: HackerNewsStoryProvider,
useFactory: () => new HackerNewsStoryDefaultProvider(),
useFactory: () => new HackerNewsStoryDefaultProvider(
// 'BUGFENDER_APP_KEY'
),
},
[
GetHackerNewsLatestAskStoriesInteractor,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,17 @@ import {
CacheRepository,
createCacheDecorator,
DefaultObjectValidator,
DeviceConsoleLogger,
GetInteractor,
GetRepository,
InMemoryDataSource,
Logger,
RepositoryMapper,
SingleGetDataSourceRepository,
VoidDataSource
} from '@mobilejazz/harmony-core';
import { BugfenderLogger } from '@mobilejazz/harmony-bugfender';
import { Bugfender } from '@bugfender/sdk';
import { HackerNewsStoryNetworkDataSource } from './data/data-sources/hacker-news-story.network.data-source';
import { HackerNewsStoryEntity } from './data/entities/hacker-news-item.entity';
import { HackerNewsStoryJSONToHackerNewsStoryEntityMapper } from './data/mappers/hacker-news-story.mapper';
Expand All @@ -30,6 +34,24 @@ export abstract class HackerNewsStoryProvider {
export class HackerNewsStoryDefaultProvider implements HackerNewsStoryProvider {
private readonly hackerNewsService: HackerNewsService = new HackerNewsFetchService();

constructor(
private readonly bugfenderAppKey?: string,
) {}

@Cached()
private getLogger(): Logger {
if (this.bugfenderAppKey) {
Bugfender.init({
appKey: this.bugfenderAppKey,
overrideConsoleMethods: false,
});

return new BugfenderLogger(Bugfender);
}

return new DeviceConsoleLogger();
}

@Cached()
private getHackerNewsStoryIdsRepository(): GetRepository<number[]> {
return new SingleGetDataSourceRepository(
Expand Down Expand Up @@ -63,15 +85,21 @@ export class HackerNewsStoryDefaultProvider implements HackerNewsStoryProvider {
}

public provideGetHackerNewsLatestAskStories(): GetHackerNewsLatestAskStoriesInteractor {
this.getLogger().info('Creating instance: GetHackerNewsLatestAskStoriesInteractor');

return new GetHackerNewsLatestAskStoriesInteractor(
this.provideGetHackerNewsStory(),
new GetInteractor(this.getHackerNewsStoryIdsRepository()),
this.getLogger().withTag(GetHackerNewsLatestAskStoriesInteractor),
);
}

public provideGetHackerNewsStory(): GetHackerNewsStoryInteractor {
this.getLogger().info('Creating instance: GetHackerNewsStoryInteractor');

return new GetHackerNewsStoryInteractor(
new GetInteractor(this.getHackerNewsStoryRepository()),
this.getLogger().withTag(GetHackerNewsStoryInteractor),
);
}
}
Loading

0 comments on commit ba5bcf7

Please sign in to comment.