package auth import ( "context" "github.com/google/uuid" ) type UserRepository interface { Create(ctx context.Context, user *User) error CreateWithAccount(ctx context.Context, user *User, account *Account) error UpsertWithAccount(ctx context.Context, email string, user *User, account *Account) (isNewUser bool, err error) FindByID(ctx context.Context, id uuid.UUID, opts ...UserQueryOption) (*User, error) FindByEmail(ctx context.Context, email string, opts ...UserQueryOption) (*User, error) Update(ctx context.Context, user *User) error Delete(ctx context.Context, id uuid.UUID) error List(ctx context.Context, limit, offset int, opts ...UserQueryOption) ([]*User, error) Count(ctx context.Context) (int64, error) UserRoles(ctx context.Context, userID uuid.UUID) ([]Role, error) UserAccounts(ctx context.Context, userID uuid.UUID) ([]Account, error) } type RoleRepository interface { Create(ctx context.Context, role *Role) error FindByID(ctx context.Context, id uuid.UUID) (*Role, error) FindByName(ctx context.Context, name string) (*Role, error) Update(ctx context.Context, role *Role) error Delete(ctx context.Context, id uuid.UUID) error List(ctx context.Context, limit, offset int) ([]*Role, error) Count(ctx context.Context) (int64, error) } type AccountRepository interface { Create(ctx context.Context, account *Account) error FindByID(ctx context.Context, id uuid.UUID) (*Account, error) FindByUserID(ctx context.Context, userID uuid.UUID) ([]*Account, error) Update(ctx context.Context, account *Account) error Delete(ctx context.Context, id uuid.UUID) error List(ctx context.Context, limit, offset int) ([]*Account, error) Count(ctx context.Context) (int64, error) } type UserRoleRepository interface { Create(ctx context.Context, userID, roleID uuid.UUID) error FindByUserID(ctx context.Context, userID uuid.UUID) ([]*Role, error) FindByRoleID(ctx context.Context, roleID uuid.UUID) ([]*User, error) Delete(ctx context.Context, userID, roleID uuid.UUID) error DeleteByUserID(ctx context.Context, userID uuid.UUID) error DeleteByRoleID(ctx context.Context, roleID uuid.UUID) error Exists(ctx context.Context, userID, roleID uuid.UUID) (bool, error) }