This commit is contained in:
konrad 2018-07-21 15:45:46 +02:00 committed by kolaente
parent 0487889963
commit 7e0965ed91
No known key found for this signature in database
GPG key ID: F40E70337AB24C9B
3 changed files with 32 additions and 10 deletions

25
docs/concepts.md Normal file
View file

@ -0,0 +1,25 @@
# Achitectural concepts
Vikunja was built with a maximum flexibility in mind while developing. To achive this, I built a set of easy-to-use
functions and respective web handlers, all represented through interfaces.
## CRUDable
This interface defines methods to Create/Read/ReadAll/Update/Delete something. In order to use the common web
handler, the struct mus implement this and the rights interface.
Each of these methods is called on an instance of a struct like so:
```go
func (l *List) ReadOne() (err error) {
*l, err = GetListByID(l.ID)
return
}
```
In that case, it takes the `ID` saved in the struct instance, gets the full list object and fills the original object with it.
(See parambinder to understand where that `ID` is coming from).
All functions should behave like this, if they create or update something, they should return the created/updated struct
instance. The only exception is `ReadAll()` which returns an interface. Usually this is an array, because, well you cannot
make an array of a set type (If you know a way to do this, don't hesitate to drop me a message).

7
docs/parambinder.md Normal file
View file

@ -0,0 +1,7 @@
# How the binder works
The binder binds all values inside the url to their respective fields in a struct. Those fields need to have a tag
"param" with the name of the url placeholder which must be the same as in routes.
Whenever one of the standard CRUD methods is invoked, this binder is called, which enables one handler method
to handle all kinds of different urls with different parameters.

View file

@ -10,16 +10,6 @@ import (
const paramTagName = "param" const paramTagName = "param"
/////////////////////////
// HOW THIS BINDER WORKS
/////////////////////////
// This binder binds all values inside the url to their respective fields in a struct. Those fields need to have a tag
// "param" with the name of the url placeholder which must be the same as in routes.
//
// Whenever one of the standard CRUD methods is invoked, this binder is called, which enables one handler method
// to handle all kinds of different urls with different parameters.
/////////////////////////
// ParamBinder binds parameters to a struct. // ParamBinder binds parameters to a struct.
// Currently a working implementation, waiting to implement this officially into echo. // Currently a working implementation, waiting to implement this officially into echo.
func ParamBinder(i interface{}, c echo.Context) (err error) { func ParamBinder(i interface{}, c echo.Context) (err error) {