# 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