Added more documentation. Improved CRUD V3 endpoints and better responses.

This commit is contained in:
Scott Idem
2026-01-06 13:52:05 -05:00
parent 9c06b07665
commit a42f32acf4
20 changed files with 1768 additions and 65 deletions

View File

@@ -0,0 +1,48 @@
# Aether V3 Schema Discovery Plan
## Objective
Provide an endpoint that returns the structure of an Aether object type, combining database metadata with Pydantic model definitions. This helps the frontend adapt to schema changes and understand field types/aliases without hardcoding.
## Proposed Endpoint
`GET /v3/crud/{obj_type}/schema`
### Query Parameters
- `view`: (Optional) `default`, `enriched`, `detail`. Determines which database table/view and Pydantic model to inspect.
- `variant`: (Optional) `in`, `out`, `base`. Selects the specific Pydantic model variant (e.g., `mdl_in` for write operations).
## Implementation Details
### 1. Database Metadata
- Execute `DESCRIBE {table_name}` or `SHOW COLUMNS FROM {table_name}`.
- Extract: `Field`, `Type`, `Null`, `Key`, `Default`, `Extra`.
### 2. Pydantic Metadata
- Inspect the model's `__fields__`.
- Map Pydantic field names to database aliases.
- Extract: `type`, `required`, `default`, `description` (from Field extra), `validators`.
### 3. Response Structure
```json
{
"object_type": "account",
"database": {
"table_name": "account",
"columns": [...]
},
"model": {
"model_name": "Account_Base",
"fields": {
"account_id_random": {
"alias": "id_random",
"type": "string",
"required": false
},
...
}
}
}
```
## Security
- Requires standard V3 authentication.
- Only returns schema for objects defined in `obj_type_kv_li`.

View File

@@ -3,7 +3,7 @@
-- https://www.phpmyadmin.net/
--
-- Host: localhost
-- Generation Time: Jan 02, 2026 at 10:20 PM
-- Generation Time: Jan 06, 2026 at 06:25 PM
-- Server version: 12.1.2-MariaDB-log
-- PHP Version: 8.4.15
@@ -34,6 +34,7 @@ CREATE TABLE `account` (
`name` varchar(200) DEFAULT NULL,
`short_name` varchar(20) DEFAULT NULL,
`description` text DEFAULT NULL,
`hide` tinyint(1) DEFAULT 0,
`enable` tinyint(1) NOT NULL DEFAULT 0,
`enable_from` datetime DEFAULT NULL,
`enable_to` datetime DEFAULT NULL,

View File

@@ -0,0 +1,124 @@
-- phpMyAdmin SQL Dump
-- version 5.2.3
-- https://www.phpmyadmin.net/
--
-- Host: localhost
-- Generation Time: Jan 06, 2026 at 06:25 PM
-- Server version: 12.1.2-MariaDB-log
-- PHP Version: 8.4.15
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- Database: `aether_dev`
--
-- --------------------------------------------------------
--
-- Table structure for table `data_store`
--
CREATE TABLE `data_store` (
`id` int(11) NOT NULL,
`id_random` varchar(22) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
`account_id` int(11) DEFAULT NULL,
`for_type` varchar(50) DEFAULT NULL,
`for_id` int(11) DEFAULT NULL,
`person_id` int(11) DEFAULT NULL COMMENT 'the creator or owner',
`user_id` int(11) DEFAULT NULL COMMENT 'the creator or owner',
`code` varchar(75) NOT NULL COMMENT 'adding a record that matches an existing code should always have an account_id',
`name` varchar(150) DEFAULT NULL,
`description` text DEFAULT NULL,
`type` varchar(10) NOT NULL DEFAULT 'html' COMMENT 'html, json, md, text',
`json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'case sensitive',
`text` longtext DEFAULT NULL COMMENT 'case insensitive',
`meta_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`meta_json`)),
`meta_text` longtext DEFAULT NULL,
`access_read` varchar(20) DEFAULT NULL COMMENT '''super'', ''administrator'', ''trusted'', ''anonymous''',
`access_write` varchar(20) DEFAULT NULL COMMENT '''super'', ''administrator'', ''trusted'', ''anonymous''',
`access_delete` varchar(20) DEFAULT NULL COMMENT '''super'', ''administrator'', ''trusted'', ''anonymous''',
`enable` tinyint(1) NOT NULL DEFAULT 0,
`hide` tinyint(1) DEFAULT NULL,
`priority` tinyint(1) DEFAULT NULL,
`sort` int(11) DEFAULT NULL,
`group` varchar(100) DEFAULT NULL,
`notes` text DEFAULT NULL,
`created_on` timestamp NOT NULL DEFAULT current_timestamp(),
`updated_on` timestamp NULL DEFAULT NULL ON UPDATE current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
--
-- Triggers `data_store`
--
DELIMITER $$
CREATE TRIGGER `before_insert_data_store` BEFORE INSERT ON `data_store` FOR EACH ROW BEGIN
BEGIN
IF (NEW.id_random IS NULL OR NEW.id_random = '' OR LENGTH(NEW.id_random) < 6)
THEN
/* SET NEW.id_random = gen_rand_pattern('3C-2N-2N-2N'); */
/* SET NEW.id_random = gen_rand_pattern('4C-2N-2N-2N'); */
SET NEW.id_random = gen_rand_str(11, 'URL');
END IF;
END;
END
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER `before_update_data_store` BEFORE UPDATE ON `data_store` FOR EACH ROW BEGIN
BEGIN
IF (NEW.id_random IS NULL OR NEW.id_random = '' OR LENGTH(NEW.id_random) < 6)
THEN
/* SET NEW.id_random = gen_rand_pattern('3C-2N-2N-2N'); */
/* SET NEW.id_random = gen_rand_pattern('4C-2N-2N-2N'); */
SET NEW.id_random = gen_rand_str(11, 'URL');
END IF;
END;
END
$$
DELIMITER ;
--
-- Indexes for dumped tables
--
--
-- Indexes for table `data_store`
--
ALTER TABLE `data_store`
ADD PRIMARY KEY (`id`),
ADD UNIQUE KEY `id_random` (`id_random`),
ADD KEY `created_on` (`created_on`),
ADD KEY `updated_on` (`updated_on`),
ADD KEY `code` (`code`),
ADD KEY `account_id` (`account_id`),
ADD KEY `for_type` (`for_type`,`for_id`),
ADD KEY `enable` (`enable`),
ADD KEY `priority` (`priority`),
ADD KEY `sort` (`sort`),
ADD KEY `group` (`group`),
ADD KEY `hide` (`hide`),
ADD KEY `account_id_2` (`account_id`,`for_type`,`for_id`,`code`,`enable`);
--
-- AUTO_INCREMENT for dumped tables
--
--
-- AUTO_INCREMENT for table `data_store`
--
ALTER TABLE `data_store`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

View File

