Как использовать шаблон адаптера для поста http в angular 8? - PullRequest
0 голосов
/ 25 апреля 2020

В angular я использую шаблон адаптера для адаптации ответа Http «get» к «Счету».

Модели были упрощены для удобства чтения.

export interface Adapter<T> {
    adapt(item: any): T;
}

export class Invoice {
    constructor(
        public id: number,
        public customerId: number,
        public customerName: string,
    ) {}
}


@Injectable({
    providedIn: 'root'
})
export class InvoiceAdapter implements Adapter<Invoice> {
    adapt(item: any): Invoice {
        return new Invoice (
            item.id,
            item.customer_id,
            item.customer,
        );
    }
}

А затем используйте его следующим образом.

public getAll(): Observable<Invoice[]> {
    return super
      .getAll()
      .pipe(map((data: any[]) => data.map(item => this.invoiceAdapter.adapt(item))));
  }

Для запроса Http post адаптируйте 'Invoice' к 'InvoicePost', то есть модели, аналогичной ожидаемой в бэкэнде.

export class InvoicePost {
    constructor(
        public id: number,
        public customer_id: number,
        public customer: string,
    ) {}
}


@Injectable({
    providedIn: 'root'
})
export class InvoicePostAdapter implements Adapter<InvoicePost> {
    adapt(item: any): InvoicePost {
        return new InvoicePost (
            item.id,
            item.customerId,
            item.customerName,
        );
    }
}

Как использовать этот «InvoicePostAdapter» при использовании сообщения Http?

...