PhoenixKit.Modules.Publishing.Storage.Helpers (phoenix_kit v1.7.62)

Copy Markdown View Source

Shared helper functions for publishing storage.

Contains audit metadata helpers, path utilities, and other common functionality used across storage modules.

Summary

Functions

Applies creation audit metadata to a metadata map. Sets both created_by and updated_by fields.

Applies update audit metadata to a metadata map. Only sets updated_by fields.

Builds updated metadata for a post update operation.

Extracts date and time from a relative path. Handles both legacy (4 parts) and versioned (5 parts) paths.

Extracts date and time from a relative path, raising on error.

Extracts language code from a path (e.g., "blog/post/en.phk" -> "en").

Floors a DateTime to the minute (sets seconds and microseconds to 0).

Formats a Time struct as a time folder string (HH:MM).

Gets slug from metadata, falling back to provided default if nil or empty.

Gets a value from metadata, checking both atom and string keys.

Parses a time folder string (HH:MM) into a Time struct.

Builds a relative path for a timestamp-mode post with language.

Builds a relative path for a versioned timestamp-mode post with language.

Resolves allow_version_access from params or existing metadata.

Resolves featured_image_uuid from params or existing metadata.

Resolves previous_url_slugs, tracking old slugs for 301 redirects. When url_slug changes, the old value is added to previous_url_slugs.

Resolves url_slug from params or existing metadata. Empty string clears the custom slug.

Functions

apply_creation_audit_metadata(metadata, audit_meta)

@spec apply_creation_audit_metadata(map(), map()) :: map()

Applies creation audit metadata to a metadata map. Sets both created_by and updated_by fields.

apply_update_audit_metadata(metadata, audit_meta)

@spec apply_update_audit_metadata(map(), map()) :: map()

Applies update audit metadata to a metadata map. Only sets updated_by fields.

build_update_metadata(post, params, audit_meta, becoming_published?)

@spec build_update_metadata(map(), map(), map(), boolean()) :: map()

Builds updated metadata for a post update operation.

date_time_from_path(path)

@spec date_time_from_path(String.t()) ::
  {:ok, {Date.t(), Time.t()}} | {:error, :invalid_path}

Extracts date and time from a relative path. Handles both legacy (4 parts) and versioned (5 parts) paths.

date_time_from_path!(path)

@spec date_time_from_path!(String.t()) :: {Date.t(), Time.t()}

Extracts date and time from a relative path, raising on error.

extract_language_from_path(relative_path)

@spec extract_language_from_path(String.t()) :: String.t()

Extracts language code from a path (e.g., "blog/post/en.phk" -> "en").

floor_to_minute(datetime)

@spec floor_to_minute(DateTime.t()) :: DateTime.t()

Floors a DateTime to the minute (sets seconds and microseconds to 0).

format_time_folder(time)

@spec format_time_folder(Time.t()) :: String.t()

Formats a Time struct as a time folder string (HH:MM).

get_slug_with_fallback(metadata, fallback)

@spec get_slug_with_fallback(map(), String.t()) :: String.t()

Gets slug from metadata, falling back to provided default if nil or empty.

metadata_value(metadata, key, fallback \\ nil)

@spec metadata_value(map(), atom(), any()) :: any()

Gets a value from metadata, checking both atom and string keys.

parse_time_folder(folder)

@spec parse_time_folder(String.t()) :: {:ok, Time.t()} | {:error, :invalid_time}

Parses a time folder string (HH:MM) into a Time struct.

relative_path_with_language(group_slug, date, time, language_code)

@spec relative_path_with_language(String.t(), Date.t(), Time.t(), String.t()) ::
  String.t()

Builds a relative path for a timestamp-mode post with language.

relative_path_with_language_versioned(group_slug, date, time, version, language_code)

@spec relative_path_with_language_versioned(
  String.t(),
  Date.t(),
  Time.t(),
  integer(),
  String.t()
) :: String.t()

Builds a relative path for a versioned timestamp-mode post with language.

resolve_allow_version_access(params, metadata)

@spec resolve_allow_version_access(map(), map()) :: boolean()

Resolves allow_version_access from params or existing metadata.

resolve_previous_url_slugs(params, metadata)

@spec resolve_previous_url_slugs(map(), map()) :: [String.t()]

Resolves previous_url_slugs, tracking old slugs for 301 redirects. When url_slug changes, the old value is added to previous_url_slugs.

resolve_url_slug(params, metadata)

@spec resolve_url_slug(map(), map()) :: String.t() | nil

Resolves url_slug from params or existing metadata. Empty string clears the custom slug.