package models import ( "apskel-pos-be/internal/constants" "time" "github.com/google/uuid" ) type Organization struct { ID uuid.UUID Name string Email *string PhoneNumber *string PlanType constants.PlanType CreatedAt time.Time UpdatedAt time.Time } // CreateOrganizationRequest contains both organization and admin user attributes type CreateOrganizationRequest struct { // Organization attributes OrganizationName string `validate:"required,min=1,max=255"` OrganizationEmail *string `validate:"omitempty,email"` OrganizationPhoneNumber *string `validate:"omitempty"` PlanType constants.PlanType `validate:"required"` // Admin user attributes AdminName string `validate:"required,min=1,max=255"` AdminEmail string `validate:"required,email"` AdminPassword string `validate:"required,min=6"` // Default outlet attributes OutletName string `validate:"required,min=1,max=255"` OutletAddress *string OutletTimezone *string OutletCurrency string `validate:"required,len=3"` } type UpdateOrganizationRequest struct { Name *string `validate:"omitempty,min=1,max=255"` Email *string `validate:"omitempty,email"` PhoneNumber *string `validate:"omitempty"` PlanType *constants.PlanType } type OrganizationResponse struct { ID uuid.UUID Name string Email *string PhoneNumber *string PlanType constants.PlanType CreatedAt time.Time UpdatedAt time.Time } // CreateOrganizationResponse contains the created organization, admin user, and default outlet type CreateOrganizationResponse struct { Organization *OrganizationResponse `json:"organization"` AdminUser *UserResponse `json:"admin_user"` DefaultOutlet *OutletResponse `json:"default_outlet"` } // Outlet response for the creation response type OutletResponse struct { ID uuid.UUID `json:"id"` OrganizationID uuid.UUID `json:"organization_id"` Name string `json:"name"` Address *string `json:"address"` Timezone *string `json:"timezone"` Currency string `json:"currency"` TaxRate float64 `json:"tax_rate"` IsActive bool `json:"is_active"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` }