Admin protetto, dashboard KPI e aggiornamenti sito marketing.

Login admin con cambio password, metriche server (CPU/RAM/disco/banda), grafici e statistiche streaming; sezione piani ridimensionata.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-05-26 18:18:47 +02:00
parent 3d3420cc4a
commit 3a5649f482
26 changed files with 983 additions and 55 deletions

14
backend/db/schema.rb generated
View File

@@ -10,11 +10,19 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema[7.2].define(version: 2026_05_26_120000) do
ActiveRecord::Schema[7.2].define(version: 2026_05_27_130000) do
# These are extensions that must be enabled in order to support this database
enable_extension "pgcrypto"
enable_extension "plpgsql"
create_table "admin_accounts", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
t.string "username", null: false
t.string "password_digest", null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["username"], name: "index_admin_accounts_on_username", unique: true
end
create_table "device_states", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
t.uuid "stream_session_id", null: false
t.string "device_role", null: false
@@ -149,7 +157,9 @@ ActiveRecord::Schema[7.2].define(version: 2026_05_26_120000) do
t.datetime "accepted_at"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "staff_kind", default: "transmission", null: false
t.index ["team_id", "email"], name: "index_team_invitations_on_team_id_and_email"
t.index ["team_id", "staff_kind"], name: "index_team_invitations_on_team_id_and_staff_kind"
t.index ["team_id"], name: "index_team_invitations_on_team_id"
t.index ["token_digest"], name: "index_team_invitations_on_token_digest", unique: true
end
@@ -168,6 +178,8 @@ ActiveRecord::Schema[7.2].define(version: 2026_05_26_120000) do
t.string "role", default: "member", null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "staff_kind"
t.index ["team_id", "staff_kind"], name: "index_user_teams_on_team_id_and_staff_kind"
t.index ["team_id"], name: "index_user_teams_on_team_id"
t.index ["user_id", "team_id"], name: "index_user_teams_on_user_id_and_team_id", unique: true
t.index ["user_id"], name: "index_user_teams_on_user_id"