package ds import ( "context" "github.com/oklog/ulid/v2" "github.com/timetracker/backend/internal/domain/entities" "github.com/timetracker/backend/internal/domain/persistence" "github.com/timetracker/backend/internal/infrastructure/persistence/db/dbo" "gorm.io/gorm" ) type ActivityDatasource struct { db *gorm.DB } func NewActivityDatasource(db *gorm.DB) persistence.ActivityDatasource { return &ActivityDatasource{db: db} } func (r *ActivityDatasource) Get(ctx context.Context, id ulid.ULID) (*entities.Activity, error) { var activityDBO dbo.ActivityDBO if err := r.db.WithContext(ctx).First(&activityDBO, "id = ?", id).Error; err != nil { return nil, err } activity := &entities.Activity{ EntityBase: entities.EntityBase{ ID: activityDBO.ID, CreatedAt: activityDBO.CreatedAt, UpdatedAt: activityDBO.UpdatedAt, }, Name: activityDBO.Name, BillingRate: activityDBO.BillingRate, } return activity, nil } func (r *ActivityDatasource) Create(ctx context.Context, activity *entities.Activity) error { activityDBO := dbo.ActivityDBO{ ID: activity.ID, CreatedAt: activity.CreatedAt, UpdatedAt: activity.UpdatedAt, Name: activity.Name, BillingRate: activity.BillingRate, } return r.db.WithContext(ctx).Create(&activityDBO).Error } func (r *ActivityDatasource) Update(ctx context.Context, activity *entities.Activity) error { activityDBO := dbo.ActivityDBO{ ID: activity.ID, CreatedAt: activity.CreatedAt, UpdatedAt: activity.UpdatedAt, Name: activity.Name, BillingRate: activity.BillingRate, } return r.db.WithContext(ctx).Save(&activityDBO).Error } func (r *ActivityDatasource) Delete(ctx context.Context, id ulid.ULID) error { return r.db.WithContext(ctx).Delete(&dbo.ActivityDBO{}, "id = ?", id).Error }