93 lines
2.8 KiB
Python
93 lines
2.8 KiB
Python
"""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'"
|
|
")"
|
|
)
|