veza/dev-environment/templates/backend-repository.template.go
2025-12-03 22:56:50 +01:00

78 lines
1.9 KiB
Go

package repository
import (
"context"
"veza-backend-api/internal/models"
"gorm.io/gorm"
)
// {{REPOSITORY_NAME}}Repository implements persistence for {{ENTITY}}
type {{REPOSITORY_NAME}}Repository struct {
db *gorm.DB
}
// New{{REPOSITORY_NAME}}Repository creates a new {{REPOSITORY_NAME}}Repository instance
func New{{REPOSITORY_NAME}}Repository(db *gorm.DB) *{{REPOSITORY_NAME}}Repository {
return &{{REPOSITORY_NAME}}Repository{
db: db,
}
}
// Create creates a new {{ENTITY}} in the database
func (r *{{REPOSITORY_NAME}}Repository) Create(
ctx context.Context,
{{ENTITY_LOWER}} *models.{{ENTITY}},
) error {
if err := r.db.WithContext(ctx).Create({{ENTITY_LOWER}}).Error; err != nil {
return fmt.Errorf("failed to create {{ENTITY_LOWER}}: %w", err)
}
return nil
}
// FindByID finds a {{ENTITY}} by ID
func (r *{{REPOSITORY_NAME}}Repository) FindByID(
ctx context.Context,
id uuid.UUID,
) (*models.{{ENTITY}}, error) {
var {{ENTITY_LOWER}} models.{{ENTITY}}
if err := r.db.WithContext(ctx).
Where("id = ?", id).
First(&{{ENTITY_LOWER}}).Error; err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
return nil, types.ErrNotFound("{{ENTITY_LOWER}} not found")
}
return nil, fmt.Errorf("failed to find {{ENTITY_LOWER}}: %w", err)
}
return &{{ENTITY_LOWER}}, nil
}
// Update updates an existing {{ENTITY}}
func (r *{{REPOSITORY_NAME}}Repository) Update(
ctx context.Context,
{{ENTITY_LOWER}} *models.{{ENTITY}},
) error {
if err := r.db.WithContext(ctx).
Save({{ENTITY_LOWER}}).Error; err != nil {
return fmt.Errorf("failed to update {{ENTITY_LOWER}}: %w", err)
}
return nil
}
// Delete deletes a {{ENTITY}} by ID
func (r *{{REPOSITORY_NAME}}Repository) Delete(
ctx context.Context,
id uuid.UUID,
) error {
if err := r.db.WithContext(ctx).
Delete(&models.{{ENTITY}}{}, "id = ?", id).Error; err != nil {
return fmt.Errorf("failed to delete {{ENTITY_LOWER}}: %w", err)
}
return nil
}