models

package
v0.0.0-...-3c7337f Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 21, 2024 License: AGPL-3.0 Imports: 5 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func GetContentPrefix

func GetContentPrefix(contactType ContactType) string

Types

type Category

type Category struct {
	Model

	Name string `gorm:"type:varchar(255);unique;not null" json:"name" validate:"required,max=255"`
	Tag  []Tag  `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"`
}

type CategoryRequestBody

type CategoryRequestBody struct {
	Name string `json:"name" validate:"required,max=255"`
}

type Club

type Club struct {
	Model

	SoftDeletedAt gorm.DeletedAt `gorm:"type:timestamptz;default:NULL" json:"-" validate:"-"`

	Name                 string           `gorm:"type:varchar(255);not null" json:"name" validate:"required,max=255"`
	Preview              string           `gorm:"type:varchar(255);not null" json:"preview" validate:"required,max=255"`
	Description          string           `gorm:"type:text;not null" json:"description" validate:"required,http_url,s3_url,max=255"`
	NumMembers           int              `gorm:"type:int;not null" json:"num_members" validate:"required,min=1"`
	IsRecruiting         bool             `gorm:"type:bool;default:false;not null" json:"is_recruiting" validate:"required"`
	RecruitmentCycle     RecruitmentCycle `` /* 137-byte string literal not displayed */
	RecruitmentType      RecruitmentType  `` /* 144-byte string literal not displayed */
	WeeklyTimeCommitment int              `gorm:"type:int;default:NULL" json:"weekly_time_commitment" validate:"omitempty,min=1"`
	OneWordToDescribeUs  string           `gorm:"type:varchar(255);default:NULL" json:"one_word_to_describe_us" validate:"omitempty,max=255"`
	ApplicationLink      string           `gorm:"type:varchar(255);default:NULL" json:"application_link" validate:"required,max=255,http_url"`

	Parent            *uuid.UUID       `gorm:"foreignKey:Parent" json:"-" validate:"uuid4"`
	Tag               []Tag            `gorm:"many2many:club_tags;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"`
	Admin             []User           `gorm:"many2many:user_club_admins;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"required"`
	Member            []User           `gorm:"many2many:user_club_members;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"required"`
	Follower          []User           `gorm:"many2many:user_club_followers;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"`
	IntendedApplicant []User           `gorm:"many2many:user_club_intended_applicants;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"`
	Comment           []Comment        `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"`
	PointOfContact    []PointOfContact `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"`
	Contact           []Contact        `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"`
	// Event
	HostEvent   []Event        `gorm:"foreignKey:Host;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"`
	Event       []Event        `gorm:"many2many:club_events;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"`
	Notifcation []Notification `gorm:"polymorphic:Reference;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"`
}

func (*Club) EmbeddingString

func (c *Club) EmbeddingString() string

func (*Club) Namespace

func (c *Club) Namespace() string

func (*Club) SearchId

func (c *Club) SearchId() string

type ClubQueryParams

type ClubQueryParams struct {
	Tags             []string          `query:"tags"`
	MinMembers       int               `query:"min_members"`
	MaxMembers       int               `query:"max_members"`
	RecruitmentCycle *RecruitmentCycle `query:"recruitment_cycle"`
	IsRecruiting     *bool             `query:"is_recruiting"`
	Limit            int               `query:"limit"`
	Page             int               `query:"page"`
	Search           string            `query:"search"`
}

func (*ClubQueryParams) IntoWhere

func (cqp *ClubQueryParams) IntoWhere() string

type ClubSearch

type ClubSearch struct {
	SearchString string `query:"search"`
}

func NewClubSearch

func NewClubSearch(searchQuery string) *ClubSearch

func (*ClubSearch) EmbeddingString

func (cs *ClubSearch) EmbeddingString() string

func (*ClubSearch) Namespace

func (cs *ClubSearch) Namespace() string

func (*ClubSearch) SearchId

func (cs *ClubSearch) SearchId() string

dummy searchID

type Clubs

type Clubs []Club

func (Clubs) Len

func (c Clubs) Len() int

func (Clubs) String

func (c Clubs) String(i int) string

type College

type College string
const (
	CAMD College = "CAMD" // College of Arts, Media and Design
	DMSB College = "DMSB" // D'Amore-McKim School of Business
	KCCS College = "KCCS" // Khoury College of Computer Sciences
	CE   College = "CE"   // College of Engineering
	BCHS College = "BCHS" // Bouvé College of Health Sciences
	SL   College = "SL"   // School of Law
	CPS  College = "CPS"  // College of Professional Studies
	CS   College = "CS"   // College of Science
	CSSH College = "CSSH" // College of Social Sciences and Humanities
)

