mirror of
https://github.com/Dvorinka/Containr.git
synced 2026-10-28 15:51:26 +00:00
feat: public template catalog + Vercel git integration
Backend: service_templates.is_public lets owners publish user templates to the anonymous catalog (GET /api/v1/templates), mirroring Railway's marketplace publish flow. Migration, sqlc queries, visibility rules, and openapi.yaml updated; types regenerated. App: template editor gains a "List in the public catalog" checkbox; Public badge on catalog cards and detail view. Site: new templates.html catalog page - search, category filters, Official vs Community badges, detail modal with variables and copyable import JSON. Fetches the live catalog from a reachable instance (?api= or localStorage override) and falls back to templates.json, generated from SeedTemplates via cmd/dumptemplates. Shared styles extracted to style.css. Vercel: project connected to GitHub repo with rootDirectory=site; .vercelignore limits CLI uploads to site/ so `vercel deploy --prod` from repo root matches git builds. Authored By: TDvorak <[email protected]> Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
1 parent
2b38406a63
commit
117b469fae
18 files changed
+1589
-492
No files matched your search
@@ -1,18 +1,18 @@
|
||||
-- name: ListServiceTemplatesForUser :many
|
||||
SELECT id, name, description, category, logo, config, variables, is_official, owner_id, created_at, updated_at
|
||||
SELECT id, name, description, category, logo, config, variables, is_official, owner_id, is_public, created_at, updated_at
|
||||
FROM service_templates
|
||||
WHERE is_official = true OR owner_id = sqlc.narg(owner_id)
|
||||
WHERE is_official = true OR is_public = true OR owner_id = sqlc.narg(owner_id)
|
||||
ORDER BY is_official DESC, name ASC;
|
||||
|
||||
-- name: ListServiceTemplatesByCategoryForUser :many
|
||||
SELECT id, name, description, category, logo, config, variables, is_official, owner_id, created_at, updated_at
|
||||
SELECT id, name, description, category, logo, config, variables, is_official, owner_id, is_public, created_at, updated_at
|
||||
FROM service_templates
|
||||
WHERE category = sqlc.arg(category)
|
||||
AND (is_official = true OR owner_id = sqlc.narg(owner_id))
|
||||
AND (is_official = true OR is_public = true OR owner_id = sqlc.narg(owner_id))
|
||||
ORDER BY is_official DESC, name ASC;
|
||||
|
||||
-- name: GetServiceTemplateByID :one
|
||||
SELECT id, name, description, category, logo, config, variables, is_official, owner_id, created_at, updated_at
|
||||
SELECT id, name, description, category, logo, config, variables, is_official, owner_id, is_public, created_at, updated_at
|
||||
FROM service_templates
|
||||
WHERE id = $1;
|
||||
|
||||
@@ -39,7 +39,7 @@ SET name = EXCLUDED.name,
|
||||
updated_at = NOW();
|
||||
|
||||
-- name: CreateUserTemplate :exec
|
||||
INSERT INTO service_templates (id, name, description, category, logo, config, variables, is_official, owner_id)
|
||||
INSERT INTO service_templates (id, name, description, category, logo, config, variables, is_official, owner_id, is_public)
|
||||
VALUES (
|
||||
sqlc.arg(id),
|
||||
sqlc.arg(name),
|
||||
@@ -49,7 +49,8 @@ VALUES (
|
||||
sqlc.arg(config),
|
||||
sqlc.narg(variables),
|
||||
false,
|
||||
sqlc.arg(owner_id)
|
||||
sqlc.arg(owner_id),
|
||||
sqlc.arg(is_public)
|
||||
);
|
||||
|
||||
-- name: UpdateUserTemplate :execrows
|
||||
@@ -60,6 +61,7 @@ SET name = sqlc.arg(name),
|
||||
logo = sqlc.narg(logo),
|
||||
config = sqlc.arg(config),
|
||||
variables = sqlc.narg(variables),
|
||||
is_public = sqlc.arg(is_public),
|
||||
updated_at = NOW()
|
||||
WHERE id = sqlc.arg(id)
|
||||
AND owner_id = sqlc.arg(owner_id)
|
||||
|
||||
@@ -84,6 +84,7 @@ CREATE TABLE service_templates (
|
||||
variables JSONB DEFAULT '[]',
|
||||
is_official BOOLEAN DEFAULT false,
|
||||
owner_id UUID,
|
||||
is_public BOOLEAN NOT NULL DEFAULT false,
|
||||
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
||||
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
||||
);
|
||||
|
||||
Reference in new issue
Block a user