feat: add Party management API with RESTful endpoints and comprehensive documentation
- Introduce Party model with lifecycle states (draft, published, canceled, sold_out) - Add RESTful API endpoints under /api/v1/parties for CRUD operations - Create ApiController base with API key authentication - Implement comprehensive code comments across models and controllers - Add database migration for parties table with proper indexes - Configure API routes with namespaced versioning
This commit is contained in:
@@ -1,3 +1,6 @@
|
||||
# Base class for all ActiveRecord models in the application
|
||||
# Provides common functionality and configuration for all models
|
||||
class ApplicationRecord < ActiveRecord::Base
|
||||
# Mark this as the primary abstract class to establish inheritance hierarchy
|
||||
primary_abstract_class
|
||||
end
|
||||
|
||||
40
app/models/party.rb
Normal file
40
app/models/party.rb
Normal file
@@ -0,0 +1,40 @@
|
||||
# Party model representing nightlife events and parties
|
||||
# Manages event details, location data, and publication state
|
||||
class Party < ApplicationRecord
|
||||
# Define states for party lifecycle management
|
||||
# draft: Initial state when party is being created
|
||||
# published: Party is visible to public and can be discovered
|
||||
# canceled: Party has been canceled by organizer
|
||||
# sold_out: Party has reached capacity and tickets are no longer available
|
||||
enum state: {
|
||||
draft: 0,
|
||||
published: 1,
|
||||
canceled: 2,
|
||||
sold_out: 3
|
||||
}, default: :draft
|
||||
|
||||
# Validations for party attributes
|
||||
# Basic information
|
||||
validates :name, presence: true, length: { minimum: 3, maximum: 100 }
|
||||
validates :description, presence: true, length: { minimum: 10, maximum: 1000 }
|
||||
validates :state, presence: true, inclusion: { in: states.keys }
|
||||
|
||||
# Venue information
|
||||
validates :venue_name, presence: true, length: { maximum: 100 }
|
||||
validates :venue_address, presence: true, length: { maximum: 200 }
|
||||
|
||||
# Geographic coordinates for map display
|
||||
validates :latitude, presence: true, numericality: {
|
||||
greater_than_or_equal_to: -90,
|
||||
less_than_or_equal_to: 90
|
||||
}
|
||||
validates :longitude, presence: true, numericality: {
|
||||
greater_than_or_equal_to: -180,
|
||||
less_than_or_equal_to: 180
|
||||
}
|
||||
|
||||
# Scopes for querying parties with common filters
|
||||
scope :featured, -> { where(featured: true) } # Get featured parties for homepage
|
||||
scope :published, -> { where(state: :published) } # Get publicly visible parties
|
||||
scope :search_by_name, ->(query) { where("name ILIKE ?", "%#{query}%") } # Search by name (case-insensitive)
|
||||
end
|
||||
@@ -1,6 +1,21 @@
|
||||
# User model for authentication and user management
|
||||
# Handles user accounts, authentication, and authorization using Devise
|
||||
class User < ApplicationRecord
|
||||
# Include default devise modules. Others available are:
|
||||
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
|
||||
#
|
||||
# Include default devise modules for authentication
|
||||
# :database_authenticatable - encrypts and stores password in database
|
||||
# :registerable - allows users to sign up and edit their accounts
|
||||
# :recoverable - handles password reset functionality
|
||||
# :rememberable - manages token-based user remembering
|
||||
# :validatable - provides email and password validation
|
||||
# Other available modules are:
|
||||
# :confirmable - requires email confirmation
|
||||
# :lockable - locks account after failed login attempts
|
||||
# :timeoutable - expires sessions after inactivity
|
||||
# :trackable - tracks sign-in count, timestamps, and IP
|
||||
# :omniauthable - allows authentication via OAuth providers
|
||||
devise :database_authenticatable, :registerable,
|
||||
:recoverable, :rememberable, :validatable
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user