PhoenixKitDocumentCreator.GoogleDocsClient
(PhoenixKitDocumentCreator v0.2.8)
Copy Markdown
View Source
Google Docs and Drive API client for the Document Creator module.
This module provides direct Google Drive and Docs API access without touching the local database. Use it when you need raw Drive operations: creating files, listing folders, moving files, exporting PDFs, reading document content, and substituting template variables.
For combined Drive + DB operations, use PhoenixKitDocumentCreator.Documents.
Capabilities
- Folders:
find_folder_by_name/2,create_folder/2,find_or_create_folder/2,ensure_folder_path/2,discover_folders/0,list_subfolders/1 - Files:
list_folder_files/1,move_file/2,copy_file/3,create_document/2 - Docs:
get_document/1,get_document_text/1,batch_update/2,replace_all_text/2 - Export:
export_pdf/1,fetch_thumbnail/1 - Status:
file_status/1,file_location/1 - URLs:
get_edit_url/1,get_folder_url/1
OAuth credentials and tokens are managed by PhoenixKit.Integrations
under the "google" provider. Folder configuration is stored separately
under the "document_creator_folders" settings key.
Summary
Functions
Returns the active provider key, including connection slug if configured.
Send a batchUpdate request to a Google Doc.
Check if connected. Returns {:ok, %{email: email}} or {:error, reason}.
Copy a file in Google Drive. Returns the new file's ID.
Create a new blank Google Doc in a specific folder.
Create a folder in Google Drive. Optionally specify a parent folder.
Returns {:ok, folder_id}.
Discover templates, documents, and deleted folder IDs. Looks for folders by name in Drive root, creating them if they don't exist. Caches results in Settings.
Walk a path like "clients/active/templates", creating folders as needed.
Returns {:ok, leaf_folder_id}.
Export a Google Doc as PDF. Returns {:ok, pdf_binary}.
Fetch a document thumbnail as a base64 data URI via the Drive API.
Resolve the current parent folder and path for a Drive file.
Fetch Google Drive file metadata needed for sync classification.
Find a folder by name, optionally within a parent folder.
Returns {:ok, folder_id} or {:error, :not_found}.
Find a folder by name, or create it if it doesn't exist.
Optionally specify a parent folder.
Returns {:ok, folder_id}.
The Settings key used for folder configuration.
Get stored OAuth credentials via PhoenixKit.Integrations.
Read a Google Doc's full content.
Extract plain text content from a Google Doc (for variable detection).
Get the edit URL for a Google Doc.
Get configured folder paths and names from Settings, with defaults.
Get cached folder IDs from Settings, or discover them.
Get the Google Drive folder URL.
List Google Docs directly in a Drive folder (non-recursive, fully paginated).
List subfolders within a parent folder (non-recursive, fully paginated).
Returns {:ok, [%{"id" => ..., "name" => ...}]}.
Move a file to a different folder in Google Drive.
Replace all {{variable}} placeholders in a Google Doc.
Keys are wrapped in {{ }} automatically.
Validate a Google Drive file/folder ID. Returns {:ok, id} or {:error, :invalid_file_id}.
Functions
@spec active_provider_key() :: String.t()
Returns the active provider key, including connection slug if configured.
Send a batchUpdate request to a Google Doc.
Check if connected. Returns {:ok, %{email: email}} or {:error, reason}.
@spec copy_file(String.t(), String.t(), keyword()) :: {:ok, String.t()} | {:error, :invalid_file_id | :copy_failed | term()}
Copy a file in Google Drive. Returns the new file's ID.
@spec create_document( String.t(), keyword() ) :: {:ok, %{doc_id: String.t(), name: String.t(), url: String.t() | nil}} | {:error, :create_document_failed | term()}
Create a new blank Google Doc in a specific folder.
@spec create_folder( String.t(), keyword() ) :: {:ok, String.t()} | {:error, :create_folder_failed | term()}
Create a folder in Google Drive. Optionally specify a parent folder.
Returns {:ok, folder_id}.
@spec discover_folders() :: %{ templates_folder_id: String.t() | nil, documents_folder_id: String.t() | nil, deleted_templates_folder_id: String.t() | nil, deleted_documents_folder_id: String.t() | nil }
Discover templates, documents, and deleted folder IDs. Looks for folders by name in Drive root, creating them if they don't exist. Caches results in Settings.
Walk a path like "clients/active/templates", creating folders as needed.
Returns {:ok, leaf_folder_id}.
@spec export_pdf(String.t()) :: {:ok, binary()} | {:error, :invalid_file_id | :pdf_export_failed | term()}
Export a Google Doc as PDF. Returns {:ok, pdf_binary}.
@spec fetch_thumbnail(term()) :: {:ok, String.t()} | {:error, :no_doc_id | :no_thumbnail | :thumbnail_link_failed | :thumbnail_fetch_failed | :invalid_file_id | term()}
Fetch a document thumbnail as a base64 data URI via the Drive API.
@spec file_location(term()) :: {:ok, %{folder_id: String.t(), path: String.t(), trashed: boolean()}} | {:error, :invalid_file_id | :not_found | term()}
Resolve the current parent folder and path for a Drive file.
@spec file_status(term()) :: {:ok, %{trashed: boolean(), parents: [String.t()]}} | {:ok, :not_found} | {:error, :invalid_file_id | term()}
Fetch Google Drive file metadata needed for sync classification.
@spec find_folder_by_name( String.t(), keyword() ) :: {:ok, String.t()} | {:error, :not_found | :folder_search_failed | term()}
Find a folder by name, optionally within a parent folder.
Returns {:ok, folder_id} or {:error, :not_found}.
Find a folder by name, or create it if it doesn't exist.
Optionally specify a parent folder.
Returns {:ok, folder_id}.
@spec folder_settings_key() :: String.t()
The Settings key used for folder configuration.
Get stored OAuth credentials via PhoenixKit.Integrations.
Read a Google Doc's full content.
Extract plain text content from a Google Doc (for variable detection).
Get the edit URL for a Google Doc.
@spec get_folder_config() :: map()
Get configured folder paths and names from Settings, with defaults.
@spec get_folder_ids() :: map()
Get cached folder IDs from Settings, or discover them.
Get the Google Drive folder URL.
List Google Docs directly in a Drive folder (non-recursive, fully paginated).
Returns {:ok, [%{"id" => ..., "name" => ..., "modifiedTime" => ..., "thumbnailLink" => ..., "parents" => [...]}]}.
For recursive traversal across subfolders, use
PhoenixKitDocumentCreator.GoogleDocsClient.DriveWalker.walk_tree/2.
List subfolders within a parent folder (non-recursive, fully paginated).
Returns {:ok, [%{"id" => ..., "name" => ...}]}.
@spec move_file(String.t(), String.t()) :: :ok | {:error, :invalid_file_id | :move_failed | :get_file_parents_failed | term()}
Move a file to a different folder in Google Drive.
Replace all {{variable}} placeholders in a Google Doc.
Keys are wrapped in {{ }} automatically.
Validate a Google Drive file/folder ID. Returns {:ok, id} or {:error, :invalid_file_id}.