package rest
import "hauru.club/x/okrzeja/service/rest"
Package rest provides HATEOS-compliant HTTP REST handlers and defines contracts used by those handlers.
Index ¶
- Constants
- Variables
- func ErrorHandler(err error) http.Handler
- func Handlers(deps HandlersDependencies) httpx.Handlers
- type ActivitiesReadRequest
- type ActivitiesReadResponse
- type ActivitiesReader
- type DirectoryCreator
- type DirectoryReadResponse
- type DirectoryReader
- type FileCommandService
- type FileContentUpdater
- type FileCreator
- type FileDeleter
- type FileDirectoryReader
- type FileMetadata
- type FileNameUpdater
- type FileQueryService
- type FileReadResponse
- type FileReader
- type FileService
- type FileSystemCreator
- type FileUpdateContentRequest
- type FileUpdateNameRequest
- type HandlersDependencies
- type NewDirectoryRequest
- type NewFileRequest
- type NewFileResponse
- type RootDirectoryDiscoverer
- type UserDeleter
- type UserPasswordChangeRequest
- type UserPasswordChanger
- type UserPasswordUpdateRequest
- type UserPasswordUpdater
- type UserReadResponse
- type UserRegisterRequest
- type UserRegisterResponse
- type UserRegisterer
- type UsersBatchRegisterer
- type UsersReadFromRequest
- type UsersReadFromUsernameRequest
- type UsersReader
Constants ¶
const FileMIMEDirectory = "inode/directory"
FileMIMEDirectory is MIME type for directories.
Variables ¶
ErrNoDirectory is returned when DirectoryRead is requested with ID assigned to file, which isn't directory.
Functions ¶
func ErrorHandler ¶
ErrorHandler handles HTTP errors in a RESTful way.
func Handlers ¶
func Handlers(deps HandlersDependencies) httpx.Handlers
Handlers are REST handlers that satisfy requirements described by the httpx.Handlers.
Types ¶
type ActivitiesReadRequest ¶
type ActivitiesReadRequest struct {
// UserID is unique identifier of user who owns requested activities.
UserID uuid.UUID
// Last is identifier of the last activity from previous query.
Last uuid.UUID
}
ActivitiesReadRequest holds arguments
type ActivitiesReadResponse ¶
type ActivitiesReadResponse struct {
// ID is unique id of new activity record.
ID uuid.UUID
// Type of activity record.
Type string
// CreatedAt points to the point in time when given activity
// was created.
CreatedAt time.Time
// Details consist flat map of key/value records that will be
// presented to user and system administrator, to provide useful
// debug informations related to given action.
Details map[string]any
}
ActivitiesReadResponse holds data stored for single activity entry.
type ActivitiesReader ¶
type ActivitiesReader interface {
// ActivitiesReadInit initializes querying user activities. It returns
// limited number of user activities. You can use last user's activity ID
// from given slice and ActivitiesReadFrom method to query for more entries.
ActivitiesReadInit(ctx context.Context, userID uuid.UUID) ([]ActivitiesReadResponse, error)
// ActivitiesRead returns list of activities owned by user with given user ID that were
// created before activity with given last ID.
ActivitiesRead(ctx context.Context, req ActivitiesReadRequest) ([]ActivitiesReadResponse, error)
}
ActivitiesReader implements querying group of activities for particular user.
type DirectoryCreator ¶
type DirectoryCreator interface {
// DirectoryCreate creates new directory with requested properties.
DirectoryCreate(ctx context.Context, req NewDirectoryRequest) (*NewFileResponse, error)
}
DirectoryCreator creates directories on behalf of users.
type DirectoryReadResponse ¶
type DirectoryReadResponse struct {
// Name of directory.
Name string
// Parent of current directory. Can be null if it's root directory.
Parent uuid.NullUUID
// Children are filed stored in requested directory.
Children []FileMetadata
}
DirectoryReadResponse holds response data from DirectoryRead method.
type DirectoryReader ¶
type DirectoryReader interface {
// DirectoryRead returns useful metadata of directory with given ID and
// its children files.
DirectoryRead(context.Context, uuid.UUID) (*DirectoryReadResponse, error)
}
DirectoryReader reads user's directories data.
type FileCommandService ¶
type FileCommandService interface {
FileSystemCreator
FileContentUpdater
FileNameUpdater
FileDeleter
}
FileCommandService implements file's manipulation dependencies for REST handlers.
type FileContentUpdater ¶
type FileContentUpdater interface {
// FileUpdateContent updates content of the file with given unique ID.
FileUpdateContent(ctx context.Context, req FileUpdateContentRequest) error
}
FileContentUpdater updates content of the file.
type FileCreator ¶
type FileCreator interface {
// FileCreate creates new file with requested properties.
FileCreate(ctx context.Context, req NewFileRequest) (*NewFileResponse, error)
}
FileCreator creates files on behalf of users.
type FileDeleter ¶
type FileDeleter interface {
// FileDelete removes file or directory with given unique ID from
// filesystem. All children of removed directory are also removed.
//
// It is impossible to delete any root file with this method.
FileDelete(ctx context.Context, id uuid.UUID) error
}
FileDeleter removes files and directories from filesystem.
type FileDirectoryReader ¶
type FileDirectoryReader interface {
FileReader
DirectoryReader
}
FileDirectoryReader reads directories and files from user file system.
type FileMetadata ¶
type FileMetadata struct {
// Name of the file.
Name string
// FileID is unique file's ID.
FileID uuid.UUID
// MIME is media type of the file.
MIME string
}
FileMetadata contains metadata for single file.
type FileNameUpdater ¶
type FileNameUpdater interface {
// FileUpdateName updates name of the file with given unique ID.
FileUpdateName(ctx context.Context, req FileUpdateNameRequest) error
}
FileNameUpdater updates name of the file.
type FileQueryService ¶
type FileQueryService interface {
RootDirectoryDiscoverer
FileDirectoryReader
}
FileQueryService implements file's querying dependencies for REST handlers.
type FileReadResponse ¶
type FileReadResponse struct {
FileMetadata
// Parent of the requested file.
Parent uuid.NullUUID
// Content of the file.
Content []byte
}
FileReadResponse holds response data from reading file operation.
func (*FileReadResponse) IsDir ¶
func (f *FileReadResponse) IsDir() bool
IsDir returns true only if file from response is the directory.
type FileReader ¶
type FileReader interface {
// FileRead returns metadata and content of the file with given ID.
FileRead(context.Context, uuid.UUID) (*FileReadResponse, error)
}
FileReader reads user's files.
type FileService ¶
type FileService struct {
FileQueryService
FileCommandService
}
FileService implements file's manipulation dependencies for REST handlers.
type FileSystemCreator ¶
type FileSystemCreator interface {
FileCreator
DirectoryCreator
}
FileSystemCreator creates files and directories in the internal user filesystem.
type FileUpdateContentRequest ¶
type FileUpdateContentRequest struct {
// ID is unique identifier of file.
ID uuid.UUID
// Content is the new content of the file.
Content []byte
}
FileUpdateContentRequest holds arguments for updating content of the already existing file.
type FileUpdateNameRequest ¶
type FileUpdateNameRequest struct {
// ID is unique identifier of file.
ID uuid.UUID
// Name is new file's name.
Name string
}
FileUpdateContentRequest holds arguments for updating name of the already existing file or directory.
type HandlersDependencies ¶
type HandlersDependencies struct {
Config *config.Service
Session *httpx.CookiesSession
UsersReader
UserRegisterer
UsersBatchRegisterer
UserPasswordChanger
UserPasswordUpdater
UserDeleter
ActivitiesReader
*FileService
}
HandlersDependencies holds dependencies for REST handlers.
type NewDirectoryRequest ¶
type NewDirectoryRequest struct {
// Owner is unique identifier of owner user.
Owner uuid.UUID
// Parent is parent's unique identifier.
Parent uuid.UUID
// Name of new directory.
Name string
}
NewDirectoryRequest holds arguments for creating new directory.
type NewFileRequest ¶
type NewFileRequest struct {
// Owner is unique identifier of owner user.
Owner uuid.UUID
// Parent is parent's unique identifier.
Parent uuid.UUID
// Filename is the name of new file.
Filename string
// FilenameExtension is the filename extension of new file.
FilenameExtension string
}
NewFileRequest holds arguments for creating new file.
type NewFileResponse ¶
NewFileResponse holds properties of freshly created file or directory.
type RootDirectoryDiscoverer ¶
type RootDirectoryDiscoverer interface {
// RootDirectory returns unique identifier of root file for user
// with given user ID.
RootDirectory(context.Context, uuid.UUID) (uuid.UUID, error)
}
RootDirectoryDiscoverer discovers unique identifier of root directory.
type UserDeleter ¶
type UserDeleter interface {
// UserDelete removes user with given unique ID from the system.
UserDelete(context.Context, uuid.UUID) error
}
UserDeleter removes user from the system.
type UserPasswordChangeRequest ¶
type UserPasswordChangeRequest struct {
// ID is unique user's identifier.
ID uuid.UUID
// NewPassword is new password for user.
NewPassword string
}
UserPasswordChangeRequest holds arguments for changing password.
type UserPasswordChanger ¶
type UserPasswordChanger interface {
// UserChangePassword changes password of user with given user ID to the
// provided new password.
UserChangePassword(context.Context, UserPasswordChangeRequest) error
}
UserPasswordChanger changes password of user.
type UserPasswordUpdateRequest ¶
type UserPasswordUpdateRequest struct {
// ID is unique user's identifier.
ID uuid.UUID
// OldPassword is old user's password.
OldPassword string
// NewPassword is new password requested by the user.
NewPassword string
}
UserPasswordUpdateRequest holds arguments for updating password on user's behalf.
type UserPasswordUpdater ¶
type UserPasswordUpdater interface {
// UserPasswordUpdate updates user's password on his/her behalf. It returns error if
// authorization with old password fails or new password is invalid.
UserPasswordUpdate(context.Context, UserPasswordUpdateRequest) error
}
UserPasswordUpdater updates password of the user on his/her behalf, so it requires to provide old password in order to authorize user.
type UserReadResponse ¶
type UserReadResponse struct {
// ID is unique user identifier.
ID uuid.UUID
// Username is unique login name.
Username string
// CreatedAt is time when user account was created.
CreatedAt time.Time
}
UserReadResponse holds results for reading users.
type UserRegisterRequest ¶
type UserRegisterRequest struct {
// Username is unique login name.
Username string
// Password is secret phrase use to access user's account.
Password string
}
UserRegisterRequest holds arguments for creating account for new user.
type UserRegisterResponse ¶
type UserRegisterResponse struct {
// ID is unique user's identifier.
ID uuid.UUID
// CreatedAt is time of account creation.
CreatedAt time.Time
}
UserRegisterResponse is response of new account creation process.
type UserRegisterer ¶
type UserRegisterer interface {
// UserRegister creates new account for user.
UserRegister(context.Context, UserRegisterRequest) (*UserRegisterResponse, error)
}
UserRegisterer service handles creation of new user account.
type UsersBatchRegisterer ¶
type UsersBatchRegisterer interface {
// UsersRegister creates multiple user accounts. It should fail if
// creation of at least single user account also fails.
UsersRegister(context.Context, []UserRegisterRequest) error
}
UsersBatchRegisterer service registers batch of users, the same way as UserRegisterer.
type UsersReadFromRequest ¶
type UsersReadFromRequest struct {
// ID is last user's unique identifier. UsersReadFrom returns slice
// of users' informations, which were created after account with given
// ID.
ID uuid.UUID
// Query is an optional query string. It can be prefix, suffix or substring
// of username of user that you are looking for.
Query string
}
UsersReadFromRequest holds arguments for UsersReadFrom method.
type UsersReadFromUsernameRequest ¶
type UsersReadFromUsernameRequest struct {
// Username is last user's unique username. UsersReadFromUsername returns slice
// of users' informations, which were created after account with given
// username.
Username string
// Query is an optional query string. It can be prefix, suffix or substring
// of username of user that you are looking for.
Query string
}
UsersReadFromUsernameRequest holds arguments for UsersReadFromUsername method.
type UsersReader ¶
type UsersReader interface {
// UsersReadInit initialize querying user accounts. It returns
// limited number of user accounts. You can use last user ID from
// given slice and UserReadFrom method to query for more entries.
//
// Query is optional query string. See UsersReadFromRequest for more
// informations about query string.
UsersReadInit(ctx context.Context, query string) ([]UserReadResponse, error)
// UserReadFrom reads limited number of user accounts that
// were created after account with given ID.
UsersReadFrom(context.Context, UsersReadFromRequest) ([]UserReadResponse, error)
// UsersReadFromUsername reads limited number of user accounts that
// were created after account with given username.
UsersReadFromUsername(context.Context, UsersReadFromUsernameRequest) ([]UserReadResponse, error)
}
UsersReader service handles querying group of users.
Source Files ¶
commands.go error.go htmx.go rest.go ui.go views.go
- Version
- v0.0.0-20231010043146-4292577f982b (latest)
- Published
- Oct 10, 2023
- Platform
- linux/amd64
- Imports
- 23 packages
- Last checked
- 8 months ago –
Tools for package owners.