@@ -0,0 +1,259 @@
-- phpMyAdmin SQL Dump
-- version 5.2.3
-- https://www.phpmyadmin.net/
--
-- Host: localhost
-- Generation Time: Jan 06, 2026 at 06:24 PM
-- Server version: 12.1.2-MariaDB-log
-- PHP Version: 8.4.15
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- Database: `aether_dev`
--
-- --------------------------------------------------------
--
-- Table structure for table `event`
--
CREATE TABLE `event` (
`id` int(11) NOT NULL,
`id_random` varchar(22) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
`code` varchar(100) DEFAULT NULL,
`account_id` int(11) DEFAULT NULL,
`poc_event_person_id` int(11) DEFAULT NULL COMMENT 'use this when possible',
`poc_person_id` int(11) DEFAULT NULL COMMENT 'use this only if needed',
`external_person_id` varchar(75) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'person ID generated by external system',
`user_id` int(11) DEFAULT NULL COMMENT 'user that owns the event',
`lu_event_type_id` int(11) DEFAULT NULL,
`conference` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'yes allows for abstracts, sessions, presentations, presenters, badges, etc',
`type` varchar(50) DEFAULT NULL,
`name` varchar(200) NOT NULL,
`summary` text DEFAULT NULL,
`description` text DEFAULT NULL,
`format` text DEFAULT NULL COMMENT 'format of the event',
`lu_time_zone_id` int(11) DEFAULT NULL,
`timezone` varchar(100) DEFAULT NULL,
`start_datetime` datetime DEFAULT NULL,
`end_datetime` datetime DEFAULT NULL,
`recurring` tinyint(1) DEFAULT NULL COMMENT 'recurring event',
`recurring_pattern` varchar(50) DEFAULT NULL,
`recurring_start_time` time DEFAULT NULL COMMENT 'recurring event start time',
`recurring_end_time` time DEFAULT NULL COMMENT 'recurring event end time',
`recurring_text` text DEFAULT NULL COMMENT 'text describing how and when the event recurs',
`weekday_sunday` tinyint(1) DEFAULT NULL,
`weekday_monday` tinyint(1) DEFAULT NULL,
`weekday_tuesday` tinyint(1) DEFAULT NULL,
`weekday_wednesday` tinyint(1) DEFAULT NULL,
`weekday_thursday` tinyint(1) DEFAULT NULL,
`weekday_friday` tinyint(1) DEFAULT NULL,
`weekday_saturday` tinyint(1) DEFAULT NULL,
`address_location_id` int(11) DEFAULT NULL,
`location_address_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`location_address_json_ext` longtext GENERATED ALWAYS AS (json_unquote(json_extract(`location_address_json`,'$'))) STORED,
`location_text` text DEFAULT NULL COMMENT 'text information about the location',
`online_start` datetime DEFAULT NULL,
`online_end` datetime DEFAULT NULL,
`reg_deadline_1` datetime DEFAULT NULL,
`reg_deadline_2` datetime DEFAULT NULL,
`reg_deadline_3` datetime DEFAULT NULL,
`reg_deadline_4` datetime DEFAULT NULL,
`max_registrants` int(11) DEFAULT NULL,
`private` tinyint(1) DEFAULT 0 COMMENT 'invite only event',
`physical` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'physical in person event',
`virtual` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'virtual remote access event',
`image_path` varchar(500) DEFAULT NULL,
`logo_path` varchar(500) DEFAULT NULL,
`logo_bg_color` varchar(25) DEFAULT NULL,
`banner_path` varchar(500) DEFAULT NULL,
`banner_bg_color` varchar(25) DEFAULT NULL,
`logo_filename` varchar(200) DEFAULT NULL,
`banner_image_filename` varchar(200) DEFAULT NULL,
`banner_html` text DEFAULT NULL,
`site_h1` varchar(500) DEFAULT NULL,
`site_h2` varchar(500) DEFAULT NULL,
`external_url` varchar(500) DEFAULT NULL,
`external_url_text` varchar(500) DEFAULT NULL,
`attend_url` varchar(500) DEFAULT NULL,
`attend_url_text` varchar(500) DEFAULT NULL,
`attend_url_code` varchar(50) DEFAULT NULL COMMENT 'id, code, nickname, alias',
`attend_url_passcode` varchar(50) DEFAULT NULL,
`attend_phone` varchar(50) DEFAULT NULL,
`attend_phone_passcode` varchar(50) DEFAULT NULL,
`attend_text` text DEFAULT NULL,
`attend_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`attend_json`)),
`contact_1_id` int(11) DEFAULT NULL,
`contact_2_id` int(11) DEFAULT NULL,
`contact_3_id` int(11) DEFAULT NULL,
`contact_li_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`contact_li_json`)),
`contact_li_json_ext` longtext GENERATED ALWAYS AS (json_unquote(json_extract(`contact_li_json`,'$'))) STORED,
`contact_name` varchar(200) DEFAULT NULL,
`contact_email` varchar(254) DEFAULT NULL,
`contact_phone` varchar(50) DEFAULT NULL,
`contact_other` text DEFAULT NULL,
`contact_text` text DEFAULT NULL,
`event_file_upload_information` text DEFAULT NULL,
`enable` tinyint(1) NOT NULL DEFAULT 1,
`enable_from` datetime DEFAULT NULL,
`enable_to` datetime DEFAULT NULL,
`enable_for_administrator` tinyint(1) NOT NULL DEFAULT 0,
`enable_for_support` tinyint(1) NOT NULL DEFAULT 0,
`enable_for_assistant` tinyint(1) NOT NULL DEFAULT 0,
`enable_for_trusted` tinyint(1) NOT NULL DEFAULT 0,
`enable_for_authenticated` tinyint(1) NOT NULL DEFAULT 0,
`enable_for_anonymous` tinyint(1) NOT NULL DEFAULT 0,
`enable_comments` tinyint(1) NOT NULL DEFAULT 0,
`send_moderator_email` tinyint(1) DEFAULT NULL,
`moderator_email` varchar(254) DEFAULT NULL,
`disable_navigation` tinyint(1) NOT NULL DEFAULT 0,
`enable_event_file_upload_for_event` tinyint(1) DEFAULT NULL,
`enable_event_file_upload_for_location` tinyint(1) DEFAULT NULL,
`enable_event_file_upload_for_session` tinyint(1) DEFAULT NULL,
`enable_event_file_upload_for_presentation` tinyint(1) DEFAULT NULL,
`enable_event_file_upload_for_presenter` tinyint(1) DEFAULT NULL,
`enable_event_file_upload_review_question` tinyint(1) DEFAULT NULL,
`enable_event_file_upload_email_question` tinyint(1) DEFAULT NULL,
`enable_event_file_upload_comments_question` tinyint(1) DEFAULT NULL,
`enable_event_file_approval_option` tinyint(1) DEFAULT NULL,
`enable_event_file_public_use_option` tinyint(1) DEFAULT NULL,
`enable_event_file_member_use_option` tinyint(1) DEFAULT NULL,
`enable_event_file_attendee_use_option` tinyint(1) DEFAULT NULL,
`enable_event_file_publish_option` tinyint(1) DEFAULT NULL,
`enable_event_file_purpose_option` tinyint(1) DEFAULT NULL,
`enable_event_file_os_selection_option` tinyint(1) DEFAULT NULL COMMENT 'allow selection between macOS and Windows',
`enable_event_file_os_change_option` tinyint(1) DEFAULT NULL,
`custom_event_file_upload_description` text DEFAULT NULL,
`custom_event_file_agreement_1_text` text DEFAULT NULL,
`custom_event_file_agreement_1_description` text DEFAULT NULL,
`ask_speaker_ready_room` tinyint(1) DEFAULT NULL,
`ask_presentation_publish_optout` tinyint(1) DEFAULT NULL,
`default_event_file_to_public_use` tinyint(1) DEFAULT NULL,
`ask_for_public_version` tinyint(1) DEFAULT NULL,
`hide_file_upload_presentation_name` tinyint(1) DEFAULT NULL,
`hide_session_codes` tinyint(1) DEFAULT NULL,
`custom_agreement_1_text` text DEFAULT NULL,
`custom_agreement_1_description` text DEFAULT NULL,
`unauthenticated_access` tinyint(1) NOT NULL DEFAULT 0,
`unauthenticated_access_public_endpoint` tinyint(1) NOT NULL DEFAULT 0,
`mod_abstracts_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`mod_abstracts_json`)),
`mod_badges_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'badges config options' CHECK (json_valid(`mod_badges_json`)),
`mod_exhibits_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'exhibits config options' CHECK (json_valid(`mod_exhibits_json`)),
`mod_meetings_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`mod_meetings_json`)),
`mod_pres_mgmt_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`mod_pres_mgmt_json`)),
`cfg_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'config in JSON format' CHECK (json_valid(`cfg_json`)),
`hide` tinyint(1) DEFAULT NULL,
`status` varchar(25) DEFAULT NULL,
`review` tinyint(1) DEFAULT NULL,
`approve` tinyint(1) DEFAULT NULL,
`ready` tinyint(1) DEFAULT NULL,
`ready_on` datetime DEFAULT NULL,
`archive` tinyint(1) DEFAULT NULL,
`archive_on` datetime DEFAULT NULL,
`priority` tinyint(1) DEFAULT NULL,
`sort` int(11) DEFAULT NULL,
`group` varchar(100) DEFAULT NULL,
`default_qry_str` text DEFAULT NULL COMMENT 'for FULLTEXT indexed searches',
`notes` text DEFAULT NULL,
`created_on` timestamp NOT NULL DEFAULT current_timestamp(),
`updated_on` timestamp NULL DEFAULT NULL ON UPDATE current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
--
-- Triggers `event`
--
DELIMITER $$
CREATE TRIGGER `before_insert_event` BEFORE INSERT ON `event` FOR EACH ROW BEGIN
BEGIN
IF (NEW.id_random IS NULL OR NEW.id_random = '' OR LENGTH(NEW.id_random) < 6)
THEN
/* SET NEW.id_random = gen_rand_pattern('3C-2N-2N-2N'); */
/* SET NEW.id_random = gen_rand_pattern('4C-2N-2N-2N'); */
SET NEW.id_random = gen_rand_pattern('3CN-2CN-2CN-2CN');
/* SET NEW.id_random = gen_rand_str(11, 'URL'); */
END IF;
SET NEW.default_qry_str = event_default_qry_str(NEW.id_random, NEW.type, NEW.name, NEW.description, NEW.timezone, NEW.recurring_pattern, NEW.recurring_text, NEW.location_text, NEW.attend_text, NEW.contact_text);
END;
END
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER `before_update_event` BEFORE UPDATE ON `event` FOR EACH ROW BEGIN
BEGIN
IF (NEW.id_random IS NULL OR NEW.id_random = '' OR LENGTH(NEW.id_random) < 6)
THEN
SET NEW.id_random = gen_rand_pattern('3CN-2CN-2CN-2CN');
END IF;
SET NEW.default_qry_str = event_default_qry_str(NEW.id_random, NEW.type, NEW.name, NEW.description, NEW.timezone, NEW.recurring_pattern, NEW.recurring_text, NEW.location_text, NEW.attend_text, NEW.contact_text);
END;
END
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER `event_after_delete` AFTER DELETE ON `event` FOR EACH ROW BEGIN
DELETE FROM event_person WHERE event_person.id = old.poc_event_person_id;
DELETE FROM address WHERE address.for_id = old.id AND address.for_type = 'event';
DELETE FROM address WHERE address.id = old.address_location_id;
DELETE FROM contact WHERE contact.for_id = old.id AND contact.for_type = 'event';
DELETE FROM contact WHERE contact.id = old.contact_1_id;
DELETE FROM contact WHERE contact.id = old.contact_2_id;
DELETE FROM contact WHERE contact.id = old.contact_3_id;
END
$$
DELIMITER ;
--
-- Indexes for dumped tables
--
--
-- Indexes for table `event`
--
ALTER TABLE `event`
ADD PRIMARY KEY (`id`),
ADD UNIQUE KEY `id_random` (`id_random`),
ADD KEY `account_id` (`account_id`),
ADD KEY `created_on` (`created_on`),
ADD KEY `updated_on` (`updated_on`),
ADD KEY `sort` (`sort`),
ADD KEY `conference` (`conference`),
ADD KEY `enable` (`enable`),
ADD KEY `archive` (`archive`),
ADD KEY `address_location_id` (`address_location_id`) USING HASH,
ADD KEY `poc_event_person_id` (`poc_event_person_id`) USING HASH,
ADD KEY `contact_id_1` (`contact_1_id`) USING HASH,
ADD KEY `contact_id_2` (`contact_2_id`) USING HASH,
ADD KEY `priority` (`priority`),
ADD KEY `hide` (`hide`);
ALTER TABLE `event` ADD FULLTEXT KEY `tbl_fulltext_default_qry_str` (`default_qry_str`);
ALTER TABLE `event` ADD FULLTEXT KEY `fulltext_location_address_json` (`location_address_json`);
ALTER TABLE `event` ADD FULLTEXT KEY `fulltext_contact_li_json` (`contact_li_json`);
ALTER TABLE `event` ADD FULLTEXT KEY `fulltext_location_address_json_ext` (`location_address_json_ext`);
ALTER TABLE `event` ADD FULLTEXT KEY `fulltext_contact_li_json_ext` (`contact_li_json_ext`);
--
-- AUTO_INCREMENT for dumped tables
--
--
-- AUTO_INCREMENT for table `event`
--
ALTER TABLE `event`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

View File

@@ -0,0 +1,235 @@
-- phpMyAdmin SQL Dump
-- version 5.2.3
-- https://www.phpmyadmin.net/
--
-- Host: localhost
-- Generation Time: Jan 06, 2026 at 06:24 PM
-- Server version: 12.1.2-MariaDB-log
-- PHP Version: 8.4.15
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- Database: `aether_dev`
--
-- --------------------------------------------------------
--
-- Table structure for table `event_badge`
--
CREATE TABLE `event_badge` (
`id` int(11) NOT NULL,
`id_random` varchar(22) NOT NULL,
`external_id` varchar(100) DEFAULT NULL,
`external_event_id` varchar(75) DEFAULT NULL COMMENT 'externally generated event ID',
`external_registration_id` varchar(75) DEFAULT NULL COMMENT 'registration ID generated by external system (was external_reg_id)',
`external_person_id` varchar(75) DEFAULT NULL COMMENT 'person ID generated by external system (was external_sys_id)',
`event_id_only` int(11) DEFAULT NULL COMMENT 'This should only be used when the event_person record can not be created.',
`event_person_id` int(11) DEFAULT NULL,
`event_badge_template_id` int(11) DEFAULT NULL COMMENT 'if null then use the "default" template for the event',
`pronouns` varchar(50) DEFAULT NULL COMMENT 'preferred pronouns',
`pronouns_override` varchar(50) DEFAULT NULL COMMENT 'override for pronouns',
`informal_name` varchar(50) DEFAULT NULL COMMENT 'nickname',
`title_names` varchar(100) DEFAULT NULL COMMENT 'prefix',
`given_name` varchar(50) DEFAULT NULL COMMENT 'first name',
`middle_name` varchar(50) DEFAULT NULL,
`family_name` varchar(100) DEFAULT NULL COMMENT 'last name',
`designations` varchar(100) DEFAULT NULL COMMENT 'designations and suffix',
`professional_title` varchar(150) DEFAULT NULL COMMENT 'includes degrees and credentials',
`professional_title_override` varchar(200) DEFAULT NULL COMMENT 'override for professional title',
`full_name` varchar(200) DEFAULT NULL,
`full_name_override` varchar(150) DEFAULT NULL COMMENT 'was display_name',
`affiliations` text DEFAULT NULL,
`affiliations_override` varchar(200) DEFAULT NULL COMMENT 'override for affiliations',
`email` varchar(254) DEFAULT NULL,
`email_override` varchar(254) DEFAULT NULL COMMENT 'override for email',
`phone` varchar(25) DEFAULT NULL,
`phone_override` varchar(25) DEFAULT NULL COMMENT 'override for phone',
`address_line_1` varchar(200) DEFAULT NULL,
`address_line_2` varchar(200) DEFAULT NULL,
`address_line_3` varchar(200) DEFAULT NULL,
`city` varchar(100) DEFAULT NULL,
`country_subdivision_code` varchar(8) DEFAULT NULL,
`state_province` varchar(100) DEFAULT NULL,
`state_province_abb` varchar(10) DEFAULT NULL COMMENT 'state/province abbreviation',
`postal_code` varchar(25) DEFAULT NULL,
`country_alpha_2_code` varchar(2) DEFAULT NULL,
`country` varchar(100) DEFAULT NULL,
`full_address` varchar(200) DEFAULT NULL,
`location` varchar(200) DEFAULT NULL,
`location_override` varchar(200) DEFAULT NULL COMMENT 'override for location',
`location_short` varchar(100) DEFAULT NULL COMMENT 'auto gen with trigger',
`location_long` varchar(200) DEFAULT NULL COMMENT 'auto gen with trigger',
`query_str` varchar(150) DEFAULT NULL,
`badge_type_code` varchar(50) DEFAULT NULL,
`badge_type_code_override` varchar(50) DEFAULT NULL,
`badge_type` varchar(100) DEFAULT NULL,
`badge_type_override` varchar(100) DEFAULT NULL,
`member_type_code` varchar(50) DEFAULT NULL,
`member_type` varchar(100) DEFAULT NULL,
`member_status` varchar(50) DEFAULT NULL,
`registration_type_code` varchar(50) DEFAULT NULL,
`registration_type` varchar(100) DEFAULT NULL,
`other_1` varchar(100) DEFAULT NULL,
`other_2` varchar(100) DEFAULT NULL,
`ticket_1_code` varchar(100) DEFAULT NULL,
`ticket_2_code` varchar(100) DEFAULT NULL,
`ticket_3_code` varchar(100) DEFAULT NULL,
`ticket_4_code` varchar(100) DEFAULT NULL,
`ticket_5_code` varchar(100) DEFAULT NULL,
`ticket_6_code` varchar(100) DEFAULT NULL,
`ticket_7_code` varchar(100) DEFAULT NULL,
`ticket_8_code` varchar(100) DEFAULT NULL,
`allow_tracking` tinyint(1) DEFAULT NULL,
`allow_tracking_field_li` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '[''given_name'', ''family_name'', ''email'']' CHECK (json_valid(`allow_tracking_field_li`)),
`agree_to_tc` tinyint(1) DEFAULT NULL COMMENT 'agree to terms and conditions',
`print_first_datetime` datetime DEFAULT NULL,
`print_last_datetime` datetime DEFAULT NULL,
`print_count` int(11) DEFAULT NULL,
`data_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`data_json`)),
`cfg_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`cfg_json`)),
`hide` tinyint(1) DEFAULT 0,
`priority` tinyint(1) DEFAULT NULL,
`sort` int(11) DEFAULT NULL,
`group` varchar(100) DEFAULT NULL,
`enable` tinyint(1) DEFAULT 1,
`default_qry_str` text DEFAULT NULL COMMENT 'for FULLTEXT indexed searches',
`notes` text DEFAULT NULL,
`created_on` timestamp NOT NULL DEFAULT current_timestamp(),
`updated_on` timestamp NULL DEFAULT NULL ON UPDATE current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
--
-- Triggers `event_badge`
--
DELIMITER $$
CREATE TRIGGER `before_insert_event_badge` BEFORE INSERT ON `event_badge` FOR EACH ROW BEGIN
BEGIN
IF (NEW.id_random IS NULL OR NEW.id_random = '' OR LENGTH(NEW.id_random) < 6)
THEN
SET NEW.id_random = gen_rand_pattern('4C-2N-2N-2N');
/* SET NEW.id_random = gen_rand_str(11, 'URL'); */
END IF;
SET NEW.full_name = name_for_full_name(NEW.informal_name, NEW.title_names, NEW.given_name, NEW.middle_name, NEW.family_name, NEW.designations);
IF (NEW.location IS NULL OR NEW.location = '')
THEN
SET NEW.location = make_location_str(NEW.city, NEW.state_province, NEW.country);
END IF;
IF (NEW.full_address IS NULL OR NEW.full_address = '')
THEN
SET NEW.full_address = make_full_address_str(NEW.address_line_1, NEW.address_line_2, NEW.address_line_3, NEW.city, NEW.state_province, NEW.postal_code, NEW.country);
/*SET NEW.notes = CONCAT(COALESCE(`NEW`.`notes`,''), ';;sys::overide empty full_address');*/
END IF;
IF (NEW.city IS NOT NULL OR NEW.state_province IS NOT NULL OR NEW.country IS NOT NULL)
THEN
SET NEW.location_long = badge_full_address(NEW.city, NEW.state_province, NEW.country);
/*SET NEW.notes = CONCAT(COALESCE(`NEW`.`notes`,''), ';;sys::overide empty location');*/
END IF;
IF (NEW.city IS NOT NULL OR NEW.state_province_abb IS NOT NULL OR NEW.country_alpha_2_code IS NOT NULL)
THEN
SET NEW.location_short = badge_location_short(NEW.city, NEW.state_province_abb, NEW.country_alpha_2_code);
/*SET NEW.notes = CONCAT(COALESCE(`NEW`.`notes`,''), ';;sys::overide empty location');*/
END IF;
SET NEW.default_qry_str = event_badge_default_qry_str(NEW.id_random, NEW.full_name, NEW.full_name_override, NEW.affiliations, NEW.affiliations_override, NEW.email, NEW.email_override, NEW.location, NEW.location_override);
SET NEW.query_str = badge_query_str(NEW.id_random, NEW.informal_name, NEW.given_name, NEW.middle_name, NEW.family_name, NEW.email);
END;
END
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER `before_update_event_badge` BEFORE UPDATE ON `event_badge` FOR EACH ROW BEGIN
BEGIN
IF (NEW.id_random IS NULL OR NEW.id_random = '' OR LENGTH(NEW.id_random) < 6)
THEN
SET NEW.id_random = gen_rand_pattern('4C-2N-2N-2N');
END IF;
SET NEW.full_name = name_for_full_name(NEW.informal_name, NEW.title_names, NEW.given_name, NEW.middle_name, NEW.family_name, NEW.designations);
IF (NEW.location IS NULL OR NEW.location = '')
THEN
SET NEW.location = make_location_str(NEW.city, NEW.state_province, NEW.country);
END IF;
IF (NEW.full_address IS NULL OR NEW.full_address = '')
THEN
SET NEW.full_address = make_full_address_str(NEW.address_line_1, NEW.address_line_2, NEW.address_line_3, NEW.city, NEW.state_province, NEW.postal_code, NEW.country);
/*SET NEW.notes = CONCAT(COALESCE(`NEW`.`notes`,''), ';;sys::overide empty full_address');*/
END IF;
IF (NEW.city IS NOT NULL OR NEW.state_province IS NOT NULL OR NEW.country IS NOT NULL)
THEN
SET NEW.location_long = badge_full_address(NEW.city, NEW.state_province, NEW.country);
/*SET NEW.notes = CONCAT(COALESCE(`NEW`.`notes`,''), ';;sys::overide empty location');*/
END IF;
IF (NEW.city IS NOT NULL OR NEW.state_province_abb IS NOT NULL OR NEW.country_alpha_2_code IS NOT NULL)
THEN
SET NEW.location_short = badge_location_short(NEW.city, NEW.state_province_abb, NEW.country_alpha_2_code);
/*SET NEW.notes = CONCAT(COALESCE(`NEW`.`notes`,''), ';;sys::overide empty location');*/
END IF;
SET NEW.default_qry_str = event_badge_default_qry_str(NEW.id_random, NEW.full_name, NEW.full_name_override, NEW.affiliations, NEW.affiliations_override, NEW.email, NEW.email_override, NEW.location, NEW.location_override);
SET NEW.query_str = badge_query_str(NEW.id_random, NEW.informal_name, NEW.given_name, NEW.middle_name, NEW.family_name, NEW.email);
END;
END
$$
DELIMITER ;
--
-- Indexes for dumped tables
--
--
-- Indexes for table `event_badge`
--
ALTER TABLE `event_badge`
ADD PRIMARY KEY (`id`),
ADD UNIQUE KEY `id_random` (`id_random`),
ADD KEY `external_id` (`external_id`),
ADD KEY `event_person_id` (`event_person_id`),
ADD KEY `given_name` (`given_name`),
ADD KEY `family_name` (`family_name`),
ADD KEY `display_name` (`full_name_override`),
ADD KEY `email` (`email`),
ADD KEY `badge_type_code` (`badge_type_code`),
ADD KEY `member_type_code` (`member_type_code`),
ADD KEY `registration_type_code` (`registration_type_code`),
ADD KEY `enable` (`enable`),
ADD KEY `created_on` (`created_on`),
ADD KEY `updated_on` (`updated_on`),
ADD KEY `external_event_id` (`external_event_id`),
ADD KEY `event_badge_template_id` (`event_badge_template_id`);
ALTER TABLE `event_badge` ADD FULLTEXT KEY `query_str` (`query_str`);
ALTER TABLE `event_badge` ADD FULLTEXT KEY `tbl_fulltext_default_qry_str` (`default_qry_str`);
--
-- AUTO_INCREMENT for dumped tables
--
--
-- AUTO_INCREMENT for table `event_badge`
--
ALTER TABLE `event_badge`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

View File

@@ -0,0 +1,242 @@
-- phpMyAdmin SQL Dump
-- version 5.2.3
-- https://www.phpmyadmin.net/
--
-- Host: localhost
-- Generation Time: Jan 06, 2026 at 06:25 PM
-- Server version: 12.1.2-MariaDB-log
-- PHP Version: 8.4.15
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- Database: `aether_dev`
--
-- --------------------------------------------------------
--
-- Table structure for table `event_file`
--
CREATE TABLE `event_file` (
`id` int(11) NOT NULL,
`id_random` varchar(22) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
`hosted_file_id` int(11) DEFAULT NULL,
`for_type` varchar(50) DEFAULT NULL,
`for_id` int(11) DEFAULT NULL,
`event_id` int(11) DEFAULT NULL COMMENT 'is this needed?',
`event_session_id` int(11) DEFAULT NULL COMMENT 'is this needed?',
`event_presentation_id` int(11) DEFAULT NULL COMMENT 'is this needed?',
`event_presenter_id` int(11) DEFAULT NULL COMMENT 'is this needed?',
`event_location_id` int(11) DEFAULT NULL COMMENT 'is this needed?',
`event_track_id` int(11) DEFAULT NULL COMMENT 'is this needed?',
`event_exhibit_id` int(11) DEFAULT NULL COMMENT 'is this needed?',
`filename` varchar(255) DEFAULT NULL,
`extension` varchar(10) DEFAULT NULL,
`title` varchar(500) DEFAULT NULL,
`description` text DEFAULT NULL,
`internal_use` tinyint(1) DEFAULT NULL COMMENT 'hide from non-support people',
`internal_start_datetime` datetime DEFAULT NULL,
`internal_end_datetime` datetime DEFAULT NULL,
`internal_filename` varchar(255) DEFAULT NULL,
`internal_extension` varchar(10) DEFAULT NULL,
`open_in_os` varchar(50) DEFAULT NULL COMMENT 'change to open_in: [mac,win,local browser/client,remote browser/client,api,websocket,download]',
`internal_hide` tinyint(1) DEFAULT NULL,
`private_use` tinyint(1) DEFAULT NULL,
`private_start_datetime` datetime DEFAULT NULL,
`private_end_datetime` datetime DEFAULT NULL,
`private_filename` varchar(255) DEFAULT NULL,
`private_extension` varchar(10) DEFAULT NULL,
`private_hide` tinyint(1) DEFAULT NULL,
`public_use` tinyint(1) DEFAULT NULL,
`public_start_datetime` datetime DEFAULT NULL,
`public_end_datetime` datetime DEFAULT NULL,
`public_filename` varchar(255) DEFAULT NULL,
`public_extension` varchar(10) DEFAULT NULL,
`public_hide` tinyint(1) DEFAULT NULL,
`lu_file_purpose_id` int(11) DEFAULT NULL,
`file_purpose` varchar(100) DEFAULT NULL,
`publish_optout` tinyint(1) DEFAULT NULL,
`download_start_datetime` datetime DEFAULT NULL,
`download_end_datetime` datetime DEFAULT NULL,
`approved` int(11) DEFAULT NULL,
`approved_on` timestamp NULL DEFAULT NULL,
`public` tinyint(1) DEFAULT NULL,
`hide` tinyint(1) DEFAULT NULL,
`priority` tinyint(1) DEFAULT NULL,
`sort` int(11) DEFAULT NULL,
`group` varchar(100) DEFAULT NULL,
`enable` tinyint(1) NOT NULL DEFAULT 1,
`enable_after_datetime` datetime DEFAULT NULL,
`enable_before_datetime` datetime DEFAULT NULL,
`enable_for_administrator` tinyint(1) NOT NULL DEFAULT 0,
`enable_for_support` tinyint(1) NOT NULL DEFAULT 0,
`enable_for_assistant` tinyint(1) NOT NULL DEFAULT 0,
`enable_for_trusted` tinyint(1) NOT NULL DEFAULT 0,
`enable_for_authenticated` tinyint(1) NOT NULL DEFAULT 0,
`status` int(11) DEFAULT NULL,
`review` tinyint(1) DEFAULT NULL,
`approve` tinyint(1) DEFAULT NULL,
`ready` tinyint(1) DEFAULT NULL,
`ready_datetime` datetime DEFAULT NULL,
`archive` tinyint(1) DEFAULT NULL,
`archive_datetime` datetime DEFAULT NULL,
`enable_for_anonymous` tinyint(1) NOT NULL DEFAULT 0,
`created_on` timestamp NOT NULL DEFAULT current_timestamp(),
`updated_on` timestamp NULL DEFAULT NULL ON UPDATE current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
--
-- Triggers `event_file`
--
DELIMITER $$
CREATE TRIGGER `before_insert_event_file` BEFORE INSERT ON `event_file` FOR EACH ROW BEGIN
BEGIN
IF (NEW.id_random IS NULL OR NEW.id_random = '' OR LENGTH(NEW.id_random) < 6)
THEN
/* SET NEW.id_random = gen_rand_pattern('3C-2N-2N-2N'); */
/* SET NEW.id_random = gen_rand_pattern('4C-2N-2N-2N'); */
SET NEW.id_random = gen_rand_str(11, 'URL');
END IF;
END;
END
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER `before_insert_event_file_fix_ids` BEFORE INSERT ON `event_file` FOR EACH ROW BEGIN
BEGIN
IF (NEW.for_type = 'event_location' AND NEW.for_id IS NOT NULL)
THEN
SET NEW.event_location_id = NEW.for_id;
SET NEW.event_id = (SELECT event_id FROM event_location WHERE event_location.id = NEW.for_id);
END IF;
IF (NEW.for_type = 'event_presenter' AND NEW.for_id IS NOT NULL)
THEN
SET NEW.event_presenter_id = NEW.for_id;
SET NEW.event_presentation_id = (SELECT event_presentation_id FROM event_presenter WHERE event_presenter.id = NEW.for_id);
SET NEW.event_session_id = (SELECT event_session_id FROM event_presentation WHERE event_presentation.id = NEW.event_presentation_id);
SET NEW.event_location_id = (SELECT event_location_id FROM event_session WHERE event_session.id = NEW.event_session_id);
SET NEW.event_id = (SELECT event_id FROM event_session WHERE event_session.id = NEW.event_session_id);
END IF;
IF (NEW.for_type = 'event_session' AND NEW.for_id IS NOT NULL)
THEN
SET NEW.event_session_id = NEW.for_id;
SET NEW.event_location_id = (SELECT event_location_id FROM event_session WHERE event_session.id = NEW.for_id);
SET NEW.event_id = (SELECT event_id FROM event_session WHERE event_session.id = NEW.for_id);
END IF;
END;
END
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER `before_update_event_file` BEFORE UPDATE ON `event_file` FOR EACH ROW BEGIN
BEGIN
IF (NEW.id_random IS NULL OR NEW.id_random = '' OR LENGTH(NEW.id_random) < 6)
THEN
/* SET NEW.id_random = gen_rand_pattern('3C-2N-2N-2N'); */
/* SET NEW.id_random = gen_rand_pattern('4C-2N-2N-2N'); */
SET NEW.id_random = gen_rand_str(11, 'URL');
END IF;
END;
END
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER `before_update_event_file_fix_ids` BEFORE UPDATE ON `event_file` FOR EACH ROW BEGIN
BEGIN
IF (NEW.for_type = 'event_location' AND NEW.for_id IS NOT NULL)
THEN
SET NEW.event_location_id = NEW.for_id;
SET NEW.event_id = (SELECT event_id FROM event_location WHERE event_location.id = NEW.for_id);
END IF;
IF (NEW.for_type = 'event_presenter' AND NEW.for_id IS NOT NULL)
THEN
SET NEW.event_presenter_id = NEW.for_id;
SET NEW.event_presentation_id = (SELECT event_presentation_id FROM event_presenter WHERE event_presenter.id = NEW.for_id);
SET NEW.event_session_id = (SELECT event_session_id FROM event_presentation WHERE event_presentation.id = NEW.event_presentation_id);
SET NEW.event_location_id = (SELECT event_location_id FROM event_session WHERE event_session.id = NEW.event_session_id);
SET NEW.event_id = (SELECT event_id FROM event_session WHERE event_session.id = NEW.event_session_id);
END IF;
IF (NEW.for_type = 'event_session' AND NEW.for_id IS NOT NULL)
THEN
SET NEW.event_session_id = NEW.for_id;
SET NEW.event_location_id = (SELECT event_location_id FROM event_session WHERE event_session.id = NEW.for_id);
SET NEW.event_id = (SELECT event_id FROM event_session WHERE event_session.id = NEW.for_id);
END IF;
END;
END
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER `event_file_after_delete` AFTER DELETE ON `event_file` FOR EACH ROW BEGIN
DELETE FROM hosted_file_link WHERE hosted_file_link.hosted_file_id = OLD.hosted_file_id AND hosted_file_link.link_to_type = OLD.for_type AND hosted_file_link.link_to_id = OLD.for_id;
END
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER `event_file_after_insert` AFTER INSERT ON `event_file` FOR EACH ROW BEGIN
INSERT IGNORE INTO hosted_file_link (hosted_file_id, link_to_type, link_to_id) VALUES (NEW.hosted_file_id, NEW.for_type, NEW.for_id);
END
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER `update approved_on` BEFORE UPDATE ON `event_file` FOR EACH ROW IF NEW.approved = 1 THEN SET NEW.approved_on = CURRENT_TIMESTAMP; END IF
$$
DELIMITER ;
--
-- Indexes for dumped tables
--
--
-- Indexes for table `event_file`
--
ALTER TABLE `event_file`
ADD PRIMARY KEY (`id`),
ADD UNIQUE KEY `id_random` (`id_random`),
ADD UNIQUE KEY `hosted_file_id_for` (`hosted_file_id`,`for_type`,`for_id`),
ADD KEY `event_session_id` (`event_session_id`),
ADD KEY `event_id` (`event_id`),
ADD KEY `hosted_file_id` (`hosted_file_id`),
ADD KEY `event_presentation_id` (`event_presentation_id`),
ADD KEY `event_presenter_id` (`event_presenter_id`),
ADD KEY `event_location_id` (`event_location_id`),
ADD KEY `created_on` (`created_on`),
ADD KEY `updated_on` (`updated_on`),
ADD KEY `event_track_id` (`event_track_id`),
ADD KEY `event_exhibit_id` (`event_exhibit_id`),
ADD KEY `hide` (`hide`),
ADD KEY `enable` (`enable`),
ADD KEY `sort` (`sort`),
ADD KEY `priority` (`priority`),
ADD KEY `for_type` (`for_type`,`for_id`),
ADD KEY `filename` (`filename`),
ADD KEY `extension` (`extension`);
--
-- AUTO_INCREMENT for dumped tables
--
--
-- AUTO_INCREMENT for table `event_file`
--
ALTER TABLE `event_file`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

View File

@@ -0,0 +1,201 @@
-- phpMyAdmin SQL Dump
-- version 5.2.3
-- https://www.phpmyadmin.net/
--
-- Host: localhost
-- Generation Time: Jan 06, 2026 at 06:26 PM
-- Server version: 12.1.2-MariaDB-log
-- PHP Version: 8.4.15
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- Database: `aether_dev`
--
-- --------------------------------------------------------
--
-- Table structure for table `event_session`
--
CREATE TABLE `event_session` (
`id` int(11) NOT NULL,
`id_random` varchar(22) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
`external_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`code` varchar(100) DEFAULT NULL,
`number` int(11) DEFAULT NULL,
`for_type` varchar(50) DEFAULT NULL COMMENT 'avoid using',
`for_id` int(11) DEFAULT NULL COMMENT 'avoid using',
`event_id` int(11) DEFAULT NULL,
`event_type_id` int(11) DEFAULT NULL,
`type_id` int(11) DEFAULT NULL COMMENT 'not used',
`type_code` varchar(25) DEFAULT NULL COMMENT 'from client',
`event_location_id` int(11) DEFAULT NULL,
`event_track_id` int(11) DEFAULT NULL,
`poc_event_person_id` int(11) DEFAULT NULL COMMENT 'still needed?',
`poc_person_id` int(11) DEFAULT NULL,
`poc_agree` tinyint(1) DEFAULT NULL COMMENT 'catchall for agreement or consent',
`poc_kv_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'advocate, chair, champion, moderator, organizer',
`passcode` varchar(25) DEFAULT NULL COMMENT 'for basic access',
`name` varchar(300) DEFAULT NULL,
`description` text DEFAULT NULL,
`proposal_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'responses to proposal questions in JSON format' CHECK (json_valid(`proposal_json`)),
`start_datetime` datetime DEFAULT NULL,
`end_datetime` datetime DEFAULT NULL,
`attend_url` text DEFAULT NULL,
`attend_url_text` text DEFAULT NULL,
`attend_url_passcode` varchar(15) DEFAULT NULL,
`attend_phone` varchar(15) DEFAULT NULL,
`attend_phone_passcode` varchar(15) DEFAULT NULL,
`attend_text` text DEFAULT NULL,
`rehearsal_start_datetime` datetime DEFAULT NULL,
`rehearsal_end_datetime` datetime DEFAULT NULL,
`rehearsal_url` text DEFAULT NULL,
`rehearsal_url_passcode` varchar(15) DEFAULT NULL COMMENT 'remove field?',
`rehearsal_phone` varchar(15) DEFAULT NULL COMMENT 'remove field?',
`rehearsal_phone_passcode` varchar(15) DEFAULT NULL COMMENT 'remove field?',
`rehearsal_text` text DEFAULT NULL,
`image_path` varchar(7) DEFAULT NULL COMMENT 'remove field?',
`download_start_datetime` datetime DEFAULT NULL,
`download_end_datetime` datetime DEFAULT NULL,
`internal_use` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'hide from non-support people',
`record_audio` tinyint(1) DEFAULT 0 COMMENT 'record presentations',
`record_video` tinyint(1) DEFAULT 0 COMMENT 'record presentations',
`internal_notes` text DEFAULT NULL COMMENT 'general notes',
`internal_notes_access` text DEFAULT NULL COMMENT 'accessibility and accommodations',
`internal_notes_av` text DEFAULT NULL COMMENT 'audio video',
`internal_notes_fb` text DEFAULT NULL COMMENT 'food and beverage',
`internal_notes_it` text DEFAULT NULL COMMENT 'IT and networking',
`internal_notes_staff` text DEFAULT NULL COMMENT 'staffing and labor',
`ux_mode` varchar(50) DEFAULT NULL COMMENT 'colloquium, lecture, panel, poster, symposium, workshop; replaces type_code',
`enable` tinyint(1) NOT NULL DEFAULT 1,
`enable_after_datetime` datetime DEFAULT NULL,
`enable_before_datetime` datetime DEFAULT NULL,
`enable_event_file_approval_option` tinyint(1) DEFAULT NULL,
`hide` tinyint(1) DEFAULT 0,
`public` tinyint(1) DEFAULT NULL,
`public_hide` tinyint(1) DEFAULT NULL,
`hide_event_launcher` tinyint(1) DEFAULT NULL,
`status` int(11) DEFAULT NULL,
`review` tinyint(1) DEFAULT NULL COMMENT 'ready for or needs review',
`approve` tinyint(1) DEFAULT NULL COMMENT 'approved',
`ready` tinyint(1) DEFAULT NULL,
`ready_on` datetime DEFAULT NULL,
`archive` tinyint(1) DEFAULT NULL,
`archive_on` datetime DEFAULT NULL,
`alert` tinyint(1) DEFAULT NULL,
`alert_msg` text DEFAULT NULL COMMENT 'a short message from user',
`priority` tinyint(1) DEFAULT 0,
`sort` int(11) DEFAULT 0,
`group` varchar(100) DEFAULT NULL,
`default_qry_str` text DEFAULT NULL COMMENT 'for FULLTEXT indexed searches',
`notes` text DEFAULT NULL,
`created_on` timestamp NOT NULL DEFAULT current_timestamp(),
`updated_on` timestamp NULL DEFAULT NULL ON UPDATE current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
--
-- Triggers `event_session`
--
DELIMITER $$
CREATE TRIGGER `after_update_event_session` AFTER UPDATE ON `event_session` FOR EACH ROW BEGIN
IF (NEW.event_location_id) THEN
UPDATE `event_file`
SET `event_file`.event_location_id = NEW.event_location_id
WHERE `event_file`.event_session_id = OLD.id OR (`event_file`.for_type = 'event_session' AND `event_file`.for_id = OLD.id);
END IF;
END
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER `before_insert_event_session` BEFORE INSERT ON `event_session` FOR EACH ROW BEGIN
BEGIN
IF (NEW.id_random IS NULL OR NEW.id_random = '' OR LENGTH(NEW.id_random) < 6)
THEN
/* SET NEW.id_random = gen_rand_pattern('3C-2N-2N-2N'); */
SET NEW.id_random = gen_rand_pattern('4C-2N-2N-2N');
/* SET NEW.id_random = gen_rand_str(11, 'URL'); */
END IF;
SET NEW.default_qry_str = event_session_default_qry_str(NEW.id_random, NEW.name, NEW.description, NEW.code, NEW.type_code, NEW.start_datetime);
END;
END
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER `before_update_event_session` BEFORE UPDATE ON `event_session` FOR EACH ROW BEGIN
BEGIN
IF (NEW.id_random IS NULL OR NEW.id_random = '' OR LENGTH(NEW.id_random) < 6)
THEN
/* SET NEW.id_random = gen_rand_pattern('3C-2N-2N-2N'); */
SET NEW.id_random = gen_rand_pattern('4C-2N-2N-2N');
/* SET NEW.id_random = gen_rand_str(11, 'URL'); */
END IF;
SET NEW.default_qry_str = event_session_default_qry_str(NEW.id_random, NEW.name, NEW.description, NEW.code, NEW.type_code, NEW.start_datetime);
END;
END
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER `event_session_after_delete` AFTER DELETE ON `event_session` FOR EACH ROW BEGIN
DELETE FROM event_file WHERE event_file.for_type = 'event_session' AND event_file.for_id = OLD.id;
DELETE FROM event_presentation WHERE event_presentation.event_session_id = OLD.id;
END
$$
DELIMITER ;
--
-- Indexes for dumped tables
--
--
-- Indexes for table `event_session`
--
ALTER TABLE `event_session`
ADD PRIMARY KEY (`id`),
ADD UNIQUE KEY `id_random` (`id_random`),
ADD KEY `event_id` (`event_id`),
ADD KEY `start_datetime` (`start_datetime`),
ADD KEY `event_location_id` (`event_location_id`),
ADD KEY `poc_event_person_id` (`poc_event_person_id`),
ADD KEY `created_on` (`created_on`),
ADD KEY `updated_on` (`updated_on`),
ADD KEY `sort` (`sort`),
ADD KEY `enable` (`enable`),
ADD KEY `hide` (`hide`),
ADD KEY `priority` (`priority`),
ADD KEY `name` (`name`),
ADD KEY `external_id` (`external_id`),
ADD KEY `code` (`code`),
ADD KEY `event_track_id` (`event_track_id`),
ADD KEY `hide_event_launcher` (`hide_event_launcher`),
ADD KEY `type_code` (`type_code`),
ADD KEY `poc_person_id` (`poc_person_id`),
ADD KEY `poc_agree` (`poc_agree`);
ALTER TABLE `event_session` ADD FULLTEXT KEY `tbl_fulltext_default_qry_str` (`default_qry_str`);
--
-- AUTO_INCREMENT for dumped tables
--
--
-- AUTO_INCREMENT for table `event_session`
--
ALTER TABLE `event_session`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

