Refactoring of FreeMED in Golang / Gin.
The backend uses:
- Go: Efficient programming language
- Gin: Web framework for Go
- Gin-JWT: JWT middleware for Gin
- GORP: Db access layer
- Go-MySQL-Driver: MySQL driver
- go-redis: Redis driver
- lumberjack: Rolling logger
- manners: Graceful http/https serving
The frontend uses:
- jQuery: Fast Javascript framework
- Popper: Pop-over management, required by bootstrap
- Bootstrap: Responsive framework
- Bootstrap-Switch: Switches for Bootstrap
- Knockout: MVVM UI toolkit
- Knockout.Mapping: Automatic JS object mapping for Knockout
- Select2: Extensible select widgets
- toastr: Toaster widget
Code in this repository can be run against a valid FreeMED 0.9.x series database with no modifications.
- MySQL's
ONLY_FULL_GROUP_BY
needs to be disabled -- at least until the queries have been rewritten to no longer require it. This can be temporarily accomplished withSET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
, but should have the actual MySQL server configuration adjusted for it in production systems.
- Redis Sessions. Sessions are stored in Redis, to decrease load on the MySQL server. (TODO: Move to Redis cluster for full redundancy)
- Authentication. Switched from cookies to renewable
Bearer
Authorization headers. - UI Architecture. Switched from GWT pre-generated specific javascript to simple jQuery frontend with Bootstrap using RESTful API.
- Background image : CC BY-SA 2.0