juice-shop
66 строк · 2.5 Кб
1/*
2* Copyright (c) 2014-2024 Bjoern Kimminich & the OWASP Juice Shop contributors.
3* SPDX-License-Identifier: MIT
4*/
5
6import { environment } from '../../environments/environment'7import { Injectable } from '@angular/core'8import { HttpClient } from '@angular/common/http'9import { catchError, map } from 'rxjs/operators'10import { type Observable, Subject } from 'rxjs'11
12interface OrderDetail {13paymentId: string14addressId: string15deliveryMethodId: string16}
17
18@Injectable({19providedIn: 'root'20})21export class BasketService {22public hostServer = environment.hostServer23public itemTotal = new Subject<any>()24private readonly host = this.hostServer + '/api/BasketItems'25
26constructor (private readonly http: HttpClient) { }27
28find (id?: number) {29return this.http.get(`${this.hostServer}/rest/basket/${id}`).pipe(map((response: any) => response.data), catchError((error) => { throw error }))30}31
32get (id: number) {33return this.http.get(`${this.host}/${id}`).pipe(map((response: any) => response.data), catchError((error) => { throw error }))34}35
36put (id: number, params: any) {37return this.http.put(`${this.host}/${id}`, params).pipe(map((response: any) => response.data), catchError((error) => { throw error }))38}39
40del (id: number) {41return this.http.delete(`${this.host}/${id}`).pipe(map((response: any) => response.data), catchError((error) => { throw error }))42}43
44save (params?: any) {45return this.http.post(this.host + '/', params).pipe(map((response: any) => response.data), catchError((error) => { throw error }))46}47
48checkout (id?: number, couponData?: string, orderDetails?: OrderDetail) {49return this.http.post(`${this.hostServer}/rest/basket/${id}/checkout`, { couponData, orderDetails }).pipe(map((response: any) => response.orderConfirmation), catchError((error) => { throw error }))50}51
52applyCoupon (id?: number, coupon?: string) {53return this.http.put(`${this.hostServer}/rest/basket/${id}/coupon/${coupon}`, {}).pipe(map((response: any) => response.discount), catchError((error) => { throw error }))54}55
56updateNumberOfCartItems () {57this.find(parseInt(sessionStorage.getItem('bid'), 10)).subscribe((basket) => {58// eslint-disable-next-line @typescript-eslint/restrict-plus-operands59this.itemTotal.next(basket.Products.reduce((itemTotal, product) => itemTotal + product.BasketItem.quantity, 0))60}, (err) => { console.log(err) })61}62
63getItemTotal (): Observable<any> {64return this.itemTotal.asObservable()65}66}
67