FBLA24/fbla-api/README.md
2024-04-07 13:18:44 -05:00

82 lines
3.3 KiB
Markdown

This is the API for my 2023-2024 FBLA Coding & Programming App
## Installation
1. Install [Dart SDK](https://dart.dev/get-dart)
2. Install [PostgreSQL](https://www.postgresql.org/) and set it up
3. Clone the repo
```
git clone https://git.marinodev.com/MarinoDev/FBLA24.git
cd FBLA24/fbla-api/
```
4. Run `dart pub install` to install dart packages
## Usage
1. Create `fbla` database in postgres
```
CREATE DATABASE fbla
WITH
OWNER = [username]
ENCODING = 'UTF8'
CONNECTION LIMIT = -1
IS_TEMPLATE = False;
```
Make sure to change [username] to the actual username of your postgres instance.
2. Create `businesses` table
```
-- Table: public.businesses
-- DROP TABLE IF EXISTS public.businesses;
CREATE TABLE IF NOT EXISTS public.businesses
(
id integer NOT NULL GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 START 0 MINVALUE 0 MAXVALUE 2147483647 CACHE 1 ),
name text COLLATE pg_catalog."default" NOT NULL,
description text COLLATE pg_catalog."default" NOT NULL,
type text COLLATE pg_catalog."default" NOT NULL,
website text COLLATE pg_catalog."default" NOT NULL,
"contactName" text COLLATE pg_catalog."default" NOT NULL,
"contactEmail" text COLLATE pg_catalog."default" NOT NULL,
"contactPhone" text COLLATE pg_catalog."default" NOT NULL,
notes text COLLATE pg_catalog."default" NOT NULL,
"locationName" text COLLATE pg_catalog."default" NOT NULL,
"locationAddress" text COLLATE pg_catalog."default" NOT NULL,
CONSTRAINT businesses_pkey PRIMARY KEY (id)
)
TABLESPACE pg_default;
ALTER TABLE IF EXISTS public.businesses
OWNER to [username];
```
Make sure to change [username] to the actual username of your postgres instance
3. Create `users` table
```
-- Table: public.users
-- DROP TABLE IF EXISTS public.users;
CREATE TABLE IF NOT EXISTS public.users
(
username text COLLATE pg_catalog."default" NOT NULL,
password_hash text COLLATE pg_catalog."default" NOT NULL,
salt text COLLATE pg_catalog."default" NOT NULL,
CONSTRAINT users_pkey PRIMARY KEY (username),
CONSTRAINT username UNIQUE (username)
)
TABLESPACE pg_default;
ALTER TABLE IF EXISTS public.users
OWNER to postgres;
```
4. Set environment variables `POSTGRES_ADDRESS` (IP address), `POSTGRES_PORT` (default 5432), `POSTGRES_USERNAME`, and `POSTGRES_PASSWORD` to appropriate information for your postgres database. Also set `SECRET_KEY` to anything you want to genera te JSON Web Tokens.
5. Set lib/create_first_user.dart username and password variables at top of file and run with `dart run lib/create_first_user.dart`
Note: the username and password you use here will be what you use to log into the app as an admin
6. Your database should be all set up! Start the API with `dart run lib/fbla_api.dart` or alternatively, run it in a docker container with [Docker Build](https://docs.docker.com/reference/cli/docker/image/build/) and [Docker Compose](https://docs.docker.com/compose/) using the included [Dockerfile](Dockerfile) and [docker-compose.yml](docker-compose.yml) files. If using `Docker Compose`, change the first portion of the volumes path on line 9 to any desired storage location.
Note the address it is serving at, you will need this to connect it to the UI, and to run tests.
7. Test your api with `dart run test/fbla_api_test.dart`, setting `apiAddress` on line 8 to your api address.