Skip to content

Sheperdd/TorqueDesk

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TorqueDesk: Modern Automotive Repair Management Software

Built for a third-year software engineering course, TorqueDesk is a platform designed to take the headache out of automotive repairs for both the mechanic and the vehicle owner.

Authors

Kalan Roye, Shane Edelstein, Sviatoslav Kolodii, Daimen Miller, Aaron Serro

Screenshots

Welcome Screen - Entry point to log in or sign up

Welcome Screen

The app’s landing screen prompts users to log in or create a new TorqueDesk account to continue.

Signup Screen - Create a TorqueDesk account (including mechanic details)

Signup Screen

Users register by entering personal/account details, and mechanics additionally provide shop name, hourly rate, and their specialties.

Messages Screen - Mechanics and customers communicate about job work

Messages Screen

Mechanics and customers can exchange messages related to appointments and job work order details.

Search Screen - Customers find mechanics by specialty, rate, and rating

Search Screen

Customers can search for mechanics using filters like specialty, maximum hourly rate, and minimum rating, then select a mechanic from the results.

Job Screen - Track repair progress, activity, and costs

Job Screen

The job view shows repair stage progress with an activity log, along with job details such as customer/vehicle information, cost breakdown, and controls to update stages and mark the job complete.

Environment Setup

TorqueDesk uses CMake (>= 3.20), Ninja, and C++20. Dependencies (nlohmann/json + GoogleTest, etc.) are downloaded automatically via CMake FetchContent (no manual installs needed beyond basic build tools).


Prerequisites

The following packages must be installed before building. Everything listed under Auto-fetched below is downloaded automatically by CMake - no manual install needed for those.

Auto-fetched via CMake FetchContent (no action required)

Library Version Purpose
SQLiteCpp 3.3.3 C++ SQLite wrapper
nlohmann/json v3.12.0 JSON serialization
GoogleTest v1.17.0 Unit testing
jwt-cpp v0.7.0 JWT generation/validation

Must be installed manually

Package Component Used by
C++20 toolchain (GCC ≥ 11 or Clang ≥ 13) Everything
CMake ≥ 3.20 Build system
Ninja Build generator
Git FetchContent
OpenSSL (dev headers + libs) libssl / libcrypto jwt-cpp
Qt 5 Core, Widgets, Network Client (TorqueClient)
Boost system Server (TorqueServer)

macOS

  1. Install Xcode Command Line Tools:
    xcode-select --install
  2. Install all required packages via Homebrew:
    brew install cmake ninja openssl qt@5 boost
  3. If CMake cannot find Qt5, add it to your path:
    export PATH="$(brew --prefix qt@5)/bin:$PATH"

Linux (native or WSL)

Install all required packages via your distro package manager.

Ubuntu / Debian / WSL:

sudo apt update && sudo apt install -y \
  build-essential \
  cmake \
  ninja-build \
  git \
  libssl-dev \
  qtbase5-dev \
  libboost-system-dev

Note: First configure/build may take longer because CMake will fetch and build dependencies.


Build (Ninja)

From the repo root:

Configure

  • cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug

Build

  • cmake --build build

Run Unit Tests

After building, you can run all tests at once via CTest:

ctest --test-dir build --output-on-failure

Or run each test suite individually:

Suite Source file Command
Engine tests test_engine.cpp ./build/tests/UnitTests
Customer service tests test_customer_service.cpp ./build/tests/CustomerServiceTests
Mechanic service tests test_mechanic_service.cpp ./build/tests/MechanicServiceTests
Auth service tests test_auth_service.cpp ./build/tests/AuthServiceTests

Database Schema

This section describes the physical SQLite schema (DatabaseManager), not response DTOs.

Physical tables

  • customers
    • id (PK), name, phone, email (UNIQUE), password, role, createdAt
  • mechanics
    • id (PK), userId (UNIQUE, FK -> customers.id), displayName, shopName, hourlyRate, specialties
  • vehicles
    • id (PK), ownerUserId (FK -> customers.id), vin (UNIQUE), make, model, year, mileage, createdAt
  • symptom_forms
    • id (PK), customerId (FK -> customers.id), vehicleId (FK -> vehicles.id), description, severity, createdAt
  • mechanic_availability (not really used)
    • id (PK), mechanicId (FK -> mechanics.id), start, end, UNIQUE(mechanicId,start,end)
  • appointments
    • id (PK), customerId (FK -> customers.id), mechanicId (FK -> mechanics.id), vehicleId (FK -> vehicles.id), symptomFormId (FK -> symptom_forms.id), scheduledAt, status, note, createdAt
  • jobs
    • id (PK), appointmentId (UNIQUE FK -> appointments.id), mechanicId (FK -> mechanics.id), customerId (FK -> customers.id), vehicleId (FK -> vehicles.id), stage, percentComplete, lastNote, updatedAt, startedAt, completedAt, completionNote
  • reviews
    • id (PK), jobId (UNIQUE FK -> jobs.id), customerId (FK -> customers.id), mechanicId (FK -> mechanics.id), rating, comment, createdAt