type Comment

type Comment struct {
	Model

	Question        string `gorm:"type:varchar(255);not null" json:"question" validate:"required,max=255"`
	Answer          string `gorm:"type:varchar(255);not null" json:"answer" validate:",max=255"`
	NumFoundHelpful uint   `gorm:"type:int;default:0;not null" json:"num_found_helpful" validate:"min=0"`

	AskedByID uuid.UUID `gorm:"type:uuid;not null" json:"-" validate:"uuid4"`
	AskedBy   User      `gorm:"foreignKey:AskedByID;not null" json:"-" validate:"-"`

	ClubID uuid.UUID `gorm:"type:uuid;not null" json:"-" validate:"uuid4"`
	Club   Club      `gorm:"foreignKey:ClubID;not null" json:"-" validate:"-"`

	AnsweredByID *uuid.UUID `gorm:"type:uuid" json:"-" validate:"uuid4"`
	AnsweredBy   *User      `gorm:"foreignKey:AnsweredBy" json:"-" validate:"-"`
}

type Contact

type Contact struct {
	Model

	Type    ContactType `` /* 184-byte string literal not displayed */
	Content string      `gorm:"type:varchar(255);not null" json:"content" validate:"required,max=255"`

	ClubID uuid.UUID `gorm:"foreignKey:ClubID;uniqueIndex:idx_contact_type;not null" json:"-" validate:"uuid4"`
}

type ContactType

type ContactType string
const (
	Facebook   ContactType = "facebook"
	Instagram  ContactType = "instagram"
	X          ContactType = "x"
	LinkedIn   ContactType = "linkedin"
	YouTube    ContactType = "youtube"
	GitHub     ContactType = "github"
	Slack      ContactType = "slack"
	Discord    ContactType = "discord"
	Email      ContactType = "email"
	CustomSite ContactType = "customSite"
)

type CreateClubRequestBody

type CreateClubRequestBody struct {
	UserID               uuid.UUID        `json:"user_id" validate:"required,uuid4"`
	Name                 string           `json:"name" validate:"required,max=255"`
	Preview              string           `json:"preview" validate:"required,max=255"`
	Description          string           `json:"description" validate:"required,http_url,s3_url,max=255"`
	IsRecruiting         bool             `json:"is_recruiting" validate:"required"`
	RecruitmentCycle     RecruitmentCycle `json:"recruitment_cycle" validate:"required,max=255,oneof=fall spring fallSpring always"`
	RecruitmentType      RecruitmentType  `json:"recruitment_type" validate:"required,max=255,oneof=unrestricted tryout application"`
	WeeklyTimeCommitment *int             `json:"weekly_time_commitment" validate:"omitempty,min=1"`
	OneWordToDescribeUs  string           `json:"one_word_to_describe_us" validate:"omitempty,max=255"`
	ApplicationLink      string           `json:"application_link" validate:"required,max=255,http_url"`
}

type CreateClubTagsRequestBody

type CreateClubTagsRequestBody struct {
	Tags []uuid.UUID `json:"tags" validate:"required"`
}

type CreateEventRequestBody

type CreateEventRequestBody struct {
	Name        string    `json:"name" validate:"required,max=255"`
	Preview     string    `json:"preview" validate:"required,max=255"`
	Content     string    `json:"content" validate:"required,max=255"`
	StartTime   time.Time `json:"start_time" validate:"required,ltecsfield=EndTime"`
	EndTime     time.Time `json:"end_time" validate:"required,gtecsfield=StartTime"`
	Location    string    `json:"location" validate:"required,max=255"`
	EventType   EventType `json:"event_type" validate:"required,max=255,oneof=open membersOnly"`
	IsRecurring *bool     `json:"is_recurring" validate:"required"`

	// TODO club/tag/notification logic
	Host         *uuid.UUID     `json:"host" validate:"required,uuid4"`
	Clubs        []Club         `json:"-" validate:"omitempty"`
	Tag          []Tag          `json:"-" validate:"omitempty"`
	Notification []Notification `json:"-" validate:"omitempty"`

	// TODO validate if isRecurring, then series is required
	Series CreateSeriesRequestBody `json:"series" validate:"-"`
}

TODO We will likely need to update the create and update structs to account for recurring series

type CreateFileRequestBody

