-
Install the python dependencies:
pipenv install -
Install a local version of the database:
docker compose up --build --remove-orphans -d -
Run database migration to have the latest schemas:
alembic upgrade head -
Run the app locally:
uvicorn app.main:app --reload -
Run the worker locally:
python ad_management_worker.py -
Run Tests for the app locally:
pytest ./app/main_test.py
The easiest way to get started with the api is to head over to the docs generated by fastapi at localhost:8000/docs.
- Create an
advertisor,
campaign,
adgroup,
ad
Using the endpoint
POST /campaigns
Create a new campaign.
- name: string *
- start_date: date *
- end_date: date *
- budget: float *
- advertiser_id: int *
- status: string
- ad_groups:
- "name": "string"
- "targeting_criteria": "string"
- "ads":
- "title": "string"
- "image_url": "string"
- "destination_url": "string"
{
"name": "Test Ad Campaign",
"start_date": "2022-01-01T00:00:00",
"end_date": "2022-12-31T23:59:59",
"budget": 1000.0,
"ad_groups": [
{
"name": "Test Ad Group",
"targeting_criteria": "Test targeting criteria",
"ads": [
{
"title": "Test Ad",
"image_url": "http://test-image-url.com",
"destination_url": "http://test-destination-url.com"
}
]
}
]
}Get a campaign by ID.
- id: int *
- 200: OK
- 401: Unauthorized
- 404: Campaign not found
- 500: Internal Server Error
Example Result
[
{
"id": 1,
"name": "Test Ad Campaign",
"start_date": "2022-01-01T00:00:00",
"end_date": "2022-12-31T23:59:59",
"budget": 1000.0,
"status": "CREATED",
"ad_groups": [
{
"id": 1,
"name": "Test Ad Group",
"targeting_criteria": "Test targeting criteria",
"ads": [
{
"id": 1,
"title": "Test Ad",
"image_url": "http://test-image-url.com",
"destination_url": "http://test-destination-url.com"
}
]
}
]
}
]python3 -m venv fenv
source fenv/bin/activate
pip install pipenv
pipenv install
pipenv install <package> --dev
alembic revision -m "create all tables"
alembic upgrade head
alembic downgrade -1
export PYTHONPATH=$PWD
id: a unique identifier for each user, this field is the primary key and is of typeSERIAL.username: a text field that stores the username of the user, this field is unique and is of typeVARCHAR(255).email: a text field that stores the email of the user, this field is unique and is of typeVARCHAR(255).password_hash: a text field that stores the hashed password of the user, this field is of typeVARCHAR(255).
id: a unique identifier for each advertiser, this field is the primary key and is of typeSERIAL.name: a text field that stores the name of the advertiser, this field is of typeVARCHAR(255).email: a text field that stores the email of the advertiser, this field is of typeVARCHAR(255).phone_number: a text field that stores the phone number of the advertiser, this field is of typeVARCHAR(255).
id: a unique identifier for each ad campaign, this field is the primary key and is of typeSERIAL.name: a text field that stores the name of the ad campaign, this field is of typeVARCHAR(255).start_date: a date field that stores the start date of the ad campaign, this field is of typeDATE.end_date: a date field that stores the end date of the ad campaign, this field is of typeDATE.budget: a float field that stores the budget of the ad campaign, this field is of typeFLOAT.advertiser_id: a foreign key that references the advertiser who created the ad campaign, this field is of typeINTEGERand references theidfield of theAdvertiserstable.status: a text field that stores the current status of the ad campaign (e.g. "created", "running", "finished"), this field is of typeVARCHAR(255).
id: a unique identifier for each ad group, this field is the primary key and is of typeSERIAL.name: a text field that stores the name of the ad group, this field is of typeVARCHAR(255).targeting_criteria: a text field that stores the targeting criteria for the ad group, this field is of typeVARCHAR(255).ad_campaign_id: a foreign key that references the ad campaign that the ad group belongs to, this field is of typeINTEGERand references theidfield of theAdCampaignstable.
id: a unique identifier for each ad, this field is the primary key and is of type SERIAL.title: a text field that stores the title of the ad, this field is of type VARCHAR(255).image_url: a text field that stores the URL of the ad's image, this field is of type VARCHAR(255).destination_url: a text field that stores the URL that the ad should redirect to when clicked, this field is of type VARCHAR(255).ad_group_id: a foreign key that references the ad group that the ad belongs to, this field is of type INTEGER and references the id field of the AdGroups table.
