chatwoot-develop/enterprise/app/javascript/captain_booking_app/services/hotelUnitService.ts
2026-01-12 19:04:15 -03:00

54 lines
1.8 KiB
TypeScript
Executable File

import type { HotelUnit } from '../types.ts';
const API_BASE_URL = '/public/api/v1/captain';
// Helper to fetch all master data if needed, but here we can just fetch brands
// Actually, to get all units, we need the brands.
const fetchMasterData = async () => {
// TODO: Dynamic Account ID
const response = await fetch(`${API_BASE_URL}/master_data?account_id=1`);
if (!response.ok) throw new Error('Falha ao carregar dados do servidor.');
return response.json();
};
export const hotelUnitService = {
async getAllUnits(): Promise<HotelUnit[]> {
const data = await fetchMasterData();
// Flatten units from brands
const allUnits: HotelUnit[] = [];
data.brands.forEach((brand: any) => {
if (brand.units) {
brand.units.forEach((u: any) => {
allUnits.push({
id: u.id,
name: u.name,
brandId: u.captain_brand_id, // Chatwoot model field
visible_suite_categories: u.visible_suite_categories || [],
suite_category_images: u.suite_category_images || [],
});
});
}
});
return allUnits;
},
async getUnitsByBrand(brandId: number): Promise<HotelUnit[]> {
// We could optimize by not fetching everything, but for now MasterData is fine
const allUnits = await this.getAllUnits();
return allUnits.filter(u => u.brandId === brandId);
},
async addUnit(newUnit: Omit<HotelUnit, 'id'>): Promise<HotelUnit> {
throw new Error("Operação não permitida na interface pública.");
},
async updateUnit(updatedUnit: HotelUnit): Promise<HotelUnit> {
throw new Error("Operação não permitida na interface pública.");
},
async deleteUnit(unitId: number): Promise<void> {
throw new Error("Operação não permitida na interface pública.");
},
};