type CreateFileRequestBody struct {
	OwnerID   uuid.UUID `json:"owner_id" validate:"required,uuid4"`
	OwnerType string    `json:"owner_type" validate:"required,max=255"`
}

type CreatePointOfContactBody

type CreatePointOfContactBody struct {
	Name     string `json:"name" validate:"required,max=255"`
	Email    string `json:"email" validate:"required,email,max=255"`
	Position string `json:"position" validate:"required,max=255"`
}

type CreateSeriesRequestBody

type CreateSeriesRequestBody struct {
	RecurringType  RecurringType `json:"recurring_type" validate:"required,max=255,oneof=daily weekly monthly"`
	MaxOccurrences int           `json:"max_occurrences" validate:"required,min=2"`
}

type CreateTagRequestBody

type CreateTagRequestBody struct {
	Name       string    `json:"name" validate:"required,max=255"`
	CategoryID uuid.UUID `json:"category_id" validate:"required,uuid4"`
}

type CreateUserRequestBody

type CreateUserRequestBody struct {
	FirstName string `json:"first_name" validate:"required,max=255"`
	LastName  string `json:"last_name" validate:"required,max=255"`
	Email     string `json:"email" validate:"required,email,neu_email,max=255"`
	Password  string `json:"password" validate:"required,max=255"` // MARK: must be validated manually
	// Optional fields
	Major0          Major           `` /* 2621-byte string literal not displayed */
	Major1          Major           `` /* 2621-byte string literal not displayed */
	Major2          Major           `` /* 2621-byte string literal not displayed */
	College         College         `json:"college" validate:"omitempty,oneof=CAMD DMSB KCCS CE BCHS SL CPS CS CSSH"`
	GraduationCycle GraduationCycle `json:"graduation_cycle" validate:"omitempty,max=255,oneof=december may"`
	GraduationYear  int16           `json:"graduation_year" validate:"omitempty"`
}

type CreateUserTagsBody

type CreateUserTagsBody struct {
	Tags []uuid.UUID `json:"tags" validate:"required"`
}

type EmailRequestBody

type EmailRequestBody struct {
	Email string `json:"email" validate:"required,email"`
}

type Event

type Event struct {
	Model

	Name        string     `gorm:"type:varchar(255);not null" json:"name" validate:"required,max=255"`
	Preview     string     `gorm:"type:varchar(255);not null" json:"preview" validate:"required,max=255"`
	Content     string     `gorm:"type:text;not null" json:"content" validate:"required,max=255"`
	StartTime   time.Time  `gorm:"type:timestamptz;not null" json:"start_time" validate:"required,ltecsfield=EndTime"`
	EndTime     time.Time  `gorm:"type:timestamptz;not null" json:"end_time" validate:"required,gtecsfield=StartTime"`
	Location    string     `gorm:"type:varchar(255);not null" json:"location" validate:"required,max=255"`
	EventType   EventType  `gorm:"type:varchar(255);default:open;not null" json:"event_type" validate:"required,max=255,oneof=open membersOnly"`
	IsRecurring bool       `gorm:"type:bool;default:false;not null" json:"is_recurring" validate:"-"`
	MeetingLink string     `gorm:"type:varchar(255);" json:"meeting_link" validate:"url"`
	Host        *uuid.UUID `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;not null;" json:"host" validate:"uuid4"`

	RSVP         []User         `gorm:"many2many:user_event_rsvps;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"`
	Waitlist     []User         `gorm:"many2many:user_event_waitlists;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"`
	Clubs        []Club         `gorm:"many2many:club_events;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"`
	Tag          []Tag          `gorm:"many2many:event_tags;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"`
	Notification []Notification `gorm:"polymorphic:Reference;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"`
}

type EventInstanceException

type EventInstanceException struct {
	Model
	EventID       int `gorm:"type:uuid;not null" json:"event_id" validate:"required"`
	Event         Event
	IsRescheduled bool      `gorm:"type:bool;default:true;not null" json:"is_rescheduled" validate:"required"`
	IsCancelled   bool      `gorm:"type:bool;default:false;not null" json:"is_cancelled" validate:"required"`
	StartTime     time.Time `gorm:"type:timestamptz;not null" json:"start_time" validate:"required,datetime,ltecsfield=EndTime"`
	EndTime       time.Time `gorm:"type:timestamptz;not null" json:"end_time" validate:"required,datetime,gtecsfield=StartTime"`
}

Not needed for now, we will just update the events separately

type EventSeries

type EventSeries struct {
	EventID  uuid.UUID `gorm:"type:uuid;not null" json:"event_id" validate:"uuid4"`
	Event    Event     `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"`
	SeriesID uuid.UUID `gorm:"type:uuid;not null" json:"series_id" validate:"uuid4"`
	Series   Series    `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"`
}

type EventType

type EventType string
const (
	Open        EventType = "open"
	MembersOnly EventType = "membersOnly"
)

type File

type File struct {
	Model

	OwnerID   uuid.UUID `gorm:"uniqueIndex:compositeindex;index;not null;type:uuid" json:"-" validate:"required,uuid4"`
	OwnerType string    `gorm:"uniqueIndex:compositeindex;index;not null;type:varchar(255)" json:"-" validate:"required,max=255"`

	FileName  string `gorm:"type:varchar(255);not null" json:"file_name" validate:"required,max=255"`
	FileType  string `gorm:"type:varchar(255);not null" json:"file_type" validate:"required,max=255"`
	FileSize  int    `gorm:"type:int;not null" json:"file_size" validate:"required,min=1"`
	FileURL   string `gorm:"type:varchar(255);not null" json:"file_url" validate:"required,max=255"`
	ObjectKey string `gorm:"type:varchar(255);not null" json:"object_key" validate:"required,max=255"`
}

type FileInfo

type FileInfo struct {
	FileName  string
	FileType  string
	FileSize  int
	FileURL   string
	ObjectKey string
}

type Follower

type Follower struct {
	UserID uuid.UUID `gorm:"type:uuid;primaryKey;not null" json:"user_id" validate:"required,uuid4"`
	ClubID uuid.UUID `gorm:"type:uuid;primaryKey;not null" json:"club_id" validate:"required,uuid4"`

	Club *Club `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"`
	User *User `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"`
}

func (Follower) TableName

func (Follower) TableName() string

type GraduationCycle

type GraduationCycle string
const (
	December GraduationCycle = "december"
	May      GraduationCycle = "may"
)

type LoginUserResponseBody

type LoginUserResponseBody struct {
	Email    string `json:"email" validate:"required,email"`
	Password string `json:"password" validate:"required,max=255"` // MARK: must be validated manually
}

type Major

