87 lines
2.1 KiB
Go
87 lines
2.1 KiB
Go
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
|
|
}
|