postgres

package
v0.0.0-...-c0093cc Latest Latest
Warning

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

Go to latest
Published: Jul 25, 2026 License: MIT Imports: 15 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var INDIANAPOLIS, _ = time.LoadLocation("America/Indiana/Indianapolis")

Functions

func BulkStarEvents

func BulkStarEvents(db *sql.DB, email string, year int, eventIds []string, overwrite bool, asGroups bool, asPurchased bool) error

func CleanupTransaction

func CleanupTransaction(err error, tx *sql.Tx)

Use as defer func() { CleanupTransaction(err, tx) }() Need to do it in an anonymous function to avoid binding err and tx

func ClearStarredEvents

func ClearStarredEvents(db *sql.DB, email string, year int) error

func DeleteParty

func DeleteParty(db *sql.DB, id int64) error

func DeletePartyTicket

func DeletePartyTicket(db *sql.DB, partyId int64, ticketId string) error

DeletePartyTicket deletes a ticket.

func GetConnStr

func GetConnStr() string

func GetLastUpdate

func GetLastUpdate(db *sql.DB) (time.Time, error)

func IsAdmin

func IsAdmin(db *sql.DB, email string) (bool, error)

func JoinParty

func JoinParty(db *sql.DB, partyId int64, email string) error

func LoadPartyMemberPurchases

func LoadPartyMemberPurchases(db *sql.DB, partyId int64, year int) (map[string]int, error)

func LoadSimilarEvents

func LoadSimilarEvents(ctx context.Context, db *sql.DB, eventId string, userEmail string) ([]*events.GenconEvent, error)

func LoadStarredEvents

func LoadStarredEvents(db *sql.DB, userEmail string, year int) ([]*events.GenconEvent, error)

func LogUpdate

func LogUpdate(db *sql.DB, stats UpdateStats, success bool, errorMsg string) error

func MatchPendingPartyTickets

func MatchPendingPartyTickets(db *sql.DB, partyId int64, year int) error

MatchPendingPartyTickets scans existing party tickets and reassigns unmapped tickets when new members join or update profiles.

func MergeOrgs

func MergeOrgs(db *sql.DB, orgs []int64) error

func NormalizeUserStarredEvents

func NormalizeUserStarredEvents(q queryable, email string, year int) error

func OpenDb

func OpenDb() (*sql.DB, error)

func RemoveMember

func RemoveMember(db *sql.DB, partyId int64, email string) error

func RenameParty

func RenameParty(db *sql.DB, id int64, name string) error

func ResolveNumericEventIds

func ResolveNumericEventIds(db *sql.DB, year int, numericIds []string) (map[string]string, error)

func SaveWishlistCache

func SaveWishlistCache(db *sql.DB, email string, year int, items []WishlistCacheItem, updatedAt time.Time) error

func SyncTicketHoldersToStarredEvents

func SyncTicketHoldersToStarredEvents(db *sql.DB, holderEmail string, formerHolderEmail string, eventId string) error

SyncTicketHoldersToStarredEvents keeps the starred_events table in sync with ticket holders.

func UpdateDisplayName

func UpdateDisplayName(db *sql.DB, email string, displayName string) error

func UpdatePartyLeader

func UpdatePartyLeader(db *sql.DB, id int64, newLeaderEmail string) error

func UpdatePartyMemberInfo

func UpdatePartyMemberInfo(db *sql.DB, partyId int64, email string, displayName string, genconName string, genconId string, genconEmail string) error

func UpdateUserGenconInfo

func UpdateUserGenconInfo(db *sql.DB, email string, displayName string, genconName string, genconId string, genconEmail string) error

func UpdateWishlistConstraints

func UpdateWishlistConstraints(db *sql.DB, email string, constraints []WishlistConstraint) error

Types

type AgendaEntry

type AgendaEntry struct {
	Event *events.GenconEvent
	Tier  string
}

func LoadAgenda

func LoadAgenda(db *sql.DB, userEmail string, year int) ([]*AgendaEntry, error)

type CalendarEventCluster

type CalendarEventCluster struct {
	EventId          string
	Title            string
	StartTime        time.Time
	EndTime          time.Time
	GenconUrl        string
	PlannerUrl       string
	ShortCategory    string
	ShortDescription string
	SimilarCount     int
	Location         string
	RoomName         string
	TableNumber      string
}

func LoadStarredEventClusters

func LoadStarredEventClusters(db *sql.DB, userEmail string, year int, starredEvents []*events.GenconEvent) ([]*CalendarEventCluster, error)

type CategorySummary

type CategorySummary struct {
	Name  string
	Code  string
	Count int
}

func LoadCategorySummary

func LoadCategorySummary(db *sql.DB, year int) ([]*CategorySummary, error)

type EventGroup

type EventGroup struct {
	Name              string
	EventId           string
	Description       string
	ShortCategory     string
	GameSystem        string
	OrgGroup          string
	OrgId             int
	Count             int
	TotalTickets      int
	WedEvents         int
	WedTotalTickets   int
	WedTickets        int
	ThursEvents       int
	ThursTotalTickets int
	ThursTickets      int
	FriEvents         int
	FriTotalTickets   int
	FriTickets        int
	SatEvents         int
	SatTotalTickets   int
	SatTickets        int
	SunEvents         int
	SunTotalTickets   int
	SunTickets        int
}

func FindEvents

func FindEvents(db *sql.DB, query *ParsedQuery) ([]*EventGroup, error)

func LoadEventGroupsForCategory

func LoadEventGroupsForCategory(ctx context.Context, db *sql.DB, short_category string, year int) ([]*EventGroup, error)

func LoadStarredEventGroups

func LoadStarredEventGroups(db *sql.DB, userEmail string, year int) ([]*EventGroup, error)

func SearchEvents

func SearchEvents(ctx context.Context, db *sql.DB, query SearchQuery) ([]*EventGroup, error)

type EventOrgMetadata

type EventOrgMetadata struct {
	OrgGroup string
	Title    string
	Year     int
	GmNames  string
	Email    string
	Website  string
}

func LoadEventOrgMetadata

func LoadEventOrgMetadata(db *sql.DB) ([]EventOrgMetadata, error)

type FamilySyncInfo

type FamilySyncInfo struct {
	BggId      int64
	GameIds    []int64
	LastUpdate time.Time
}

func LoadFamilySyncInfos

func LoadFamilySyncInfos(db *sql.DB) ([]*FamilySyncInfo, error)

type Game

type Game struct {
	Name          string
	Type          string // Will be game, or expansion
	BggId         int64
	FamilyIds     []int64
	LastUpdate    time.Time
	NumRatings    int64
	AvgRatings    float64
	NumWeights    int64
	AvgWeight     float64
	MinPlayers    int64
	MaxPlayers    int64
	BestPlayers   string
	Description   string
	YearPublished int64
}

func LoadGameCacheEntries

func LoadGameCacheEntries(db *sql.DB) ([]*Game, error)

func LoadGames

func LoadGames(db *sql.DB) ([]*Game, error)

func (*Game) Upsert

func (g *Game) Upsert(db *sql.DB) error

type GameFamily

type GameFamily struct {
	Name       string
	BggId      int64
	GameIds    []int64
	LastUpdate time.Time
}

func LoadFamilies

func LoadFamilies(db *sql.DB) ([]*GameFamily, error)

func (*GameFamily) Upsert

func (gf *GameFamily) Upsert(db *sql.DB) error

type GameSyncInfo

type GameSyncInfo struct {
	BggId          int64
	FamilyIds      []int64
	LastUpdate     time.Time
	HasDescription bool
}

func LoadGameSyncInfos

func LoadGameSyncInfos(db *sql.DB) ([]*GameSyncInfo, error)

type MemberInterest

type MemberInterest struct {
	Email       string `json:"email"`
	DisplayName string `json:"displayName"`
	Tier        string `json:"tier"`
}

type Organizer

type Organizer struct {
	Id        int64
	Aliases   []string
	NumEvents int64
}

func LoadAllOrgs

func LoadAllOrgs(db *sql.DB) ([]*Organizer, error)

type ParsedQuery

type ParsedQuery struct {
	// TODO(alek): make a significantly more robust query parser
	// add exact match on fields,
	TextQueries     []string
	Year            int
	DaysOfWeek      map[string]bool
	RawQuery        string
	StartBeforeHour int
	StartAfterHour  int
	EndBeforeHour   int
	EndAfterHour    int
	OrgId           int
}

type Party

