Skip to content

Conversation

@sbafsk
Copy link
Collaborator

@sbafsk sbafsk commented Dec 1, 2025

Phase 3: Content Management

This PR implements the complete content management system including services, team, organization info, newsletter, and contact forms.

🎯 Components Implemented

Entities:

  • Service entity (with ElementCollection details)
  • TeamCommission & TeamMember entities
  • Milestone & Partnership entities
  • NewsletterSubscription entity (with confirmation workflow)
  • ContactMessage entity (with status workflow)

API Endpoints:

Public:

  • GET /api/v1/services - List services
  • GET /api/v1/team/commissions - List commissions
  • GET /api/v1/team/members - List members
  • GET /api/v1/organization/milestones - List milestones
  • GET /api/v1/organization/partnerships - List partnerships
  • POST /api/v1/newsletter/subscribe - Subscribe
  • GET /api/v1/newsletter/confirm/{token} - Confirm subscription
  • POST /api/v1/contact - Send message

Admin:

  • Full CRUD for all content types
  • Newsletter subscription management
  • Contact message workflow (read, respond, archive)

Features:

  • Services with ordered details list
  • Team commission-member relationships
  • Newsletter double opt-in (UUID tokens)
  • Contact message states (NEW, READ, RESPONDED, ARCHIVED)
  • Partnership categorization
  • Display ordering for all content
  • Duplicate subscription prevention

Database:

  • Flyway migration V4
  • 7 tables with proper relationships
  • service_details as ElementCollection

📊 Files Changed

41 files added:

  • 7 entities
  • 14 DTOs (7 request, 7 response)
  • 7 repositories
  • 5 services
  • 5 controllers
  • 1 exception
  • 1 Flyway migration
  • 1 completion doc

✅ Checklist

  • Services CRUD
  • Team management
  • Organization info
  • Newsletter workflow
  • Contact form
  • Status workflows
  • Token generation

Ready for review and merge to phase-2

Implement complete content management system including services, team, organization info, newsletter, and contact forms.

## Components Implemented

### Entities
- Service entity with details (ElementCollection) and ordering
- TeamCommission entity with commission information
- TeamMember entity with member details and roles (TITULAR, SUPLENTE)
- Milestone entity for organization history
- Partnership entity with categories (REGULATORY_AUTHORITY, INTERNATIONAL_NETWORK, UNIVERSITY, RESEARCH_PARTNER)
- NewsletterSubscription entity with confirmation tokens and status
- ContactMessage entity with status workflow

### API Endpoints
#### Public
- GET /api/v1/services - List active services
- GET /api/v1/team/commissions - List commissions
- GET /api/v1/team/members - List team members
- GET /api/v1/organization/milestones - List milestones
- GET /api/v1/organization/partnerships - List partnerships (with category filter)
- POST /api/v1/newsletter/subscribe - Subscribe to newsletter
- GET /api/v1/newsletter/confirm/{token} - Confirm subscription
- POST /api/v1/newsletter/unsubscribe - Unsubscribe
- POST /api/v1/contact - Send contact message

#### Admin
- Full CRUD for services, team, organization content
- GET /api/v1/newsletter/subscriptions - List subscriptions (with status filter)
- GET /api/v1/contact/messages - List messages (with status filter)
- Contact message management (read, respond, archive, delete)

### Services
- ServiceService with CRUD operations
- TeamService with commission and member management
- OrganizationService for milestones and partnerships
- NewsletterService with subscription workflow
- ContactService with message management

### Features
- Services with ordered details list
- Team commission-member relationships
- Newsletter double opt-in (confirmation token)
- Newsletter subscription states (PENDING, ACTIVE, UNSUBSCRIBED)
- Contact message workflow (NEW, READ, RESPONDED, ARCHIVED)
- Duplicate subscription prevention
- Partnership categorization
- Display ordering for all content types

### Database
- Flyway migration V4 (all content tables)
- service_details as ElementCollection
- Proper indexes and foreign keys
- UUID tokens for newsletter confirmation

## Technical Details
- All content supports active/inactive states
- Display order field for sortable content
- Newsletter tokens for secure confirmation
- Contact message response notes
- Cascade operations for commission-member relationships

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants