Spaces:
Runtime error
Runtime error
| package entities | |
| import ( | |
| "time" | |
| "gorm.io/datatypes" | |
| ) | |
| const ( | |
| RoleMember = "member" | |
| RoleInstructor = "instructor" | |
| RoleVenueOwner = "venue_owner" | |
| RoleAdmin = "admin" | |
| ) | |
| type User struct { | |
| ID string `gorm:"type:uuid;primaryKey" json:"id,omitempty"` | |
| PhoneNumber string `gorm:"uniqueIndex;not null" json:"phone_number,omitempty"` | |
| Email *string `json:"email,omitempty"` | |
| PasswordHash *string `json:"password_hash,omitempty"` | |
| FullName string `json:"full_name,omitempty"` | |
| Nickname string `json:"nickname,omitempty"` | |
| Gender *string `json:"gender,omitempty"` | |
| DanceLevel *string `json:"dance_level,omitempty"` | |
| Rank *string `json:"rank,omitempty"` | |
| Province *string `json:"province,omitempty"` | |
| City *string `json:"city,omitempty"` | |
| Description *string `gorm:"type:text" json:"description,omitempty"` | |
| Interests datatypes.JSON `swaggertype:"object" json:"interests,omitempty"` | |
| OtherInterest *string `json:"other_interest,omitempty"` | |
| ProfileMedia *string `json:"profile_media,omitempty"` | |
| PrefedLanguage *string `json:"prefed_language,omitempty"` | |
| Age *int `json:"age,omitempty"` | |
| AdditionalDetails datatypes.JSON `swaggertype:"object" json:"additional_details,omitempty"` | |
| IsMember bool `json:"is_member,omitempty"` | |
| IsInstructor bool `json:"is_instructor,omitempty"` | |
| IsVO bool `json:"is_vo,omitempty"` | |
| CreatedAt time.Time `json:"created_at,omitempty"` | |
| UpdatedAt time.Time `json:"updated_at,omitempty"` | |
| Roles []UserRole `gorm:"foreignKey:UserID" json:"roles,omitempty"` | |
| } | |
| type UserRole struct { | |
| ID string `gorm:"type:uuid;primaryKey" json:"id,omitempty"` | |
| UserID string `gorm:"type:uuid;index" json:"user_id,omitempty"` | |
| Role string `gorm:"type:varchar(50)" json:"role,omitempty"` | |
| CreatedAt time.Time `json:"created_at,omitempty"` | |
| User User `gorm:"foreignKey:UserID" json:"user,omitempty"` | |
| } | |
| type Instructor struct { | |
| ID string `gorm:"type:uuid;primaryKey" json:"id,omitempty"` | |
| UserID string `gorm:"type:uuid;uniqueIndex" json:"user_id,omitempty"` | |
| Rank string `json:"rank,omitempty"` | |
| Specialization datatypes.JSON `swaggertype:"object" json:"specialization,omitempty"` | |
| Introduction datatypes.JSON `swaggertype:"object" json:"introduction,omitempty"` | |
| ProfileMedia datatypes.JSON `swaggertype:"object" json:"profile_media,omitempty"` | |
| CreatedAt time.Time `json:"created_at,omitempty"` | |
| User User `gorm:"foreignKey:UserID" json:"user,omitempty"` | |
| } | |
| type VenueOwner struct { | |
| ID string `gorm:"type:uuid;primaryKey" json:"id,omitempty"` | |
| UserID string `gorm:"type:uuid;uniqueIndex" json:"user_id,omitempty"` | |
| CreatedAt time.Time `json:"created_at,omitempty"` | |
| User User `gorm:"foreignKey:UserID" json:"user,omitempty"` | |
| } | |
| type Venue struct { | |
| ID string `gorm:"type:uuid;primaryKey" json:"id,omitempty"` | |
| OwnerID string `gorm:"type:uuid;index" json:"owner_id,omitempty"` | |
| Name string `json:"name,omitempty"` | |
| Description datatypes.JSON `swaggertype:"object" json:"description,omitempty"` | |
| Province string `json:"province,omitempty"` | |
| City string `json:"city,omitempty"` | |
| Address string `json:"address,omitempty"` | |
| Latitude float64 `json:"latitude,omitempty"` | |
| Longitude float64 `json:"longitude,omitempty"` | |
| Capacity int `json:"capacity,omitempty"` | |
| MinimumConsumption float64 `json:"minimum_consumption,omitempty"` | |
| OpeningTime string `json:"opening_time,omitempty"` | |
| ClosingTime string `json:"closing_time,omitempty"` | |
| VenueMedia datatypes.JSON `swaggertype:"object" json:"venue_media,omitempty"` | |
| VerificationStatus string `json:"verification_status,omitempty"` | |
| Facilities []Facility `gorm:"many2many:venue_facilities;" json:"facilities,omitempty"` | |
| ExtraFacilities datatypes.JSON `swaggertype:"array,string" json:"extra_facilities,omitempty"` | |
| RatingFood float64 `json:"rating_food,omitempty"` | |
| RatingPrice float64 `json:"rating_price,omitempty"` | |
| RatingMusic float64 `json:"rating_music,omitempty"` | |
| RatingSound float64 `json:"rating_sound,omitempty"` | |
| RatingParking float64 `json:"rating_parking,omitempty"` | |
| CreatedAt time.Time `json:"created_at,omitempty"` | |
| Owner VenueOwner `gorm:"foreignKey:OwnerID" json:"owner,omitempty"` | |
| } | |
| type Facility struct { | |
| ID string `gorm:"type:uuid;primaryKey" json:"id,omitempty"` | |
| Name string `json:"name,omitempty"` | |
| Icon string `json:"icon,omitempty"` | |
| } | |
| type Class struct { | |
| ID string `gorm:"type:uuid;primaryKey" json:"id,omitempty"` | |
| InstructorID string `gorm:"type:uuid;index" json:"instructor_id,omitempty"` | |
| VenueID *string `gorm:"type:uuid" json:"venue_id,omitempty"` | |
| Title string `json:"title,omitempty"` | |
| Description datatypes.JSON `swaggertype:"object" json:"description,omitempty"` | |
| Capacity int `json:"capacity,omitempty"` | |
| Price float64 `json:"price,omitempty"` | |
| ScheduleType string `json:"schedule_type,omitempty"` | |
| StartTime time.Time `json:"start_time,omitempty"` | |
| EndTime time.Time `json:"end_time,omitempty"` | |
| ClassMedia datatypes.JSON `swaggertype:"object" json:"class_media,omitempty"` | |
| AvailableSlots datatypes.JSON `swaggertype:"object" json:"available_slots,omitempty"` | |
| AvailableTypes datatypes.JSON `swaggertype:"object" json:"available_types,omitempty"` | |
| CustomField datatypes.JSON `swaggertype:"object" json:"custom_field,omitempty"` | |
| CreatedAt time.Time `json:"created_at,omitempty"` | |
| Instructor Instructor `gorm:"foreignKey:InstructorID" json:"instructor,omitempty"` | |
| Venue *Venue `gorm:"foreignKey:VenueID" json:"venue,omitempty"` | |
| } | |
| type ClassBooking struct { | |
| ID string `gorm:"type:uuid;primaryKey" json:"id,omitempty"` | |
| ClassID string `gorm:"type:uuid;index" json:"class_id,omitempty"` | |
| UserID string `gorm:"type:uuid;index" json:"user_id,omitempty"` | |
| BookingStatus string `json:"booking_status,omitempty"` | |
| PaymentStatus string `json:"payment_status,omitempty"` | |
| PaymentMethod string `json:"payment_method,omitempty"` | |
| SlotIDs datatypes.JSON `swaggertype:"array,string" json:"slot_ids,omitempty"` | |
| TypeID string `json:"type_id,omitempty"` | |
| TotalAmount float64 `json:"total_amount,omitempty"` | |
| XenditInvoiceID *string `json:"xendit_invoice_id,omitempty"` | |
| CheckoutURL *string `json:"checkout_url,omitempty"` | |
| AvailableSlots datatypes.JSON `swaggertype:"object" json:"available_slots,omitempty"` | |
| AvailableTypes datatypes.JSON `swaggertype:"object" json:"available_types,omitempty"` | |
| PaymentDetails datatypes.JSON `swaggertype:"object" json:"payment_details,omitempty"` | |
| CreatedAt time.Time `json:"created_at,omitempty"` | |
| Class Class `gorm:"foreignKey:ClassID" json:"class,omitempty"` | |
| User User `gorm:"foreignKey:UserID" json:"user,omitempty"` | |
| } | |
| type Event struct { | |
| ID string `gorm:"type:uuid;primaryKey" json:"id,omitempty"` | |
| HostUserID string `gorm:"type:uuid;index" json:"host_user_id,omitempty"` | |
| VenueID *string `gorm:"type:uuid" json:"venue_id,omitempty"` | |
| Title string `json:"title,omitempty"` | |
| Description datatypes.JSON `swaggertype:"object" json:"description,omitempty"` | |
| ScheduleType string `json:"schedule_type,omitempty"` | |
| EventDate time.Time `json:"event_date,omitempty"` | |
| StartTime time.Time `json:"start_time,omitempty"` | |
| EndTime time.Time `json:"end_time,omitempty"` | |
| Capacity int `json:"capacity,omitempty"` | |
| EntranceFee float64 `json:"entrance_fee,omitempty"` | |
| EventMedia datatypes.JSON `swaggertype:"object" json:"event_media,omitempty"` | |
| // Approval workflow | |
| ApprovalStatus string `gorm:"type:varchar(50);default:'PENDING_APPROVAL'" json:"approval_status,omitempty"` | |
| RejectionReason *string `gorm:"type:text" json:"rejection_reason,omitempty"` | |
| CreatedAt time.Time `json:"created_at,omitempty"` | |
| UpdatedAt time.Time `json:"updated_at,omitempty"` | |
| HostUser User `gorm:"foreignKey:HostUserID" json:"host_user,omitempty"` | |
| Venue *Venue `gorm:"foreignKey:VenueID" json:"venue,omitempty"` | |
| Packages []EventPackage `gorm:"foreignKey:EventID" json:"packages,omitempty"` | |
| Instructors []EventInstructor `gorm:"foreignKey:EventID" json:"instructors,omitempty"` | |
| } | |
| type EventInstructor struct { | |
| ID string `gorm:"type:uuid;primaryKey" json:"id,omitempty"` | |
| EventID string `gorm:"type:uuid;index" json:"event_id,omitempty"` | |
| InstructorID string `gorm:"type:uuid;index" json:"instructor_id,omitempty"` | |
| PartnerCapacity int `json:"partner_capacity,omitempty"` | |
| CreatedAt time.Time `json:"created_at,omitempty"` | |
| Event Event `gorm:"foreignKey:EventID" json:"event,omitempty"` | |
| Instructor Instructor `gorm:"foreignKey:InstructorID" json:"instructor,omitempty"` | |
| } | |
| type EventPackage struct { | |
| ID string `gorm:"type:uuid;primaryKey" json:"id,omitempty"` | |
| EventID string `gorm:"type:uuid;index" json:"event_id,omitempty"` | |
| Name string `json:"name,omitempty"` | |
| Description datatypes.JSON `swaggertype:"object" json:"description,omitempty"` | |
| Price float64 `json:"price,omitempty"` | |
| PartnerIncluded bool `json:"partner_included,omitempty"` | |
| CreatedAt time.Time `json:"created_at,omitempty"` | |
| Event Event `gorm:"foreignKey:EventID" json:"event,omitempty"` | |
| } | |
| type EventBooking struct { | |
| ID string `gorm:"type:uuid;primaryKey" json:"id,omitempty"` | |
| EventID string `gorm:"type:uuid;index" json:"event_id,omitempty"` | |
| PackageID string `gorm:"type:uuid" json:"package_id,omitempty"` | |
| UserID string `gorm:"type:uuid" json:"user_id,omitempty"` | |
| PartnerInstructorID *string `gorm:"type:uuid" json:"partner_instructor_id,omitempty"` | |
| BookingStatus string `json:"booking_status,omitempty"` | |
| PaymentStatus string `json:"payment_status,omitempty"` | |
| PaymentMethod string `json:"payment_method,omitempty"` | |
| // Payment integration | |
| TotalAmount float64 `json:"total_amount,omitempty"` | |
| XenditInvoiceID *string `json:"xendit_invoice_id,omitempty"` | |
| CheckoutURL *string `json:"checkout_url,omitempty"` | |
| CreatedAt time.Time `json:"created_at,omitempty"` | |
| UpdatedAt time.Time `json:"updated_at,omitempty"` | |
| Event Event `gorm:"foreignKey:EventID" json:"event,omitempty"` | |
| Package EventPackage `gorm:"foreignKey:PackageID" json:"package,omitempty"` | |
| User User `gorm:"foreignKey:UserID" json:"user,omitempty"` | |
| } | |
| type Payment struct { | |
| ID string `gorm:"type:uuid;primaryKey" json:"id,omitempty"` | |
| UserID string `gorm:"type:uuid" json:"user_id,omitempty"` | |
| EventBookingID *string `gorm:"type:uuid" json:"event_booking_id,omitempty"` | |
| ClassBookingID *string `gorm:"type:uuid" json:"class_booking_id,omitempty"` | |
| Amount float64 `json:"amount,omitempty"` | |
| PaymentMethod string `json:"payment_method,omitempty"` | |
| PaymentStatus string `json:"payment_status,omitempty"` | |
| XenditInvoiceID *string `json:"xendit_invoice_id,omitempty"` | |
| CreatedAt time.Time `json:"created_at,omitempty"` | |
| User User `gorm:"foreignKey:UserID" json:"user,omitempty"` | |
| } | |
| type UserFavorite struct { | |
| ID string `gorm:"type:uuid;primaryKey" json:"id,omitempty"` | |
| UserID string `gorm:"type:uuid;index:idx_user_class,unique" json:"user_id,omitempty"` | |
| ClassID string `gorm:"type:uuid;index:idx_user_class,unique" json:"class_id,omitempty"` | |
| CreatedAt time.Time `json:"created_at,omitempty"` | |
| User User `gorm:"foreignKey:UserID" json:"user,omitempty"` | |
| Class Class `gorm:"foreignKey:ClassID" json:"class,omitempty"` | |
| } | |
| type OTPVerification struct { | |
| ID string `gorm:"type:text;primaryKey" json:"id,omitempty"` | |
| PhoneNumber string `json:"phone_number,omitempty"` | |
| OTPCode string `json:"otp_code,omitempty"` | |
| ExpiredAt time.Time `json:"expired_at,omitempty"` | |
| Verified bool `json:"verified,omitempty"` | |
| CreatedAt time.Time `json:"created_at,omitempty"` | |
| } | |
| type UserEventFavorite struct { | |
| ID string `gorm:"type:uuid;primaryKey" json:"id,omitempty"` | |
| UserID string `gorm:"type:uuid;index:idx_user_event,unique" json:"user_id,omitempty"` | |
| EventID string `gorm:"type:uuid;index:idx_user_event,unique" json:"event_id,omitempty"` | |
| CreatedAt time.Time `json:"created_at,omitempty"` | |
| User User `gorm:"foreignKey:UserID" json:"user,omitempty"` | |
| Event Event `gorm:"foreignKey:EventID" json:"event,omitempty"` | |
| } | |