Mozo server backend README
=====================================

Start the server for development:
----------------------
### Start couchdb
Since in the Fedora Asahi on Macbook M1, couchdb is not an available package, it is build locally and started there:
```
cd ~/projects/couchdb/couchdb
./dev/run --admin=admin:admin
```

### Start rails
Note that the couchdb admin password can be changed for better security:
```
COUCHDB_ADMIN_PASSWORD=admin rails s
```

### Access the server
The server should now be accessible using:
https://localhost:3002/

TODO:
------------------
### Supplier app
* model validations
* ~foundation css~
* entry funnel handling

### User app
* Supplier close as event that can be handled by users


Application architecture
-----------------------------------------------

Developing using SSL
-------------------------
When reading this, hopefully there will be a nice standardized solution, better than found at the time of writing this (2025-02-10)
A nice solution seems to be using:
* https://github.com/puma/puma-dev
The fast and dirty way, without trusting certificates will be:
https://spaquet.medium.com/setting-up-ssl-on-localhost-for-rails-development-with-puma-211574dbfb87

Also take a look at:
https://jfbcodes.medium.com/using-rails-with-ssl-on-localhost-52d60f14a382

Building the product
------------------------------------------
1. Set the current routes to mozo-supplier client code (TODO: make way
   better)
```ruby
File.write "#{ENV["MOZO_PATH_SUPPLIER"]}/app/global-functionality/js-routes.js", JsRoutes.generate.sub(/this\);\n$/, 'window);')
```

Server side monit config
--------------------------------------------------
Could be in `/etc/monit/monitrc`:
```
# Monit configuration for Puma
# Service name: puma_mozo.bar_production
#
check process puma_mozo.bar_production
  with pidfile "/var/www/mozo.bar/shared/tmp/pids/puma.pid"
  group mozo
  start program = "/usr/bin/sudo -u root /bin/bash -c 'cd /var/www/mozo.bar/current && /usr/local/rvm/bin/rvm default do bundle exec puma -C /var/www/mozo.bar/shared/puma.rb --daemon'"
  stop program = "/usr/bin/sudo -u root /bin/bash -c 'cd /var/www/mozo.bar/current && /usr/local/rvm/bin/rvm default do bundle exec pumactl -S /var/www/mozo.bar/shared/tmp/pids/puma.state stop'"

check process DRBcounter with pidfile /var/www/mozo.bar/shared/tmp/pids/DRBcounter.pid
  group mozo
  start program = "/bin/bash --login -c '/var/www/mozo.bar/releases/20150123150713/bin/drb_counter.rb start -- production'"
  stop program = "/bin/bash --login -c '/var/www/mozo.bar/releases/20150123150713/bin/drb_counter.rb stop'"

check process faye with pidfile /var/www/mozo.bar/shared/tmp/pids/faye.pid
  group mozo
  start program = "/bin/bash --login -c 'thin start -d -R /var/www/mozo.bar/releases/20150123150713/faye/config.ru -p 9296 --pid /var/www/mozo.bar/shared/tmp/pids/faye.pid'"
  stop program = "/bin/bash -c 'kill -15 $(lsof -i:9296 -t); true'"
```
