Files
web-utils/backend/app/core/registry.py
2026-01-28 15:33:47 +09:00

165 lines
5.0 KiB
Python

from typing import List, Optional
from pydantic import BaseModel
class ToolMetadata(BaseModel):
id: str
name: str
description: str
category: str
tags: List[str]
type: str # 'client' or 'server'
endpoint: Optional[str] = None # Only for server type
# === 도구 등록소 ===
# 새로운 기능을 추가할 때 여기만 수정하면 검색/메뉴에 자동 반영되도록 구성합니다.
TOOLS_REGISTRY = [
ToolMetadata(
id="url-parser",
name="URL Encoder/Decoder",
description="Encodes or decodes a URL string.",
category="Web",
tags=["url", "encode", "decode", "percent-encoding"],
type="client"
),
ToolMetadata(
id="json-formatter",
name="JSON Formatter",
description="Prettify or minify JSON data.",
category="Data",
tags=["json", "pretty", "minify", "format"],
type="client"
),
ToolMetadata(
id="py-uuid",
name="UUID Generator",
description="Generates UUIDs locally (v1/v4).",
category="Development",
tags=["uuid", "guid", "random", "client-side"],
type="client"
),
ToolMetadata(
id="png-compressor",
name="PNG Compressor",
description="Compress PNG images using pngquant (Lossy, 60-80% reduction).",
category="Image",
tags=["image", "png", "compress", "pngquant", "optimize"],
type="server",
endpoint="/api/tools/png-compress"
),
ToolMetadata(
id="password-generator",
name="Password Generator",
description="Generate secure random passwords locally (Client-side).",
category="Security",
tags=["password", "random", "secure", "generator", "client-side"],
type="client"
),
ToolMetadata(
id="jwt-debugger",
name="JWT Debugger",
description="Decode and inspect JSON Web Tokens.",
category="Security",
tags=["jwt", "token", "decode", "security"],
type="client"
),
ToolMetadata(
id="cron-generator",
name="Cron Schedule Generator",
description="Generate and explain cron expressions.",
category="Utility",
tags=["cron", "schedule", "time", "generator"],
type="client"
),
ToolMetadata(
id="sql-formatter",
name="SQL Formatter",
description="Beautify and format SQL queries.",
category="Formatters",
tags=["sql", "format", "database", "query"],
type="client"
),
ToolMetadata(
id="diff-viewer",
name="Diff Viewer",
description="Compare text and see differences side-by-side.",
category="Text",
tags=["diff", "compare", "text", "code"],
type="client"
),
ToolMetadata(
id="qr-generator",
name="QR Code Generator",
description="Generate QR codes from text or URLs.",
category="Generators",
tags=["qr", "code", "generator", "image"],
type="client"
),
ToolMetadata(
id="base64-encoder",
name="Base64 File Encoder",
description="Convert files to Base64 strings.",
category="Encoders",
tags=["base64", "encode", "file", "image"],
type="client"
),
ToolMetadata(
id="json-converter",
name="JSON Converter",
description="Convert between JSON, CSV, and YAML.",
category="Converters",
tags=["json", "csv", "yaml", "convert"],
type="client"
),
ToolMetadata(
id="regex-tester",
name="Regex Tester",
description="Test regular expressions in real-time.",
category="Text",
tags=["regex", "test", "pattern", "match"],
type="client"
),
ToolMetadata(
id="docker-converter",
name="Docker Converter",
description="Convert between Docker Run and Docker Compose.",
category="DevOps",
tags=["docker", "compose", "convert", "devops"],
type="client"
),
ToolMetadata(
id="mock-data-generator",
name="Mock Data Generator",
description="Generate random user data for testing.",
category="Generators",
tags=["mock", "data", "fake", "generator"],
type="client"
),
ToolMetadata(
id="svg-optimizer",
name="SVG Optimizer",
description="Optimize and minify SVG code.",
category="Image",
tags=["svg", "optimize", "minify", "image"],
type="client"
),
ToolMetadata(
id="video-to-gif",
name="Video to GIF",
description="Convert video clips to GIF format.",
category="Video",
tags=["video", "gif", "convert", "ffmpeg"],
type="server",
endpoint="/api/tools/video/gif"
)
]
def search_tools(query: str = "") -> List[ToolMetadata]:
if not query:
return TOOLS_REGISTRY
q = query.lower()
return [
t for t in TOOLS_REGISTRY
if q in t.name.lower() or q in t.description.lower() or any(q in tag for tag in t.tags)
]