type Major string
const (
	AfricanaStudies                                           Major = "africanaStudies"
	AmericanSignLanguage                                      Major = "americanSignLanguage"
	AmericanSignLanguageEnglishInterpreting                   Major = "americanSignLanguage-EnglishInterpreting"
	AppliedPhysics                                            Major = "appliedPhysics"
	ArchitecturalStudies                                      Major = "architecturalStudies"
	Architecture                                              Major = "architecture"
	ArtArtVisualStudies                                       Major = "art:ArtVisualStudies"
	BehavioralNeuroscience                                    Major = "behavioralNeuroscience"
	Biochemistry                                              Major = "biochemistry"
	Bioengineering                                            Major = "bioengineering"
	Biology                                                   Major = "biology"
	BiomedicalPhysics                                         Major = "biomedicalPhysics"
	BusinessAdministration                                    Major = "businessAdministration"
	BusinessAdministrationAccounting                          Major = "businessAdministration:Accounting"
	BusinessAdministrationAccountingAndAdvisoryServices       Major = "businessAdministration:AccountingAndAdvisoryServices"
	BusinessAdministrationBrandManagement                     Major = "businessAdministration:BrandManagement"
	BusinessAdministrationBusinessAnalytics                   Major = "businessAdministration:BusinessAnalytics"
	BusinessAdministrationCorporateInnovation                 Major = "businessAdministration:CorporateInnovation"
	BusinessAdministrationEntrepreneurialStartups             Major = "businessAdministration:EntrepreneurialStartups"
	BusinessAdministrationFamilyBusiness                      Major = "businessAdministration:FamilyBusiness"
	BusinessAdministrationFinance                             Major = "businessAdministration:Finance"
	BusinessAdministrationFintech                             Major = "businessAdministration:Fintech"
	BusinessAdministrationHealthcareManagementAndConsulting   Major = "businessAdministration:HealthcareManagementAndConsulting"
	BusinessAdministrationManagement                          Major = "businessAdministration:Management"
	BusinessAdministrationManagementInformationSystems        Major = "businessAdministration:ManagementInformationSystems"
	BusinessAdministrationMarketing                           Major = "businessAdministration:Marketing"
	BusinessAdministrationMarketingAnalytics                  Major = "businessAdministration:MarketingAnalytics"
	BusinessAdministrationSocialInnovationAndEntrepreneurship Major = "businessAdministration:SocialInnovationAndEntrepreneurship"
	BusinessAdministrationSupplyChainManagement               Major = "businessAdministration:SupplyChainManagement"
	CellAndMolecularBiology                                   Major = "cellAndMolecularBiology"
	ChemicalEngineering                                       Major = "chemicalEngineering"
	Chemistry                                                 Major = "chemistry"
	CivilEngineering                                          Major = "civilEngineering"
	CommunicationStudies                                      Major = "communicationStudies"
	ComputerEngineering                                       Major = "computerEngineering"
	ComputerScience                                           Major = "computerScience"
	ComputingAndLaw                                           Major = "computingAndLaw"
	CriminologyAndCriminalJustice                             Major = "criminologyAndCriminalJustice"
	CulturalAnthropology                                      Major = "culturalAnthropology"
	Cybersecurity                                             Major = "cybersecurity"
	DataScience                                               Major = "dataScience"
	Design                                                    Major = "design"
	Economics                                                 Major = "economics"
	ElectricalEngineering                                     Major = "electricalEngineering"
	English                                                   Major = "english"
	EnvironmentalAndSustainabilityStudies                     Major = "environmentalAndSustainabilityStudies"
	EnvironmentalEngineering                                  Major = "environmentalEngineering"
	EnvironmentalScience                                      Major = "environmentalScience"
	EnvironmentalStudies                                      Major = "environmentalStudies"
	GameArtAndAnimation                                       Major = "gameArtAndAnimation"
	GameDesign                                                Major = "gameDesign"
	GlobalAsianStudies                                        Major = "globalAsianStudies"
	HealthScience                                             Major = "healthScience"
	History                                                   Major = "history"
	HistoryCultureAndLaw                                      Major = "historyCultureAndLaw"
	HumanServices                                             Major = "humanServices"
	IndustrialEngineering                                     Major = "industrialEngineering"
	InternationalAffairs                                      Major = "internationalAffairs"
	InternationalBusiness                                     Major = "internationalBusiness"
	InternationalBusinessAccounting                           Major = "internationalBusiness:Accounting"
	InternationalBusinessAccountingAndAdvisoryServices        Major = "internationalBusiness:AccountingAndAdvisoryServices"
	InternationalBusinessBrandManagement                      Major = "internationalBusiness:BrandManagement"
	InternationalBusinessBusinessAnalytics                    Major = "internationalBusiness:BusinessAnalytics"
	InternationalBusinessCorporateInnovation                  Major = "internationalBusiness:CorporateInnovation"
	InternationalBusinessEntrepreneurialStartups              Major = "internationalBusiness:EntrepreneurialStartups"
	InternationalBusinessFamilyBusiness                       Major = "internationalBusiness:FamilyBusiness"
	InternationalBusinessFinance                              Major = "internationalBusiness:Finance"
	InternationalBusinessFintech                              Major = "internationalBusiness:Fintech"
	InternationalBusinessHealthcareManagementAndConsulting    Major = "internationalBusiness:HealthcareManagementAndConsulting"
	InternationalBusinessManagement                           Major = "internationalBusiness:Management"
	InternationalBusinessManagementInformationSystems         Major = "internationalBusiness:ManagementInformationSystems"
	InternationalBusinessMarketing                            Major = "internationalBusiness:Marketing"
	InternationalBusinessMarketingAnalytics                   Major = "internationalBusiness:MarketingAnalytics"
	InternationalBusinessSocialInnovationAndEntrepreneurship  Major = "internationalBusiness:SocialInnovationAndEntrepreneurship"
	InternationalBusinessSupplyChainManagement                Major = "internationalBusiness:SupplyChainManagement"
	Journalism                                                Major = "journalism"
	LandscapeArchitecture                                     Major = "landscapeArchitecture"
	Linguistics                                               Major = "linguistics"
	MarineBiology                                             Major = "marineBiology"
	Mathematics                                               Major = "mathematics"
	MechanicalEngineering                                     Major = "mechanicalEngineering"
	MediaAndScreenStudies                                     Major = "mediaAndScreenStudies"
	MediaArts                                                 Major = "mediaArts"
	Music                                                     Major = "music"
	MusicTechnology                                           Major = "musicTechnology"
	Nursing                                                   Major = "nursing"
	PharmaceuticalSciences                                    Major = "pharmaceuticalSciences"
	PharmacyPharmD                                            Major = "pharmacy(PharmD)"
	Philosophy                                                Major = "philosophy"
	Physics                                                   Major = "physics"
	PoliticalScience                                          Major = "politicalScience"
	PoliticsPhilosophyEconomics                               Major = "politicsPhilosophyEconomics"
	Psychology                                                Major = "psychology"
	PublicHealth                                              Major = "publicHealth"
	PublicRelations                                           Major = "publicRelations"
	ReligiousStudies                                          Major = "religiousStudies"
	Sociology                                                 Major = "sociology"
	Spanish                                                   Major = "spanish"
	SpeechLanguagePathologyAndAudiology                       Major = "speechLanguagePathologyAndAudiology"
	Theatre                                                   Major = "theatre"
)

