# `PhoenixKit.Migrations.Postgres.V29`
[🔗](https://github.com/BeamLabEU/phoenix_kit/blob/v1.7.87/lib/phoenix_kit/migrations/postgres/v29.ex#L1)

PhoenixKit V29 Migration: Posts System

Adds complete social posts system with media attachments, comments, likes,
tags, user groups, and scheduled publishing.

## Changes

### Posts Table (phoenix_kit_posts)
- Main posts storage with type-specific layouts (post/snippet/repost)
- Privacy controls (draft/public/unlisted/scheduled)
- Denormalized counters for performance (likes, comments, views)
- SEO-friendly slugs
- Scheduled publishing support

### Post Media Junction (phoenix_kit_post_media)
- Many-to-many between posts and files (Storage system)
- Ordered image galleries with captions
- Position-based ordering

### Post Likes (phoenix_kit_post_likes)
- User likes on posts
- Unique constraint per user/post

### Post Comments (phoenix_kit_post_comments)
- Nested threaded comments (unlimited depth)
- Self-referencing for comment threads
- Depth tracking for efficient queries

### Post Mentions (phoenix_kit_post_mentions)
- Tag users as contributors/mentions
- Unique per user/post

### Post Tags (phoenix_kit_post_tags)
- Hashtag system for categorization
- Auto-slugification
- Usage counter tracking

### Post Tag Assignments (phoenix_kit_post_tag_assignments)
- Many-to-many between posts and tags

### Post Groups (phoenix_kit_post_groups)
- User-created collections (Pinterest-style)
- Public/private visibility
- Cover images
- Manual ordering

### Post Group Assignments (phoenix_kit_post_group_assignments)
- Many-to-many between posts and groups
- Position-based ordering within groups

### Post Views (phoenix_kit_post_views)
- Analytics tracking (future feature)
- Session-based deduplication

## Settings

- Content limits: max media, title length, subtitle length, content length, mentions, tags
- Module config: enabled, per-page, default status
- Feature toggles: comments, likes, scheduling, groups, reposts, SEO, view counts
- Moderation: require approval, comment moderation

## Features

- UUIDv7 primary keys for time-sortable IDs
- Comprehensive indexes for efficient queries
- Foreign key constraints for data integrity
- Denormalized counters to avoid expensive COUNT queries
- Support for scheduled publishing via Oban
- Type-specific post layouts

# `down`

Rollback the V29 migration.

# `up`

Run the V29 migration to add posts system.

---

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