FBLA24/fbla-api/README.md

140 lines
4.4 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. 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 `listings` table.
```SQL
-- Table: public.listings
-- DROP TABLE IF EXISTS public.listings;
CREATE TABLE IF NOT EXISTS public.listings
(
id integer NOT NULL GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1 ),
"businessId" integer NOT NULL,
name text COLLATE pg_catalog."default" NOT NULL,
description text COLLATE pg_catalog."default" NOT NULL,
type text COLLATE pg_catalog."default" NOT NULL,
wage text COLLATE pg_catalog."default",
link text COLLATE pg_catalog."default",
"offerType" text COLLATE pg_catalog."default" NOT NULL,
CONSTRAINT listing_pkey PRIMARY KEY (id)
)
TABLESPACE pg_default;
ALTER TABLE IF EXISTS public.listings
OWNER to [username];
```
Make sure to change [username] to the actual username of your postgres instance.
8. 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 [username];
```
Make sure to change [username] to the actual username of your postgres instance.
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.