2ab6e00966
A method has been implemented that allows for paged searching through project members and project member invitations. In the future, this will be used to display invitations in the Team page of the satellite frontend. References #5855 Change-Id: I0937c425f60f1318e55202bf30b44a33ff695414
76 lines
2.5 KiB
Go
76 lines
2.5 KiB
Go
// Copyright (C) 2019 Storj Labs, Inc.
|
|
// See LICENSE for copying information.
|
|
|
|
package console
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"storj.io/common/uuid"
|
|
)
|
|
|
|
// ProjectMembers exposes methods to manage ProjectMembers table in database.
|
|
//
|
|
// architecture: Database
|
|
type ProjectMembers interface {
|
|
// GetByMemberID is a method for querying project members from the database by memberID.
|
|
GetByMemberID(ctx context.Context, memberID uuid.UUID) ([]ProjectMember, error)
|
|
// GetPagedByProjectID is a method for querying project members from the database by projectID and cursor.
|
|
// TODO: Remove once all uses have been replaced by GetPagedWithInvitationsByProjectID.
|
|
GetPagedByProjectID(ctx context.Context, projectID uuid.UUID, cursor ProjectMembersCursor) (*ProjectMembersPage, error)
|
|
// GetPagedWithInvitationsByProjectID is a method for querying project members and invitations from the database by projectID and cursor.
|
|
GetPagedWithInvitationsByProjectID(ctx context.Context, projectID uuid.UUID, cursor ProjectMembersCursor) (*ProjectMembersPage, error)
|
|
// Insert is a method for inserting project member into the database.
|
|
Insert(ctx context.Context, memberID, projectID uuid.UUID) (*ProjectMember, error)
|
|
// Delete is a method for deleting project member by memberID and projectID from the database.
|
|
Delete(ctx context.Context, memberID, projectID uuid.UUID) error
|
|
}
|
|
|
|
// ProjectMember is a database object that describes ProjectMember entity.
|
|
type ProjectMember struct {
|
|
// FK on Users table.
|
|
MemberID uuid.UUID
|
|
// FK on Projects table.
|
|
ProjectID uuid.UUID
|
|
|
|
CreatedAt time.Time
|
|
}
|
|
|
|
// ProjectMembersCursor holds info for project members cursor pagination.
|
|
type ProjectMembersCursor struct {
|
|
Search string
|
|
Limit uint
|
|
Page uint
|
|
Order ProjectMemberOrder
|
|
OrderDirection OrderDirection
|
|
}
|
|
|
|
// ProjectMembersPage represents a page of project members and invitations.
|
|
type ProjectMembersPage struct {
|
|
ProjectMembers []ProjectMember
|
|
ProjectInvitations []ProjectInvitation
|
|
|
|
Search string
|
|
Limit uint
|
|
Order ProjectMemberOrder
|
|
OrderDirection OrderDirection
|
|
Offset uint64
|
|
|
|
PageCount uint
|
|
CurrentPage uint
|
|
TotalCount uint64
|
|
}
|
|
|
|
// ProjectMemberOrder is used for querying project members in specified order.
|
|
type ProjectMemberOrder int8
|
|
|
|
const (
|
|
// Name indicates that we should order by full name.
|
|
Name ProjectMemberOrder = 1
|
|
// Email indicates that we should order by email.
|
|
Email ProjectMemberOrder = 2
|
|
// Created indicates that we should order by created date.
|
|
Created ProjectMemberOrder = 3
|
|
)
|