import { BaseServiceOptions } from '../../api/services/base-service'; import { ProfileTypeEnum } from '../enums'; import { CreatePaymentRes, CreateSellerDocumentPayload, CreateSellerDocumentRes, CreateShippingAddressesRes, GetSellerProfileRes, SellerProfile, ShippingAddress, UserAddress } from '../interfaces'; import { DocumentsService } from './documents.service'; import { WithDocumentsService } from './documents.service.interfaces'; import { PaymentDetailsService } from './payment-details.service'; import { WithPaymentDetails } from './payment-details.service.interfaces'; import { ProfileService } from './profile.service'; import { AddProfileRequest, EditProfileRequest } from './profile.service.interfaces'; import { ShippingAddressService } from './shipping-address.service'; import { ProfileAddShippingAddressRequest, EditShippingAddressRequest, WithShippingAddress, } from './shipping-address.service.interfaces'; export type EditSellerProfileRequest = EditProfileRequest & Partial; export type AddSellerProfileRequest = AddProfileRequest & Partial; export class SellerProfileService extends ProfileService implements WithPaymentDetails, WithShippingAddress, WithDocumentsService { paymentDetails: PaymentDetailsService; shippingAddress: ShippingAddressService; documents: DocumentsService; constructor(opts: BaseServiceOptions) { super({ ...opts, profileType: ProfileTypeEnum.Seller }); this.paymentDetails = new PaymentDetailsService({ ...opts, profileApiUrl: this.profileApiUrl }); this.shippingAddress = new ShippingAddressService({ ...opts, profileApiUrl: this.profileApiUrl }); this.documents = new DocumentsService({ ...opts, profileApiUrl: this.profileApiUrl }); } getSellerProfileByUserId(userId: string) { return this.get( `${this.apiUrl}/users/v1/end-user/seller/list`, { userId: userId }, { timeout: 5000 } ); } getSellerDocuments(profileId: string) { return this.get(`${this.apiUrl}/users/v1/end-user/seller/${profileId}/documents/`); } addSellerDocument(req: CreateSellerDocumentPayload) { return this.post( `${this.apiUrl}/users/v1/end-user/seller/${req.profileId}/documents`, req ); } updateSellerDocument(req: CreateSellerDocumentPayload) { return this.put( `${this.apiUrl}/users/v1/end-user/seller/${req.profileId}/documents/${req.docId}`, req ); } getSellerAddress(profileId: string) { return this.get( `${this.apiUrl}/users/v1/end-user/seller/${profileId}/shipping-addresses` ); } async getSellerDefaultPaymentDetails(profileId: string) { return this.get( `${this.apiUrl}/users/v1/end-user/seller/${profileId}/payment-details/default`, {}, { timeout: 5000 } ); } editProfile(id: string, req: EditSellerProfileRequest) { return this.put(`${this.profileApiUrl}/${id}`, req); } addProfile(req: AddSellerProfileRequest) { return this.post(this.profileApiUrl, req); } deleteSellerAddress(profileId: string, addressId: string) { return this.delete(`${this.apiUrl}/users/v1/end-user/seller/${profileId}/shipping-addresses/${addressId}`); } addSellerAddress(req: ProfileAddShippingAddressRequest) { return this.post( `${this.apiUrl}/users/v1/end-user/seller/${req.profileId}/shipping-addresses`, req ); } editSellerAddress(req: EditShippingAddressRequest) { return this.put( `${this.apiUrl}/users/v1/end-user/seller/${req.profileId}/shipping-addresses/${req.addressId}`, req ); } }