This is the API for my 2023-2024 FBLA Coding & Programming App ## Installation 1. Install [Dart SDK](https://dart.dev/get-dart) 2. Clone the repo ```bash git clone https://git.marinodev.com/MarinoDev/FBLA24.git cd FBLA24/fbla-api/ ``` 3. Run `dart pub install` to install dart packages 4. Install [PostgreSQL](https://www.postgresql.org/) and set it up. 5. Create `fbla` database in postgres ```SQL 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. 6. Create `businesses` table ```SQL -- 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 7. Create `users` table ```SQL -- 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; ``` 8. Set environment variables `JOBLINK_POSTGRES_ADDRESS` (IP address), `JOBLINK_POSTGRES_PORT` (default 5432), `JOBLINK_POSTGRES_USERNAME`, and `JOBLINK_POSTGRES_PASSWORD` to appropriate information for your postgres database. Also set `JOBLINK_SECRET_KEY` to anything you want to generate JSON Web Tokens. 9. 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 ## Usage ### Installed Start the API with `dart run lib/fbla_api.dart`\ Note the address it is serving at, you will need this to connect it to the UI, and to run tests. ### Docker 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. ### Testing You can test all functionality of your api with `dart run test/fbla_api_test.dart`, setting `apiAddress` on line 8 to your api address.