feat(cache): migrar caché de guilds de Redis a Appwrite para mejorar rendimiento y persistencia

This commit is contained in:
2025-10-07 10:55:45 -05:00
parent 6a9135c03a
commit b4737a536f
6 changed files with 1011 additions and 0 deletions

View File

@@ -0,0 +1,141 @@
# 📋 Guía Paso a Paso: Crear Colección Guild Cache en Appwrite
## Paso 1: Acceder a tu Database
1. Ve a [Appwrite Console](https://cloud.appwrite.io) (o tu instancia)
2. Selecciona tu proyecto
3. En el menú lateral, haz clic en **Databases**
4. Selecciona tu database (el que tienes en `APPWRITE_DATABASE_ID`)
## Paso 2: Crear la Colección
1. Haz clic en **Create Collection**
2. **Collection Name**: `guild_cache`
3. **Collection ID**: Déjalo autogenerar o usa `guild_cache`
4. Haz clic en **Create**
## Paso 3: Agregar Atributos
En la colección que acabas de crear, ve a la pestaña **Attributes** y crea estos 4 atributos:
### Atributo 1: guildId
- Haz clic en **Create Attribute****String**
- **Attribute Key**: `guildId`
- **Size**: `32`
- **Required**: ✅ Sí (marcado)
- **Array**: ❌ No
- Haz clic en **Create**
### Atributo 2: name
- Haz clic en **Create Attribute****String**
- **Attribute Key**: `name`
- **Size**: `100`
- **Required**: ✅ Sí (marcado)
- **Array**: ❌ No
- Haz clic en **Create**
### Atributo 3: prefix
- Haz clic en **Create Attribute****String**
- **Attribute Key**: `prefix`
- **Size**: `10`
- **Required**: ❌ No (desmarcado)
- **Default value**: (déjalo vacío)
- **Array**: ❌ No
- Haz clic en **Create**
### Atributo 4: expiresAt
- Haz clic en **Create Attribute****DateTime**
- **Attribute Key**: `expiresAt`
- **Required**: ✅ Sí (marcado)
- **Array**: ❌ No
- Haz clic en **Create**
**IMPORTANTE**: Espera unos segundos a que todos los atributos estén en estado **Available** antes de continuar.
## Paso 4: Crear Índices
Ve a la pestaña **Indexes** y crea estos 2 índices:
### Índice 1: guildId (único)
- Haz clic en **Create Index**
- **Index Key**: `idx_guildId`
- **Index Type**: **Unique**
- **Attributes**: Selecciona `guildId`
- **Order**: ASC
- Haz clic en **Create**
### Índice 2: expiresAt
- Haz clic en **Create Index**
- **Index Key**: `idx_expiresAt`
- **Index Type**: **Key**
- **Attributes**: Selecciona `expiresAt`
- **Order**: ASC
- Haz clic en **Create**
## Paso 5: Configurar Permisos
Ve a la pestaña **Settings****Permissions**:
1. Por defecto debería estar configurado como "API Key"
2. Si no, agrega estos permisos:
- **Role**: `Any`
- **Permissions**: Read, Create, Update, Delete (todas marcadas)
## Paso 6: Copiar el Collection ID
1. En la parte superior de la colección, verás el **Collection ID**
2. Cópialo (algo como `67xxxxxx` o `guild_cache` si lo personalizaste)
## Paso 7: Actualizar Variables de Entorno
Agrega a tu `.env` (o Config Vars en Heroku):
```env
APPWRITE_COLLECTION_GUILD_CACHE_ID=el_collection_id_que_copiaste
```
## Paso 8: Verificar
Para verificar que todo está bien:
1. Ve a la colección
2. Pestaña **Attributes**: Deberías ver 4 atributos (guildId, name, prefix, expiresAt)
3. Pestaña **Indexes**: Deberías ver 2 índices (idx_guildId, idx_expiresAt)
## Paso 9: Redeploy el Bot
```bash
# Si es local
npm run build
npm start
# Si es Heroku
git add .
git commit -m "chore: agregar APPWRITE_COLLECTION_GUILD_CACHE_ID"
git push heroku main
```
## ✅ Listo!
Después del redeploy, busca en los logs:
```
✅ Guild config guardada en caché (Appwrite)
```
---
## 🐛 Solución de Problemas
### Error: "Attribute already exists"
- El atributo ya existe, pasa al siguiente
### Error: "Index already exists"
- El índice ya existe, pasa al siguiente
### Error: "Collection not found"
- Verifica que el `APPWRITE_COLLECTION_GUILD_CACHE_ID` sea correcto
### No veo mensajes de caché en los logs
- Verifica que todas las variables de Appwrite estén configuradas
- Revisa que el Collection ID sea correcto
- Comprueba que la colección tenga los permisos correctos