This text file explains the directory structure for the code


########## The following is a general overview of the files/folders in the project ##########
- installation_guide: File containing the instructions for application installation/maintenance
- application.py: This is the file that should be run to start the application
- config.py: Configuration file. Also contains some credentials used by the application
- requirements.txt: File containing the dependencies for this project
- app: folder containing the project code
        - json_files: Folder containing local json files.
        - logic: Folder that contains helper functions for the business logic of the application. (Business logic layer)
        - static: Folder containing static files such as images and the CSS file.
        - templates: Folder containing the HTML pages that are displayed to the user. (UI layer)
        - test: Folder that contains test cases.
        - views: Folder that contains the routes that users can navigate to, also contains some classes for data formatting. (Presentation layer)
        - models.py: Contains the model definitions for the database objects. (Data layer)
        - __init__.py: In this file, the application is created and the environment is set to Dev, Test, or Prod,
                       which are configurations from config.py. Additionally, the URL of the website should be placed here.


########## The following goes into more detail of some files in the app/ folder ##########
- json_files
        - temp: Folder with temporary files that are not necessary for the project to compile successfully.
                They are either old files, or files that only need to be used when initializing the database for the first time.
        - cached_data.json: This file caches the data that is shown in the homepage, to reduce loading time.
        - download_button_config.json: This file contains the setting of whether to show the CSV download button on the provisional view data pages.
        - homepage_config.json: This file contains settings for the locations shown on the homepage.
- logic
        - authentication.py: Used for authentication of admins.
        - forms.py: Contains the forms for the website.
        - mail.py: Contains the Mail object, and functions for sending email messages.
        - oauth2.py: Get a token to be authorized to use the HydroVu API.
        - scheduled.py: Contains scheduled job to automatically fetch new data from the HydroVu API and put it in the database.
        - scripts.py: Contains functions for initializing data in the database.
- views
        - api_routes.py: Routes specifically for the API, which return JSON results.
        - routes.py: Routes for the website pages.
        - schemas.py: Used for formatting the JSON results returned from the API.
        - tables.py: Used for formatting data from the database into a table, to be shown on the administrator pages of the website.