View File

@@ -0,0 +1,213 @@
-- phpMyAdmin SQL Dump
-- version 5.2.3
-- https://www.phpmyadmin.net/
--
-- Host: localhost
-- Generation Time: Jan 06, 2026 at 06:23 PM
-- Server version: 12.1.2-MariaDB-log
-- PHP Version: 8.4.15
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- Database: `aether_dev`
--
-- --------------------------------------------------------
--
-- Table structure for table `person`
--
CREATE TABLE `person` (
`id` int(11) NOT NULL,
`id_random` varchar(22) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
`source_code` varchar(25) DEFAULT NULL,
`external_id` varchar(75) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`external_sys_id` varchar(75) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'generated by external system',
`account_id` int(11) DEFAULT NULL,
`user_id` int(11) DEFAULT NULL,
`organization_id` int(11) DEFAULT NULL,
`informal_name` varchar(50) DEFAULT NULL COMMENT 'nickname',
`title_names` varchar(100) DEFAULT NULL COMMENT 'prefix',
`given_name` varchar(50) NOT NULL DEFAULT '' COMMENT 'first name',
`middle_name` varchar(50) DEFAULT NULL,
`family_name` varchar(50) DEFAULT NULL COMMENT 'last name',
`designations` varchar(175) DEFAULT NULL COMMENT 'designations and suffix',
`professional_title` varchar(100) DEFAULT NULL COMMENT ' includes degrees and credentials ',
`full_name` varchar(150) DEFAULT NULL COMMENT 'set by triggers',
`full_name_override` varchar(150) DEFAULT NULL COMMENT 'was display_name',
`last_first_name` varchar(50) DEFAULT NULL COMMENT 'set by triggers',
`informal_full_name` varchar(150) DEFAULT NULL COMMENT 'set by triggers',
`affiliations` varchar(200) DEFAULT NULL,
`primary_email` varchar(254) DEFAULT NULL,
`tagline` text DEFAULT NULL,
`description` text DEFAULT NULL,
`biography` text DEFAULT NULL,
`birth_date` date DEFAULT NULL,
`death_date` date DEFAULT NULL,
`lu_gender_id` int(11) DEFAULT NULL,
`lu_sexuality_id` int(11) DEFAULT NULL,
`lu_race_id` int(11) DEFAULT NULL,
`lu_ethnicity_id` int(11) DEFAULT NULL,
`language_native` varchar(2) DEFAULT NULL,
`language_primary` varchar(2) DEFAULT NULL,
`language_secondary` varchar(2) DEFAULT NULL,
`lu_education_degree_id` int(11) DEFAULT NULL,
`lu_education_level_id` int(11) DEFAULT NULL,
`photo_path` varchar(2500) DEFAULT NULL,
`photo_bg_color` varchar(25) DEFAULT NULL,
`thumbnail_path` varchar(2500) DEFAULT NULL,
`thumbnail_bg_color` varchar(25) DEFAULT NULL,
`email_allowed` tinyint(1) DEFAULT NULL COMMENT 'global opt in or out for person',
`paper_mail_allowed` tinyint(1) DEFAULT NULL COMMENT 'global opt in or out for person',
`stripe_customer_id` varchar(50) DEFAULT NULL,
`allow_auth_key` tinyint(1) NOT NULL DEFAULT 1 COMMENT 'defaults to true',
`auth_key` varchar(22) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`passcode` varchar(25) DEFAULT NULL COMMENT 'for basic access',
`status` varchar(25) DEFAULT NULL COMMENT 'pending, hold, approved, rejected, banned, retired, deceased',
`status_id` int(11) DEFAULT NULL COMMENT 'not sure if using yet 2022-03-15',
`hide` tinyint(1) DEFAULT NULL,
`priority` tinyint(1) DEFAULT NULL,
`sort` int(11) DEFAULT NULL,
`group` varchar(100) DEFAULT NULL,
`notes` text DEFAULT NULL,
`cfg_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'config options' CHECK (json_valid(`cfg_json`)),
`data_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`data_json`)),
`other_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`meta_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`meta_json`)),
`enable` tinyint(1) DEFAULT 1,
`created_on` timestamp NOT NULL DEFAULT current_timestamp(),
`updated_on` timestamp NULL DEFAULT NULL ON UPDATE current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Information that generally does not change often or ever.';
--
-- Triggers `person`
--
DELIMITER $$
CREATE TRIGGER `before_insert_person` BEFORE INSERT ON `person` FOR EACH ROW BEGIN
BEGIN
IF (NEW.id_random IS NULL OR NEW.id_random = '' OR LENGTH(NEW.id_random) < 6)
THEN
/* SET NEW.id_random = gen_rand_pattern('3C-2N-2N-2N'); */
/* SET NEW.id_random = gen_rand_pattern('4C-2N-2N-2N'); */
SET NEW.id_random = gen_rand_str(11, 'URL');
END IF;
END;
END
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER `before_insert_person_names` BEFORE INSERT ON `person` FOR EACH ROW BEGIN
SET NEW.full_name = name_for_full_name(NEW.informal_name, NEW.title_names, NEW.given_name, NEW.middle_name, NEW.family_name, NEW.designations);
SET NEW.last_first_name = name_for_last_first_name(NEW.given_name, NEW.middle_name, NEW.family_name);
SET NEW.informal_full_name = name_for_informal_full_name(NEW.informal_name, NEW.title_names, NEW.given_name, NEW.middle_name, NEW.family_name, NEW.designations);
/*
IF (NEW.full_name_override IS NULL OR NEW.full_name_override = '')
THEN
SET NEW.full_name_override = name_for_display_name(NEW.informal_name, NEW.given_name, NEW.middle_name, NEW.family_name);
END IF;
*/
/*
IF (NEW.informal_full_name_override IS NULL OR NEW.informal_full_name_override = '')
THEN
SET NEW.informal_full_name_override = name_for_informal_display_name(NEW.informal_name, NEW.given_name, NEW.middle_name, NEW.family_name);
END IF;
*/
END
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER `before_update_person` BEFORE UPDATE ON `person` FOR EACH ROW BEGIN
BEGIN
IF (NEW.id_random IS NULL OR NEW.id_random = '' OR LENGTH(NEW.id_random) < 6)
THEN
/* SET NEW.id_random = gen_rand_pattern('3C-2N-2N-2N'); */
/* SET NEW.id_random = gen_rand_pattern('4C-2N-2N-2N'); */
SET NEW.id_random = gen_rand_str(11, 'URL');
END IF;
END;
END
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER `before_update_person_names` BEFORE UPDATE ON `person` FOR EACH ROW BEGIN
SET NEW.full_name = name_for_full_name(NEW.informal_name, NEW.title_names, NEW.given_name, NEW.middle_name, NEW.family_name, NEW.designations);
SET NEW.last_first_name = name_for_last_first_name(NEW.given_name, NEW.middle_name, NEW.family_name);
SET NEW.informal_full_name = name_for_informal_full_name(NEW.informal_name, NEW.title_names, NEW.given_name, NEW.middle_name, NEW.family_name, NEW.designations);
/*
IF (NEW.full_name_override IS NULL OR NEW.full_name_override = '')
THEN
SET NEW.full_name_override = name_for_display_name(NEW.informal_name, NEW.given_name, NEW.middle_name, NEW.family_name);
END IF;
*/
/*
IF (NEW.informal_full_name_override IS NULL OR NEW.informal_full_name_override = '')
THEN
SET NEW.informal_full_name_override = name_for_informal_display_name(NEW.informal_name, NEW.given_name, NEW.middle_name, NEW.family_name);
END IF;
*/
END
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER `person_after_delete` AFTER DELETE ON `person` FOR EACH ROW BEGIN
DELETE FROM user WHERE user.id = old.user_id;
DELETE FROM contact WHERE contact.for_id = old.id AND contact.for_type = 'person';
END
$$
DELIMITER ;
--
-- Indexes for dumped tables
--
--
-- Indexes for table `person`
--
ALTER TABLE `person`
ADD PRIMARY KEY (`id`),
ADD UNIQUE KEY `id_random` (`id_random`),
ADD KEY `account_id` (`account_id`),
ADD KEY `user_id` (`user_id`),
ADD KEY `organization_id` (`organization_id`),
ADD KEY `created_on` (`created_on`),
ADD KEY `updated_on` (`updated_on`),
ADD KEY `external_id` (`external_sys_id`),
ADD KEY `family_name` (`family_name`),
ADD KEY `given_name` (`given_name`),
ADD KEY `enable` (`enable`),
ADD KEY `priority` (`priority`),
ADD KEY `sort` (`sort`),
ADD KEY `group` (`group`);
--
-- AUTO_INCREMENT for dumped tables
--
--
-- AUTO_INCREMENT for table `person`
--
ALTER TABLE `person`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

