Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Oliinyk / Refactoring provider DTOs #2329

Merged
merged 4 commits into from
Jan 6, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
116 changes: 72 additions & 44 deletions src/app/shared/models/provider.model.ts
Original file line number Diff line number Diff line change
@@ -1,47 +1,36 @@
import { Institution } from './institution.model';
import { Address } from './address.model';
import { User } from './user.model';
import { SectionItem } from './sectionItem.model';
import { InstitutionTypes, OwnershipTypes } from '../enum/provider';
import { LicenseStatuses, ProviderStatuses } from '../enum/statuses';
import { Address } from './address.model';
import { Institution } from './institution.model';
import { DataItem } from './item.model';
import { InstitutionTypes, OwnershipTypes } from '../enum/provider';
import { PaginationParameters } from './queryParameters.model';
import { SectionItem } from './sectionItem.model';
import { User } from './user.model';

export interface BlockProviderData {
id: string;
isBlocked?: boolean;
blockReason?: string;
blockPhoneNumber?: string;
}

export class Provider implements BlockProviderData {
id: string;
export abstract class ProviderBase {
id?: string;
fullTitle: string;
shortTitle: string;
email: string;
website?: string;
facebook?: string;
instagram?: string;
email: string;
edrpouIpn: string;
director: string;
directorDateOfBirth: string | Date;
phoneNumber: string;
founder: string;
ownership: OwnershipTypes;
typeId?: number;
type?: DataItem;
status: ProviderStatuses;
statusReason?: string;
license?: string;
licenseStatus?: LicenseStatuses;
isBlocked?: boolean;
blockReason?: string;
blockPhoneNumber?: string;
imageFiles?: File[];
coverImageId?: string;
coverImage?: File;
imageIds?: string[];
rating?: number;
numberOfRatings?: number;
userId: string;
imageFiles?: File[];
userId: string; // TODO: Remove as soon as it will be removed from the backend
legalAddress: Address;
actualAddress?: Address;
institutionStatusId?: number;
Expand All @@ -51,41 +40,41 @@ export class Provider implements BlockProviderData {
providerSectionItems: ProviderSectionItem[];

constructor(info, legalAddress: Address, actualAddress: Address, description, user: User, provider?: Provider) {
this.shortTitle = info.shortTitle;
this.ownership = info.ownership;
this.typeId = info.typeId;
this.fullTitle = info.fullTitle;
this.shortTitle = info.shortTitle;
this.email = info.email;
this.phoneNumber = info.phoneNumber;
this.website = description.website;
this.facebook = description.facebook;
this.instagram = description.instagram;
this.edrpouIpn = info.edrpouIpn;
this.director = info.director;
this.directorDateOfBirth = new Date(info.directorDateOfBirth).toISOString();
if (info.institutionStatusId) {
this.institutionStatusId = info.institutionStatusId;
}
if (info.license) {
this.license = info.license;
}
this.phoneNumber = info.phoneNumber;
this.founder = info.founder;
this.typeId = info.typeId;
this.userId = user.id;
this.legalAddress = legalAddress;
this.actualAddress = actualAddress;
this.institutionType = info.institutionType;
this.userId = user.id;
this.institution = info.institution;
this.institutionId = info.institution.id;
this.website = description.website;
this.instagram = description.instagram;
this.facebook = description.facebook;
this.institution = info.institution;
this.institutionType = info.institutionType;
this.providerSectionItems = description.providerSectionItems;

if (provider?.id) {
this.id = provider.id;
}
this.providerSectionItems = description.providerSectionItems;
if (description.imageFiles?.length) {
this.imageFiles = description.imageFiles;
if (info.license) {
this.license = info.license;
}
if (description.imageIds?.length) {
this.imageIds = description.imageIds;
}
if (description.imageFiles?.length) {
this.imageFiles = description.imageFiles;
}
if (info.institutionStatusId) {
this.institutionStatusId = info.institutionStatusId;
}
}

static createFormData(provider: Provider): FormData {
Expand All @@ -107,32 +96,71 @@ export class Provider implements BlockProviderData {
}
}

export class Provider extends ProviderBase {
ownership: OwnershipTypes;
isBlocked?: boolean;
blockReason?: string;
rating?: number;
numberOfRatings?: number;
blockPhoneNumber?: string;

constructor(info, legalAddress: Address, actualAddress: Address, description, user: User, provider?: Provider) {
super(info, legalAddress, actualAddress, description, user, provider);

this.ownership = info.ownership;
if (provider?.isBlocked) {
this.isBlocked = provider.isBlocked;
}
if (provider?.blockReason) {
this.blockReason = provider.blockReason;
}
if (provider?.blockPhoneNumber) {
this.blockPhoneNumber = provider.blockPhoneNumber;
}
if (provider?.rating) {
this.rating = provider.rating;
}
if (provider?.numberOfRatings) {
this.numberOfRatings = provider.numberOfRatings;
}
}
}

export interface ProviderBlock {
id: string;
isBlocked: boolean;
blockPhoneNumber?: string;
blockReason?: string;
}

export class ProviderSectionItem extends SectionItem {
providerId?: string;

constructor(info) {
super(info);

if (info.providerId) {
this.providerId = info.providerId;
}
}
}

export class ProviderStatusUpdateData {
export class ProviderWithStatus {
providerId: string;
status: ProviderStatuses;
statusReason?: string;

constructor(providerId: string, status: ProviderStatuses, statusReason?: string) {
this.providerId = providerId;
this.status = status;

if (statusReason) {
this.statusReason = statusReason;
}
}
}

export interface LicenseStatusData {
export interface ProviderWithLicenseStatus {
providerId: string;
licenseStatus: LicenseStatuses;
}
Expand Down
105 changes: 49 additions & 56 deletions src/app/shared/services/provider/provider.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,30 +4,16 @@ import { HttpClient, HttpParams } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Store } from '@ngxs/store';

import { DataItem } from '../../models/item.model';
import {
BlockProviderData,
LicenseStatusData,
Provider,
ProviderParameters,
ProviderStatusUpdateData
} from '../../models/provider.model';
import { SearchResponse } from '../../models/search.model';
import { DataItem } from 'shared/models/item.model';
import { Provider, ProviderBlock, ProviderParameters, ProviderWithLicenseStatus, ProviderWithStatus } from 'shared/models/provider.model';
import { SearchResponse } from 'shared/models/search.model';

@Injectable({
providedIn: 'root'
})
export class ProviderService {
constructor(private http: HttpClient, private store: Store) {}

/**
* This method get Provider by id
* @param id string
*/
public getProviderById(id: string): Observable<Provider> {
return this.http.get<Provider>(`/api/v1/Provider/GetById/${id}`);
}

/**
* This method get filtered Providers from the database
* @param
Expand All @@ -39,11 +25,11 @@ export class ProviderService {
}

/**
* This method create Provider
* @param Provider
* This method get Provider by id
* @param id string
*/
public createProvider(provider: Provider, isImagesFeature: boolean): Observable<Provider> {
return isImagesFeature ? this.createProviderV2(provider) : this.createProviderV1(provider);
public getProviderById(id: string): Observable<Provider> {
return this.http.get<Provider>(`/api/v1/Provider/GetById/${id}`);
}

/**
Expand All @@ -53,6 +39,14 @@ export class ProviderService {
return this.http.get<Provider>('/api/v1/Provider/GetProfile');
}

/**
* This method create Provider
* @param Provider
*/
public createProvider(provider: Provider, isImagesFeature: boolean): Observable<Provider> {
return isImagesFeature ? this.createProviderV2(provider) : this.createProviderV1(provider);
}

/**
* This method update Provider
* @param Provider
Expand All @@ -64,43 +58,61 @@ export class ProviderService {
/**
* This method update Provider status
*/
public updateProviderStatus(updateStatus: ProviderStatusUpdateData): Observable<ProviderStatusUpdateData> {
return this.http.put<ProviderStatusUpdateData>('/api/v1/Provider/StatusUpdate', updateStatus);
public updateProviderStatus(updateStatus: ProviderWithStatus): Observable<ProviderWithStatus> {
return this.http.put<ProviderWithStatus>('/api/v1/Provider/StatusUpdate', updateStatus);
}

/**
* This method update Provider status
*/
public updateProviderLicenseStatus(licenseStatusData: LicenseStatusData): Observable<LicenseStatusData> {
return this.http.put<LicenseStatusData>('/api/v1/Provider/LicenseStatusUpdate', licenseStatusData);
public updateProviderLicenseStatus(licenseStatusData: ProviderWithLicenseStatus): Observable<ProviderWithLicenseStatus> {
return this.http.put<ProviderWithLicenseStatus>('/api/v1/Provider/LicenseStatusUpdate', licenseStatusData);
}

/**
* This method get all institution statuses
* This method delete a specific Provider from the database
*/
public getInstitutionStatuses(): Observable<DataItem[]> {
return this.http.get<DataItem[]>('/api/v1/InstitutionStatus/Get');
public deleteProviderById(id: string): Observable<void> {
return this.http.delete<void>(`/api/v1/Provider/Delete/${id}`);
}

/**
* This method get all provider types
* This method block a specific Provider from the database
*/
public getProviderTypes(): Observable<DataItem[]> {
return this.http.get<DataItem[]>('/api/v1/ProviderType/Get');
public blockProvider(provider: ProviderBlock): Observable<void> {
return this.http.put<void>('/api/v1/Provider/Block', provider);
}

private createProviderV1(provider: Provider): Observable<Provider> {
return this.http.post<Provider>('/api/v1/Provider/Create', provider);
}

private createProviderV2(provider: Provider): Observable<Provider> {
const formData = Provider.createFormData(provider);
return this.http.post<Provider>('/api/v2/Provider/Create', formData);
}

private updateProviderV1(provider: Provider): Observable<Provider> {
return this.http.put<Provider>('/api/v1/Provider/Update', provider);
}

private updateProviderV2(provider: Provider): Observable<Provider> {
const formData = Provider.createFormData(provider);
return this.http.put<Provider>('/api/v2/Provider/Update', formData);
}

/**
* This method delete a specific Provider from the database
* This method get all provider types
*/
public deleteProviderById(id: string): Observable<void> {
return this.http.delete<void>(`/api/v1/Provider/Delete/${id}`);
public getProviderTypes(): Observable<DataItem[]> {
return this.http.get<DataItem[]>('/api/v1/ProviderType/Get');
}

/**
* This method block a specific Provider from the database
* This method get all institution statuses
*/
public blockProvider(provider: BlockProviderData): Observable<void> {
return this.http.put<void>('/api/v1/Provider/Block', provider);
public getInstitutionStatuses(): Observable<DataItem[]> {
return this.http.get<DataItem[]>('/api/v1/InstitutionStatus/Get');
}

private setParams(providerParameters: ProviderParameters): HttpParams {
Expand All @@ -115,27 +127,8 @@ export class ProviderService {
if (providerParameters.catottgId) {
params = params.set('CATOTTGId', providerParameters.catottgId);
}

params = params.set('Size', providerParameters.size.toString()).set('From', providerParameters.from.toString());

return params;
}

private createProviderV1(provider: Provider): Observable<Provider> {
return this.http.post<Provider>('/api/v1/Provider/Create', provider);
}

private createProviderV2(provider: Provider): Observable<Provider> {
const formData = Provider.createFormData(provider);
return this.http.post<Provider>('/api/v2/Provider/Create', formData);
}

private updateProviderV1(provider: Provider): Observable<Provider> {
return this.http.put<Provider>('/api/v1/Provider/Update', provider);
}

private updateProviderV2(provider: Provider): Observable<Provider> {
const formData = Provider.createFormData(provider);
return this.http.put<Provider>('/api/v2/Provider/Update', formData);
}
}
6 changes: 3 additions & 3 deletions src/app/shared/store/admin.actions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { AdminRoles, AdminTabTypes } from '../enum/admins';
import { Direction, DirectionParameters } from '../models/category.model';
import { ChildrenParameters } from '../models/child.model';
import { FilterData } from '../models/history-log.model';
import { BlockProviderData, ProviderParameters } from '../models/provider.model';
import { ProviderBlock, ProviderParameters } from '../models/provider.model';
import { RegionAdmin, RegionAdminBlockData, RegionAdminParameters } from '../models/regionAdmin.model';
import { StatisticParameters } from '../models/statistic.model';
import { CompanyInformation } from '../models/сompanyInformation.model';
Expand Down Expand Up @@ -177,7 +177,7 @@ export class GetParentsBlockingByAdminHistory {
export class BlockProviderById {
static readonly type = '[admin] Block Provider';

constructor(public payload: BlockProviderData, public parameters: ProviderParameters) {}
constructor(public payload: ProviderBlock, public parameters: ProviderParameters) {}
}

export class GetAllAdmins {
Expand Down Expand Up @@ -453,7 +453,7 @@ export class BlockAreaAdminById {
export class OnBlockSuccess {
static readonly type = '[admin] Block Success';

constructor(public payload: MinistryAdminBlockData | BlockProviderData) {}
constructor(public payload: MinistryAdminBlockData | ProviderBlock) {}
}

export class OnBlockFail {
Expand Down
Loading
Loading