diff --git a/src/app/core/sellers/models/seller-user.model.ts b/src/app/core/sellers/models/seller-user.model.ts new file mode 100644 index 0000000..c03b3f8 --- /dev/null +++ b/src/app/core/sellers/models/seller-user.model.ts @@ -0,0 +1,12 @@ +import { UUID } from '../../../shared/types/primitive.types'; + +/** Per docs/backend/PHASE-5-SELLER-PORTAL-CONTRACT.md §2, §4. */ +export type SellerRole = 'SELLER_OWNER' | 'SELLER_CATALOG_MANAGER' | 'SELLER_ORDER_MANAGER' | 'SELLER_FINANCE_VIEWER' | 'SELLER_VIEWER'; + +export interface SellerUser { + id: UUID; + sellerId: UUID; + role: SellerRole; + email: string; + status: 'active' | 'invited' | 'suspended'; +} diff --git a/src/app/core/sellers/services/seller-gateway.interface.ts b/src/app/core/sellers/services/seller-gateway.interface.ts new file mode 100644 index 0000000..ce2f22f --- /dev/null +++ b/src/app/core/sellers/services/seller-gateway.interface.ts @@ -0,0 +1,9 @@ +import { Observable } from 'rxjs'; +import { Seller } from '../models/seller.model'; +import { SellerUser } from '../models/seller-user.model'; + +/** Per docs/backend/PHASE-5-SELLER-PORTAL-CONTRACT.md §3. Operates on the existing Seller domain type. */ +export interface SellerGateway { + loadSellers(): Observable; + loadTeam(sellerId: string): Observable; +} diff --git a/src/app/core/sellers/services/seller-gateway.token.ts b/src/app/core/sellers/services/seller-gateway.token.ts new file mode 100644 index 0000000..731b28f --- /dev/null +++ b/src/app/core/sellers/services/seller-gateway.token.ts @@ -0,0 +1,9 @@ +import { InjectionToken, inject } from '@angular/core'; +import { SellerGateway } from './seller-gateway.interface'; +import { SellerLocalGateway } from './seller-local.gateway'; + +/** Swap point for docs/backend/PHASE-5-SELLER-PORTAL-CONTRACT.md §3. */ +export const SELLER_GATEWAY = new InjectionToken('SELLER_GATEWAY', { + providedIn: 'root', + factory: () => inject(SellerLocalGateway), +}); diff --git a/src/app/core/sellers/services/seller-local.gateway.ts b/src/app/core/sellers/services/seller-local.gateway.ts new file mode 100644 index 0000000..2dc94bb --- /dev/null +++ b/src/app/core/sellers/services/seller-local.gateway.ts @@ -0,0 +1,22 @@ +import { Injectable } from '@angular/core'; +import { Observable, of } from 'rxjs'; +import { Seller } from '../models/seller.model'; +import { SellerUser } from '../models/seller-user.model'; +import { SellerGateway } from './seller-gateway.interface'; + +/** + * No seller has ever onboarded (Seller Management is flag-off by default, + * zero backend today per GAPS-AND-IMPROVEMENTS.md). Seeded empty - ready to + * populate the moment docs/backend/PHASE-5-SELLER-PORTAL-CONTRACT.md ships + * and the flag flips on for the first tenant. + */ +@Injectable({ providedIn: 'root' }) +export class SellerLocalGateway implements SellerGateway { + loadSellers(): Observable { + return of([]); + } + + loadTeam(_sellerId: string): Observable { + return of([]); + } +}