This repository defines the F3 data structure, used by the F3 Slack Bot, Maps, etc. The projected uses SQLAlchemy to define the tables / models.
To load the data structure in your database:
- Set up a local db, update
.env.exampleand save as.env - Clone the repo, use Poetry to install dependencies:
poetry env use 3.12
poetry install- Run the alembic migration:
source .env && poetry run alembic upgrade headIf you would like to make a change, you will need to:
- Make the change in
models.py - Make a alembic revision:
source .env && alembic revision --autogenerate -m "Your Message Here"- Make any edits to the migration script in
alembic/versions - Run the upgrade on your local db:
source .env && alembic upgrade head- Bump the version on
pyproject.toml:
poetry version patch[minor][major]- Tag your final commit and make sure to push those tags to trigger the pypi package build:
git tag <new_version> -a -m "Your message here"
git push origin --tagsNote
The github pages documentation will be updated when you push to main, but if you would like to preview locally, run:
poetry run sphinx-build -b html docs docs/_build/html
cd docs
poetry run python -m http.server --directory _build/htmlTip
Adding new fields as nullable (ie Optional[]) has the best chance of reducing breaking changes to the apps.
---
config:
look: handDrawn
theme: dark
---
erDiagram
USERS ||--|{ ATTENDANCE : have
ATTENDANCE }|--|| EVENT_INSTANCES: at
ATTENDANCE }|..|{ ATTENDANCE_TYPES : "are of type(s)"
EVENT_INSTANCES }|..|| EVENTS : "part of series"
EVENT_INSTANCES }|..|{ EVENT_TYPES : "with type(s)"
EVENTS }|..|{ EVENT_TYPES : "with type(s)"
EVENT_INSTANCES }|--|| ORGS : "belong to"
EVENT_INSTANCES }|..|| LOCATIONS : "at"
EVENTS }|--|| ORGS : "belong to"
EVENTS }|..|| LOCATIONS : "at"
SLACK_SPACES ||..|| ORGS : "are connected to"
USERS ||..|{ SLACK_USERS : "have one or more"
SLACK_USERS }|--|| SLACK_SPACES : "belong to"
USERS }|..|{ ACHIEVEMENTS : "earn"
USERS }|..|{ ROLES : "have"
ROLES ||..|{ PERMISSIONS : "have"
ROLES }|..|{ ORGS : "in"
USERS }|..|{ POSITIONS : "hold"
POSITIONS }|..|{ ORGS : "in"