interactor

package
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 27, 2024 License: MIT Imports: 14 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type BranchSCM

type BranchSCM interface {
	ListBranches(ctx context.Context, u *ent.User, r *ent.Repo, opt *ListOptions) ([]*extent.Branch, error)
	GetBranch(ctx context.Context, u *ent.User, r *ent.Repo, branch string) (*extent.Branch, error)
	GetDefaultBranch(ctx context.Context, u *ent.User, r *ent.Repo) (*extent.Branch, error)
}

type ChatUserStore

type ChatUserStore interface {
	FindChatUserByID(ctx context.Context, id string) (*ent.ChatUser, error)
	CreateChatUser(ctx context.Context, cu *ent.ChatUser) (*ent.ChatUser, error)
	UpdateChatUser(ctx context.Context, cu *ent.ChatUser) (*ent.ChatUser, error)
	DeleteChatUser(ctx context.Context, cu *ent.ChatUser) error
}

ChatUserStore defines operations for working with chat_users.

type CommitSCM

type CommitSCM interface {
	ListCommits(ctx context.Context, u *ent.User, r *ent.Repo, branch string, opt *ListOptions) ([]*extent.Commit, error)
	CompareCommits(ctx context.Context, u *ent.User, r *ent.Repo, base, head string, opt *ListOptions) ([]*extent.Commit, []*extent.CommitFile, error)
	GetCommit(ctx context.Context, u *ent.User, r *ent.Repo, sha string) (*extent.Commit, error)
	ListCommitStatuses(ctx context.Context, u *ent.User, r *ent.Repo, sha string) ([]*extent.Status, error)
}

CommitSCM defines operations for working with commit.

type ConfigInteractor

type ConfigInteractor service

func (*ConfigInteractor) GetEvaluatedConfig

func (i *ConfigInteractor) GetEvaluatedConfig(ctx context.Context, u *ent.User, r *ent.Repo, v *extent.EvalValues) (*extent.Config, error)

GetEvaluatedConfig returns the config after evaluating the variables.

type ConfigSCM

type ConfigSCM interface {
	GetConfig(ctx context.Context, u *ent.User, r *ent.Repo) (*extent.Config, error)
	GetConfigRedirectURL(ctx context.Context, u *ent.User, r *ent.Repo) (string, error)
	GetNewConfigRedirectURL(ctx context.Context, u *ent.User, r *ent.Repo) (string, error)
}

type DeploymentInteractor

type DeploymentInteractor service

DeploymentInteractor provides application logic for interacting with deployments.

func (*DeploymentInteractor) CreateDeploymentStatus

func (i *DeploymentInteractor) CreateDeploymentStatus(ctx context.Context, ds *ent.DeploymentStatus) (*ent.DeploymentStatus, error)

CreateDeploymentStatus create a DeploymentStatus and dispatch the event.

func (*DeploymentInteractor) Deploy

func (i *DeploymentInteractor) Deploy(ctx context.Context, u *ent.User, r *ent.Repo, t *ent.Deployment, env *extent.Env) (*ent.Deployment, error)

Deploy posts a new deployment to SCM with the payload. But if it requires a review, it saves the payload on the store and waits until reviewed. It returns an error for a undeployable payload.

func (*DeploymentInteractor) DeployToRemote

func (i *DeploymentInteractor) DeployToRemote(ctx context.Context, u *ent.User, r *ent.Repo, d *ent.Deployment, env *extent.Env) (*ent.Deployment, error)

DeployToRemote posts a new deployment to SCM with the saved payload after review has finished. It returns an error for a undeployable payload.

type DeploymentSCM

type DeploymentSCM interface {
	// SCM returns the deployment with UID and SHA.
	CreateRemoteDeployment(ctx context.Context, u *ent.User, r *ent.Repo, d *ent.Deployment, e *extent.Env) (*extent.RemoteDeployment, error)
	CancelDeployment(ctx context.Context, u *ent.User, r *ent.Repo, d *ent.Deployment, s *ent.DeploymentStatus) error
}

DeploymentSCM defines operations for working with remote users.

type DeploymentStatisticsInteractor

type DeploymentStatisticsInteractor service

DeploymentStatisticsInteractor provides application logic for interacting with deployment_statistics.

func (*DeploymentStatisticsInteractor) ProduceDeploymentStatisticsOfRepo

