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:
2025-12-19 20:30:56 +01:00
parent a4694a10d1
commit 65da4efdad
76 changed files with 5305 additions and 80 deletions

View File

@@ -0,0 +1,25 @@
# Requêtes d'authentification
# Données chargées après login réussi
login_data:
projects: >
SELECT id, parent_id, name, description, position, created_at, updated_at
FROM projects WHERE user_id = ? ORDER BY position
tasks: >
SELECT id, project_id, status_id, title, description, priority,
date_start, date_end, time_estimated, time_spent, billing, position,
created_at, updated_at
FROM tasks WHERE user_id = ? ORDER BY position
tags: >
SELECT id, name, color, created_at
FROM tags WHERE user_id = ?
statuses: >
SELECT id, project_id, code, name, color, position, created_at
FROM statuses WHERE user_id = ? ORDER BY code
# Requêtes unitaires
user_by_email: >
SELECT id, email, name, password FROM users WHERE email = ?
user_by_id: >
SELECT id, email, name, created_at FROM users WHERE id = ?

View File

@@ -0,0 +1,44 @@
# Requêtes CRUD projects
list:
query: >
SELECT id, parent_id, name, description, position, created_at, updated_at
FROM projects
filters:
default: "user_id = :user_id"
admin: ""
order: "position ASC"
show:
query: >
SELECT id, parent_id, name, description, position, created_at, updated_at
FROM projects WHERE id = :id
filters:
default: "user_id = :user_id"
admin: ""
create:
table: projects
fields:
- user_id
- parent_id
- name
- description
- position
update:
table: projects
fields:
- parent_id
- name
- description
- position
filters:
default: "user_id = :user_id"
admin: ""
delete:
table: projects
filters:
default: "user_id = :user_id"
admin: ""

View File

@@ -0,0 +1,55 @@
# Requêtes CRUD statuses
list:
query: >
SELECT id, project_id, code, name, color, position, created_at
FROM statuses
filters:
default: "user_id = :user_id"
admin: ""
order: "code ASC"
list_by_project:
query: >
SELECT id, project_id, code, name, color, position, created_at
FROM statuses WHERE (project_id = :project_id OR project_id IS NULL)
filters:
default: "user_id = :user_id"
admin: ""
order: "code ASC"
show:
query: >
SELECT id, project_id, code, name, color, position, created_at
FROM statuses WHERE id = :id
filters:
default: "user_id = :user_id"
admin: ""
create:
table: statuses
fields:
- user_id
- project_id
- code
- name
- color
- position
update:
table: statuses
fields:
- project_id
- code
- name
- color
- position
filters:
default: "user_id = :user_id"
admin: ""
delete:
table: statuses
filters:
default: "user_id = :user_id"
admin: ""

View File

@@ -0,0 +1,39 @@
# Requêtes CRUD tags
list:
query: >
SELECT id, name, color, created_at
FROM tags
filters:
default: "user_id = :user_id"
admin: ""
show:
query: >
SELECT id, name, color, created_at
FROM tags WHERE id = :id
filters:
default: "user_id = :user_id"
admin: ""
create:
table: tags
fields:
- user_id
- name
- color
update:
table: tags
fields:
- name
- color
filters:
default: "user_id = :user_id"
admin: ""
delete:
table: tags
filters:
default: "user_id = :user_id"
admin: ""

View File

@@ -0,0 +1,73 @@
# Requêtes CRUD tasks
list:
query: >
SELECT id, project_id, status_id, title, description, priority,
date_start, date_end, time_estimated, time_spent, billing, position,
created_at, updated_at
FROM tasks
filters:
default: "user_id = :user_id"
admin: ""
order: "position ASC"
list_by_project:
query: >
SELECT id, project_id, status_id, title, description, priority,
date_start, date_end, time_estimated, time_spent, billing, position,
created_at, updated_at
FROM tasks WHERE project_id = :project_id
filters:
default: "user_id = :user_id"
admin: ""
order: "position ASC"
show:
query: >
SELECT id, project_id, status_id, title, description, priority,
date_start, date_end, time_estimated, time_spent, billing, position,
created_at, updated_at
FROM tasks WHERE id = :id
filters:
default: "user_id = :user_id"
admin: ""
create:
table: tasks
fields:
- user_id
- project_id
- status_id
- title
- description
- priority
- date_start
- date_end
- time_estimated
- time_spent
- billing
- position
update:
table: tasks
fields:
- project_id
- status_id
- title
- description
- priority
- date_start
- date_end
- time_estimated
- time_spent
- billing
- position
filters:
default: "user_id = :user_id"
admin: ""
delete:
table: tasks
filters:
default: "user_id = :user_id"
admin: ""