67 lines
1.7 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 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
}