func (i *DeploymentStatisticsInteractor) ProduceDeploymentStatisticsOfRepo(ctx context.Context, r *ent.Repo, d *ent.Deployment) (*ent.DeploymentStatistics, error)

type DeploymentStatisticsStore

type DeploymentStatisticsStore interface {
	ListAllDeploymentStatistics(ctx context.Context) ([]*ent.DeploymentStatistics, error)
	ListDeploymentStatisticsGreaterThanTime(ctx context.Context, updated time.Time) ([]*ent.DeploymentStatistics, error)
	FindDeploymentStatisticsOfRepoByEnv(ctx context.Context, r *ent.Repo, env string) (*ent.DeploymentStatistics, error)
	CreateDeploymentStatistics(ctx context.Context, s *ent.DeploymentStatistics) (*ent.DeploymentStatistics, error)
	UpdateDeploymentStatistics(ctx context.Context, s *ent.DeploymentStatistics) (*ent.DeploymentStatistics, error)
}

DeploymentStatisticsStore defines operations for working with deployment_statistics.

type DeploymentStatusSCM

type DeploymentStatusSCM interface {
	CreateRemoteDeploymentStatus(ctx context.Context, u *ent.User, r *ent.Repo, d *ent.Deployment, ds *extent.RemoteDeploymentStatus) (*extent.RemoteDeploymentStatus, error)
}

DeploymentStatusSCM defines operations for working with remote deployment status.

type DeploymentStatusStore

type DeploymentStatusStore interface {
	ListDeploymentStatuses(ctx context.Context, d *ent.Deployment) ([]*ent.DeploymentStatus, error)
	FindDeploymentStatusByID(ctx context.Context, id int) (*ent.DeploymentStatus, error)
	// CreateEntDeploymentStatus create a DeploymentStatus entity to the store.
	// Ent is appended to distinguish it from the interactor.
	CreateEntDeploymentStatus(ctx context.Context, s *ent.DeploymentStatus) (*ent.DeploymentStatus, error)
}

PermStore defines operations for working with deployment_statuses.

type DeploymentStore

type DeploymentStore interface {
	CountDeployments(ctx context.Context) (int, error)
	SearchDeploymentsOfUser(ctx context.Context, u *ent.User, opt *SearchDeploymentsOfUserOptions) ([]*ent.Deployment, error)
	ListInactiveDeploymentsLessThanTime(ctx context.Context, opt *ListInactiveDeploymentsLessThanTimeOptions) ([]*ent.Deployment, error)
	ListDeploymentsOfRepo(ctx context.Context, r *ent.Repo, opt *ListDeploymentsOfRepoOptions) ([]*ent.Deployment, error)
	FindDeploymentByID(ctx context.Context, id int) (*ent.Deployment, error)
	FindDeploymentByUID(ctx context.Context, uid int64) (*ent.Deployment, error)
	FindDeploymentOfRepoByNumber(ctx context.Context, r *ent.Repo, number int) (*ent.Deployment, error)
	FindPrevRunningDeployment(ctx context.Context, d *ent.Deployment) (*ent.Deployment, error)
	FindPrevSuccessDeployment(ctx context.Context, d *ent.Deployment) (*ent.Deployment, error)
	GetNextDeploymentNumberOfRepo(ctx context.Context, r *ent.Repo) (int, error)
	CreateDeployment(ctx context.Context, d *ent.Deployment) (*ent.Deployment, error)
	UpdateDeployment(ctx context.Context, d *ent.Deployment) (*ent.Deployment, error)
}

DeploymentStore defines operations for working with deployments.

type DeploymentValidator

type DeploymentValidator struct {
	// contains filtered or unexported fields
}

DeploymentValidator validate that it is deployable.

func NewDeploymentValidator

func NewDeploymentValidator(validators []Validator) *DeploymentValidator

func (*DeploymentValidator) Validate

func (v *DeploymentValidator) Validate(d *ent.Deployment) error

type DynamicPayloadValidator

type DynamicPayloadValidator struct {
	Env *extent.Env
}

DynamicPayloadValidator validate the payload with the specifications defined in the configuration file.

func (*DynamicPayloadValidator) Validate

func (v *DynamicPayloadValidator) Validate(d *ent.Deployment) error

type EventInteractor

type EventInteractor struct {
	// contains filtered or unexported fields
}

func (*EventInteractor) SubscribeEvent

func (i *EventInteractor) SubscribeEvent(fn func(e *ent.Event)) error

