# create transcription web app ## This project was generated by [Flatlogic Platform](https://flatlogic.com). - Frontend: [React.js](https://flatlogic.com/templates?framework%5B%5D=react&sort=default) - Backend: [NodeJS](https://flatlogic.com/templates?backend%5B%5D=nodejs&sort=default)
Backend Folder Structure The generated application has the following backend folder structure: `src` folder which contains your working files that will be used later to create the build. The src folder contains folders as: - `auth` - config the library for authentication and authorization; - `db` - contains such folders as: - `api` - documentation that is automatically generated by jsdoc or other tools; - `migrations` - is a skeleton of the database or all the actions that users do with the database; - `models`- what will represent the database for the backend; - `seeders` - the entity that creates the data for the database. - `routes` - this folder would contain all the routes that you have created using Express Router and what they do would be exported from a Controller file; - `services` - contains such folders as `emails` and `notifications`.
- Database: PostgreSQL ----------------------- ### We offer 2 ways how to start the project locally: by running Frontend and Backend or with Docker. ----------------------- ## To start the project: ### Backend: > Please change current folder: `cd backend` #### Install local dependencies: `yarn install` ------------ #### Adjust local db: ##### 1. Install postgres: MacOS: `brew install postgres` > if you don’t have ‘brew‘ please install it (https://brew.sh) and repeat step `brew install postgres`. Ubuntu: `sudo apt update` `sudo apt install postgresql postgresql-contrib` ##### 2. Create db and admin user: Before run and test connection, make sure you have created a database as described in the above configuration. You can use the `psql` command to create a user and database. `psql postgres --u postgres` Next, type this command for creating a new user with password then give access for creating the database. `postgres-# CREATE ROLE admin WITH LOGIN PASSWORD 'admin_pass';` `postgres-# ALTER ROLE admin CREATEDB;` Quit `psql` then log in again using the new user that previously created. `postgres-# \q` `psql postgres -U admin` Type this command to creating a new database. `postgres=> CREATE DATABASE db_{your_project_name};` Then give that new user privileges to the new database then quit the `psql`. `postgres=> GRANT ALL PRIVILEGES ON DATABASE db_{your_project_name} TO admin;` `postgres=> \q` ------------ #### Create database: `yarn db:create` #### Start production build: `yarn start` ### Frontend: > Please change current folder: `cd frontend` ## To start the project with Docker: ### Description: The project contains the **docker folder** and the `Dockerfile`. The `Dockerfile` is used to Deploy the project to Google Cloud. The **docker folder** contains a couple of helper scripts: - `docker-compose.yml` (all our services: web, backend, db are described here) - `start-backend.sh` (starts backend, but only after the database) - `wait-for-it.sh` (imported from https://github.com/vishnubob/wait-for-it) > To avoid breaking the application, we recommend you don't edit the following files: everything that includes the **docker folder** and `Dokerfile`. ## Run services: 1. Install docker compose (https://docs.docker.com/compose/install/) 2. Move to `docker` folder. All next steps should be done from this folder. ``` cd docker ``` 3. Make executables from `wait-for-it.sh` and `start-backend.sh`: ``` chmod +x start-backend.sh && chmod +x wait-for-it.sh ``` 4. Download dependend projects for services. 5. Review the docker-compose.yml file. Make sure that all services have Dockerfiles. Only db service doesn't require a Dockerfile. 6. Make sure you have needed ports (see them in `ports`) available on your local machine. 7. Start services: 7.1. With an empty database `rm -rf data && docker-compose up` 7.2. With a stored (from previus runs) database data `docker-compose up` 8. Check http://localhost:3000 9. Stop services: 9.1. Just press `Ctr+C` ## Most common errors: 1. `connection refused` There could be many reasons, but the most common are: - The port is not open on the destination machine. - The port is open on the destination machine, but its backlog of pending connections is full. - A firewall between the client and server is blocking access (also check local firewalls). After checking for firewalls and that the port is open, use telnet to connect to the IP/port to test connectivity. This removes any potential issues from your application. ***MacOS:*** If you suspect that your SSH service might be down, you can run this command to find out: `sudo service ssh status` If the command line returns a status of down, then you’ve likely found the reason behind your connectivity error. ***Ubuntu:*** Sometimes a connection refused error can also indicate that there is an IP address conflict on your network. You can search for possible IP conflicts by running: `arp-scan -I eth0 -l | grep ` `arp-scan -I eth0 -l | grep ` and `arping ` 2. `yarn db:create` creates database with the assembled tables (on MacOS with Postgres database) The workaround - put the next commands to your Postgres database terminal: `DROP SCHEMA public CASCADE;` `CREATE SCHEMA public;` `GRANT ALL ON SCHEMA public TO postgres;` `GRANT ALL ON SCHEMA public TO public;` Afterwards, continue to start your project in the backend directory by running: `yarn start`