# `Parrhesia.Storage.Partitions`

Partition lifecycle helpers for Postgres `events` and `event_tags` monthly partitions.

# `monthly_partition`

```elixir
@type monthly_partition() :: %{
  name: String.t(),
  year: pos_integer(),
  month: pos_integer(),
  month_start_unix: non_neg_integer(),
  month_end_unix: non_neg_integer()
}
```

# `database_size_bytes`

```elixir
@spec database_size_bytes() :: {:ok, non_neg_integer()} | {:error, term()}
```

Returns the current database size in bytes.

# `drop_partition`

```elixir
@spec drop_partition(String.t()) :: :ok | {:error, term()}
```

Drops an event partition table by name.

For monthly `events_YYYY_MM` partitions, the matching `event_tags_YYYY_MM`
partition is dropped first to keep partition lifecycle aligned.

# `ensure_monthly_partitions`

```elixir
@spec ensure_monthly_partitions(keyword()) :: :ok | {:error, term()}
```

Ensures monthly partitions exist for the current month and `months_ahead` future months.

# `event_tags_month_partition_name`

```elixir
@spec event_tags_month_partition_name(Date.t()) :: String.t()
```

Returns the monthly `event_tags` partition name for a date.

# `list_monthly_partitions`

```elixir
@spec list_monthly_partitions() :: [monthly_partition()]
```

Lists monthly event partitions that match `events_YYYY_MM` naming.

# `list_partitions`

```elixir
@spec list_partitions() :: [String.t()]
```

Lists all `events_*` partitions excluding the default partition.

# `month_partition_name`

```elixir
@spec month_partition_name(Date.t()) :: String.t()
```

Returns the monthly `events` partition name for a date.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
