diff --git a/lib/integrations/notion/processor_service.rb b/lib/integrations/notion/processor_service.rb index 8a071ba8d..6eef58b08 100644 --- a/lib/integrations/notion/processor_service.rb +++ b/lib/integrations/notion/processor_service.rb @@ -5,27 +5,63 @@ class Integrations::Notion::ProcessorService response = notion_client.search(query, sort) return { error: response[:error] } if response[:error] - response['results'].map(&:as_json) + response['results'].map { |page| format_page(page) } end def page(page_id) response = notion_client.page(page_id) return { error: response[:error] } if response[:error] - response.as_json + format_page(response) end def page_md(page_id) + # Get page metadata + page_data = page(page_id) + return page_data if page_data[:error] + # Get page content blocks blocks_response = notion_client.page_blocks(page_id) return { error: blocks_response[:error] } if blocks_response[:error] # Convert blocks to markdown - NotionToMarkdown.new.convert(blocks_response['results']) + content_md = NotionToMarkdown.new.convert(blocks_response['results']) + title_md = page_data['title'] ? "# #{page_data['title']}\n\n" : '' + + # Add markdown to page data + page_data.merge('md' => "#{title_md}#{content_md}") end private + def format_page(page_response) + { + 'id' => page_response['id'], + 'icon' => page_response['icon'], + 'title' => extract_page_title(page_response), + 'created_time' => page_response['created_time'], + 'last_edited_time' => page_response['last_edited_time'], + '_raw' => page_response + } + end + + def page_title(page_id) + page_response = notion_client.page(page_id) + return nil if page_response[:error] + + extract_page_title(page_response) + end + + def extract_page_title(page_response) + # Try to get title from properties (for database pages) + if page_response['properties'] + title_property = page_response['properties'].values.find { |prop| prop['type'] == 'title' } + return title_property['title'].map { |t| t['plain_text'] }.join if title_property && title_property['title']&.any? + end + + nil + end + def notion_hook @notion_hook ||= account.hooks.find_by!(app_id: 'notion') end @@ -33,4 +69,4 @@ class Integrations::Notion::ProcessorService def notion_client @notion_client ||= Notion.new(notion_hook.access_token) end -end \ No newline at end of file +end