140 lines
4.4 KiB
Markdown
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.
|