This is a personal project where the primary goal is to learn a new set of technologies and improve my working knowledge of what I know, that being:
- Python (3.14.2)
- SQLAlchemy (Python SQL toolkit and Object Relational Mapper)
- Alembic (Database migration tool)
- PostgreSQL (SQL database)
- Redis (In-memory database)
- Docker Containerized applications
- ... and many more libraries to provide greater functionality and security
This project is inspired by my experience at my University's rowing club (Hence a service dedicated to rowing) and my observation of their needs.
As it stands, it is a standalone service, lacking a front end wrapper to use this. I will most likely work on one once this is completed using React.
- Calendar
- Attendance
- tracking absences only
- assumed present if not absent
- Availability
- Monitors anticipated availability of all members (for the week)
- unsure how to go about storing this one
- Practice schedules
- Dates
- contains info on what will be done on practice (Land vs Water and Intensity)
- Varies on day-by-day basis
- Volunteering (Maybe merge with calendar or keep standalone)
- Headcount for anticipated members
- Track who has/n't volunteered
- Feedback
- Session (Create a feedback opportunity each session)
- Coxwains
- general thoughts on overall performance up to this point in the semester
- Boats
- Opinions of the coxwain and rowers on a specific boat in relations to performance and constructive criticism
- General (random feedback, undated and not required)
- Rowers
- Membership
- **Possibly in the distant future** Implement stripe payment for dues payment
- Boats
- min, max, avg pace
- distance travelled
- rowers & coxwains on boat
- Rower contribution score (RCS)
- FURTHER RESEARCH REQUIRED. find mathematical representation to estimate combined effort to speed
- Avg out performance of boats rower was in
- Boat power & expected boat power based off RCS
- Workouts
- Ergs
- Varies as not everyone does the same workouts
- Water
- Varies as not everyone does the same workouts
- Mile Runs
- Black & Gold
- Submissions for different teams
- Teams are Gold & Black, teams are same for the school year (fall-spr)
- Notes:
- Allow partial submissions (Sometimes members can't finish for some reason)
- Will have users manually inputting their performance
- Some are repeated, making it easy to track performance over time
- Are done in sequential order
- may track wattage, pace and/or distance of member
- Build a simple web server
- API paths
- Request Bodies
- Organize API Paths with Routers
- Databases With SQLModel
- Creating a database model with SQLModel
- Creating database tables
- CRUD With SQLModel
- Separate CRUD logic using service classes
- Use service methods in API path handlers
- Create the user auth model
- Database Migrations With Alembic
- User Account Creation
- Password hashing with bcrypt
- JWT Authentication
- PyJWT Setup
- User Login Endpoint
- Add roles to the user model
- HTTP Bearer Authentication
- Regaining Access with refresh tokens
- Revoking Tokens using Redis
- Read and set headers
- Role-Based Access Control
- Get the currently authenticated user
- Error Handling
- Create custom API Exceptions and exception handlers
- Register Error handlers on the app
- Create a custom logging middleware
- Use Custom ASGI middleware with FastAPI
- Adding CORS Middleware
- Adding Trusted Hosts
- Setting Up FastAPI-Mail
- User account verification
- Password Reset
- Background Tasks
- FastAPI Background Tasks
- Background Tasks with Celery and Redis
- Celery Monitoring With Flower
- API Testing
- Unit-tests with Unittest Mock and Pytest
- Document-driven Testing with Schemathesis