# RSSA SIMRS-VX BACKEND
Or in english Hospital Information Management System (HIMS), is a system that
manages the information of the hospitals and the patients.

## Stacks
- Language : Golang<br />
  Link: https://go.dev
- Framework : No Framework<br />
  Why? Go (Golang) applications often do not require full-fledged frameworks
  due to several key aspects of the language and its ecosystem:
  - Comprehensive Standard Library:  Go's standard library is exceptionally 
    robust and provides much of the functionality that would typically be found
	in frameworks in other languages.
  - Simplicity and Explicit Design: Go emphasizes simplicity and clarity.
    Frameworks often introduce a degree of "magic" or hidden complexity
	through inversion of control, where the framework dictates the
	application's flow
  - Modular Libraries: Instead of a single, all-encompassing framework, the Go
    community favors small, modular libraries that perform specific tasks well.
  - Performance and Efficiency: Go is designed for performance and efficiency.
    Frameworks can sometimes introduce performance overhead due to their layers
	of abstraction.
  
  So? No framewok is the best framework.
- Database : PostgreSQL<br />
  Link: https://www.postgresql.org
- Cache : Redis<br />
  Link: https://redis.io
- File Server : Minio<br />
  Link: https://www.min.io

## Libraries
- Routing Helper: Apem<br />
  Link: https://github.com/karincake/apem
- ORM: GORM<br />
  Link: https://gorm.io
- Database Migration: Atlas<br />
  Link: https://atlasgo.io/guides/orms/gorm/program

## Others
- Project Layout: Golang Standards Project Layout<br />
  Link: https://github.com/golang-standards/project-layout
- Architecture: Clean Architecture<br />
  Link: https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html

## Commands
- Main api: 
  - go to the ./cmd/main-api
  - run `go run .` to run in debug mode
  - run `go build` to build the binary
- Main migration: 
  - go to the ./cmd/main-migration
  - run `go run .` to run in debug mode
  - run `go build` to build the binary

