Skip to content

Commit

Permalink
feat: finish twitch viewer domain
Browse files Browse the repository at this point in the history
  • Loading branch information
ToxicToast committed Sep 23, 2024
1 parent 22baa50 commit 26953b4
Show file tree
Hide file tree
Showing 11 changed files with 402 additions and 50 deletions.
70 changes: 36 additions & 34 deletions libs/twitch-domain/src/lib/aggregates/viewer.aggregate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,14 @@ import { Nullable } from '@toxictoast/azkaban-base-types';
export class ViewerAggregate implements Domain<ViewerAnemic> {
constructor(
private readonly id: string,
private user_id: string,
private login: string,
private display_name: string,
private type: string,
private profile_image_url: string,
private offline_image_url: string,
private view_count: number,
private readonly display_name: string,
private joins: number,
private parts: number,
private messages: number,
private timeouts: number,
private bans: number,
private minutes_watched: number,
private lastseen_at: Nullable<Date>,
private readonly created_at: Date,
private updated_at: Nullable<Date>,
private deleted_at: Nullable<Date>,
Expand All @@ -36,13 +37,14 @@ export class ViewerAggregate implements Domain<ViewerAnemic> {
toAnemic(): ViewerAnemic {
return {
id: this.id,
user_id: this.user_id,
login: this.login,
display_name: this.display_name,
type: this.type,
profile_image_url: this.profile_image_url,
offline_image_url: this.offline_image_url,
view_count: this.view_count,
lastseen_at: this.lastseen_at,
joins: this.joins,
parts: this.parts,
messages: this.messages,
timeouts: this.timeouts,
bans: this.bans,
minutes_watched: this.minutes_watched,
created_at: this.created_at,
updated_at: this.updated_at,
deleted_at: this.deleted_at,
Expand All @@ -51,52 +53,52 @@ export class ViewerAggregate implements Domain<ViewerAnemic> {
};
}

updateUserId(user_id: string): void {
if (this.user_id !== user_id) {
updateLastSeenAt(lastseen_at: Nullable<Date>): void {
if (this.lastseen_at !== lastseen_at) {
this.updated_at = new Date();
this.user_id = user_id;
this.lastseen_at = lastseen_at;
}
}

updateLogin(login: string): void {
if (this.login !== login) {
updateJoins(joins: number): void {
if (this.joins !== joins) {
this.updated_at = new Date();
this.login = login;
this.joins = joins;
}
}

updateDisplayName(display_name: string): void {
if (this.display_name !== display_name) {
updateParts(parts: number): void {
if (this.parts !== parts) {
this.updated_at = new Date();
this.display_name = display_name;
this.parts = parts;
}
}

updateType(type: string): void {
if (this.type !== type) {
updateMessages(messages: number): void {
if (this.messages !== messages) {
this.updated_at = new Date();
this.type = type;
this.messages = messages;
}
}

updateProfileImageUrl(profile_image_url: string): void {
if (this.profile_image_url !== profile_image_url) {
updateTimeouts(timeouts: number): void {
if (this.timeouts !== timeouts) {
this.updated_at = new Date();
this.profile_image_url = profile_image_url;
this.timeouts = timeouts;
}
}

updateOfflineImageUrl(offline_image_url: string): void {
if (this.offline_image_url !== offline_image_url) {
updateBans(bans: number): void {
if (this.bans !== bans) {
this.updated_at = new Date();
this.offline_image_url = offline_image_url;
this.bans = bans;
}
}

updateViewCount(view_count: number): void {
if (this.view_count !== view_count) {
updateMinutesWatched(minutes_watched: number): void {
if (this.minutes_watched !== minutes_watched) {
this.updated_at = new Date();
this.view_count = view_count;
this.minutes_watched = minutes_watched;
}
}
}
14 changes: 8 additions & 6 deletions libs/twitch-domain/src/lib/anemics/viewer.anemic.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
import { Anemic } from '@toxictoast/azkaban-base-domain';
import { Nullable } from '@toxictoast/azkaban-base-types';

export interface ViewerAnemic extends Anemic {
readonly user_id: string;
readonly login: string;
readonly display_name: string;
readonly type: string;
readonly profile_image_url: string;
readonly offline_image_url: string;
readonly view_count: number;
readonly lastseen_at: Nullable<Date>;
readonly joins: number;
readonly parts: number;
readonly messages: number;
readonly timeouts: number;
readonly bans: number;
readonly minutes_watched: number;
}
6 changes: 0 additions & 6 deletions libs/twitch-domain/src/lib/data/viewer.data.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
export interface ViewerData {
readonly user_id: string;
readonly login: string;
readonly display_name: string;
readonly type: string;
readonly profile_image_url: string;
readonly offline_image_url: string;
readonly view_count: number;
}
2 changes: 1 addition & 1 deletion libs/twitch-domain/src/lib/factories/index.ts
Original file line number Diff line number Diff line change
@@ -1 +1 @@
export {};
export * from './viewer.factory';
96 changes: 96 additions & 0 deletions libs/twitch-domain/src/lib/factories/viewer.factory.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
import { Factory } from '@toxictoast/azkaban-base-domain';
import { ViewerAnemic } from '../anemics';
import { ViewerAggregate } from '../aggregates';
import { ViewerData } from '../data';
import { ViewerId } from '../valueObjects';

export class ViewerFactory
implements Factory<ViewerAnemic, ViewerAggregate, ViewerData>
{
reconstitute(data: ViewerAnemic): ViewerAggregate {
const {
id,
display_name,
lastseen_at,
joins,
parts,
messages,
timeouts,
bans,
minutes_watched,
created_at,
updated_at,
deleted_at,
} = data;

return new ViewerAggregate(
id,
display_name,
joins,
parts,
messages,
timeouts,
bans,
minutes_watched,
lastseen_at,
created_at,
updated_at,
deleted_at,
);
}

constitute(data: ViewerAggregate): ViewerAnemic {
const {
id,
display_name,
lastseen_at,
joins,
parts,
messages,
timeouts,
bans,
minutes_watched,
created_at,
updated_at,
deleted_at,
isUpdated,
isDeleted,
} = data.toAnemic();

return {
id,
display_name,
lastseen_at,
joins,
parts,
messages,
timeouts,
bans,
minutes_watched,
created_at,
updated_at,
deleted_at,
isUpdated,
isDeleted,
};
}

createDomain(data: ViewerData): ViewerAggregate {
const { display_name } = data;
const viewerId = new ViewerId();
return new ViewerAggregate(
viewerId.value,
display_name,
0,
0,
0,
0,
0,
0,
new Date(),
new Date(),
null,
null,
);
}
}
2 changes: 1 addition & 1 deletion libs/twitch-domain/src/lib/repositories/index.ts
Original file line number Diff line number Diff line change
@@ -1 +1 @@
export {};
export * from './viewer.repository';
12 changes: 12 additions & 0 deletions libs/twitch-domain/src/lib/repositories/viewer.repository.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { ViewerAnemic } from '../anemics';
import { Repository } from '@toxictoast/azkaban-base-domain';
import { Chainable } from '@toxictoast/azkaban-base-types';

interface ViewerAdditions {
findByDisplayName(display_name: string): Promise<ViewerAnemic>;
}

export type ViewerRepository = Chainable<
ViewerAdditions,
Repository<ViewerAnemic>
>;
2 changes: 1 addition & 1 deletion libs/twitch-domain/src/lib/services/index.ts
Original file line number Diff line number Diff line change
@@ -1 +1 @@
export {};
export * from './viewer.service';
Loading

0 comments on commit 26953b4

Please sign in to comment.