SOGOMS v1.0.3 - Admin UI, Cron, Config reload
Phase 13 : sogoms-cron
- Jobs planifiés avec schedule cron standard
- Types: query_email, http, service
- Actions: list, trigger, status
Phase 16 : Réorganisation config/apps/{app}/
- Tous les fichiers d'une app dans un seul dossier
- Migration prokov vers nouvelle structure
Phase 17 : sogoms-admin
- Interface web d'administration (Go templates + htmx)
- Auth sessions cookies signées HMAC-SHA256
- Rôles super_admin / app_admin avec permissions
Phase 19 : Création d'app via Admin UI
- Formulaire création app avec config DB/auth
- Bouton "Scanner la base" : introspection + schema.yaml
- Rechargement automatique sogoway via SIGHUP
Infrastructure :
- sogoctl : socket de contrôle /run/sogoctl.sock
- sogoway : reload config sur SIGHUP sans restart
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
255
config/apps/prokov/schema.yaml
Normal file
255
config/apps/prokov/schema.yaml
Normal file
@@ -0,0 +1,255 @@
|
||||
app: prokov
|
||||
tables:
|
||||
project_tags:
|
||||
columns:
|
||||
project_id:
|
||||
foreign: projects.id
|
||||
primary: true
|
||||
required: true
|
||||
type: int
|
||||
tag_id:
|
||||
foreign: tags.id
|
||||
primary: true
|
||||
required: true
|
||||
type: int
|
||||
crud: []
|
||||
primary:
|
||||
- project_id
|
||||
- tag_id
|
||||
projects:
|
||||
columns:
|
||||
created_at:
|
||||
default: current_timestamp()
|
||||
type: datetime
|
||||
description:
|
||||
default: "NULL"
|
||||
length: 65535
|
||||
type: text
|
||||
id:
|
||||
auto: true
|
||||
primary: true
|
||||
required: true
|
||||
type: int
|
||||
name:
|
||||
length: 100
|
||||
required: true
|
||||
type: string
|
||||
parent_id:
|
||||
default: "NULL"
|
||||
foreign: projects.id
|
||||
type: int
|
||||
position:
|
||||
default: "0"
|
||||
type: int
|
||||
updated_at:
|
||||
default: current_timestamp()
|
||||
type: datetime
|
||||
user_id:
|
||||
filter: owner
|
||||
foreign: users.id
|
||||
required: true
|
||||
type: int
|
||||
crud:
|
||||
- list
|
||||
- show
|
||||
- create
|
||||
- update
|
||||
- delete
|
||||
statuses:
|
||||
columns:
|
||||
code:
|
||||
required: true
|
||||
type: int
|
||||
color:
|
||||
default: '''#6B7280'''
|
||||
length: 7
|
||||
type: string
|
||||
created_at:
|
||||
default: current_timestamp()
|
||||
type: datetime
|
||||
id:
|
||||
auto: true
|
||||
primary: true
|
||||
required: true
|
||||
type: int
|
||||
name:
|
||||
length: 50
|
||||
required: true
|
||||
type: string
|
||||
position:
|
||||
default: "0"
|
||||
type: int
|
||||
project_id:
|
||||
default: "NULL"
|
||||
type: int
|
||||
user_id:
|
||||
filter: owner
|
||||
foreign: users.id
|
||||
required: true
|
||||
type: int
|
||||
crud:
|
||||
- list
|
||||
- show
|
||||
- create
|
||||
- update
|
||||
- delete
|
||||
tags:
|
||||
columns:
|
||||
color:
|
||||
default: '''#3B82F6'''
|
||||
length: 7
|
||||
type: string
|
||||
created_at:
|
||||
default: current_timestamp()
|
||||
type: datetime
|
||||
id:
|
||||
auto: true
|
||||
primary: true
|
||||
required: true
|
||||
type: int
|
||||
name:
|
||||
length: 50
|
||||
required: true
|
||||
type: string
|
||||
unique: true
|
||||
user_id:
|
||||
filter: owner
|
||||
foreign: users.id
|
||||
required: true
|
||||
type: int
|
||||
unique: true
|
||||
crud:
|
||||
- list
|
||||
- show
|
||||
- create
|
||||
- update
|
||||
- delete
|
||||
task_tags:
|
||||
columns:
|
||||
tag_id:
|
||||
foreign: tags.id
|
||||
primary: true
|
||||
required: true
|
||||
type: int
|
||||
task_id:
|
||||
foreign: tasks.id
|
||||
primary: true
|
||||
required: true
|
||||
type: int
|
||||
crud: []
|
||||
primary:
|
||||
- task_id
|
||||
- tag_id
|
||||
tasks:
|
||||
columns:
|
||||
billing:
|
||||
default: "0.00"
|
||||
type: float
|
||||
created_at:
|
||||
default: current_timestamp()
|
||||
type: datetime
|
||||
date_end:
|
||||
default: "NULL"
|
||||
type: date
|
||||
date_start:
|
||||
default: "NULL"
|
||||
type: date
|
||||
description:
|
||||
default: "NULL"
|
||||
length: 65535
|
||||
type: text
|
||||
id:
|
||||
auto: true
|
||||
primary: true
|
||||
required: true
|
||||
type: int
|
||||
position:
|
||||
default: "0"
|
||||
type: int
|
||||
priority:
|
||||
default: "5"
|
||||
type: int
|
||||
project_id:
|
||||
foreign: projects.id
|
||||
required: true
|
||||
type: int
|
||||
status_id:
|
||||
foreign: statuses.id
|
||||
required: true
|
||||
type: int
|
||||
time_estimated:
|
||||
default: "0"
|
||||
type: int
|
||||
time_spent:
|
||||
default: "0"
|
||||
type: int
|
||||
title:
|
||||
length: 255
|
||||
required: true
|
||||
type: string
|
||||
updated_at:
|
||||
default: current_timestamp()
|
||||
type: datetime
|
||||
user_id:
|
||||
filter: owner
|
||||
foreign: users.id
|
||||
required: true
|
||||
type: int
|
||||
crud:
|
||||
- list
|
||||
- show
|
||||
- create
|
||||
- update
|
||||
- delete
|
||||
users:
|
||||
columns:
|
||||
created_at:
|
||||
default: current_timestamp()
|
||||
type: datetime
|
||||
email:
|
||||
length: 255
|
||||
required: true
|
||||
type: string
|
||||
unique: true
|
||||
id:
|
||||
auto: true
|
||||
primary: true
|
||||
required: true
|
||||
type: int
|
||||
name:
|
||||
length: 100
|
||||
required: true
|
||||
type: string
|
||||
password:
|
||||
length: 255
|
||||
required: true
|
||||
type: string
|
||||
role_id:
|
||||
default: "1"
|
||||
foreign: users_roles.id
|
||||
required: true
|
||||
type: int
|
||||
updated_at:
|
||||
default: current_timestamp()
|
||||
type: datetime
|
||||
crud:
|
||||
- list
|
||||
- show
|
||||
- create
|
||||
- update
|
||||
- delete
|
||||
users_roles:
|
||||
columns:
|
||||
created_at:
|
||||
default: current_timestamp()
|
||||
type: datetime
|
||||
id:
|
||||
primary: true
|
||||
required: true
|
||||
type: int
|
||||
name:
|
||||
length: 50
|
||||
required: true
|
||||
type: string
|
||||
crud: []
|
||||
version: "1.0"
|
||||
Reference in New Issue
Block a user