lifedebugger's picture
Deploy files from GitHub repository
99b262f
package models
import (
"time"
"github.com/google/uuid"
"github.com/lib/pq"
"gorm.io/gorm"
)
type Account struct {
Id uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"id"`
Username string `gorm:"uniqueIndex" json:"username,omitempty"`
Email string `gorm:"uniqueIndex" json:"email,omitempty"`
FullName *string `json:"full_name,omitempty" gorm:"-"`
Role string `json:"role,omitempty"`
Password string `json:"-"`
IsEmailVerified bool `json:"is_email_verified,omitempty"`
IsDetailCompleted bool `json:"is_detail_completed,omitempty"`
CreatedAt time.Time `json:"created_at,omitempty"`
AccountDetail *AccountDetail `gorm:"foreignKey:AccountId;references:Id" json:"-"`
DeletedAt gorm.DeletedAt `json:"deleted_at,omitempty" gorm:"index" swag:"-"`
}
func (Account) TableName() string { return "account" }
type AccountDetail struct {
Id uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"id"`
AccountId uuid.UUID `json:"account_id,omitempty"`
FullName *string `json:"full_name,omitempty"`
SchoolName *string `json:"school_name,omitempty"`
Province *string `json:"province,omitempty"`
City *string `json:"city,omitempty"`
Avatar *string `json:"avatar,omitempty"`
PhoneNumber *string `json:"phone_number,omitempty"`
Account *Account `gorm:"foreignKey:AccountId" json:"account,omitempty"`
}
func (AccountDetail) TableName() string { return "account_details" }
type EmailVerification struct {
Id uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"id"`
Token uint `json:"token,omitempty"`
AccountId uuid.UUID `json:"account_id,omitempty"`
IsExpired bool `json:"is_expired,omitempty"`
CreatedAt time.Time `json:"created_at,omitempty"`
ExpiredAt time.Time `json:"expired_at,omitempty"`
Account *Account `gorm:"foreignKey:AccountId" json:"account,omitempty"`
}
func (EmailVerification) TableName() string { return "email_verification" }
type ExternalAuth struct {
Id uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"id"`
OauthID string `json:"oauth_id,omitempty"`
AccountId uuid.UUID `json:"account_id,omitempty"`
OauthProvider string `json:"oauth_provider,omitempty"`
}
func (ExternalAuth) TableName() string { return "external_auth" }
type FCM struct {
Id uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"id"`
AccountId uuid.UUID `json:"account_id,omitempty"`
FCMToken string `json:"fcm_token,omitempty"`
}
func (FCM) TableName() string { return "fcm" }
type ForgotPassword struct {
Id uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"id"`
Token uint `json:"token,omitempty"`
AccountId uuid.UUID `json:"account_id,omitempty"`
IsExpired bool `json:"is_expired,omitempty"`
CreatedAt time.Time `json:"created_at,omitempty"`
ExpiredAt time.Time `json:"expired_at,omitempty"`
}
func (ForgotPassword) TableName() string { return "forgot_password" }
type Events struct {
Id uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"id_event"`
Title string `json:"title,omitempty"`
Slug string `json:"slug,omitempty"`
StartEvent time.Time `json:"start_event,omitempty"`
EndEvent time.Time `json:"end_event,omitempty"`
Overview string `json:"overview,omitempty"`
ImgBanner string `json:"img_banner,omitempty"`
EventCode string `json:"event_code,omitempty"`
IsPublic bool `json:"is_public,omitempty"`
CreatedAt time.Time `json:"created_at,omitempty"`
DeletedAt gorm.DeletedAt `json:"deleted_at,omitempty" gorm:"index" swag:"-"`
Price float64 `json:"price"`
RegisterStatus int `gorm:"-" json:"register_status"`
}
func (Events) TableName() string { return "events" }
type Announcement struct {
Id uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"id_announcement"`
Title string `json:"title,omitempty"`
CreatedAt time.Time `json:"created_at,omitempty"`
Message string `json:"message,omitempty"`
Publisher string `json:"publisher,omitempty"`
EventId uuid.UUID `json:"id_event,omitempty"`
}
func (Announcement) TableName() string { return "announcement" }
type ProblemSet struct {
Id uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"id_problem_set"`
Title string `json:"title,omitempty"`
Description string `json:"description,omitempty"`
CreatedAt time.Time `json:"created_at,omitempty"`
DeletedAt gorm.DeletedAt `json:"deleted_at,omitempty" gorm:"index" swag:"-"`
}
func (ProblemSet) TableName() string { return "problem_set" }
type Exam struct {
Id uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"id_exam"`
Slug string `json:"slug,omitempty"`
Title string `json:"title,omitempty"`
Description string `json:"description,omitempty"`
Duration time.Duration `json:"duration,omitempty"`
Randomize uint `json:"randomize,omitempty"`
Configuration ExamConfiguration `gorm:"foreignKey:ExamId;references:Id" json:"configuration,omitempty"`
Proctoring ExamProctoring `gorm:"foreignKey:ExamId;references:Id" json:"proctoring,omitempty"`
CreatedAt time.Time `json:"created_at,omitempty"`
DeletedAt gorm.DeletedAt `json:"deleted_at,omitempty" gorm:"index" swag:"-"`
}
func (Exam) TableName() string { return "exam" }
type ExamConfiguration struct {
Id uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"id_result"`
ExamId uuid.UUID `json:"id_exam,omitempty"`
AllowRetake bool `json:"allow_retake"`
AllowReview bool `json:"allow_review"`
EnableTimer bool `json:"enable_timer"`
}
func (ExamConfiguration) TableName() string { return "exam_configuration" }
type ExamProctoring struct {
Id uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"id_result"`
ExamId uuid.UUID `json:"id_exam,omitempty"`
EnableWebCam bool `json:"enable_webcam"`
EnableVAD bool `json:"enable_vad"`
EnableTabBlock bool `json:"enable_tab_block"`
RequiredFullScreen bool `json:"enable_full_screen"`
EnableEyeTracking bool `json:"enable_eye_tracking"`
DisableCopyPaste bool `json:"disable_copy_paste"`
EnableExamBrowser bool `json:"enable_exam_browser"`
}
func (ExamProctoring) TableName() string { return "exam_proctoring" }
type EventExamProctoringLogs struct {
Id uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"id_result"`
EventId uuid.UUID `json:"id_event,omitempty"`
ExamId uuid.UUID `json:"id_exam,omitempty"`
AccountId uuid.UUID `json:"id_account,omitempty"`
ViolationScore uint `json:"violation_score,omitempty"`
ViolationCategory string `json:"violation_category,omitempty"`
Attachement string `json:"attachement,omitempty"`
CreatedAt time.Time `json:"created_at,omitempty"`
}
func (EventExamProctoringLogs) TableName() string { return "exam_event_proctoring_logs" }
type OptionCategory struct {
Id uint `gorm:"primaryKey" json:"id"`
OptionName string `json:"option_name,omitempty"`
OptionSlug string `json:"option_slug,omitempty"`
}
func (OptionCategory) TableName() string { return "option_category" }
type OptionValues struct {
Id uint `gorm:"primaryKey" json:"id"`
OptionCategoryId uint `json:"option_category_id,omitempty"`
OptionValue string `json:"option_value,omitempty"`
}
func (OptionValues) TableName() string { return "option_values" }
type RegionProvince struct {
Id uint `json:"id"`
Name string `json:"name,omitempty"`
Code string `json:"code,omitempty"`
}
func (RegionProvince) TableName() string { return "region_provinces" }
type RegionCity struct {
Id uint `json:"id"`
Type string `json:"type,omitempty"`
Name string `json:"name,omitempty"`
Code string `json:"code,omitempty"`
FullCode string `json:"full_code,omitempty"`
ProvinceId uint `json:"province_id,omitempty"`
}
func (RegionCity) TableName() string { return "region_cities" }
type Options struct {
OptionCategory OptionCategory `json:"option_category,omitempty"`
OptionValues []OptionValues `json:"option_values,omitempty"`
}
func (Options) TableName() string { return "options" }
type EventAssign struct {
Id uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"id_assign"`
AccountId uuid.UUID `json:"id_account,omitempty"`
EventId uuid.UUID `json:"id_event,omitempty"`
AssignedAt time.Time `json:"assigned_at,omitempty"`
Account *Account `gorm:"foreignKey:AccountId" json:"account,omitempty"`
Event *Events `gorm:"foreignKey:EventId" json:"event,omitempty"`
}
func (EventAssign) TableName() string { return "event_assign" }
type Questions struct {
Id uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"id_question"`
Type string `json:"type,omitempty"`
Question string `json:"question,omitempty"`
Options pq.StringArray `gorm:"type:text[]" json:"options,omitempty"`
AnsKey pq.StringArray `gorm:"type:text[]" json:"ans_key,omitempty"`
CorrMark float64 `json:"corr_mark,omitempty"`
IncorrMark float64 `json:"incorr_mark,omitempty"`
NullMark float64 `json:"null_mark,omitempty"`
CreatedAt time.Time `json:"created_at,omitempty"`
ProblemSetId uuid.UUID `json:"id_problem_set,omitempty"`
ProblemSet *ProblemSet `gorm:"foreignKey:ProblemSetId" json:"problem_set,omitempty"`
Solution string `json:"solution,omitempty"`
}
func (Questions) TableName() string { return "questions" }
type ProblemSetExamAssign struct {
Id uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"id_problem_set_exam_assign"`
ExamId uuid.UUID `json:"id_exam,omitempty"`
ProblemSetId uuid.UUID `json:"id_problem_set,omitempty"`
Exam *Exam `gorm:"foreignKey:ExamId" json:"exam,omitempty"`
ProblemSet *ProblemSet `gorm:"foreignKey:ProblemSetId" json:"problem_set,omitempty"`
}
func (ProblemSetExamAssign) TableName() string { return "problem_set_exam_assign" }
type EventExamAssign struct {
Id uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"id_exam_event_assign"`
EventId uuid.UUID `json:"id_event,omitempty"`
ExamId uuid.UUID `json:"id_exam,omitempty"`
Exam *Exam `gorm:"foreignKey:ExamId" json:"exam,omitempty"`
Event *Events `gorm:"foreignKey:EventId" json:"event,omitempty"`
}
func (EventExamAssign) TableName() string { return "exam_event_assign" }
type CPQuestionVerdict struct {
TimeExecution float32 `json:"time_exec"`
MemoryUsage float32 `json:"memory"`
Verdict string `json:"verdict"`
Score float32 `json:"score"`
}
type EventExamAnswer struct {
Id uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"id"`
AttemptId uuid.UUID `json:"id_attempt,omitempty" gorm:"index"`
QuestionId uuid.UUID `json:"id_question,omitempty" gorm:"index"`
Answers pq.StringArray `gorm:"type:text[]" json:"answer,omitempty"`
Score float32 `json:"score"`
EventExamAttempt *EventExamAttempt `gorm:"foreignKey:AttemptId;references:Id" json:"exam_attempt,omitempty"`
CreatedAt time.Time `json:"created_at,omitempty"`
UpdatedAt time.Time `json:"updated_at,omitempty"`
}
func (EventExamAnswer) TableName() string { return "exam_event_answer" }
type ExamScoreboardEntry struct {
AccountId uuid.UUID
Username string
FullName string
Score float32
DurationSeconds int64
}
type EventScoreboardEntry struct {
AccountId uuid.UUID
Username string
FullName string
TotalScore float32
}
type EventExamAttempt struct {
Id uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"id_attempt"`
AccountId uuid.UUID `json:"id_account,omitempty"`
EventId uuid.UUID `json:"id_event,omitempty"`
ExamId uuid.UUID `json:"id_exam,omitempty"`
Questions []Questions `gorm:"-" json:"questions,omitempty"`
Answers []EventExamAnswer `gorm:"foreignKey:AttemptId;references:Id" json:"answers,omitempty"`
Account *Account `gorm:"foreignKey:AccountId" json:"account,omitempty"`
Event *Events `gorm:"foreignKey:EventId" json:"event,omitempty"`
Exam *Exam `gorm:"foreignKey:ExamId" json:"exam,omitempty"`
RemTime int `json:"remaining_time,omitempty"`
Mark float32 `json:"mark,omitempty"`
CreatedAt time.Time `json:"created_at,omitempty"`
DueAt time.Time `json:"due_at,omitempty"`
Submitted bool `json:"submitted,omitempty"`
}
func (EventExamAttempt) TableName() string { return "exam_event_attempt" }
type Result struct {
Id uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"id_result"`
AttemptId uuid.UUID `json:"id_attempt,omitempty"`
FinalScore float32 `json:"final_score"`
EventExamAttempt *EventExamAttempt `gorm:"foreignKey:AttemptId;references:Id" json:"exam_attempt,omitempty"`
}
func (Result) TableName() string { return "result" }
type Academy struct {
Id uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"id"`
Title string `json:"title,omitempty"`
Slug string `gorm:"unique" json:"slug,omitempty"`
Code string `gorm:"unique" json:"code,omitempty"`
IsPublic bool `json:"is_public,omitempty"`
Description string `json:"description,omitempty"`
ImageUrl string `json:"image_url,omitempty"`
MaterialsCount int64 `json:"materials_count,omitempty"`
Materials []AcademyMaterial `gorm:"foreignKey:AcademyId;references:Id" json:"materials,omitempty"`
AcademyProgress AcademyProgress `gorm:"foreignKey:AcademyId;references:Id" json:"academy_progress,omitempty"`
Price float64 `json:"price,omitempty"`
RegisterStatus int `gorm:"-" json:"register_status"`
CreatedAt time.Time `json:"created_at,omitempty"`
DeletedAt gorm.DeletedAt `json:"deleted_at,omitempty" gorm:"index" swag:"-"`
}
func (Academy) TableName() string { return "academy" }
type AcademyMaterial struct {
Id uuid.UUID `gorm:"type:uuid;primaryKey;default:gen_random_uuid()" json:"id"`
AcademyId uuid.UUID `json:"academy_id,omitempty"`
Title string `json:"title,omitempty"`
Slug string `gorm:"unique" json:"slug,omitempty"`
Description string `json:"description,omitempty"`
Order uint `json:"order,omitempty"`
ContentsCount int64 `json:"contents_count,omitempty"`
Contents []AcademyContent `gorm:"foreignKey:MaterialId;references:Id" json:"contents,omitempty"`
AcademyMaterialProgress AcademyMaterialProgress `gorm:"foreignKey:MaterialId;references:Id" json:"academy_material_progress,omitempty"`
CreatedAt time.Time `json:"created_at,omitempty"`
DeletedAt gorm.DeletedAt `json:"deleted_at,omitempty" gorm:"index" swag:"-"`
}
func (AcademyMaterial) TableName() string { return "academy_materials" }
type AcademyContent struct {
Id uuid.UUID `gorm:"type:uuid;primaryKey;default:gen_random_uuid()" json:"id"`
MaterialId uuid.UUID `json:"material_id,omitempty"`
Title string `json:"title,omitempty"`
Order uint `json:"order,omitempty"`
Contents string `json:"contents,omitempty"`
AcademyContentProgress AcademyContentProgress `gorm:"foreignKey:ContentId;references:Id" json:"academy_content_progress,omitempty"`
CreatedAt time.Time `json:"created_at,omitempty"`
DeletedAt gorm.DeletedAt `json:"deleted_at,omitempty" gorm:"index" swag:"-"`
}
func (AcademyContent) TableName() string { return "academy_contents" }
// Progress
type AcademyProgress struct {
Id uuid.UUID `gorm:"type:uuid;primaryKey;default:gen_random_uuid()" json:"id,omitempty"`
AccountId uuid.UUID `gorm:"type:uuid;uniqueIndex:idx_account_academy" json:"account_id,omitempty"`
AcademyId uuid.UUID `gorm:"type:uuid;uniqueIndex:idx_account_academy" json:"academy_id,omitempty"`
Status string `gorm:"type:varchar(50);default:'not attempted'" json:"status,omitempty"`
Progress float64 `gorm:"default:0" json:"progress"`
TotalCompletedMaterials uint `gorm:"default:0" json:"total_completed_materials"`
CompletedAt *time.Time `json:"completed_at"`
}
func (AcademyProgress) TableName() string { return "academy_progress" }
type AcademyMaterialProgress struct {
Id uuid.UUID `gorm:"type:uuid;primaryKey;default:gen_random_uuid()" json:"id,omitempty"`
AccountId uuid.UUID `gorm:"type:uuid;uniqueIndex:idx_account_material" json:"account_id,omitempty"`
AcademyId uuid.UUID `gorm:"type:uuid;index" json:"academy_id,omitempty"`
MaterialId uuid.UUID `gorm:"type:uuid;uniqueIndex:idx_account_material" json:"material_id,omitempty"`
Progress float64 `gorm:"default:0" json:"progress,omitempty"`
TotalCompletedContents uint `gorm:"default:0" json:"total_completed_contents,omitempty"`
Status string `gorm:"type:varchar(50);default:'not attempted'" json:"status,omitempty"`
CompletedAt *time.Time `json:"completed_at"`
}
func (AcademyMaterialProgress) TableName() string { return "academy_material_progress" }
type AcademyContentProgress struct {
Id uuid.UUID `gorm:"type:uuid;primaryKey;default:gen_random_uuid()" json:"id,omitempty"`
AccountId uuid.UUID `gorm:"type:uuid;uniqueIndex:idx_account_content" json:"account_id,omitempty"`
AcademyId uuid.UUID `gorm:"type:uuid;index" json:"academy_id,omitempty"`
MaterialId uuid.UUID `gorm:"type:uuid;index" json:"material_id,omitempty"`
ContentId uuid.UUID `gorm:"type:uuid;uniqueIndex:idx_account_content" json:"content_id,omitempty"`
Status string `gorm:"type:varchar(50);default:'not attempted'" json:"status,omitempty"`
CompletedAt *time.Time `json:"completed_at"`
}
func (AcademyContentProgress) TableName() string { return "academy_content_progress" }
type AcademyAssign struct {
Id uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"id"`
AccountId uuid.UUID `gorm:"type:uuid;index" json:"account_id,omitempty"`
AcademyId uuid.UUID `gorm:"type:uuid;index" json:"academy_id,omitempty"`
Account *Account `gorm:"foreignKey:AccountId" json:"account,omitempty"`
Academy *Academy `gorm:"foreignKey:AcademyId" json:"academy,omitempty"`
CreatedAt time.Time `json:"created_at,omitempty"`
}
func (AcademyAssign) TableName() string { return "academy_assign" }
type File struct {
Id uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"id"`
OriginalName string `json:"original_name,omitempty"`
StoredName string `json:"stored_name,omitempty"`
MimeType string `json:"mime_type,omitempty"`
Size int64 `json:"size,omitempty"`
Path string `json:"path,omitempty"`
Context string `json:"context,omitempty"`
AccountId uuid.UUID `json:"account_id,omitempty"`
CreatedAt time.Time `json:"created_at,omitempty"`
Account *Account `gorm:"foreignKey:AccountId" json:"account,omitempty"`
}
func (File) TableName() string { return "files" }
type AcademyExamAssign struct {
Id uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"id_exam_academy_assign"`
AcademyId uuid.UUID `json:"id_academy,omitempty"`
ExamId uuid.UUID `json:"id_exam,omitempty"`
Exam *Exam `gorm:"foreignKey:ExamId" json:"exam,omitempty"`
Academy *Academy `gorm:"foreignKey:AcademyId" json:"academy,omitempty"`
}
func (AcademyExamAssign) TableName() string { return "exam_academy_assign" }
type AcademyExamAnswer struct {
Id uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"id"`
AttemptId uuid.UUID `json:"id_attempt,omitempty" gorm:"index"`
QuestionId uuid.UUID `json:"id_question,omitempty" gorm:"index"`
Answers pq.StringArray `gorm:"type:text[]" json:"answer,omitempty"`
Score float32 `json:"score"`
AcademyExamAttempt *AcademyExamAttempt `gorm:"foreignKey:AttemptId" json:"exam_attempt,omitempty"`
CreatedAt time.Time `json:"created_at,omitempty"`
UpdatedAt time.Time `json:"updated_at,omitempty"`
}
func (AcademyExamAnswer) TableName() string { return "exam_academy_answer" }
type AcademyExamAttempt struct {
Id uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"id_attempt"`
AccountId uuid.UUID `json:"id_account,omitempty"`
AcademyId uuid.UUID `json:"id_academy,omitempty"`
ExamId uuid.UUID `json:"id_exam,omitempty"`
Questions []Questions `gorm:"-" json:"questions,omitempty"`
Answers []AcademyExamAnswer `gorm:"foreignKey:AttemptId;references:Id" json:"answers,omitempty"`
Account *Account `gorm:"foreignKey:AccountId" json:"account,omitempty"`
Academy *Academy `gorm:"foreignKey:AcademyId" json:"academy,omitempty"`
Exam *Exam `gorm:"foreignKey:ExamId" json:"exam,omitempty"`
RemTime int `json:"remaining_time,omitempty"`
Mark float32 `json:"mark,omitempty"`
CreatedAt time.Time `json:"created_at,omitempty"`
DueAt time.Time `json:"due_at,omitempty"`
Submitted bool `json:"submitted,omitempty"`
}
func (AcademyExamAttempt) TableName() string { return "exam_academy_attempt" }
type AcademyExamResult struct {
Id uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"id_result"`
AttemptId uuid.UUID `json:"id_attempt,omitempty"`
FinalScore float32 `json:"final_score"`
AcademyExamAttempt *AcademyExamAttempt `gorm:"foreignKey:AttemptId" json:"exam_attempt,omitempty"`
}
func (AcademyExamResult) TableName() string { return "academy_exam_result" }
type AcademyPaymentTransaction struct {
Id uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"id"`
AccountId uuid.UUID `json:"account_id,omitempty"`
AcademyId uuid.UUID `json:"academy_id,omitempty"`
ExternalId string `json:"external_transaction_id,omitempty"`
InvoiceId string `json:"invoice_id,omitempty"`
InvoiceUrl string `json:"invoice_url,omitempty"`
Amount float64 `json:"amount,omitempty"`
TransactionAt time.Time `json:"transaction_at,omitempty"`
ExpiredAt time.Time `json:"expired_at,omitempty"`
Status string `json:"status,omitempty"`
}
func (AcademyPaymentTransaction) TableName() string { return "academy_payment_transaction" }
type EventPaymentTransaction struct {
Id uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"id"`
AccountId uuid.UUID `json:"account_id,omitempty"`
EventId uuid.UUID `json:"event_id,omitempty"`
ExternalId string `json:"external_transaction_id,omitempty"`
InvoiceId string `json:"invoice_id,omitempty"`
InvoiceUrl string `json:"invoice_url,omitempty"`
Amount float64 `json:"amount,omitempty"`
TransactionAt time.Time `json:"transaction_at,omitempty"`
ExpiredAt time.Time `json:"expired_at,omitempty"`
Status string `json:"status,omitempty"`
}
func (EventPaymentTransaction) TableName() string { return "event_payment_transaction" }
type AcademyCoupon struct {
Id uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()" json:"id"`
AcademyId uuid.UUID `json:"academy_id,omitempty"`
Code string `gorm:"unique" json:"code,omitempty"`
Discount float64 `json:"discount,omitempty"`
ValidUntil time.Time `json:"valid_until,omitempty"`
}
func (AcademyCoupon) TableName() string { return "academy_coupon" }