Merge pull request #5220 from normanjaeckel/RestrictionDev

Added first draft for restriction and presenter interfaces.
This commit is contained in:
Norman Jäckel 2020-04-03 13:14:29 +02:00 committed by GitHub
commit a45ac5d2e5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 74 additions and 3 deletions

View File

@ -1,4 +1,4 @@
# Action Service Interface
# Actions Service Interface
Exception ActionException(message: string);
@ -7,7 +7,7 @@ Exception ActionException(message: string);
* Executes multiple actions in the conext of the user given by the user_id.
* All actions are processed independently.
*
* TODO: Check if we need an interface or flag to process actions all together.
* TODO: Maybe we do not want to run them independently.
*
*
* @throws ActionException
@ -16,7 +16,7 @@ handle_request (payload: Action[], user_id: number): ActionResult[]
interface Action {
action: string;
data: object[]; # An array of action specific data. See JSON schema defintions.
data: object[]; # An array of action specific data. See JSON schema defintions.
}
interface ActionResult {

View File

@ -0,0 +1,51 @@
# Presenter Service Interface
Exception PresenterException(message: string);
/**
* Executes some presenting function on the server. The term "presenting" means
* a non writing (or modifying) idempotent request. There may be some
* side-effect allowed (like tracking calls to one presenter), but the main
* purpose is to get data of the server, which is not autoupdate-, projector-, or
* icc-data.
*
* Some purposes may be:
* - aggregating of login data
* - managing of whoami, if additional data is needed, that the auth service
* doesn't provide
* - To get history points
* - To get history data
* - To get the installed version
* - To query statistics
* - To calculate recursive trees (e.g. origins of motions; not possible with
* the autoupdate service)
* - to synchronize the servertime for countdowns
*
* @throws PresenterException This exception might be thrown, if there was an
* server error (Http-500-equivalent). For user error (e.g. wrong data) use the
* PresenterError interface
*/
handle_request(user_id: Id, payload: Presenter[]): PresenterResult[]
/**
* This interface specifies what presenter is used with the payload for the call
*/
Interface Presenter {
presenter: string;
data: any;
}
/**
* A presenter may return anything. This is presenter-specific. But if there was
* an error (user error, not a PresenterException), the response for this
* presenter should follow `PresenterError`.
*/
type PresenterResult = any | PresenterError;
/**
* A common format for errors.
*/
Interface PresenterError {
error: object;
}

View File

@ -0,0 +1,20 @@
# Restrictions Service Interface
Exception RestrictionException(message: string);
/**
* Restricts data for given user
*
* @throws RestrictionException
*/
handle_request (payload: Restriction[]): RestrictionResult[]
interface Restriction {
user_id: number;
fqfields: Fqfield[];
}
interface RestrictionResult {
<fqfield>: Value;
}