feat(dripzone): unify DripZone tables into almeira database and media_bucket on Appwrite Cloud

This commit is contained in:
AI Bot 2026-11-07 18:12:53 -05:00
parent 9a134b12ab
commit 3dc430e4e3
2 changed files with 81 additions and 13 deletions

View File

@ -1,7 +1,37 @@
import { Client, Databases, Storage, Account } from 'appwrite';
const endpoint = process.env.NEXT_PUBLIC_APPWRITE_ENDPOINT || 'https://appwrite.almeira.com.co/v1';
const projectId = process.env.NEXT_PUBLIC_APPWRITE_PROJECT_ID || '69b84df5003bd8957c5c';
const origCall = (Client.prototype as any).call;
if (origCall && !(Client.prototype as any).__tablesDbPatched) {
(Client.prototype as any).__tablesDbPatched = true;
(Client.prototype as any).call = async function (method: string, url: URL, headers: Record<string, string> = {}, params: Record<string, any> = {}, responseType = 'json') {
let p = url.pathname;
if (p.includes('/databases/')) {
p = p
.replace('/databases/sneakers_multistore_db/', '/tablesdb/almeira/')
.replace('/databases/', '/tablesdb/')
.replace('/collections/cities', '/tables/dz_cities')
.replace('/collections/payment_methods', '/tables/dz_payment_methods')
.replace('/collections/', '/tables/')
.replace('/documents', '/rows')
.replace('/attributes', '/columns');
url = new URL(url.toString());
url.pathname = p;
} else if (p.includes('/buckets/sneakers_media_bucket')) {
p = p.replace('/buckets/sneakers_media_bucket', '/buckets/media_bucket');
url = new URL(url.toString());
url.pathname = p;
}
const res = await origCall.call(this, method, url, headers, params, responseType);
if (res && typeof res === 'object') {
if (Array.isArray(res.rows) && !res.documents) res.documents = res.rows;
if (Array.isArray(res.tables) && !res.collections) res.collections = res.tables;
}
return res;
};
}
const endpoint = process.env.NEXT_PUBLIC_APPWRITE_ENDPOINT || 'https://nyc.cloud.appwrite.io/v1';
const projectId = process.env.NEXT_PUBLIC_APPWRITE_PROJECT_ID || '6aef63d9002c07371b40';
export const client = new Client();
client.setEndpoint(endpoint).setProject(projectId);
@ -10,17 +40,17 @@ export const databases = new Databases(client);
export const storage = new Storage(client);
export const account = new Account(client);
// Base de datos y Bucket 100% aislados e independientes
export const DATABASE_ID = process.env.NEXT_PUBLIC_APPWRITE_DATABASE_ID || 'sneakers_multistore_db';
export const BUCKET_ID = process.env.NEXT_PUBLIC_APPWRITE_MEDIA_BUCKET_ID || 'sneakers_media_bucket';
// Unificado en la base de datos 'almeira' y bucket 'media_bucket' de Appwrite Cloud (Plan Gratuito)
export const DATABASE_ID = 'almeira';
export const BUCKET_ID = 'media_bucket';
// Colecciones independientes
// Colecciones de DripZone dentro de la base de datos 'almeira'
export const COLLECTIONS = {
PRODUCTS: 'products',
CITIES: 'cities',
PAYMENT_METHODS: 'payment_methods',
CITIES: 'dz_cities',
PAYMENT_METHODS: 'dz_payment_methods',
ORDERS: 'orders',
SETTINGS: 'settings',
SETTINGS: 'store_settings',
SUPPLIER_POSTS: 'supplier_posts',
CUSTOM_REQUESTS: 'custom_requests',
};

View File

@ -16,10 +16,48 @@ import { INITIAL_CITIES, INITIAL_PAYMENT_METHODS, INITIAL_SUPPLIERS, isGroupIgno
import { DEFAULT_MESSAGE_TEMPLATES } from './templates-service';
import { sanitizePublicationTitle, sanitizePublicationText } from './sanitizer';
const endpoint = process.env.NEXT_PUBLIC_APPWRITE_ENDPOINT || 'https://appwrite.almeira.com.co/v1';
const projectId = process.env.NEXT_PUBLIC_APPWRITE_PROJECT_ID || '69b84df5003bd8957c5c';
const apiKey = process.env.APPWRITE_API_KEY || 'standard_cce3cdb866ea6433888d40cedd24dc45987372308fdc3dd0697de08648c0e5c7e04b02c3bcee271403fd656b00a5820f04c08b51631284a6e8a3582d8aed2aa33234f3c29cc777e9b162eb54810b789251b0d006a9a3b081ebc2da53b9baa94614b124b3508ad849fd9a4187cc6094f506d4b57f409b69d9562a74df594f3ec3';
const databaseId = process.env.NEXT_PUBLIC_APPWRITE_DATABASE_ID || 'sneakers_multistore_db';
const origCall = (Client.prototype as any).call;
if (origCall && !(Client.prototype as any).__tablesDbPatched) {
(Client.prototype as any).__tablesDbPatched = true;
(Client.prototype as any).call = async function (method: string, url: URL, headers: Record<string, string> = {}, params: Record<string, any> = {}, responseType = 'json') {
let p = url.pathname;
if (p.includes('/databases/')) {
p = p
.replace('/databases/sneakers_multistore_db/', '/tablesdb/almeira/')
.replace('/databases/', '/tablesdb/')
.replace('/collections/cities', '/tables/dz_cities')
.replace('/collections/payment_methods', '/tables/dz_payment_methods')
.replace('/collections/', '/tables/')
.replace('/documents', '/rows')
.replace('/attributes', '/columns');
url = new URL(url.toString());
url.pathname = p;
if (params && typeof params === 'object' && !Array.isArray(params) && ('documentId' in params || 'data' in params)) {
const { documentId, data, permissions } = params;
params = {
...(documentId !== undefined ? { rowId: documentId } : {}),
...(data !== undefined ? { data } : {}),
...(permissions !== undefined ? { permissions } : {}),
};
}
} else if (p.includes('/buckets/sneakers_media_bucket')) {
p = p.replace('/buckets/sneakers_media_bucket', '/buckets/media_bucket');
url = new URL(url.toString());
url.pathname = p;
}
const res = await origCall.call(this, method, url, headers, params, responseType);
if (res && typeof res === 'object') {
if (Array.isArray(res.rows) && !res.documents) res.documents = res.rows;
if (Array.isArray(res.tables) && !res.collections) res.collections = res.tables;
}
return res;
};
}
const endpoint = process.env.NEXT_PUBLIC_APPWRITE_ENDPOINT || 'https://nyc.cloud.appwrite.io/v1';
const projectId = process.env.NEXT_PUBLIC_APPWRITE_PROJECT_ID || '6aef63d9002c07371b40';
const apiKey = process.env.APPWRITE_API_KEY || 'standard_79704037e869df69b7efcecdf51370360781c1b335d8a16148639c71382d8c9e94c4d49d27c2da0b8dde8e430084b895cc9756d8bb2cf927a4e96c59e3258d79d1119dac4167cee6b1e737a3444982e16187842cfffde1cc8c07c2f3c48d032ec1c164a802deacf6393bedd815b2868cf7faf374815aebe72777c4616d26db40';
const databaseId = 'almeira';
const client = new Client()
.setEndpoint(endpoint)