package event import ( "context" "go.uber.org/zap" "gorm.io/gorm" "furtuna-be/internal/common/logger" "furtuna-be/internal/entity" ) type EventRepoImpl struct { DB *gorm.DB } func NewEventRepo(db *gorm.DB) *EventRepoImpl { return &EventRepoImpl{DB: db} } func (e *EventRepoImpl) CreateEvent(ctx context.Context, event *entity.EventDB) (*entity.EventDB, error) { err := e.DB.Create(event).Error if err != nil { logger.ContextLogger(ctx).Error("error when create event", zap.Error(err)) return nil, err } return event, nil } func (e *EventRepoImpl) UpdateEvent(ctx context.Context, event *entity.EventDB) (*entity.EventDB, error) { if err := e.DB.Save(event).Error; err != nil { logger.ContextLogger(ctx).Error("error when update event", zap.Error(err)) return nil, err } return event, nil } func (e *EventRepoImpl) GetEventByID(ctx context.Context, id int64) (*entity.EventDB, error) { event := new(entity.EventDB) if err := e.DB.First(event, id).Error; err != nil { logger.ContextLogger(ctx).Error("error when get event by id", zap.Error(err)) return nil, err } return event, nil } func (e *EventRepoImpl) GetAllEvents(ctx context.Context, nameFilter string, limit, offset int) (entity.EventList, int, error) { var events []*entity.EventDB var total int64 query := e.DB query = query.Where("deleted_at is null") if nameFilter != "" { query = query.Where("name LIKE ?", "%"+nameFilter+"%") } if limit > 0 { query = query.Limit(limit) } if offset > 0 { query = query.Offset(offset) } if err := query.Find(&events).Error; err != nil { logger.ContextLogger(ctx).Error("error when get all events", zap.Error(err)) return nil, 0, err } if err := e.DB.Model(&entity.EventDB{}).Where(query).Count(&total).Error; err != nil { logger.ContextLogger(ctx).Error("error when count event", zap.Error(err)) return nil, 0, err } return events, int(total), nil } func (e *EventRepoImpl) DeleteEvent(ctx context.Context, id int64) error { event := new(entity.EventDB) event.ID = id if err := e.DB.Delete(event).Error; err != nil { logger.ContextLogger(ctx).Error("error when get all events", zap.Error(err)) return err } return nil }