package models import ( "time" "github.com/lib/pq" uuid "github.com/satori/go.uuid" ) type Account struct { Id uint `gorm:"primaryKey" json:"id"` UUID uuid.UUID `gorm:"type:uuid" json:"uuid" ` Email string `gorm:"uniqueIndex" json:"email"` Password string `json:"password"` IsEmailVerified bool `json:"is_email_verified"` IsDetailCompleted bool `json:"is_detail_completed"` CreatedAt time.Time `json:"created_at"` DeletedAt *time.Time `json:"deleted_at" gorm:"default:null"` } type AccountDetails struct { ID uint64 `gorm:"column:id;primaryKey;autoIncrement" json:"id" counter:"skip"` AccountID uint `gorm:"column:account_id;not null;unique" json:"account_id" counter:"skip"` InitialName string `gorm:"column:initial_name;not null" json:"initial_name"` FullName *string `gorm:"column:full_name" json:"full_name"` DateOfBirth *time.Time `gorm:"column:date_of_birth" json:"date_of_birth"` PlaceOfBirth *string `gorm:"column:place_of_birth" json:"place_of_birth"` Domicile *string `gorm:"column:domicile" json:"domicile"` LastJob *string `gorm:"column:last_job" json:"last_job"` Gender *string `gorm:"column:gender" json:"gender"` LastEducation *string `gorm:"column:last_education" json:"last_education"` MaritalStatus *string `gorm:"column:marital_status" json:"marital_status"` Avatar *string `gorm:"column:avatar" json:"avatar" counter:"skip"` PhoneNumber *string `gorm:"column:phone_number" json:"phone_number"` CreatedAt time.Time `gorm:"column:created_at;autoCreateTime" json:"created_at" counter:"skip"` UpdatedAt time.Time `gorm:"column:updated_at;autoUpdateTime" json:"updated_at" counter:"skip"` FieldCounter } type EmailVerification struct { ID int64 `gorm:"column:id;primaryKey;autoIncrement" json:"id"` AccountID int64 `gorm:"column:account_id;not null" json:"account_id"` Account *Account `gorm:"foreignKey:AccountID;constraint:OnDelete:CASCADE" json:"account,omitempty"` UUID uuid.UUID `gorm:"type:uuid" json:"uuid" ` Token int64 `json:"token"` ExpiredAt time.Time `json:"expired_at"` IsExpired bool `json:"is_expired"` CreatedAt time.Time `gorm:"column:created_at;autoCreateTime" json:"created_at"` UpdatedAt time.Time `gorm:"column:updated_at;autoUpdateTime" json:"updated_at"` } type ExternalAuth struct { ID uint `gorm:"primaryKey" json:"id"` UUID uuid.UUID `gorm:"type:uuid" json:"uuid" ` OauthID string `json:"oauth_id"` AccountID uint `json:"account_id"` OauthProvider string `json:"oauth_provider"` } type FCM struct { ID uint `gorm:"primaryKey" json:"id"` AccountID uint `json:"account_id"` FCMToken string `json:"fcm_token"` } type ForgotPassword struct { ID uint `gorm:"primaryKey" json:"id"` UUID uuid.UUID `gorm:"type:uuid" json:"uuid" ` Token uint `json:"token"` AccountID uint `json:"account_id"` IsExpired bool `json:"is_expired"` CreatedAt time.Time `json:"created_at"` ExpiredAt time.Time `json:"expired_at"` } type ( Academy struct { ID int64 `gorm:"column:id;primaryKey;autoIncrement" json:"id"` Title string `gorm:"column:title" json:"title"` Slug string `gorm:"column:slug;uniqueIndex" json:"slug"` Description string `gorm:"column:description" json:"description"` Order uint `gorm:"column:order" json:"order"` Image *string `gorm:"column:image" json:"image"` CreatedAt time.Time `gorm:"column:created_at;autoCreateTime" json:"created_at"` UpdatedAt time.Time `gorm:"column:updated_at;autoUpdateTime" json:"updated_at"` } AcademyMaterial struct { ID int64 `gorm:"column:id;primaryKey;autoIncrement" json:"id"` AcademyID int64 `gorm:"column:academy_id;not null" json:"academy_id"` Academy *Academy `gorm:"foreignKey:AcademyID;constraint:OnDelete:CASCADE" json:"academy,omitempty"` Title string `gorm:"column:title" json:"title"` Slug string `gorm:"column:slug;uniqueIndex" json:"slug"` Content string `gorm:"column:content" json:"content"` Order uint `gorm:"column:order" json:"order"` CreatedAt time.Time `gorm:"column:created_at;autoCreateTime" json:"created_at"` UpdatedAt time.Time `gorm:"column:updated_at;autoUpdateTime" json:"updated_at"` } AcademyMaterialProgress struct { AccountID int64 `gorm:"primaryKey;column:account_id" json:"account_id" counter:"skip"` Account *Account `gorm:"foreignKey:AccountID;constraint:OnDelete:CASCADE" json:"account,omitempty" counter:"skip"` AcademyMaterialID int64 `gorm:"primaryKey;column:academy_material_id" json:"academy_material_id"` AcademyMaterial *AcademyMaterial `gorm:"foreignKey:AcademyMaterialID;constraint:OnDelete:CASCADE" json:"academy_material,omitempty"` CreatedAt time.Time `gorm:"column:created_at;autoCreateTime" json:"created_at"` UpdatedAt time.Time `gorm:"column:updated_at;autoUpdateTime" json:"updated_at"` } ) type OptionCategory struct { ID int64 `gorm:"column:id;primaryKey;autoIncrement" json:"id"` OptionName string `json:"option_name"` OptionSlug string `json:"option_slug" gorm:"uniqueIndex"` OptionValues []OptionValues `gorm:"foreignKey:OptionCategoryID" json:"-"` } type OptionValues struct { ID int64 `gorm:"column:id;primaryKey;autoIncrement" json:"id"` OptionCategoryID int64 `json:"option_category_id"` OptionValue string `json:"option_value"` } type RegionProvince struct { ID uint `json:"id"` Name string `json:"name"` Code string `json:"code"` } type RegionCity struct { ID uint `json:"id"` Type string `json:"type"` Name string `json:"name"` Code string `json:"code"` FullCode string `json:"full_code"` ProvinceID uint `json:"province_id"` } type ( Quiz struct { ID int64 `gorm:"column:id;primaryKey;autoIncrement" json:"id"` AcademyID int64 `gorm:"column:academy_id;not null" json:"academy_id"` Academy *Academy `gorm:"foreignKey:AcademyID;constraint:OnDelete:CASCADE" json:"academy,omitempty"` Slug string `gorm:"column:slug;uniqueIndex" json:"slug" ` Title string `gorm:"column:title" json:"title"` Description string `gorm:"column:description" json:"description"` AttemptLimit int64 `gorm:"column:attempt_limit" json:"attempt_limit"` TimeLimit int64 `gorm:"column:time_limit" json:"time_limit"` MinScore int64 `gorm:"column:min_score" json:"min_score"` CreatedAt time.Time `gorm:"column:created_at;autoCreateTime" json:"created_at"` UpdatedAt time.Time `gorm:"column:updated_at;autoUpdateTime" json:"updated_at"` } Question struct { ID int64 `gorm:"column:id;primaryKey;autoIncrement" json:"id"` QuizID int64 `gorm:"column:quiz_id;not null" json:"quiz_id"` Quiz *Quiz `gorm:"foreignKey:QuizID;constraint:OnDelete:CASCADE" json:"quiz,omitempty"` Content string `gorm:"column:content" json:"content"` Order int `gorm:"column:order" json:"order"` Review string `gorm:"column:review" json:"review"` CreatedAt time.Time `gorm:"column:created_at;autoCreateTime" json:"created_at"` UpdatedAt time.Time `gorm:"column:updated_at;autoUpdateTime" json:"updated_at"` } Answer struct { ID int64 `gorm:"column:id;primaryKey;autoIncrement" json:"id"` QuestionID int64 `gorm:"column:question_id;not null" json:"question_id"` Question *Question `gorm:"foreignKey:QuestionID;constraint:OnDelete:CASCADE" json:"question,omitempty"` Content string `gorm:"column:content" json:"content"` IsCorrect bool `gorm:"column:is_correct" json:"is_correct"` CreatedAt time.Time `gorm:"column:created_at;autoCreateTime" json:"created_at"` UpdatedAt time.Time `gorm:"column:updated_at;autoUpdateTime" json:"updated_at"` } QuizAttempt struct { ID int64 `gorm:"column:id;primaryKey;autoIncrement" json:"id"` AccountID int64 `gorm:"column:account_id;not null" json:"account_id"` Account *Account `gorm:"foreignKey:AccountID;constraint:OnDelete:CASCADE" json:"account,omitempty"` AcademyID int64 `gorm:"column:academy_id;not null" json:"academy_id"` Academy *Academy `gorm:"foreignKey:AcademyID;constraint:OnDelete:CASCADE" json:"academy,omitempty"` QuizID int64 `gorm:"column:quiz_id;not null" json:"quiz_id"` Quiz *Quiz `gorm:"foreignKey:QuizID;constraint:OnDelete:CASCADE" json:"-"` StartedAt time.Time `gorm:"column:started_at;autoCreateTime" json:"started_at"` DueAt time.Time `gorm:"column:due_at" json:"due_at"` FinishedAt *time.Time `gorm:"column:finished_at" json:"finished_at"` TotalQuestions int64 `gorm:"column:total_questions;not null" json:"total_questions"` TotalCorrectAnswer int64 `gorm:"column:total_correct_answer;not null" json:"total_correct_answer"` TotalWrongAnswer int64 `gorm:"column:total_wrong_answer;not null" json:"total_wrong_answer"` Score float64 `gorm:"column:score" json:"score"` IsPassed bool `gorm:"column:is_passed" json:"is_passed"` CreatedAt time.Time `gorm:"column:created_at;autoCreateTime" json:"created_at"` UpdatedAt time.Time `gorm:"column:updated_at;autoUpdateTime" json:"updated_at"` } UserAnswer struct { ID int64 `gorm:"column:id;primaryKey;autoIncrement" json:"id"` QuizAttemptID int64 `gorm:"column:quiz_attempt_id;not null" json:"quiz_attempt_id"` QuizAttempt *QuizAttempt `gorm:"foreignKey:QuizAttemptID;constraint:OnDelete:CASCADE" json:"quiz_attempt,omitempty"` QuestionID int64 `gorm:"column:question_id;not null" json:"question_id"` Question *Question `gorm:"foreignKey:QuestionID;constraint:OnDelete:CASCADE" json:"question,omitempty"` AnswerID *int64 `gorm:"column:selected_answer_id" json:"selected_answer"` Answer *Answer `gorm:"foreignKey:AnswerID;constraint:OnDelete:CASCADE" json:"answer,omitempty"` IsDoubt bool `gorm:"column:is_doubt" json:"is_doubt"` IsCorrect bool `gorm:"column:is_correct" json:"is_correct"` CreatedAt time.Time `gorm:"column:created_at;autoCreateTime" json:"created_at"` UpdatedAt time.Time `gorm:"column:updated_at;autoUpdateTime" json:"updated_at"` } ) type ( PersonalityAndPreferenceCV struct { ID int64 `gorm:"column:id;primaryKey;autoIncrement" json:"id" counter:"skip"` AccountID int64 `gorm:"column:account_id;not null;unique" json:"account_id" counter:"skip"` Account *Account `gorm:"foreignKey:AccountID;constraint:OnDelete:CASCADE" json:"account,omitempty" counter:"skip"` PositiveTraits *string `gorm:"column:positive_traits" json:"positive_traits"` // sifat positif NegativeTraits *string `gorm:"column:negative_traits" json:"negative_traits"` // sifat negatif Hobbies *string `gorm:"column:hobbies" json:"hobbies"` // hobi LifeGoals *string `gorm:"column:life_goals" json:"life_goals"` // target hidup DailyActivities *string `gorm:"column:daily_activities" json:"daily_activities"` // kegiatan sehari-hari LeisureActivities *string `gorm:"column:leisure_activities" json:"leisure_activities"` // kegiatan waktu luang Likes *string `gorm:"column:likes" json:"likes"` // hal yang disukai Dislikes *string `gorm:"column:dislikes" json:"dislikes"` // hal yang tidak disukai StressHandling *string `gorm:"column:stress_handling" json:"stress_handling"` // cara mengatasi stres AngerTriggers *string `gorm:"column:anger_triggers" json:"anger_triggers"` // pemicu amarah FavoriteFoodAndDrinks *string `gorm:"column:favorite_food_and_drinks" json:"favorite_food_and_drinks"` // makanan dan minuman favorit CanCook *bool `gorm:"column:can_cook" json:"can_cook"` // bisa memasak TypesOfDishesCooked *string `gorm:"column:types_of_dishes_cooked" json:"types_of_dishes_cooked"` // jenis masakan yang bisa dimasak MonthlyExpenses *string `gorm:"column:monthly_expenses" json:"monthly_expenses"` // pengeluaran per bulan CreatedAt time.Time `gorm:"column:created_at;autoCreateTime" json:"created_at" counter:"skip"` UpdatedAt time.Time `gorm:"column:updated_at;autoUpdateTime" json:"updated_at" counter:"skip"` FieldCounter } FamilyMemberCV struct { ID int64 `gorm:"column:id;primaryKey;autoIncrement" json:"id" counter:"skip"` AccountID int64 `gorm:"column:account_id;not null" json:"account_id" counter:"skip"` Account *Account `gorm:"foreignKey:AccountID;constraint:OnDelete:CASCADE" json:"account,omitempty" counter:"skip"` Role *string `gorm:"column:role" json:"role"` // Peran dalam keluarga Status *string `gorm:"column:status" json:"status"` // Status (Hidup, Wafat) Religion *string `gorm:"column:religion" json:"religion"` // Agama Job *string `gorm:"column:job" json:"job"` // Pekerjaan LastEducation *string `gorm:"column:last_education" json:"last_education"` // Pendidikan terakhir Age *int `gorm:"column:age" json:"age"` // Usia CreatedAt time.Time `gorm:"column:created_at;autoCreateTime" json:"created_at" counter:"skip"` UpdatedAt time.Time `gorm:"column:updated_at;autoUpdateTime" json:"updated_at" counter:"skip"` FieldCounter } PhysicalAndHealthCV struct { ID int64 `gorm:"column:id;primaryKey;autoIncrement" json:"id" counter:"skip"` AccountID int64 `gorm:"column:account_id;not null;unique" json:"account_id" counter:"skip"` Account *Account `gorm:"foreignKey:AccountID;constraint:OnDelete:CASCADE" json:"account,omitempty" counter:"skip"` HeightInCm *int `gorm:"column:height_cm" json:"height_cm"` // Tinggi badan dalam satuan sentimeter WeightInKg *int `gorm:"column:weight_kg" json:"weight_kg"` // Berat badan dalam satuan kilogram BodyShape *string `gorm:"column:body_shape" json:"body_shape"` // Bentuk tubuh SkinColor *string `gorm:"column:skin_color" json:"skin_color"` // Warna kulit HairType *string `gorm:"column:hair_type" json:"hair_type"` // Tipe rambut MedicalHistory *pq.StringArray `gorm:"column:medical_history;type:varchar(255)[]" json:"medical_history"` // Riwayat penyakit PhysicalDisorder *string `gorm:"column:physical_disorder" json:"physical_disorder"` // Cacat fisik PhysicalTraits *string `gorm:"column:physical_traits" json:"physical_traits"` // Ciri khas fisik CreatedAt time.Time `gorm:"column:created_at;autoCreateTime" json:"created_at" counter:"skip"` // Waktu data dibuat UpdatedAt time.Time `gorm:"column:updated_at;autoUpdateTime" json:"updated_at" counter:"skip"` // Waktu data terakhir diperbarui FieldCounter } WorshipAndReligiousUnderstandingCV struct { ID int64 `gorm:"column:id;primaryKey;autoIncrement" json:"id" counter:"skip"` AccountID int64 `gorm:"column:account_id;not null;unique" json:"account_id" counter:"skip"` Account *Account `gorm:"foreignKey:AccountID;constraint:OnDelete:CASCADE" json:"account,omitempty" counter:"skip"` // Data ibadah ObligatoryPrayer *string `gorm:"column:obligatory_prayer" json:"obligatory_prayer"` // sholat_wajib_5_waktu CongregationalPrayer *string `gorm:"column:congregational_prayer" json:"congregational_prayer"` // sholat_berjamaah_di_masjid TahajjudPrayer *string `gorm:"column:tahajjud_prayer" json:"tahajjud_prayer"` // sholat_tahajud DhuhaPrayer *string `gorm:"column:dhuha_prayer" json:"dhuha_prayer"` // sholat_dhuha DaudFasting *string `gorm:"column:daud_fasting" json:"daud_fasting"` // puasa_daud AyyamulBidhFasting *string `gorm:"column:ayyamul_bidh_fasting" json:"ayyamul_bidh_fasting"` // puasa_ayyamul_bidh QuranReadingAbility *string `gorm:"column:quran_reading_ability" json:"quran_reading_ability"` // kemampuan_baca_alquran QuranMemorization *string `gorm:"column:quran_memorization" json:"quran_memorization"` // hafalan_alquran WeeklyReligiousStudyFrequency *string `gorm:"column:weekly_religious_study_frequency" json:"weekly_religious_study_frequency"` // jumlah kajian yang diikuti dalam seminggu HajjOrUmrah *pq.StringArray `gorm:"column:hajj_or_umrah;type:varchar(255)[]" json:"hajj_or_umrah"` // ibadah_haji_umroh // Data Pemahaman Agama ListeningToMusic *bool `gorm:"column:listening_to_music" json:"listening_to_music"` // mendengarkan_musik OpinionOnIkhtilat *string `gorm:"column:opinion_on_ikhtilat" json:"opinion_on_ikhtilat"` // pendapat_ikhtilat OpinionOnTouchingNonMahram *string `gorm:"column:opinion_on_touching_non_mahram" json:"opinion_on_touching_non_mahram"` // pendapat_menyentuh_non_mahram OpinionOnVeil *string `gorm:"column:opinion_on_veil" json:"opinion_on_veil"` // pendapat_tentang_cadar OpinionOnBeard *string `gorm:"column:opinion_on_beard" json:"opinion_on_beard"` // pendapat_tentang_jenggot_pada_laki_laki OpinionOnPantsAboveAnkle *string `gorm:"column:opinion_on_pants_above_ankle" json:"opinion_on_pants_above_ankle"` // pendapat_tentang_celana_di_atas_mata_kaki WeeklyReligiousStudies *string `gorm:"column:weekly_religious_studies" json:"weekly_religious_studies"` // kajian_yang_diikuti_dalam_sepekan FollowedUstadz *string `gorm:"column:followed_ustadz" json:"followed_ustadz"` // ustadz_yang_diikuti CreatedAt time.Time `gorm:"column:created_at;autoCreateTime" json:"created_at" counter:"skip"` UpdatedAt time.Time `gorm:"column:updated_at;autoUpdateTime" json:"updated_at" counter:"skip"` FieldCounter } EducationCV struct { ID int64 `gorm:"column:id;primaryKey;autoIncrement" json:"id" counter:"skip"` // id AccountID int64 `gorm:"column:account_id;not null" json:"account_id" counter:"skip"` // id akun Account *Account `gorm:"foreignKey:AccountID;constraint:OnDelete:CASCADE" json:"account,omitempty" counter:"skip"` // relasi ke akun LastEducation *string `gorm:"column:last_education" json:"last_education"` // pendidikan terakhir EducationInstitute *string `gorm:"column:education_institute" json:"education_institute"` // institusi pendidikan EducationMajor *string `gorm:"column:education_major" json:"education_major"` // jurusan pendidikan YearStart *int `gorm:"column:year_start" json:"year_start"` // tahun masuk YearGraduate *int `gorm:"column:year_graduate" json:"year_graduate"` // tahun lulus CreatedAt time.Time `gorm:"column:created_at;autoCreateTime" json:"created_at" counter:"skip"` // tanggal dibuat UpdatedAt time.Time `gorm:"column:updated_at;autoUpdateTime" json:"updated_at" counter:"skip"` // tanggal diperbarui } JobCV struct { ID int64 `gorm:"column:id;primaryKey;autoIncrement" json:"id" counter:"skip"` // id AccountID int64 `gorm:"column:account_id;not null" json:"account_id" counter:"skip"` // id akun Account *Account `gorm:"foreignKey:AccountID;constraint:OnDelete:CASCADE" json:"account,omitempty" counter:"skip"` // relasi ke akun InstitutionName *string `gorm:"column:institution_name" json:"institution_name"` // nama instansi CurrentJob *string `gorm:"column:current_job" json:"current_job"` // pekerjaan saat ini YearStartedWorking *int `gorm:"column:year_started_working" json:"year_started_working"` // tahun mulai bekerja MonthlyIncome *string `gorm:"column:monthly_income" json:"monthly_income"` // penghasilan per bulan IncomeSources *pq.StringArray `gorm:"column:income_sources;type:varchar(255)[]" json:"income_sources"` // sumber penghasilan CreatedAt time.Time `gorm:"column:created_at;autoCreateTime" json:"created_at" counter:"skip"` // tanggal dibuat UpdatedAt time.Time `gorm:"column:updated_at;autoUpdateTime" json:"updated_at" counter:"skip"` // tanggal diperbarui } AchievementCV struct { ID int64 `gorm:"column:id;primaryKey;autoIncrement" json:"id" counter:"skip"` // id AccountID int64 `gorm:"column:account_id;not null" json:"account_id" counter:"skip"` // id akun Account *Account `gorm:"foreignKey:AccountID;constraint:OnDelete:CASCADE" json:"account,omitempty" counter:"skip"` // relasi ke akun AchievementOrAward *string `gorm:"column:achievement_or_award" json:"achievement_or_award"` // prestasi atau penghargaan CreatedAt time.Time `gorm:"column:created_at;autoCreateTime" json:"created_at" counter:"skip"` // tanggal dibuat UpdatedAt time.Time `gorm:"column:updated_at;autoUpdateTime" json:"updated_at" counter:"skip"` // tanggal diperbarui } ) func (a AccountDetails) TotalFields() int { return a.FieldCounter.TotalFields(a) } func (a AccountDetails) GetFilledFields() []string { return a.FieldCounter.GetFilledFields(a) } func (p PersonalityAndPreferenceCV) TotalFields() int { return p.FieldCounter.TotalFields(p) } func (p PersonalityAndPreferenceCV) GetFilledFields() []string { return p.FieldCounter.GetFilledFields(p) } func (p PhysicalAndHealthCV) TotalFields() int { return p.FieldCounter.TotalFields(p) } func (p PhysicalAndHealthCV) GetFilledFields() []string { return p.FieldCounter.GetFilledFields(p) } func (w WorshipAndReligiousUnderstandingCV) TotalFields() int { return w.FieldCounter.TotalFields(w) } func (w WorshipAndReligiousUnderstandingCV) GetFilledFields() []string { return w.FieldCounter.GetFilledFields(w) } var WorshipFields = []string{ "ObligatoryPrayer", "CongregationalPrayer", "TahajjudPrayer", "DhuhaPrayer", "DaudFasting", "AyyamulBidhFasting", "QuranReadingAbility", "QuranMemorization", "WeeklyReligiousStudyFrequency", "HajjOrUmrah", } var ReligiousUnderstandingFields = []string{ "ListeningToMusic", "OpinionOnIkhtilat", "OpinionOnTouchingNonMahram", "OpinionOnVeil", "OpinionOnBeard", "OpinionOnPantsAboveAnkle", "WeeklyReligiousStudies", "FollowedUstadz", } func (w WorshipAndReligiousUnderstandingCV) GetTotalFieldsWorship() int { return w.FieldCounter.CountFieldsByNames(w, WorshipFields) } func (w WorshipAndReligiousUnderstandingCV) GetTotalFieldsReligiousUnderstanding() int { return w.FieldCounter.CountFieldsByNames(w, ReligiousUnderstandingFields) } func (w WorshipAndReligiousUnderstandingCV) GetFilledFieldsWorship() []string { return w.FieldCounter.GetFilledFieldsByNames(w, WorshipFields) } func (w WorshipAndReligiousUnderstandingCV) GetFilledFieldsReligiousUnderstanding() []string { return w.FieldCounter.GetFilledFieldsByNames(w, ReligiousUnderstandingFields) } type ( MarriageReadinessProfile struct { ID int64 `gorm:"column:id;primaryKey;autoIncrement" json:"id"` AccountID int64 `gorm:"column:account_id;not null;unique" json:"account_id"` Account *Account `gorm:"foreignKey:AccountID;constraint:OnDelete:CASCADE" json:"account,omitempty"` // Visi Misi Rumah Tangga MarriageVision *string `gorm:"column:marriage_vision" json:"marriage_vision"` // Apa visi dan tujuan utama kamu dalam membangun rumah tangga? LivingPlan *string `gorm:"column:living_plan" json:"living_plan"` // Setelah menikah, kamu berencana tinggal di mana? SpouseRoles *string `gorm:"column:spouse_roles" json:"spouse_roles"` // Menurutmu, apa peran utama suami dan istri dalam rumah tangga? SpouseRights *string `gorm:"column:spouse_rights" json:"spouse_rights"` // Apa saja hak suami dan istri menurutmu? ConflictResolution *string `gorm:"column:conflict_resolution" json:"conflict_resolution"` // Jika terjadi konflik, bagaimana kamu menyikapinya? ParentingStyle *string `gorm:"column:parenting_style" json:"parenting_style"` // Setelah punya anak, pola pengasuhan seperti apa yang kamu inginkan? // Konsep Acara Pernikahan ReadyToMarryDuration *string `gorm:"column:ready_to_marry_duration" json:"ready_to_marry_duration"` // Setelah taaruf dimulai, berapa lama kamu butuh untuk siap menikah? WeddingConcept *string `gorm:"column:wedding_concept" json:"wedding_concept"` // Seperti apa konsep pernikahan yang kamu harapkan? WeddingFunding *string `gorm:"column:wedding_funding" json:"wedding_funding"` // Apakah kamu sudah mempersiapkan dana pernikahan? Dari mana sumbernya? // Karir Kedepannya CareerAfterMarriage *string `gorm:"column:career_after_marriage" json:"career_after_marriage"` // Apakah kamu ingin tetap bekerja setelah menikah? TimeManagement *string `gorm:"column:time_management" json:"time_management"` // Bagaimana kamu membagi waktu antara keluarga, ibadah, dan pekerjaan? CareerGoals *string `gorm:"column:career_goals" json:"career_goals"` // Apa impian karier atau cita-cita kamu dalam 5 sampai 10 tahun ke depan? SelfDevelopment *string `gorm:"column:self_development" json:"self_development"` // Apa usaha kamu untuk terus mengembangkan diri dan skill? // Pendidikan Keluarga DelayChildren *string `gorm:"column:delay_children" json:"delay_children"` // Apakah kamu berencana menunda memiliki anak? ChildEducationPlan *string `gorm:"column:child_education_plan" json:"child_education_plan"` // Apakah kamu sudah punya rencana pendidikan anak? ReligiousEmotionalBond *string `gorm:"column:religious_emotional_bond" json:"religious_emotional_bond"` // Bagaimana cara menjaga nilai agama & kedekatan emosional dengan anak? ParentingChallenges *string `gorm:"column:parenting_challenges" json:"parenting_challenges"` // Saat menghadapi tantangan pengasuhan, bagaimana kamu menyikapinya? // Finansial Keluarga MonthlyFinance *string `gorm:"column:monthly_finance" json:"monthly_finance"` // Bagaimana kamu mengelola keuangan bulanan? FamilyResponsibility *string `gorm:"column:family_responsibility" json:"family_responsibility"` // Apakah kamu masih punya tanggungan keluarga setelah menikah? DebtStatus *string `gorm:"column:debt_status" json:"debt_status"` // Apakah kamu punya cicilan/utang setelah menikah? FinanceSharing *string `gorm:"column:finance_sharing" json:"finance_sharing"` // Setelah menikah, bagaimana pembagian tanggung jawab keuangan? IncomeGapView *string `gorm:"column:income_gap_view" json:"income_gap_view"` // Pandangan kamu jika istri berpenghasilan lebih besar dari suami? // Keputusan dan Komunikasi DecisionMaking *string `gorm:"column:decision_making" json:"decision_making"` // Dalam mengambil keputusan, kamu lebih mempertimbangkan pasangan atau sendiri? GrowthTogether *string `gorm:"column:growth_together" json:"growth_together"` // Apakah kamu siap berjuang bersama pasangan? Apa saja yang ingin diperjuangkan? ParentIntervention *string `gorm:"column:parent_intervention" json:"parent_intervention"` // Sejauh mana orang tua/mertua boleh ikut campur dalam rumah tangga? HabitResponse *string `gorm:"column:habit_response" json:"habit_response"` // Bagaimana kamu menyikapi kebiasaan pasangan yang kurang kamu sukai? CreatedAt time.Time `gorm:"column:created_at;autoCreateTime" json:"created_at"` UpdatedAt time.Time `gorm:"column:updated_at;autoUpdateTime" json:"updated_at"` } ) type ( PartnerCriteria struct { ID int64 `gorm:"column:id;primaryKey;autoIncrement" json:"id"` AccountID int64 `gorm:"column:account_id;not null;unique" json:"account_id"` Account *Account `gorm:"foreignKey:AccountID;constraint:OnDelete:CASCADE" json:"account,omitempty"` // Kriteria Umum ExpecteMinAgeLimit *int `gorm:"column:expected_min_age_limit" json:"expected_min_age_limit"` // batas usia pasangan yang diharapkan ExpecteMaxAgeLimit *int `gorm:"column:expected_max_age_limit" json:"expected_max_age_limit"` // batas usia pasangan yang diharapkan ExpectedDomicile *string `gorm:"column:expected_domicile" json:"expected_domicile"` // domisili pasangan yang diharapkan AcceptedMaritalStatus *pq.StringArray `gorm:"column:accepted_marital_status;type:varchar(255)[]" json:"accepted_marital_status"` // status pernikahan yang diterima PartnerFamilyReligion *string `gorm:"column:partner_family_religion" json:"partner_family_religion"` // agama yang dianut keluarga pasangan PartnerWeeklyReligiousStudyFrequency *string `gorm:"column:partner_weekly_religious_study_frequency" json:"partner_weekly_religious_study_frequency"` // rata-rata jumlah kajian yang diikuti pasangan per pekan PartnerMonthlySpendingEstimate *string `gorm:"column:partner_monthly_spending_estimate" json:"partner_monthly_spending_estimate"` // estimasi pengeluaran pasangan per bulan PartnerCanCook *string `gorm:"column:partner_can_cook" json:"partner_can_cook"` // apakah pasangan diharapkan bisa memasak // Kriteria Fisik ExpectedBodyShapes *pq.StringArray `gorm:"column:expected_body_shapes;type:varchar(255)[]" json:"expected_body_shapes"` // bentuk tubuh yang diharapkan ExpectedSkinColors *pq.StringArray `gorm:"column:expected_skin_colors;type:varchar(255)[]" json:"expected_skin_colors"` // warna kulit yang diharapkan ExpectedHairTypes *pq.StringArray `gorm:"column:expected_hair_types;type:varchar(255)[]" json:"expected_hair_types"` // tipe rambut yang diharapkan ExpectedHairThickness *pq.StringArray `gorm:"column:expected_hair_thickness;type:varchar(255)[]" json:"expected_hair_thickness"` // jenis rambut yang diharapkan ExpectedMinHeightLimit *int `gorm:"column:expected_min_height_limit" json:"expected_min_height_limit"` // tinggi badan yang diharapkan ExpectedMaxHeightLimit *int `gorm:"column:expected_max_height_limit" json:"expected_max_height_limit"` // tinggi badan yang diharapkan // Pendidikan & Pekerjaan ExpectedPartnerIncome *string `gorm:"column:expected_partner_income" json:"expected_partner_income"` // penghasilan pasangan per bulan yang diharapkan ExpectedLastEducation *pq.StringArray `gorm:"column:expected_last_education;type:varchar(255)[]" json:"expected_last_education"` // pendidikan terakhir yang diharapkan // ExpectedIncomeSources *pq.StringArray `gorm:"column:expected_income_sources;type:varchar(255)[]" json:"expected_income_sources"` // sumber penghasilan pasangan // ExpectedJobType *string `gorm:"column:expected_job_type" json:"expected_job_type"` // jenis pekerjaan pasangan yang diharapkan CreatedAt time.Time `gorm:"column:created_at;autoCreateTime" json:"created_at"` UpdatedAt time.Time `gorm:"column:updated_at;autoUpdateTime" json:"updated_at"` } ) // Gorm table name settings func (Account) TableName() string { return "account" } func (AccountDetails) TableName() string { return "account_details" } func (EmailVerification) TableName() string { return "email_verifications" } func (ExternalAuth) TableName() string { return "extern_auth" } func (FCM) TableName() string { return "fcm" } func (ForgotPassword) TableName() string { return "forgot_password" } func (Academy) TableName() string { return "academy" } func (AcademyMaterial) TableName() string { return "academy_materials" } func (AcademyMaterialProgress) TableName() string { return "academy_materials_progress" } func (RegionProvince) TableName() string { return "region_provinces" } func (RegionCity) TableName() string { return "region_cities" } func (Quiz) TableName() string { return "quizzes" } func (Question) TableName() string { return "questions" } func (Answer) TableName() string { return "answers" } func (QuizAttempt) TableName() string { return "quiz_attempts" } func (UserAnswer) TableName() string { return "user_answers" } func (OptionCategory) TableName() string { return "option_categories" } func (OptionValues) TableName() string { return "option_values" } func (PersonalityAndPreferenceCV) TableName() string { return "personality_and_preference_cv" } func (FamilyMemberCV) TableName() string { return "family_member_cv" } func (PhysicalAndHealthCV) TableName() string { return "physical_and_health_cv" } func (WorshipAndReligiousUnderstandingCV) TableName() string { return "worship_and_religious_understanding_cv" } func (EducationCV) TableName() string { return "education_cv" } func (JobCV) TableName() string { return "job_cv" } func (AchievementCV) TableName() string { return "achievement_cv" } func (MarriageReadinessProfile) TableName() string { return "marriage_readiness_profile" }