func (*EventInteractor) UnsubscribeEvent

func (i *EventInteractor) UnsubscribeEvent(fn func(e *ent.Event)) error

type EventStore

type EventStore interface {
	ListEventsGreaterThanTime(ctx context.Context, t time.Time) ([]*ent.Event, error)
	CreateEvent(ctx context.Context, e *ent.Event) (*ent.Event, error)
	CheckNotificationRecordOfEvent(ctx context.Context, e *ent.Event) bool
}

EventStore defines operations for working with events.

type FindRepoOfUserByNamespaceNameOptions

type FindRepoOfUserByNamespaceNameOptions struct {
	Namespace, Name string
}

FindRepoOfUserByNamespaceName specifies the parameters to get the repository.

type FrozenWindowValidator

type FrozenWindowValidator struct {
	Env *extent.Env
}

FrozenWindowValidator validate that the time is in the frozen window.

func (*FrozenWindowValidator) Validate

func (v *FrozenWindowValidator) Validate(d *ent.Deployment) error

type Interactor

type Interactor struct {
	Store
	SCM

	// services used for talking to different parts of the entities.
	*ConfigInteractor
	*DeploymentInteractor
	*DeploymentStatisticsInteractor
	*EventInteractor
	*LicenseInteractor
	*LockInteractor
	*RepoInteractor
	*ReviewInteractor
	*UserInteractor
	*PermInteractor
	// contains filtered or unexported fields
}

func NewInteractor

func NewInteractor(c *InteractorConfig) *Interactor

func (*Interactor) Init

func (i *Interactor) Init()

type InteractorConfig

type InteractorConfig struct {
	ServerHost       string
	ServerProto      string
	ServerProxyHost  string
	ServerProxyProto string

	OrgEntries    []string
	MemberEntries []string
	AdminUsers    []string

	WebhookSecret string

	LicenseKey string

	Store
	SCM
}

func (*InteractorConfig) BuildWebhookURL

func (c *InteractorConfig) BuildWebhookURL() string

func (*InteractorConfig) CheckWebhookSSL

func (c *InteractorConfig) CheckWebhookSSL() bool

type LicenseInteractor

type LicenseInteractor struct {
	LicenseKey string
	// contains filtered or unexported fields
}

func (*LicenseInteractor) GetLicense

func (i *LicenseInteractor) GetLicense(ctx context.Context) (*extent.License, error)

type ListDeploymentsOfRepoOptions

type ListDeploymentsOfRepoOptions struct {
	ListOptions

	Env    string
	Status string
}

type ListInactiveDeploymentsLessThanTimeOptions

type ListInactiveDeploymentsLessThanTimeOptions struct {
	ListOptions

	Less time.Time
}

ListInactiveDeploymentsLessThanTimeOptions specifies the optional parameters that get inactive deployments.

type ListOptions

type ListOptions struct {
	Page    int
	PerPage int
}

ListOptions specifies the optional parameters that support cursor pagination.

type ListPermsOfRepoOptions

type ListPermsOfRepoOptions struct {
	ListOptions

	// Query search the 'login' contains the query.
	Query string
}

type ListReposOfUserOptions

type ListReposOfUserOptions struct {
	ListOptions

	// Query search the repos contains the query in the namespace or name.
	Query string
	// Sorted instructs the system to sort by the 'deployed_at' field.
	Sorted bool
}

ListReposOfUser specifies the optional parameters that search repos.

type LockInteractor

type LockInteractor service

LockInteractor provides application logic for interacting with users.

type LockStore

type LockStore interface {
	ListExpiredLocksLessThanTime(ctx context.Context, t time.Time) ([]*ent.Lock, error)
	ListLocksOfRepo(ctx context.Context, r *ent.Repo) ([]*ent.Lock, error)
	FindLockOfRepoByEnv(ctx context.Context, r *ent.Repo, env string) (*ent.Lock, error)
	HasLockOfRepoForEnv(ctx context.Context, r *ent.Repo, env string) (bool, error)
	FindLockByID(ctx context.Context, id int) (*ent.Lock, error)
	CreateLock(ctx context.Context, l *ent.Lock) (*ent.Lock, error)
	UpdateLock(ctx context.Context, l *ent.Lock) (*ent.Lock, error)
	DeleteLock(ctx context.Context, l *ent.Lock) error
}

LockStore defines operations for working with locks.

type LockValidator

type LockValidator struct {
	Repo  *ent.Repo
	Store LockStore
}

LockValidator validate that the environment of the repository is locked.

func (*LockValidator) Validate

func (v *LockValidator) Validate(d *ent.Deployment) error

type PermInteractor

type PermInteractor struct {
	// contains filtered or unexported fields
}

func (*PermInteractor) ResyncPerms

func (i *PermInteractor) ResyncPerms(ctx context.Context) error

ResyncPerms delete all permissions not included in the organization entries.

type PermStore

type PermStore interface {
	ListPerms(ctx context.Context, opt *ListOptions) ([]*ent.Perm, error)
	ListPermsOfRepo(ctx context.Context, r *ent.Repo, opt *ListPermsOfRepoOptions) ([]*ent.Perm, error)
	FindPermOfRepo(ctx context.Context, r *ent.Repo, u *ent.User) (*ent.Perm, error)
	CreatePerm(ctx context.Context, p *ent.Perm) (*ent.Perm, error)
	UpdatePerm(ctx context.Context, p *ent.Perm) (*ent.Perm, error)
	DeletePermsOfUserLessThanSyncedAt(ctx context.Context, u *ent.User, t time.Time) (int, error)
	DeletePerm(ctx context.Context, p *ent.Perm) error
}

PermStore defines operations for working with perms.

type RefValidator

type RefValidator struct {
	Env *extent.Env
}

RefValidator validate that the 'ref' is matched with the 'deployable_ref' pattern.

func (*RefValidator) Validate

func (v *RefValidator) Validate(d *ent.Deployment) error

type RepoInteractor

type RepoInteractor struct {
	WebhookURL    string
	WebhookSSL    bool
	WebhookSecret string
	// contains filtered or unexported fields
}

RepoInteractor provides application logic for interacting with repos.

func (*RepoInteractor) ActivateRepo

func (i *RepoInteractor) ActivateRepo(ctx context.Context, u *ent.User, r *ent.Repo) (*ent.Repo, error)

ActivateRepo create a new hook to listen events, and saves the hook ID.

func (*RepoInteractor) DeactivateRepo

func (i *RepoInteractor) DeactivateRepo(ctx context.Context, u *ent.User, r *ent.Repo) (*ent.Repo, error)

DeactivateRepo removes the webhook.

type RepoSCM

type RepoSCM interface {
	ListRemoteRepos(ctx context.Context, u *ent.User) ([]*extent.RemoteRepo, error)
	CreateWebhook(ctx context.Context, u *ent.User, r *ent.Repo, c *extent.WebhookConfig) (int64, error)
	DeleteWebhook(ctx context.Context, u *ent.User, r *ent.Repo, id int64) error
}

RepoSCM defines operations for working with remote repos.

type RepoStore

type RepoStore interface {
	CountActiveRepos(ctx context.Context) (int, error)
	CountRepos(ctx context.Context) (int, error)
	ListReposOfUser(ctx context.Context, u *ent.User, opt *ListReposOfUserOptions) ([]*ent.Repo, error)
	FindRepoOfUserByID(ctx context.Context, u *ent.User, id int64) (*ent.Repo, error)
	FindRepoOfUserByNamespaceName(ctx context.Context, u *ent.User, opt *FindRepoOfUserByNamespaceNameOptions) (*ent.Repo, error)
	FindRepoByID(ctx context.Context, id int64) (*ent.Repo, error)
	SyncRepo(ctx context.Context, r *extent.RemoteRepo) (*ent.Repo, error)
	UpdateRepo(ctx context.Context, r *ent.Repo) (*ent.Repo, error)
	Activate(ctx context.Context, r *ent.Repo) (*ent.Repo, error)
	Deactivate(ctx context.Context, r *ent.Repo) (*ent.Repo, error)
}

RepoStore defines operations for working with repos.

type ReviewInteractor

type ReviewInteractor service

func (*ReviewInteractor) RespondReview

func (i *ReviewInteractor) RespondReview(ctx context.Context, rv *ent.Review) (*ent.Review, error)

RespondReview update the status of review.

type ReviewStore

type ReviewStore interface {
	SearchReviews(ctx context.Context, u *ent.User) ([]*ent.Review, error)
	ListReviews(ctx context.Context, d *ent.Deployment) ([]*ent.Review, error)
	FindReviewOfUser(ctx context.Context, u *ent.User, d *ent.Deployment) (*ent.Review, error)
	FindReviewByID(ctx context.Context, id int) (*ent.Review, error)
	// CreateReview creates a review of which status is pending.
	CreateReview(ctx context.Context, rv *ent.Review) (*ent.Review, error)
	// UpdateReview update the status and comment of the review.
	UpdateReview(ctx context.Context, rv *ent.Review) (*ent.Review, error)
}

ReviewStore defines operations for working with reviews.

type ReviewValidator

type ReviewValidator struct {
	Store ReviewStore
}

ReviewValidator verifies the request is approved or not. If one of the reviews has approve the status is approved.

func (*ReviewValidator) Validate

func (v *ReviewValidator) Validate(d *ent.Deployment) error

type SearchDeploymentsOfUserOptions

type SearchDeploymentsOfUserOptions struct {
	ListOptions

	Statuses       []deployment.Status
	Owned          bool
	ProductionOnly bool
	From           time.Time
	To             time.Time
}

SearchDeploymentsOfUserOptions specifies the optional parameters that search deployments.

type SearchUsersOptions

type SearchUsersOptions struct {
	ListOptions

	// Query search the 'login' contains the query.
	Query string
}

SearchUsersOptions specifies the optional parameters that search users.

type SerializationValidator

type SerializationValidator struct {
	Env   *extent.Env
	Store DeploymentStore
}

SerializationValidator verify if there is currently a running deployment for the environment.

func (*SerializationValidator) Validate

func (v *SerializationValidator) Validate(d *ent.Deployment) error

type StatusValidator

type StatusValidator struct {
	Status deployment.Status
}

StatusValidator validate the deployment status is valid.

func (*StatusValidator) Validate

func (v *StatusValidator) Validate(d *ent.Deployment) error

type TagSCM

type TagSCM interface {
	ListTags(ctx context.Context, u *ent.User, r *ent.Repo, opt *ListOptions) ([]*extent.Tag, error)
	GetTag(ctx context.Context, u *ent.User, r *ent.Repo, tag string) (*extent.Tag, error)
}

type UserInteractor

type UserInteractor struct {
	// contains filtered or unexported fields
}

UserInteractor provides application logic for interacting with users.

func (*UserInteractor) IsAdminUser

func (i *UserInteractor) IsAdminUser(ctx context.Context, login string) bool

IsAdminUser verifies that the login is an admin or not.

func (*UserInteractor) IsEntryMember

func (i *UserInteractor) IsEntryMember(ctx context.Context, login string) bool

IsEntryMember verifies that the login is a member or not.

func (*UserInteractor) IsEntryOrg

func (i *UserInteractor) IsEntryOrg(ctx context.Context, namespace string) bool

IsEntryOrg verifies that the organization is in the organization entries or not.

func (*UserInteractor) IsOrgMember

func (i *UserInteractor) IsOrgMember(ctx context.Context, orgs []string) bool

IsOrgMember verifies that the user's organizations is in the member entries or not.

func (*UserInteractor) SyncRemoteRepo

func (i *UserInteractor) SyncRemoteRepo(ctx context.Context, u *ent.User, re *extent.RemoteRepo, t time.Time) error

SyncRemoteRepo synchronizes with the remote repository.

type UserSCM

type UserSCM interface {
	GetRemoteUserByToken(ctx context.Context, token string) (*extent.RemoteUser, error)
	ListRemoteOrgsByToken(ctx context.Context, token string) ([]string, error)
}

UserSCM defines operations for working with remote users.

type UserStore

type UserStore interface {
	CountUsers(context.Context) (int, error)
	SearchUsers(ctx context.Context, opts *SearchUsersOptions) ([]*ent.User, error)
	FindUserByID(ctx context.Context, id int64) (*ent.User, error)
	FindUserByHash(ctx context.Context, hash string) (*ent.User, error)
	FindUserByLogin(ctx context.Context, login string) (*ent.User, error)
	CreateUser(ctx context.Context, u *ent.User) (*ent.User, error)
	UpdateUser(ctx context.Context, u *ent.User) (*ent.User, error)
	DeleteUser(ctx context.Context, u *ent.User) error
}

UserStore defines operations for working with users.

type Validator

type Validator interface {
	Validate(d *ent.Deployment) error
}

Validator defines the method that validate a deployment.

Directories

Path Synopsis
Package mock is a generated GoMock package.
Package mock is a generated GoMock package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL