125 lines
3.0 KiB
Markdown
125 lines
3.0 KiB
Markdown
# Scripts Directory
|
|
|
|
This directory contains utility scripts for database initialization, migrations, and other maintenance tasks.
|
|
|
|
## Database Initialization
|
|
|
|
### `init_database.py`
|
|
|
|
Initializes all database tables in Appwrite with the correct schema, columns, and indexes.
|
|
|
|
**Usage:**
|
|
|
|
```bash
|
|
# Ensure virtual environment is activated
|
|
source venv/bin/activate
|
|
|
|
# Run the initialization script
|
|
python scripts/init_database.py
|
|
```
|
|
|
|
**Prerequisites:**
|
|
|
|
1. Appwrite instance running and accessible
|
|
2. `.env` file configured with Appwrite credentials:
|
|
- `APPWRITE_ENDPOINT`
|
|
- `APPWRITE_PROJECT_ID`
|
|
- `APPWRITE_API_KEY`
|
|
- `APPWRITE_DATABASE_ID`
|
|
|
|
**What it does:**
|
|
|
|
1. Validates environment configuration
|
|
2. Creates the following tables:
|
|
- **characters**: Player character data with userId indexing
|
|
|
|
3. Creates necessary columns and indexes for efficient querying
|
|
4. Skips tables/columns/indexes that already exist (idempotent)
|
|
|
|
**Output:**
|
|
|
|
```
|
|
============================================================
|
|
Code of Conquest - Database Initialization
|
|
============================================================
|
|
|
|
✓ Environment variables loaded
|
|
Endpoint: https://your-appwrite-instance.com/v1
|
|
Project: your-project-id
|
|
Database: main
|
|
|
|
Initializing database tables...
|
|
|
|
============================================================
|
|
Initialization Results
|
|
============================================================
|
|
|
|
✓ characters: SUCCESS
|
|
|
|
Total: 1 succeeded, 0 failed
|
|
|
|
✓ All tables initialized successfully!
|
|
|
|
You can now start the application.
|
|
```
|
|
|
|
## Adding New Tables
|
|
|
|
To add a new table to the initialization process:
|
|
|
|
1. Open `app/services/database_init.py`
|
|
2. Create a new method following the pattern of `init_characters_table()`
|
|
3. Add the table initialization to `init_all_tables()` method
|
|
4. Run the initialization script
|
|
|
|
Example:
|
|
|
|
```python
|
|
def init_sessions_table(self) -> bool:
|
|
"""Initialize the sessions table."""
|
|
table_id = 'sessions'
|
|
|
|
# Create table
|
|
table = self.tables_db.create_table(
|
|
database_id=self.database_id,
|
|
table_id=table_id,
|
|
name='Sessions'
|
|
)
|
|
|
|
# Create columns
|
|
self._create_column(
|
|
table_id=table_id,
|
|
column_id='userId',
|
|
column_type='string',
|
|
size=255,
|
|
required=True
|
|
)
|
|
|
|
# Create indexes
|
|
self._create_index(
|
|
table_id=table_id,
|
|
index_id='idx_userId',
|
|
index_type='key',
|
|
attributes=['userId']
|
|
)
|
|
|
|
return True
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Missing Environment Variables
|
|
|
|
If you see errors about missing environment variables, ensure your `.env` file contains all required Appwrite configuration.
|
|
|
|
### Connection Errors
|
|
|
|
If the script cannot connect to Appwrite:
|
|
- Verify the `APPWRITE_ENDPOINT` is correct and accessible
|
|
- Check that the API key has sufficient permissions
|
|
- Ensure the database exists in your Appwrite project
|
|
|
|
### Column/Index Already Exists
|
|
|
|
The script is idempotent and will log warnings for existing columns/indexes without failing. This is normal if you run the script multiple times.
|