brass/doc/design-decisions.md

39 lines
1.6 KiB
Markdown

# Design Decision
## Communication between Browser and Server via REST-like Endpoints and HTMX
- https://htmx.org/essays/10-tips-for-ssr-hda-apps/
- Name of endpoints is plural
- "/locations" GET -> read all
- "/locations/new" GET / POST -> create
- "/locations/1" GET -> edit, POST -> update, DELETE -> delete CRUD
- "/locations/assign" GET / POST for custom action
- Modelling of models in code
- see vehicle.rs
- use of applicationError
- return Options, where queries are bound to id or search input
## Testing
### User
- CreatingNewUser_AsAdmin_SendsRegistrationMail
## Data Layer
- use model structs for the exact represenation in databse (maybe sometimes a field is not used in code, then its maybe fine to drop it off the struct e.g. Timestamp at Token tables)
- use changesset struct based on model (wihout ids)
- groups parametres for methods
- allows validation on fields (ecto changeset, elm js data down actions up)
- all fields are as they are on the model, all field must be supplied; no way for "partial updates"
- partial updates for only one or two fields get a special method on the model
- validate using garde and custom context with gives access to database pool
- when sql fits into oneline, leave it inline in code; otherwise put it into separate file and use query_file!
### Naming Scheme for methods
- get single entry -> read / read_by_...(special field)
- get multiple entries -> read_all / read_all_by...(special field)
- create
- update / update_...(single field)
- delete
TODO:
treat all selects with https://stackoverflow.com/questions/66728451/html-select-not-showing-selected-option-after-refresh-in-firefox