67 lines
1.8 KiB
Go

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
}