pub/internal/entry/usecase.go

89 lines
2.4 KiB
Go

package entry
import (
"context"
"net/url"
"source.toby3d.me/toby3d/pub/internal/domain"
)
type (
UpdateOptions struct {
Add *domain.Entry
Replace *domain.Entry
Delete *domain.Entry
}
UseCase interface {
// Create creates a new entry. Returns map or rel links, like Permalink
// or created post, shortcode and syndication.
Create(ctx context.Context, e domain.Entry) (*domain.Entry, error)
// Update updates exist entry properties on provided u.
//
// TODO(toby3d): return Location header if entry updates their URL.
Update(ctx context.Context, u *url.URL, options UpdateOptions) (*domain.Entry, error)
// Delete destroy entry on provided URL.
Delete(ctx context.Context, u *url.URL) (bool, error)
// Undelete recover deleted entry on provided URL.
Undelete(ctx context.Context, u *url.URL) (*domain.Entry, error)
// Source returns properties of entry on provided URL.
Source(ctx context.Context, u *url.URL) (*domain.Entry, error)
}
dummyUseCase struct{}
stubUseCase struct {
entry *domain.Entry
err error
ok bool
}
)
func NewDummyUseCase() *dummyUseCase {
return &dummyUseCase{}
}
func (dummyUseCase) Create(_ context.Context, _ domain.Entry) (map[string]*url.URL, error) {
return nil, nil
}
func (dummyUseCase) Update(_ context.Context, _ *url.URL, _ UpdateOptions) (*domain.Entry, error) {
return nil, nil
}
func (dummyUseCase) Delete(_ context.Context, _ *url.URL) (bool, error) { return false, nil }
func (dummyUseCase) Undelete(_ context.Context, _ *url.URL) (*domain.Entry, error) { return nil, nil }
func (dummyUseCase) Source(_ context.Context, _ *url.URL) (*domain.Entry, error) { return nil, nil }
func NewStubUseCase(err error, e *domain.Entry, ok bool) *stubUseCase {
return &stubUseCase{
entry: e,
err: err,
ok: ok,
}
}
func (ucase *stubUseCase) Create(_ context.Context, _ domain.Entry) (*domain.Entry, error) {
return ucase.entry, ucase.err
}
func (ucase *stubUseCase) Update(_ context.Context, _ *url.URL, _ UpdateOptions) (*domain.Entry, error) {
return ucase.entry, ucase.err
}
func (ucase *stubUseCase) Delete(_ context.Context, _ *url.URL) (bool, error) {
return ucase.ok, ucase.err
}
func (ucase *stubUseCase) Undelete(_ context.Context, _ *url.URL) (*domain.Entry, error) {
return ucase.entry, ucase.err
}
func (ucase *stubUseCase) Source(_ context.Context, _ *url.URL) (*domain.Entry, error) {
return ucase.entry, ucase.err
}