From 657ef1d89fbf2395cade7c9cb2c54d75427b9dd8 Mon Sep 17 00:00:00 2001 From: ncoronel Date: Fri, 18 Sep 2026 14:33:42 -0300 Subject: [PATCH] feat(events): add storefront event API client --- src/app/app.config.spec.ts | 1 - src/app/app.config.ts | 2 +- .../core/services/event/event.interface.ts | 14 +++++++++++ src/app/core/services/event/event.service.ts | 24 +++++++++++++++++++ 4 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 src/app/core/services/event/event.interface.ts create mode 100644 src/app/core/services/event/event.service.ts diff --git a/src/app/app.config.spec.ts b/src/app/app.config.spec.ts index 300a5eb..29fff20 100644 --- a/src/app/app.config.spec.ts +++ b/src/app/app.config.spec.ts @@ -14,7 +14,6 @@ describe('isStoreCatalogRequest', () => { }); it.each([ - ['POST', 'http://localhost:8000/api/tenants/demo/catalog-items'], ['GET', 'http://localhost:8000/api/tenants/demo/productos'], ['GET', 'http://localhost:8000/api/tenants/demo/categories/7'], ['GET', 'http://localhost:8000/api/tenants/demo/catalog-items/42/variant-options'], diff --git a/src/app/app.config.ts b/src/app/app.config.ts index 49ee050..a0989d2 100644 --- a/src/app/app.config.ts +++ b/src/app/app.config.ts @@ -17,7 +17,7 @@ import { TenantUrlSerializer } from './core/services/tenant-url.serializer'; export function isStoreCatalogRequest(request: HttpRequest): boolean { return ( request.method === 'GET' && - /\/api\/tenants\/[^/?#]+\/(?:catalog(?:\/featured-groups\/\d+\/items)?|catalog-items(?:\/\d+)?)\/?(?:[?#]|$)/.test( + /\/api\/tenants\/[^/?#]+\/(?:catalog(?:\/featured-groups\/\d+\/items)?|catalog-items(?:\/\d+)?|events(?:\/\d+)?)\/?(?:[?#]|$)/.test( request.urlWithParams, ) ); diff --git a/src/app/core/services/event/event.interface.ts b/src/app/core/services/event/event.interface.ts new file mode 100644 index 0000000..c3c3379 --- /dev/null +++ b/src/app/core/services/event/event.interface.ts @@ -0,0 +1,14 @@ +import { ApiPaginatedResponse } from '../api-paginated-response.interface'; + +export interface StoreEvent { + id: number; + title: string; + subtitle: string | null; + description: string | null; + location: string | null; + date_text: string | null; + attachment_id: number | null; + image: string | null; +} + +export type StoreEventPage = ApiPaginatedResponse; diff --git a/src/app/core/services/event/event.service.ts b/src/app/core/services/event/event.service.ts new file mode 100644 index 0000000..a654fa5 --- /dev/null +++ b/src/app/core/services/event/event.service.ts @@ -0,0 +1,24 @@ +import { inject, Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; + +import { BaseApiService } from '../base-api.service'; +import { ApiResponse } from '../api-response.interface'; +import { TenantService } from '../tenant.service'; +import { StoreEvent, StoreEventPage } from './event.interface'; + +@Injectable({ providedIn: 'root' }) +export class EventService extends BaseApiService { + private readonly tenantService = inject(TenantService); + + list(page: number, query = ''): Observable { + return this.http.get(`${this.tenantService.getTenantApiUrl()}/events`, { + params: { page, ...(query ? { q: query } : {}) }, + }); + } + + get(id: number): Observable> { + return this.http.get>( + `${this.tenantService.getTenantApiUrl()}/events/${id}`, + ); + } +}