# Platter Database Schema Documentation ## Overview 1. `pla_organization`: This table stores information about various organizations that are using the platform. It includes fields for the organization's unique identifier (`id`), name (`name`), and status (`status`). The status can be 'new', 'approved', or 'disapproved'. Timestamp fields track when each record was created and last updated, and if it was deleted. 2. `pla_division`: Each organization can have multiple divisions, and information about these is stored in the `pla_division` table. It includes fields for the division's unique identifier (`id`), name (`name`), and description (`description`). It also has fields referencing the organization (`organizationId`) and parent division (`parentId`) the division belongs to. Similar to `pla_organization`, timestamp fields are included. 3. `pla_users`: This table stores information about the users of the platform. It includes fields for the user's unique identifier (`id`), name (`name`), username (`username`), password (`password`), email (`email`), phone (`phone`), and status (`status`). The user's role (`roles`) in the system is stored as well, which can be 'user', 'super-admin', 'admin', or 'trial'. Each user is associated with an organization (`organizationId`) and a division (`divisionId`). 4. `pla_integrations`: This table stores information about various platform integrations, such as Google Drive, OneDrive, Notion, and Confluence. It includes fields for the integration's unique identifier (`id`), account name (`account_name`), pivot method (`pivot_method`), and pivot (`pivot`). The type of integration (`type_integrations`), link status (`link_status`), and index status (`index_status`) are also stored. 5. `pla_documents`: This table stores data related to documents on the platform. Each document has a unique identifier (`id`), name (`document_name`), document id (`document_id`), MIME type (`document_mime`), and URI (`document_uri`). The document's modification time (`document_modified_time`) and status (`document_status`) are also tracked. 6. `pla_pivot_integration_documents`: This table establishes a many-to-many relationship between the `pla_integrations` and `pla_documents` tables. Each record includes the unique identifier of an integration (`id_integration`) and a document (`id_document`). 7. `pla_document_permissions`: This table stores information about the permissions associated with each document. It includes the unique identifier for a permission (`id_permission`), the associated document id (`id_document`), the type of permission (`tipe`), the pivot (`pivot`), and the user's role in relation to the document (`user_role_document`). 8. `pla_pivot_user_integrations` and `pla_pivot_org_integrations`: These tables establish many-to-many relationships between users and integrations, and organizations and integrations respectively. 9. `pla_conversations` and `pla_messages`: These tables store data related to conversations between users. `pla_conversations` includes a record for each conversation, while `pla_messages` includes a record for each message within a conversation. 10. `pla_graph_messages`: This table stores data related to graphical messages. Each record includes the unique identifier of a message (`id_message`), the type of graph (`graph_type`), and the graph data (`graph_json`). ## Tables 1. `pla_organization` Stores data related to organizations. | Column | Type | Description | |---|---|---| | `id` | UUID | The unique identifier for an organization. | | `name` | character varying(255) | The name of the organization. | | `status` | character varying(255) | The status of the organization. Can be 'new', 'approved', or 'disapproved'. | | `createdAt` | timestamp with time zone | The time at which the organization was created. | | `updatedAt` | timestamp with time zone | The time at which the organization was last updated. | | `deletedAt` | timestamp with time zone | The time at which the organization was deleted. | | `owned_by` | UUID | The ID of the user who owns the organization. References `pla_users(id)`. | 2. `pla_division` Stores data related to divisions within organizations. | Column | Type | Description | |---|---|---| | `id` | UUID | The unique identifier for a division. | | `name` | character varying(255) | The name of the division. | | `description` | character varying(255) | The description of the division. | | `organizationId` | UUID | The ID of the organization that the division belongs to. References `pla_organization(id)`. | | `childId` | UUID | The ID of the child division. References `pla_division(id)`. | | `parentId` | UUID | The ID of the parent division. References `pla_division(id)`. | | `createdAt` | timestamp with time zone | The time at which the division was created. | | `updatedAt` | timestamp with time zone | The time at which the division was last updated. | | `deletedAt` | timestamp with time zone | The time at which the division was deleted. | | `owned_by` | UUID | The ID of the user who owns the division. References `pla_users(id)`. | 3. `pla_users` Stores data related to users. | Column | Type | Description | |---|---|---| | `id` | UUID | The unique identifier for a user. | | `name` | character varying(255) | The name of the user. | | `username` | character varying(255) | The username of the user. | | `password` | character varying(255) | The password of the user. | | `email` | character varying(255) | The email of the user. | | `phone` | character varying(255) | The phone number of the user. | | `status` | character varying(255) | The status of the user. Default is 'new'. | | `avatar_url` | character varying(255) | The URL of the user's avatar. | | `roles` | character varying(255) | The role of the user. Can be 'user', 'super-admin', 'admin', or 'trial'. | | `organizationId` | UUID | The ID of the organization that the user belongs to. References `pla_organization(id)`. | | `divisionId` | UUID | The ID of the division that the user belongs to. References `pla_division(id)`. | | `createdAt` | timestamp with time zone | The time at which the user was created. | | `updatedAt` | timestamp with time zone | The time at which the user was last updated. | | `deletedAt` | timestamp with time zone | The time at which the user was deleted. | 4. `pla_integrations` Stores data related to various integrations. | Column | Type | Description | |---|---|---| | `id` | UUID | The unique identifier for an integration. | | `account_name` | character varying(255) | The name of the account associated with the integration. | | `pivot_method` | character varying(255) | The pivot method for the integration. | | `pivot` | character varying(255) | The pivot for the integration. | | `type_integrations` | character varying(255) | The type of integration. Can be 'google-drive', 'one-drive', 'notion', or 'confluence'. | | `link_status` | character varying(255) | The status of the link. Can be 'new', 'processing', 'connected', 'failed', or 'revoked'. | | `index_status` | character varying(255) | The status of the index. Can be 'new', 'processing', 'indexed', or 'failed'. | | `credential_platform` | jsonb | The credentials for the platform. | | `createdAt` | timestamp with time zone | The time at which the integration was created. | | `updatedAt` | timestamp with time zone | The time at which the integration was last updated. | | `deletedAt` | timestamp with time zone | The time at which the integration was deleted. | 5. `pla_documents` Stores data related to documents. | Column | Type | Description | |---|---|---| | `id` | UUID | The unique identifier for a document. | | `document_name` | character varying(255) | The name of the document. | | `document_id` | character varying(255) | The ID of the document. | | `document_mime` | character varying(255) | The MIME type of the document. | | `document_uri` | character varying(255) | The URI of the document. | | `document_modified_time` | character varying(255) | The time at which the document was last modified. | | `document_status` | character varying(255) | The status of the document. Can be 'new', 'processing', 'indexed', 'failed', or 'unsupported'. | | `createdAt` | timestamp with time zone | The time at which the document was created. | | `updatedAt` | timestamp with time zone | The time at which the document was last updated. | | `deletedAt` | timestamp with time zone | The time at which the document was deleted. | ... and so on for the rest of the tables. The pattern is similar: each table has an `id` as primary key, and various other fields storing different types of information related to the entity the table represents. Most tables also have `createdAt`, `updatedAt`, and `deletedAt` fields to track when each record was created, last updated, and deleted. ## Indexes Indexes are created for various fields to speed up searches on those fields. The pattern for creating an index is: `CREATE INDEX index_name ON table_name (column_name);`. Indexes have been created for fields that are likely to be used in queries, such as names, statuses,