Anatomy of a aah application

The layout of a aah application is standardized to keep things as simple as possible and has component of MVC architectural pattern.

app                   ⇒ Application Go source codes directory
  └ controllers       ⇒ Application controllers
  └ models            ⇒ Application business layer
  └ security          ⇒ Application security implementation
  └ aah.go            ⇒ aah application main entry point (generated code)
  └ init.go           ⇒ Application customization/configuration (Since v0.10)
config                ⇒ Configurations files
  └ aah.conf          ⇒ Application configuration file
  └ routes.conf       ⇒ Application Routes configuration file
  └ security.conf     ⇒ Application Security configuration file
  env                 ⇒ Environment profile configurations
    └ dev.conf        ⇒ Dev - Environment profile config
    └ prod.conf       ⇒ Prod - Environment profile config
i18n                  ⇒ Internationalization and Localization message files
  └ messages.en       ⇒ Message file
  └ messages.en-US    ⇒ Message file
  └ messages.en-CA    ⇒ Message file
views                 ⇒ Template files - not created for API (aah supports partial inheritance)
  └ common            ⇒ Common view template files, it can be imported to any page template
  └ layouts           ⇒ Application view layout files, master template for page template
  └ pages             ⇒ Page template files, corresponding template for controller action
static                ⇒ Static public assets - not created for API
  └ css               ⇒ CSS files
  └ js                ⇒ Javascript files
  └ img               ⇒ Image files
logs                  ⇒ Logs directory (default is console on 'dev' profile)
  └ app-name.log      ⇒ Application log file
tests                 ⇒ Go test source directory (upcoming), use Go standard way for unit tests
build                 ⇒ Application build directory
.gitignore            ⇒ Typical Go .gitignore file and aah project ignore files
aah.project           ⇒ aah project configuration; build config, hot-reload, etc.
app-name.pid          ⇒ Application PID file (created during app startup)

Packaged aah application will have following directories/files

bin              ⇒ Application binary under bin directory
aah.sh           ⇒ *nix startup file
aah.cmd          ⇒ Windows startup file

Packaged aah application won’t have following directories/files

app              ⇒ Application Go source directory (compiled into binary under `bin` directory)
logs             ⇒ Logs directory (created during an app startup)
tests            ⇒ Go source codes directory (not for production)
.gitignore       ⇒ Typical Go .gitignore file (not for production)
aah.project      ⇒ aah project configuration (not for production)
app-name.pid     ⇒ Application PID file (created during app startup)

The app directory

The app directory contains all the Go source codes for the application. Initially controllers and models directory gets created by aah new command. Of course you can have as many as packages in the app directory for your application.

The config directory

The config directory contains the application’s configuration files. aah configuration file syntax is very similar to HOCON syntax. The quick start application will have the following config files. Organize the way you want it.

  • aah.conf - the main configuration file for the application, know more.
  • routes.conf - the routing configuration file for the application, know more.
  • security.conf - the security configuration file for the application, know more.

The i18n directory (Not applicable to API application)

The i18n directory contains internationalization and localization message files. Message filename format is message.<Language-ID>. Language is combination of Language + Region value. aah framework implements Language code as per two-letter ISO 639-1 standard and Region code as per two-letter ISO 3166-1 standard, know more.

Note: If you want you can use i18n for your API application too.

The views directory (Not applicable to API application)

The views directory contains application view templates. aah framework supports partial inheritance with Go template engine, know more. There are three main directories:

  • common - Common view template files, it can be imported to any page template via import template func.
  • layouts - Application view layout template files. You can have as many you want.
  • pages - Page view template files. Respective view file for controllers action.
    • For example: <controller-name>/<action-name>.<ext>
    • For example: /<namespace>/<controller-name>/<action-name>.<ext> (namespace directory structure is supported)
  • errors - Application error pages such as 500.html, 404.html, etc.

The static directory (Not applicable to API application)

The static directory contains static assets that are served directly. It contains three sub-directories for images, CSS and JavaScript files.

  • By default static directory mapped as /static in routes.conf. You can customize it in the config. For example: /assets
  • You can use several directories under static directory as per your need. Just organize it appropriately, it helps you :)

Note: If you want you can use static file delivery for your API application too.

The logs directory

The logs directory is for application logs and default location of server access log.

The tests directory

The tests directory is for application functional tests (upcoming). Use Go conventional way <source-file>_test.go for unit test your Go source codes.

The .gitignore file

The .gitignore file includes standard Go language ignores from Github and additionally aah framework ignores:

  • aah.go, *.pid, build/*