View File

@@ -0,0 +1,128 @@
-- phpMyAdmin SQL Dump
-- version 5.2.3
-- https://www.phpmyadmin.net/
--
-- Host: localhost
-- Generation Time: Jan 06, 2026 at 06:22 PM
-- Server version: 12.1.2-MariaDB-log
-- PHP Version: 8.4.15
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- Database: `aether_dev`
--
-- --------------------------------------------------------
--
-- Table structure for table `site`
--
CREATE TABLE `site` (
`id` int(11) NOT NULL,
`id_random` varchar(22) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`code` varchar(100) DEFAULT NULL,
`account_id` int(11) DEFAULT NULL,
`name` varchar(200) NOT NULL,
`description` text DEFAULT NULL,
`restrict_access` tinyint(1) NOT NULL DEFAULT 1,
`access_key` varchar(22) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`access_code_kv_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'for super, manager, administrator, trusted, public, authenticated' CHECK (json_valid(`access_code_kv_json`)),
`enable` tinyint(1) NOT NULL DEFAULT 0,
`enable_from` datetime DEFAULT NULL,
`enable_to` datetime DEFAULT NULL,
`logo_path` varchar(200) DEFAULT NULL,
`logo_bg_color` varchar(25) DEFAULT NULL,
`background_image_path` varchar(200) DEFAULT NULL,
`background_bg_color` varchar(25) DEFAULT NULL,
`site_menu_html_path` varchar(200) DEFAULT NULL COMMENT 'path to html file for site menu',
`site_menu` text DEFAULT NULL COMMENT 'not currently used; but want to use',
`title` varchar(200) DEFAULT NULL,
`header_html` text DEFAULT NULL,
`header_css` text DEFAULT NULL,
`header_image_path` varchar(200) DEFAULT NULL,
`header_image_bg_color` varchar(25) DEFAULT NULL,
`body_html` text DEFAULT NULL,
`tagline` text DEFAULT NULL COMMENT 'catchphrase or slogan',
`site_header_h1` text DEFAULT NULL COMMENT 'field not currently used',
`site_header_h2` text DEFAULT NULL COMMENT 'field not currently used',
`style_href` varchar(200) DEFAULT NULL,
`script_src` varchar(200) DEFAULT NULL,
`google_tracking_id` varchar(14) DEFAULT NULL,
`cfg_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '{}' COMMENT 'config in JSON format' CHECK (json_valid(`cfg_json`)),
`hide` tinyint(1) DEFAULT NULL,
`notes` text DEFAULT NULL,
`created_on` timestamp NOT NULL DEFAULT current_timestamp(),
`updated_on` timestamp NULL DEFAULT NULL ON UPDATE current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
--
-- Triggers `site`
--
DELIMITER $$
CREATE TRIGGER `before_insert_site` BEFORE INSERT ON `site` FOR EACH ROW BEGIN
BEGIN
IF (NEW.id_random IS NULL OR NEW.id_random = '' OR LENGTH(NEW.id_random) < 6)
THEN
/* SET NEW.id_random = gen_rand_pattern('3C-2N-2N-2N'); */
/* SET NEW.id_random = gen_rand_pattern('4C-2N-2N-2N'); */
SET NEW.id_random = gen_rand_str(11, 'URL');
END IF;
END;
END
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER `before_update_site` BEFORE UPDATE ON `site` FOR EACH ROW BEGIN
BEGIN
IF (NEW.id_random IS NULL OR NEW.id_random = '' OR LENGTH(NEW.id_random) < 6)
THEN
/* SET NEW.id_random = gen_rand_pattern('3C-2N-2N-2N'); */
/* SET NEW.id_random = gen_rand_pattern('4C-2N-2N-2N'); */
SET NEW.id_random = gen_rand_str(11, 'URL');
END IF;
END;
END
$$
DELIMITER ;
--
-- Indexes for dumped tables
--
--
-- Indexes for table `site`
--
ALTER TABLE `site`
ADD PRIMARY KEY (`id`),
ADD UNIQUE KEY `id_random` (`id_random`),
ADD KEY `account_id` (`account_id`),
ADD KEY `enable` (`enable`),
ADD KEY `access_key` (`access_key`),
ADD KEY `name` (`name`),
ADD KEY `created_on` (`created_on`),
ADD KEY `updated_on` (`updated_on`);
--
-- AUTO_INCREMENT for dumped tables
--
--
-- AUTO_INCREMENT for table `site`
--
ALTER TABLE `site`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

View File

@@ -0,0 +1,104 @@
-- phpMyAdmin SQL Dump
-- version 5.2.3
-- https://www.phpmyadmin.net/
--
-- Host: localhost
-- Generation Time: Jan 06, 2026 at 06:22 PM
-- Server version: 12.1.2-MariaDB-log
-- PHP Version: 8.4.15
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- Database: `aether_dev`
--
-- --------------------------------------------------------
--
-- Table structure for table `site_domain`
--
CREATE TABLE `site_domain` (
`id` int(11) NOT NULL,
`id_random` varchar(22) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
`site_id` int(11) NOT NULL,
`fqdn` varchar(200) NOT NULL,
`access_key` varchar(22) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`required_referrer` varchar(200) DEFAULT NULL,
`valid_for` int(11) DEFAULT NULL COMMENT 'number of hours to allow before checking again',
`enable` tinyint(1) DEFAULT 1,
`created_on` timestamp NOT NULL DEFAULT current_timestamp(),
`updated_on` timestamp NULL DEFAULT NULL ON UPDATE current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
--
-- Triggers `site_domain`
--
DELIMITER $$
CREATE TRIGGER `before_insert_site_domain` BEFORE INSERT ON `site_domain` FOR EACH ROW BEGIN
BEGIN
IF (NEW.id_random IS NULL OR NEW.id_random = '' OR LENGTH(NEW.id_random) < 6)
THEN
/* SET NEW.id_random = gen_rand_pattern('3C-2N-2N-2N'); */
/* SET NEW.id_random = gen_rand_pattern('4C-2N-2N-2N'); */
SET NEW.id_random = gen_rand_str(11, 'URL');
END IF;
END;
END
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER `before_update_site_domain` BEFORE UPDATE ON `site_domain` FOR EACH ROW BEGIN
BEGIN
IF (NEW.id_random IS NULL OR NEW.id_random = '' OR LENGTH(NEW.id_random) < 6)
THEN
/* SET NEW.id_random = gen_rand_pattern('3C-2N-2N-2N'); */
/* SET NEW.id_random = gen_rand_pattern('4C-2N-2N-2N'); */
SET NEW.id_random = gen_rand_str(11, 'URL');
END IF;
END;
END
$$
DELIMITER ;
--
-- Indexes for dumped tables
--
--
-- Indexes for table `site_domain`
--
ALTER TABLE `site_domain`
ADD PRIMARY KEY (`id`),
ADD UNIQUE KEY `id_random` (`id_random`),
ADD KEY `fqdn` (`fqdn`),
ADD KEY `access_key` (`access_key`),
ADD KEY `required_referrer` (`required_referrer`),
ADD KEY `site_id` (`site_id`),
ADD KEY `enable` (`enable`),
ADD KEY `created_on` (`created_on`),
ADD KEY `updated_on` (`updated_on`);
--
-- AUTO_INCREMENT for dumped tables
--
--
-- AUTO_INCREMENT for table `site_domain`
--
ALTER TABLE `site_domain`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

View File

@@ -0,0 +1,163 @@
-- phpMyAdmin SQL Dump
-- version 5.2.3
-- https://www.phpmyadmin.net/
--
-- Host: localhost
-- Generation Time: Jan 06, 2026 at 06:23 PM
-- Server version: 12.1.2-MariaDB-log
-- PHP Version: 8.4.15
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- Database: `aether_dev`
--
-- --------------------------------------------------------
--
-- Table structure for table `user`
--
CREATE TABLE `user` (
`id` int(11) NOT NULL,
`id_random` varchar(22) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT 'NULL',
`account_id` int(11) DEFAULT NULL,
`contact_id` int(11) DEFAULT NULL COMMENT 'no longer going to be used',
`organization_id` int(11) DEFAULT NULL COMMENT 'no longer going to be used',
`person_id` int(11) DEFAULT NULL COMMENT 'no longer going to be used',
`username` varchar(100) NOT NULL,
`name` varchar(100) DEFAULT NULL,
`email` varchar(254) NOT NULL,
`email_verified` tinyint(1) NOT NULL DEFAULT 0,
`password` varchar(100) DEFAULT NULL,
`allow_auth_key` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'allow use of auth key to sign in',
`auth_key` varchar(22) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'auth key for single use log in',
`enable` tinyint(1) NOT NULL DEFAULT 0,
`enable_from` datetime DEFAULT current_timestamp(),
`enable_to` datetime DEFAULT NULL,
`super` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'Super user for the entire system. Can do everything.',
`manager` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'Manager for the entire system. Can do almost everything.',
`administrator` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'Administrator for a client account. Can do almost anything within that account.',
`public` tinyint(1) NOT NULL DEFAULT 1 COMMENT 'public or shared account',
`verified` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'Is this a verified user account?',
`level` int(11) DEFAULT NULL COMMENT 'access level (1 to 5)',
`status_id` int(11) DEFAULT NULL COMMENT 'offline, away, dnd, online',
`password_set_on` timestamp NOT NULL DEFAULT current_timestamp(),
`password_reset_token` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`password_reset_expire_on` datetime DEFAULT NULL,
`logged_in_on` timestamp NULL DEFAULT NULL,
`last_activity_on` timestamp NULL DEFAULT NULL,
`hide` tinyint(1) DEFAULT NULL,
`priority` tinyint(1) DEFAULT NULL,
`sort` int(11) DEFAULT NULL COMMENT 'used as access level',
`group` varchar(100) DEFAULT NULL COMMENT 'used as access group',
`notes` text DEFAULT NULL,
`other_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`other_json`)),
`created_on` timestamp NOT NULL DEFAULT current_timestamp(),
`updated_on` timestamp NULL DEFAULT NULL ON UPDATE current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='The user account.';
--
-- Triggers `user`
--
DELIMITER $$
CREATE TRIGGER `after_insert_user_person_id` AFTER INSERT ON `user` FOR EACH ROW BEGIN
IF (NEW.person_id IS NOT NULL)
THEN
UPDATE person SET person.user_id = NEW.id WHERE person.id = NEW.person_id AND person.user_id IS NULL;
END IF;
END
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER `after_update_user_person_id` AFTER UPDATE ON `user` FOR EACH ROW BEGIN
IF (NEW.person_id IS NOT NULL AND OLD.person_id IS NULL)
THEN
UPDATE person SET person.user_id = NEW.id WHERE person.id = NEW.person_id AND person.user_id IS NULL;
END IF;
END
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER `before_insert_user` BEFORE INSERT ON `user` FOR EACH ROW BEGIN
BEGIN
IF (NEW.id_random IS NULL OR NEW.id_random = '' OR LENGTH(NEW.id_random) < 6)
THEN
/* SET NEW.id_random = gen_rand_pattern('3C-2N-2N-2N'); */
/* SET NEW.id_random = gen_rand_pattern('4C-2N-2N-2N'); */
SET NEW.id_random = gen_rand_str(11, 'URL');
END IF;
END;
END
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER `before_update_user` BEFORE UPDATE ON `user` FOR EACH ROW BEGIN
BEGIN
IF (NEW.id_random IS NULL OR NEW.id_random = '' OR LENGTH(NEW.id_random) < 6)
THEN
/* SET NEW.id_random = gen_rand_pattern('3C-2N-2N-2N'); */
/* SET NEW.id_random = gen_rand_pattern('4C-2N-2N-2N'); */
SET NEW.id_random = gen_rand_str(11, 'URL');
END IF;
END;
END
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER `before_update_user_email` BEFORE UPDATE ON `user` FOR EACH ROW BEGIN
IF (NEW.username IS NULL OR NEW.username = '')
THEN
SET NEW.username = NEW.email;
SET NEW.notes = CONCAT(COALESCE(`NEW`.`notes`,''), ';;sys::overide empty username');
END IF;
END
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER `update_password_set_on` BEFORE UPDATE ON `user` FOR EACH ROW IF NEW.password <> OLD.password THEN SET NEW.password_set_on = CURRENT_TIMESTAMP; END IF
$$
DELIMITER ;
--
-- Indexes for dumped tables
--
--
-- Indexes for table `user`
--
ALTER TABLE `user`
ADD PRIMARY KEY (`id`),
ADD UNIQUE KEY `id_random` (`id_random`),
ADD KEY `username` (`username`) USING BTREE,
ADD KEY `account_id` (`account_id`),
ADD KEY `email` (`email`),
ADD KEY `email_2` (`email`),
ADD KEY `created_on` (`created_on`),
ADD KEY `updated_on` (`updated_on`),
ADD KEY `enable` (`enable`),
ADD KEY `name` (`name`);
--
-- AUTO_INCREMENT for dumped tables
--
--
-- AUTO_INCREMENT for table `user`
--
ALTER TABLE `user`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;