Skip to content

Commit

Permalink
feat(api-service): serialzie response
Browse files Browse the repository at this point in the history
  • Loading branch information
ChmaraX committed Jan 30, 2025
1 parent 0330809 commit ad52649
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 5 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { ApiProperty } from '@nestjs/swagger';
import { ChannelTypeEnum, IPreferenceChannels, IPreferenceOverride, PreferenceOverrideSourceEnum } from '@novu/shared';
import { Type } from 'class-transformer';

export class PreferenceChannelsDto implements IPreferenceChannels {
@ApiProperty({ description: 'Email channel preference' })
Expand Down Expand Up @@ -47,6 +48,7 @@ export class GlobalPreferenceDto {
enabled: boolean;

@ApiProperty({ description: 'Channel-specific preference settings', type: PreferenceChannelsDto })
@Type(() => PreferenceChannelsDto)
channels: PreferenceChannelsDto;
}

Expand All @@ -55,19 +57,24 @@ export class WorkflowPreferenceDto {
enabled: boolean;

@ApiProperty({ description: 'Channel-specific preference settings for this workflow', type: PreferenceChannelsDto })
@Type(() => PreferenceChannelsDto)
channels: PreferenceChannelsDto;

@ApiProperty({ description: 'List of preference overrides', type: [PreferenceOverride] })
@Type(() => PreferenceOverride)
overrides: PreferenceOverride[];

@ApiProperty({ description: 'Workflow information', type: WorkflowInfoDto })
@Type(() => WorkflowInfoDto)
workflow: WorkflowInfoDto;
}

export class GetSubscriberPreferencesDto {
@ApiProperty({ description: 'Global preference settings', type: GlobalPreferenceDto })
@Type(() => GlobalPreferenceDto)
global: GlobalPreferenceDto;

@ApiProperty({ description: 'Workflow-specific preference settings', type: [WorkflowPreferenceDto] })
@Type(() => WorkflowPreferenceDto)
workflows: WorkflowPreferenceDto[];
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,13 @@ import {
GetSubscriberPreferenceCommand,
} from '@novu/application-generic';
import { ISubscriberPreferenceResponse } from '@novu/shared';
import { plainToInstance } from 'class-transformer';
import { GetSubscriberPreferencesCommand } from './get-subscriber-preferences.command';
import { GetSubscriberPreferencesDto } from '../../dtos/get-subscriber-preferences.dto';
import {
GetSubscriberPreferencesDto,
GlobalPreferenceDto,
WorkflowPreferenceDto,
} from '../../dtos/get-subscriber-preferences.dto';

@Injectable()
export class GetSubscriberPreferences {
Expand All @@ -20,13 +25,13 @@ export class GetSubscriberPreferences {
const globalPreference = await this.fetchGlobalPreference(command);
const workflowPreferences = await this.fetchWorkflowPreferences(command);

return {
return plainToInstance(GetSubscriberPreferencesDto, {
global: globalPreference,
workflows: workflowPreferences,
};
});
}

private async fetchGlobalPreference(command: GetSubscriberPreferencesCommand) {
private async fetchGlobalPreference(command: GetSubscriberPreferencesCommand): Promise<GlobalPreferenceDto> {
const { preference } = await this.getSubscriberGlobalPreference.execute(
GetSubscriberGlobalPreferenceCommand.create({
organizationId: command.organizationId,
Expand Down Expand Up @@ -55,7 +60,7 @@ export class GetSubscriberPreferences {
return subscriberWorkflowPreferences.map(this.mapToWorkflowPreference);
}

private mapToWorkflowPreference(subscriberWorkflowPreference: ISubscriberPreferenceResponse) {
private mapToWorkflowPreference(subscriberWorkflowPreference: ISubscriberPreferenceResponse): WorkflowPreferenceDto {
const { preference, template } = subscriberWorkflowPreference;

return {
Expand Down

0 comments on commit ad52649

Please sign in to comment.