see https://admissions.northeastern.edu/academics/areas-of-study/

type Membership

type Membership struct {
	UserID uuid.UUID `gorm:"type:uuid;primaryKey;not null" json:"user_id" validate:"required,uuid4"`
	ClubID uuid.UUID `gorm:"type:uuid;primaryKey;not null" json:"club_id" validate:"required,uuid4"`

	Club *Club `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"`
	User *User `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"`

	MembershipType MembershipType `gorm:"type:varchar(255);default:member;not null" json:"membership_type" validate:"required,oneof=member admin"`
}

func (Membership) TableName

func (Membership) TableName() string

type MembershipType

type MembershipType string
const (
	MembershipTypeMember MembershipType = "member"
	MembershipTypeAdmin  MembershipType = "admin"
)

type Model

type Model struct {
	ID        uuid.UUID `gorm:"type:uuid;primaryKey;default:uuid_generate_v4();not null" json:"id" example:"123e4567-e89b-12d3-a456-426614174000"`
	CreatedAt time.Time `gorm:"type:timestamp;default:CURRENT_TIMESTAMP;not null" json:"created_at" example:"2023-09-20T16:34:50Z"`
	UpdatedAt time.Time `gorm:"type:timestamp;default:CURRENT_TIMESTAMP;not null" json:"updated_at" example:"2023-09-20T16:34:50Z"`
}

type Notification

type Notification struct {
	Model

	SendAt   time.Time `gorm:"type:timestamptz;not null" json:"send_at" validate:"required"`
	Title    string    `gorm:"type:varchar(255);not null" json:"title" validate:"required,max=255"`
	Content  string    `gorm:"type:varchar(255);not null" json:"content" validate:"required,max=255"`
	DeepLink string    `gorm:"type:varchar(255);not null" json:"deep_link" validate:"required,max=255"`
	Icon     string    `gorm:"type:varchar(255);not null" json:"icon" validate:"required,s3_url,http_url,max=255"`

	ReferenceID   uuid.UUID        `gorm:"type:int;not null" json:"-" validate:"uuid4"`
	ReferenceType NotificationType `gorm:"type:varchar(255);not null" json:"-" validate:"max=255"`
}

type NotificationType

type NotificationType string
const (
	EventNotification NotificationType = "event"
	ClubNotification  NotificationType = "club"
)

type PointOfContact

type PointOfContact struct {
	Model

	Name     string `gorm:"type:varchar(255);not null" json:"name" validate:"required,max=255"`
	Email    string `gorm:"uniqueIndex:compositeindex;index;not null;type:varchar(255)" json:"email" validate:"required,email,max=255"`
	Position string `gorm:"type:varchar(255);not null" json:"position" validate:"required,max=255"`

	ClubID uuid.UUID `gorm:"uniqueIndex:compositeindex;index;foreignKey:ClubID;not null" json:"-" validate:"required,uuid4"`

	PhotoFile File `gorm:"polymorphic:Owner;not null" json:"photo_file"`
}

type PutContactRequestBody

type PutContactRequestBody struct {
	Type    ContactType `` /* 137-byte string literal not displayed */
	Content string      `json:"content" validate:"required,contact_pointer,max=255"`
}

type RecruitmentCycle

type RecruitmentCycle string
const (
	Fall       RecruitmentCycle = "fall"
	Spring     RecruitmentCycle = "spring"
	FallSpring RecruitmentCycle = "fallSpring"
	Always     RecruitmentCycle = "always"
)

type RecruitmentType

type RecruitmentType string
const (
	Unrestricted RecruitmentType = "unrestricted"
	Tryout       RecruitmentType = "tryout"
	Application  RecruitmentType = "application"
)

type RecurringType

type RecurringType string
const (
	Daily   RecurringType = "daily"
	Weekly  RecurringType = "weekly"
	Monthly RecurringType = "monthly"
)

type RefreshTokenRequestBody

type RefreshTokenRequestBody struct {
	RefreshToken string `json:"refresh_token" validate:"required"`
}

type Series

type Series struct {
	Model
	RecurringType  RecurringType `gorm:"type:varchar(255);default:open;not null" json:"recurring_type" validate:"max=255"`
	MaxOccurrences int           `gorm:"type:int;not null" json:"max_occurrences" validate:"min=1"`
	Events         []Event       `gorm:"many2many:event_series;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"events" validate:"-"`
}

type Tabler

type Tabler interface {
	TableName() string
}

type Tag

type Tag struct {
	Model

	Name string `gorm:"type:varchar(255);not null" json:"name" validate:"required,max=255"`

	CategoryID uuid.UUID `gorm:"type:uuid;not null" json:"category_id" validate:"required,uuid4"`

	User  []User  `gorm:"many2many:user_tags;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"`
	Club  []Club  `gorm:"many2many:club_tags;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"`
	Event []Event `gorm:"many2many:event_tags;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"`
}

type Tokens

type Tokens struct {
	AccessToken  string `json:"access_token"`
	RefreshToken string `json:"refresh_token"`
}

type UpdateClubRequestBody

type UpdateClubRequestBody struct {
	Name                 string           `json:"name" validate:"omitempty,max=255"`
	Preview              string           `json:"preview" validate:"omitempty,max=255"`
	Description          string           `json:"description" validate:"omitempty,http_url,s3_url,max=255"`
	IsRecruiting         bool             `json:"is_recruiting" validate:"omitempty"`
	RecruitmentCycle     RecruitmentCycle `json:"recruitment_cycle" validate:"required,max=255,oneof=fall spring fallSpring always"`
	RecruitmentType      RecruitmentType  `json:"recruitment_type" validate:"required,max=255,oneof=unrestricted tryout application"`
	WeeklyTimeCommitment *int             `json:"weekly_time_commitment" validate:"omitempty,min=1"`
	OneWordToDescribeUs  string           `json:"one_word_to_describe_us" validate:"omitempty,max=255"`
	ApplicationLink      string           `json:"application_link" validate:"omitempty,required,max=255,http_url"`
}

type UpdateEventRequestBody

type UpdateEventRequestBody struct {
	Name      string    `json:"name" validate:"omitempty,max=255"`
	Preview   string    `json:"preview" validate:"omitempty,max=255"`
	Content   string    `json:"content" validate:"omitempty,max=255"`
	StartTime time.Time `json:"start_time" validate:"omitempty,ltecsfield=EndTime"`
	EndTime   time.Time `json:"end_time" validate:"omitempty,gtecsfield=StartTime"`
	Location  string    `json:"location" validate:"omitempty,max=255"`
	EventType EventType `json:"event_type" validate:"omitempty,max=255,oneof=open membersOnly"`

	Host         *uuid.UUID     `json:"host" validate:"omitempty"`
	RSVP         []User         `json:"-" validate:"omitempty"`
	Waitlist     []User         `json:"-" validate:"omitempty"`
	Clubs        []Club         `json:"-" validate:"omitempty"`
	Tag          []Tag          `json:"-" validate:"omitempty"`
	Notification []Notification `json:"-" validate:"omitempty"`
}

type UpdatePasswordRequestBody

type UpdatePasswordRequestBody struct {
	OldPassword string `json:"old_password" validate:"required,max=255"`                                    // MARK: must be validated manually
	NewPassword string `json:"new_password" validate:"required,not_equal_if_not_empty=OldPassword,max=255"` // MARK: must be validated manually
}

type UpdatePointOfContactBody

type UpdatePointOfContactBody struct {
	Name     string `json:"name" validate:"omitempty,max=255"`
	Email    string `json:"email" validate:"omitempty,email,max=255"`
	Position string `json:"position" validate:"omitempty,max=255"`
}

type UpdateSeriesRequestBody

type UpdateSeriesRequestBody struct {
	RecurringType  RecurringType `json:"recurring_type" validate:"omitempty,max=255,oneof=daily weekly monthly"`
	MaxOccurrences int           `json:"max_occurrences" validate:"omitempty,min=2"`

	EventDetails UpdateEventRequestBody `json:"event_details" validate:"omitempty"`
}

TODO: probably need to make changes to this to update the events as well

type UpdateTagRequestBody

type UpdateTagRequestBody struct {
	Name       string    `json:"name" validate:"omitempty,max=255"`
	CategoryID uuid.UUID `json:"category_id" validate:"omitempty,uuid4"`
}

type UpdateUserRequestBody

type UpdateUserRequestBody struct {
	FirstName       string          `json:"first_name" validate:"omitempty,max=255"`
	LastName        string          `json:"last_name" validate:"omitempty,max=255"`
	Major0          Major           `` /* 2621-byte string literal not displayed */
	Major1          Major           `` /* 2621-byte string literal not displayed */
	Major2          Major           `` /* 2621-byte string literal not displayed */
	College         College         `json:"college" validate:"omitempty,oneof=CAMD DMSB KCCS CE BCHS SL CPS CS CSSH"`
	GraduationCycle GraduationCycle `json:"graduation_cycle" validate:"omitempty,max=255,oneof=december may"`
	GraduationYear  int16           `json:"graduation_year" validate:"omitempty"`
}

type User

type User struct {
	Model

	Role            UserRole        `gorm:"type:varchar(255);default:'student';not null" json:"role" validate:"required,oneof=super student"`
	FirstName       string          `gorm:"type:varchar(255);not null" json:"first_name" validate:"required,max=255"`
	LastName        string          `gorm:"type:varchar(255);not null" json:"last_name" validate:"required,max=255"`
	Email           string          `gorm:"type:varchar(255);unique;not null" json:"email" validate:"required,email,max=255"`
	PasswordHash    string          `gorm:"type:varchar(97);not null" json:"-" validate:"required,len=97"`
	Major0          Major           `` /* 2645-byte string literal not displayed */
	Major1          Major           `` /* 2647-byte string literal not displayed */
	Major2          Major           `` /* 2647-byte string literal not displayed */
	College         College         `gorm:"type:varchar(255);" json:"college" validate:"required,max=255"`
	GraduationCycle GraduationCycle `gorm:"type:varchar(255);" json:"graduation_cycle" validate:"required,max=255,oneof=december may"`
	GraduationYear  int16           `gorm:"type:smallint;" json:"graduation_year" validate:"required"`
	IsVerified      bool            `gorm:"type:boolean;default:false;not null" json:"is_verified"`

	Tag               []Tag     `gorm:"many2many:user_tags;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"`
	Admin             []Club    `gorm:"many2many:user_club_admins;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"`
	Member            []Club    `gorm:"many2many:user_club_members;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"`
	Follower          []Club    `gorm:"many2many:user_club_followers;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"`
	IntendedApplicant []Club    `gorm:"many2many:user_club_intended_applicants;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"`
	Asked             []Comment `gorm:"foreignKey:AskedByID;constraint:OnUpdate:CASCADE,OnDelete:SET NULL;" json:"-" validate:"-"`
	Answered          []Comment `gorm:"foreignKey:AnsweredByID;constraint:OnUpdate:CASCADE,OnDelete:SET NULL;" json:"-" validate:"-"`
	RSVP              []Event   `gorm:"many2many:user_event_rsvps;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"`
	Waitlist          []Event   `gorm:"many2many:user_event_waitlists;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-" validate:"-"`
}

func (*User) AfterCreate

func (u *User) AfterCreate(tx *gorm.DB) (err error)

func (*User) AfterDelete

func (u *User) AfterDelete(tx *gorm.DB) (err error)

type UserRole

type UserRole string
var (
	Super   UserRole = "super"
	Student UserRole = "student"
)

type Verification

type Verification struct {
	UserID    uuid.UUID        `gorm:"type:varchar(36);primaryKey;not null" json:"user_id" validate:"required,uuid4"`
	Token     string           `gorm:"type:varchar(255);unique" json:"token" validate:"required,max=255"`
	ExpiresAt time.Time        `gorm:"type:timestamp;primaryKey;not null" json:"expires_at" validate:"required"`
	Type      VerificationType `gorm:"type:varchar(255);not null" json:"type" validate:"required,oneof=email_verification password_reset"`
}

type VerificationType

type VerificationType string
const (
	EmailVerificationType VerificationType = "email_verification"
	PasswordResetType     VerificationType = "password_reset"
)

type VerifyEmailRequestBody

type VerifyEmailRequestBody struct {
	Email string `json:"email" validate:"required,email"`
	Token string `json:"token" validate:"required,len=6"`
}

type VerifyPasswordResetTokenRequestBody

type VerifyPasswordResetTokenRequestBody struct {
	Token             string `json:"token" validate:"required"`
	NewPassword       string `json:"new_password" validate:"required,min=8,password"`
	VerifyNewPassword string `json:"verify_new_password" validate:"required,min=8,password,eqfield=NewPassword"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL