1package webhook23import (4 "context"56 "github.com/charmbracelet/soft-serve/pkg/access"7 "github.com/charmbracelet/soft-serve/pkg/db"8 "github.com/charmbracelet/soft-serve/pkg/proto"9 "github.com/charmbracelet/soft-serve/pkg/store"10)1112// CollaboratorEvent is a collaborator event.13type CollaboratorEvent struct {14 Common1516 // Action is the collaborator event action.17 Action CollaboratorEventAction `json:"action" url:"action"`18 // AccessLevel is the collaborator access level.19 AccessLevel access.AccessLevel `json:"access_level" url:"access_level"`20 // Collaborator is the collaborator.21 Collaborator User `json:"collaborator" url:"collaborator"`22}2324// CollaboratorEventAction is a collaborator event action.25type CollaboratorEventAction string2627const (28 // CollaboratorEventAdded is a collaborator added event.29 CollaboratorEventAdded CollaboratorEventAction = "added"30 // CollaboratorEventRemoved is a collaborator removed event.31 CollaboratorEventRemoved CollaboratorEventAction = "removed"32)3334// NewCollaboratorEvent sends a collaborator event.35func NewCollaboratorEvent(ctx context.Context, user proto.User, repo proto.Repository, collabUsername string, action CollaboratorEventAction) (CollaboratorEvent, error) {36 event := EventCollaborator3738 payload := CollaboratorEvent{39 Action: action,40 Common: Common{41 EventType: event,42 Repository: Repository{43 ID: repo.ID(),44 Name: repo.Name(),45 Description: repo.Description(),46 ProjectName: repo.ProjectName(),47 Private: repo.IsPrivate(),48 CreatedAt: repo.CreatedAt(),49 UpdatedAt: repo.UpdatedAt(),50 },51 Sender: User{52 ID: user.ID(),53 Username: user.Username(),54 },55 },56 }5758 // Find repo owner.59 dbx := db.FromContext(ctx)60 datastore := store.FromContext(ctx)61 owner, err := datastore.GetUserByID(ctx, dbx, repo.UserID())62 if err != nil {63 return CollaboratorEvent{}, db.WrapError(err)64 }6566 payload.Repository.Owner.ID = owner.ID67 payload.Repository.Owner.Username = owner.Username68 payload.Repository.DefaultBranch, _ = getDefaultBranch(repo)6970 collab, err := datastore.GetCollabByUsernameAndRepo(ctx, dbx, collabUsername, repo.Name())71 if err != nil {72 return CollaboratorEvent{}, err73 }7475 payload.AccessLevel = collab.AccessLevel76 payload.Collaborator.ID = collab.UserID77 payload.Collaborator.Username = collabUsername7879 return payload, nil80}