type Party struct {
	Id          int64
	Name        string
	Year        int64
	LeaderEmail string
	ShortCode   string
	Members     []*User
}

A party is a group of users playing together in a given year.

func LoadParties

func LoadParties(db *sql.DB, currentUser *User) ([]*Party, error)

func LoadParty

func LoadParty(db *sql.DB, id int64) (*Party, error)

func LoadPartyByCode

func LoadPartyByCode(db *sql.DB, code string) (*Party, error)

func NewParty

func NewParty(db *sql.DB, name string, year int64, founderEmail string) (*Party, error)

type PartyTicket

type PartyTicket struct {
	TicketId            string    `json:"ticketId"`
	PartyId             int64     `json:"partyId"`
	EventId             string    `json:"eventId"`
	Year                int       `json:"year"`
	PurchaserEmail      string    `json:"purchaserEmail"`
	GenconPurchaserName string    `json:"genconPurchaserName"`
	GenconTicketId      string    `json:"genconTicketId"`
	GenconRecipientName string    `json:"genconRecipientName"`
	GenconRecipientId   string    `json:"genconRecipientId"`
	HolderEmail         string    `json:"holderEmail"`
	HolderDisplayName   string    `json:"holderDisplayName"`
	TicketType          string    `json:"ticketType"`
	TicketStatus        string    `json:"ticketStatus"`
	TransferStatus      string    `json:"transferStatus"`
	CreatedAt           time.Time `json:"createdAt"`
	LastModified        time.Time `json:"lastModified"`
	// Enriched fields from events table
	EventTitle     string `json:"eventTitle,omitempty"`
	EventStartTime string `json:"eventStartTime,omitempty"`
	EventEndTime   string `json:"eventEndTime,omitempty"`
	EventLocation  string `json:"eventLocation,omitempty"`
	RoomName       string `json:"roomName,omitempty"`
	TableNumber    string `json:"tableNumber,omitempty"`
	EventCategory  string `json:"eventCategory,omitempty"`
	EventMapLink   string `json:"eventMapLink,omitempty"`
}

func AddPartyTicket

func AddPartyTicket(db *sql.DB, partyId int64, year int, eventId, purchaserEmail, genconRecipientName, holderEmail, ticketType string) (*PartyTicket, error)

AddPartyTicket manually adds a ticket.

func LoadPartyTickets

func LoadPartyTickets(db *sql.DB, partyId int64, year int) ([]*PartyTicket, error)

LoadPartyTickets retrieves all tickets for a party in a given year.

func SyncPartyTickets

func SyncPartyTickets(db *sql.DB, partyId int64, year int, authEmail string, tickets []TicketSyncInput) ([]*PartyTicket, error)

SyncPartyTickets batch-ingests tickets from the Chrome extension.

func ToggleTicketReturn

func ToggleTicketReturn(db *sql.DB, partyId int64, ticketId string) (*PartyTicket, error)

ToggleTicketReturn toggles a ticket between 'active' and 'returned'.

func UpdateTicketPurchaser

func UpdateTicketPurchaser(db *sql.DB, partyId int64, ticketId string, newPurchaserEmail string) (*PartyTicket, error)

type PersistedEventInfo

type PersistedEventInfo struct {
	LastModified     time.Time
	TicketsAvailable int
}

type SearchQuery

type SearchQuery struct {
	Year              int
	CategoryShortCode string
	MinWedTickets     int
	MinThuTickets     int
	MinFriTickets     int
	MinSatTickets     int
	MinSunTickets     int
	RawQuery          string
	OrgId             int
	OnlyFree          bool
	UserEmail         string
}

type SharedInterestGroup

type SharedInterestGroup struct {
	ClusterId       string           `json:"clusterId"`
	RepEventId      string           `json:"repEventId"`
	AllEventIds     []string         `json:"allEventIds"`
	Title           string           `json:"title"`
	ShortCategory   string           `json:"shortCategory"`
	GameSystem      string           `json:"gameSystem"`
	TotalSessions   int              `json:"totalSessions"`
	TotalTickets    int              `json:"totalTickets"`
	MemberInterests []MemberInterest `json:"memberInterests"`
	GroupScore      int              `json:"groupScore"`
}

func LoadPartySharedInterests

func LoadPartySharedInterests(db *sql.DB, partyId int64, year int) ([]*SharedInterestGroup, error)

type StarredEvent

type StarredEvent struct {
	EventId    string
	Level      string // "group" or "event"
	Tier       string // "must_have", "very_interested", "somewhat_interested", "not_interested"
	GroupTier  string
	IsOverride bool
}

type TicketSyncInput

type TicketSyncInput struct {
	EventId           string `json:"eventId"`
	GenconTicketId    string `json:"genconTicketId"`
	PurchaserGenconId string `json:"purchaserGenconId"`
	PurchaserName     string `json:"purchaserName"`
	RecipientGenconId string `json:"recipientGenconId"`
	RecipientName     string `json:"recipientName"`
	TicketType        string `json:"ticketType"`
	Status            string `json:"status"` // "active" or "returned"
}

type TicketTransfer

type TicketTransfer struct {
	TransferId   string    `json:"transferId"`
	TicketId     string    `json:"ticketId"`
	PartyId      int64     `json:"partyId"`
	FromEmail    string    `json:"fromEmail"`
	ToEmail      string    `json:"toEmail"`
	TransferType string    `json:"transferType"`
	Status       string    `json:"status"`
	CreatedAt    time.Time `json:"createdAt"`
	UpdatedAt    time.Time `json:"updatedAt"`
}

func InitiateTicketTransfer

func InitiateTicketTransfer(db *sql.DB, partyId int64, ticketId, fromEmail, toEmail, transferType string) (*TicketTransfer, error)

InitiateTicketTransfer initiates a transfer between party members.

func RespondTicketTransfer

func RespondTicketTransfer(db *sql.DB, partyId int64, transferId, action, callerEmail string) (*TicketTransfer, error)

RespondTicketTransfer handles accept/reject/complete actions for pending e-ticket transfers.

type UpdateStats

type UpdateStats struct {
	Seen      int
	Inserted  int
	Updated   int
	Deleted   int
	Unchanged int
}

func BulkUpdateEvents

func BulkUpdateEvents(tx *sql.Tx, parsedEvents []*events.GenconEvent) (UpdateStats, error)

type User

type User struct {
	Email       string
	DisplayName string
	GenconName  string
	GenconId    string
	GenconEmail string
}

func LoadOrCreateUser

func LoadOrCreateUser(db *sql.DB, email string) (*User, error)

type UserStarredEvents

type UserStarredEvents struct {
	Email         string
	StarredEvents []StarredEvent
}

func GetAllStarredIds

func GetAllStarredIds(db *sql.DB, email string) (*UserStarredEvents, error)

func GetStarredIds

func GetStarredIds(db *sql.DB, email string, year int) (*UserStarredEvents, error)

func RemoveStarredEventGroup

func RemoveStarredEventGroup(db *sql.DB, email string, eventId string) (*UserStarredEvents, error)

func UpdateStarredEvent

func UpdateStarredEvent(db *sql.DB, email string, eventId string, tier string, starGroup bool, add bool) (*UserStarredEvents, error)

func UpdateStarredEventInternal

func UpdateStarredEventInternal(db *sql.DB, email string, eventId string, tier string, starGroup bool, add bool, fullResponse bool) (*UserStarredEvents, error)

func UpdateStarredEventMinimal

func UpdateStarredEventMinimal(db *sql.DB, email string, eventId string, tier string, starGroup bool, add bool) (*UserStarredEvents, error)

func (*UserStarredEvents) GetTier

func (u *UserStarredEvents) GetTier(eventId string) string

type WishlistCacheItem

type WishlistCacheItem struct {
	EventId   string
	Rank      int
	Status    string
	Reasoning []string
	Score     float64
}

func GetWishlistCache

func GetWishlistCache(db *sql.DB, email string, year int) ([]WishlistCacheItem, bool, time.Time, error)

type WishlistConstraint

type WishlistConstraint struct {
	DayOfWeek          int // -1 for Every Day, 0-6 for Sun-Sat
	StartHour          int
	StartMinute        int
	EndHour            int
	EndMinute          int
	MinDurationMinutes int // 0 means hard block, > 0 means flexible block
}

func GetWishlistConstraints

func GetWishlistConstraints(db *sql.DB, email string) ([]WishlistConstraint, error)

Jump to

Keyboard shortcuts

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