DTO/computed fields (not stored as table columns)

  • Appointment-facing extras: customerName, customerEmail, customerPhone, mechanicName, vehicleDescription, symptoms
  • Job-facing extras: customerName, customerEmail, vehicleDescription, isBlocked
  • Mechanic-facing extras: averageRating, reviewCount
  • Review-facing extras: customerName

Local DB note

  • The project currently initializes schema at startup with CREATE TABLE IF NOT EXISTS.
  • Existing local DB files may not pick up newer constraints/relations automatically.
  • During development, resetting/recreating torquedesk.db is expected when schema changes.

Endpoints

1. Users & Auth (Customers.cpp)

Registration/login, user profile routes, and /users/{id}/... nested routes.

HTTP Method Endpoint Purpose Status Tested
POST /auth/register Creates a new user account and returns an authenticated session token. Implemented null
POST /auth/login Authenticates a user and returns a JWT-backed session token. Implemented null
GET /users/{id} Returns profile details for the specified user. Implemented null
PATCH /users/{id} Updates editable profile fields for the specified user. Implemented null
DELETE /users/{id} Deletes the specified user account. Implemented null
PATCH /users/{id}/password Changes the password for the specified user. Implemented null
GET /users/{userId}/vehicles Lists vehicles owned by the specified user. Implemented null
POST /users/{userId}/vehicles Adds a new vehicle under the specified user. Implemented null
GET /users/{userId}/symptoms Lists symptom forms created by the specified user. Implemented null
GET /users/{userId}/appointments Lists appointments belonging to the specified user. Implemented null
GET /users/{userId}/reviews Lists reviews authored by the specified user. Implemented null

2. Vehicles (Vehicles.cpp)

CRUD for vehicles and any /vehicles/{id}/… nested routes.

HTTP Method Endpoint Purpose Status Tested
GET /vehicles/{id} Returns details for a specific vehicle record. Implemented null
PATCH /vehicles/{id} Updates editable data on a specific vehicle record. Implemented null
DELETE /vehicles/{id} Removes a specific vehicle record. Implemented null
POST /vehicles/{vehicleId}/symptoms Creates a new symptom form linked to the specified vehicle. Implemented null

3. Symptom Forms (Symptoms.cpp)

Direct symptom-form access (/symptoms/… routes only).

HTTP Method Endpoint Purpose Status Tested
GET /symptoms/{id} Returns one symptom form by ID. Implemented null
PATCH /symptoms/{id} Updates fields on an existing symptom form. Implemented null
DELETE /symptoms/{id} Deletes a symptom form by ID. Implemented null

4. Mechanics (Mechanics.cpp)

Search, profile management, and any /mechanics/{id}/… nested routes.

HTTP Method Endpoint Purpose Status Tested
GET /mechanics Searches mechanics using optional query filters like specialty and distance. Implemented null
GET /mechanics/{id} Returns profile details for a specific mechanic. Implemented null
PATCH /mechanics/{id} Updates profile fields for a specific mechanic. Implemented null
GET /mechanics/{id}/jobs Lists open jobs assigned to the specified mechanic. Implemented null
GET /mechanics/{id}/appointments Lists incoming appointment requests for the specified mechanic. Implemented null
GET /mechanics/{id}/reviews Lists reviews associated with the specified mechanic. Implemented null

5. Appointments (Appointments.cpp)

Scheduling logic (/appointments/… routes only).

HTTP Method Endpoint Purpose Status Tested
POST /appointments Creates a new appointment request between customer and mechanic. Implemented null
GET /appointments/{id} Returns details for a specific appointment. Implemented null
PATCH /appointments/{id}/status Updates the status of an existing appointment. Implemented null
POST /appointments/{id}/job Starts a repair job from the specified appointment. Implemented null

6. Jobs (Jobs.cpp)

Active work tracking (/jobs/… routes only).

HTTP Method Endpoint Purpose Status Tested
GET /jobs/{id} Returns detailed progress data for a specific job. Implemented null
PUT /jobs/{id}/stage Updates the job stage, completion percentage, and optional note. Implemented null
POST /jobs/{id}/complete Marks the job as completed with a required completion note. Implemented null
GET /jobs/{id}/notes Returns all timeline notes attached to the job. Implemented null
POST /jobs/{id}/notes Adds a new mechanic note to the job timeline. Implemented null

7. Reviews (Reviews.cpp)

Direct review access (/reviews/… routes only).

HTTP Method Endpoint Purpose Status Tested
POST /reviews Submits a customer review for a completed job. Implemented null
DELETE /reviews/{id} Deletes a review by ID when it belongs to the requester. Implemented null

About

TorqueDesk is a hand-built automotive repair management app with a C++ server (SQLite-backed business logic) and a Qt5 client for mechanics and customers.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages