Add context for everything

Signed-off-by: Asai Neko <sugar@sne.moe>
This commit is contained in:
2026-01-21 16:43:46 +08:00
parent 83df018d34
commit b8f89ab655
27 changed files with 309 additions and 127 deletions

View File

@@ -1,6 +1,7 @@
package data
import (
"context"
"time"
"github.com/go-viper/mapstructure/v2"
@@ -31,10 +32,10 @@ type EventSearchDoc struct {
EndTime time.Time `json:"end_time"`
}
func (self *Event) GetEventById(eventId uuid.UUID) (*Event, error) {
func (self *Event) GetEventById(ctx context.Context, eventId uuid.UUID) (*Event, error) {
var event Event
err := Database.
err := Database.WithContext(ctx).
Where("event_id = ?", eventId).
First(&event).Error
@@ -48,9 +49,9 @@ func (self *Event) GetEventById(eventId uuid.UUID) (*Event, error) {
return &event, nil
}
func (self *Event) UpdateEventById(eventId uuid.UUID) error {
func (self *Event) UpdateEventById(ctx context.Context, eventId uuid.UUID) error {
// DB transaction
if err := Database.Transaction(func(tx *gorm.DB) error {
if err := Database.WithContext(ctx).Transaction(func(tx *gorm.DB) error {
// Update by business key
if err := tx.
Model(&Event{}).
@@ -68,19 +69,19 @@ func (self *Event) UpdateEventById(eventId uuid.UUID) error {
}
// Sync search index
if err := self.UpdateSearchIndex(); err != nil {
if err := self.UpdateSearchIndex(ctx); err != nil {
return err
}
return nil
}
func (self *Event) Create() error {
func (self *Event) Create(ctx context.Context) error {
self.UUID = uuid.New()
self.EventId = uuid.New()
// DB transaction only
if err := Database.Transaction(func(tx *gorm.DB) error {
if err := Database.WithContext(ctx).Transaction(func(tx *gorm.DB) error {
if err := tx.Create(self).Error; err != nil {
return err
}
@@ -90,7 +91,7 @@ func (self *Event) Create() error {
}
// Search index (eventual consistency)
if err := self.UpdateSearchIndex(); err != nil {
if err := self.UpdateSearchIndex(ctx); err != nil {
// TODO: async retry / log
return err
}
@@ -98,20 +99,20 @@ func (self *Event) Create() error {
return nil
}
func (self *Event) GetFullTable() (*[]Event, error) {
func (self *Event) GetFullTable(ctx context.Context) (*[]Event, error) {
var events []Event
err := Database.Find(&events).Error
err := Database.WithContext(ctx).Find(&events).Error
if err != nil {
return nil, err
}
return &events, err
}
func (self *Event) FastListEvents(limit, offset int64) (*[]EventSearchDoc, error) {
func (self *Event) FastListEvents(ctx context.Context, limit, offset int64) (*[]EventSearchDoc, error) {
index := MeiliSearch.Index("event")
// Fast read from MeiliSearch (no DB involved)
result, err := index.Search("", &meilisearch.SearchRequest{
result, err := index.SearchWithContext(ctx, "", &meilisearch.SearchRequest{
Limit: limit,
Offset: offset,
})
@@ -127,7 +128,7 @@ func (self *Event) FastListEvents(limit, offset int64) (*[]EventSearchDoc, error
return &list, nil
}
func (self *Event) UpdateSearchIndex() error {
func (self *Event) UpdateSearchIndex(ctx context.Context) error {
doc := EventSearchDoc{
EventId: self.EventId.String(),
Name: self.Name,
@@ -143,15 +144,15 @@ func (self *Event) UpdateSearchIndex() error {
PrimaryKey: &primaryKey,
}
if _, err := index.UpdateDocuments([]EventSearchDoc{doc}, opts); err != nil {
if _, err := index.UpdateDocumentsWithContext(ctx, []EventSearchDoc{doc}, opts); err != nil {
return err
}
return nil
}
func (self *Event) DeleteSearchIndex() error {
func (self *Event) DeleteSearchIndex(ctx context.Context) error {
index := MeiliSearch.Index("event")
_, err := index.DeleteDocument(self.EventId.String(), nil)
_, err := index.DeleteDocumentWithContext(ctx, self.EventId.String(), nil)
return err
}