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 ProjectDatasource struct { db *gorm.DB } func NewProjectDatasource(db *gorm.DB) persistence.ProjectDatasource { return &ProjectDatasource{db: db} } func (r *ProjectDatasource) Get(ctx context.Context, id ulid.ULID) (*entities.Project, error) { var projectDBO dbo.ProjectDBO if err := r.db.WithContext(ctx).First(&projectDBO, "id = ?", id).Error; err != nil { return nil, err } project := &entities.Project{ EntityBase: entities.EntityBase{ ID: projectDBO.ID, CreatedAt: projectDBO.CreatedAt, UpdatedAt: projectDBO.UpdatedAt, }, Name: projectDBO.Name, CustomerID: projectDBO.CustomerID, } return project, nil } func (r *ProjectDatasource) Create(ctx context.Context, project *entities.Project) error { projectDBO := dbo.ProjectDBO{ ID: project.ID, CreatedAt: project.CreatedAt, UpdatedAt: project.UpdatedAt, Name: project.Name, CustomerID: project.CustomerID, } return r.db.WithContext(ctx).Create(&projectDBO).Error } func (r *ProjectDatasource) Update(ctx context.Context, project *entities.Project) error { projectDBO := dbo.ProjectDBO{ ID: project.ID, CreatedAt: project.CreatedAt, UpdatedAt: project.UpdatedAt, Name: project.Name, CustomerID: project.CustomerID, } return r.db.WithContext(ctx).Save(&projectDBO).Error } func (r *ProjectDatasource) Delete(ctx context.Context, id ulid.ULID) error { return r.db.WithContext(ctx).Delete(&dbo.ProjectDBO{}, "id = ?", id).Error }