"""Seed approved plugins: GitHub Sync, Slack Notifier, Time Tracker. Revision ID: 002 Revises: 001 Create Date: 2026-03-03 """ from __future__ import annotations import json from datetime import datetime, timezone from typing import Sequence, Union import sqlalchemy as sa from alembic import op revision: str = "002" down_revision: Union[str, None] = "001" branch_labels: Union[str, Sequence[str], None] = None depends_on: Union[str, Sequence[str], None] = None _SEED_PLUGINS = [ { "id": "plugin-github-sync", "name": "GitHub Sync", "description": "Sync tasks with GitHub Issues and pull requests.", "version": "1.0.0", "author_name": "Adiuva", "category": "productivity", "price_cents": 0, "permissions": json.dumps(["read:tasks", "write:tasks"]), "status": "approved", "s3_package_key": "plugins/plugin-github-sync/1.0.0/package.zip", "install_count": 0, "avg_rating": 0.0, }, { "id": "plugin-slack-notify", "name": "Slack Notifier", "description": "Post task and timeline updates to Slack channels.", "version": "1.2.0", "author_name": "Adiuva", "category": "communication", "price_cents": 499, "permissions": json.dumps(["read:tasks", "read:timelines"]), "status": "approved", "s3_package_key": "plugins/plugin-slack-notify/1.2.0/package.zip", "install_count": 0, "avg_rating": 0.0, }, { "id": "plugin-time-tracker", "name": "Time Tracker", "description": "Track time spent on tasks with automatic reporting.", "version": "0.9.1", "author_name": "Third Party", "category": "productivity", "price_cents": 999, "permissions": json.dumps(["read:tasks", "write:tasks"]), "status": "approved", "s3_package_key": "plugins/plugin-time-tracker/0.9.1/package.zip", "install_count": 0, "avg_rating": 0.0, }, ] def upgrade() -> None: plugins = sa.table( "plugins", sa.column("id", sa.String), sa.column("name", sa.String), sa.column("description", sa.Text), sa.column("version", sa.String), sa.column("author_name", sa.String), sa.column("category", sa.String), sa.column("price_cents", sa.Integer), sa.column("permissions", sa.Text), sa.column("status", sa.Enum("pending_review", "approved", "rejected", name="plugin_status")), sa.column("s3_package_key", sa.String), sa.column("install_count", sa.Integer), sa.column("avg_rating", sa.Float), ) op.bulk_insert(plugins, _SEED_PLUGINS) def downgrade() -> None: op.execute( "DELETE FROM plugins WHERE id IN (" "'plugin-github-sync', 'plugin-slack-notify', 'plugin-time-tracker'" ")" )