Welcome to the official GitHub repository for E‑Library, a full-stack web application built by Team 12 for the University of Houston’s COSC 3380: Database Systems course.
- Overview
- Features
- Technology Stack
- Folder Structure
- Installation & Setup
- Deployment
- Environment Variables
- Contributing
- Contributors
- License
- Contact
E‑Library @ UH is a dynamic digital library platform designed to simplify library management for both users (students, faculty) and employees (librarians, admins). It supports the borrowing, reserving, and tracking of library assets like books, movies, music, and technology.
Live Website: https://e-libraryuh.vercel.app
-
Inventory Management
Add, update, deactivate, and manage cover images for items like books, movies, music, and technology using Azure Blob Storage. -
Role-Based Access Control
Different interfaces and privileges for Customers, Employees, and Admins, with automatic classification based on UH email type (@uh.eduvs@cougarnet.uh.edu). -
Events Employees and Admins can manage library events through the Events tab in the dashboard.
-
Employee Management Admins have exclusive access to manage employee accounts through the Employee Dashboard.

-
Search & Waitlists
Users can search across categories and join waitlists for unavailable items. Waitlist fulfillment is automated with email alerts and timed holds. -
Email Notifications
EmailJS and SMTP integration for waitlist alerts, confirmations, and other key user interactions. -
Fines System
Automatic fine generation for overdue items, tracked in a centralized report. Users are restricted from borrowing with unpaid fines. -
Donations
Customers can contribute to the library directly through the platform. Donations are tracked and visible to employees. -
Analytics & Reports
Real-time data reports and filtering for inventory status, transaction history, fines, waitlists, and user activity. -
Contact Us The Contact Us feature allows users to reach out to the E‑Library team with inquiries, suggestions, or issues.
| Layer | Tech Used |
|---|---|
| Frontend | React (Vite + TypeScript) |
| Backend | ASP.NET Core 6 + Entity Framework |
| Database | Microsoft SQL Server (Azure-hosted) |
| Auth/Email | EmailJS, SMTP |
| Storage | Azure Blob Storage |
| Hosting | Vercel (frontend), Azure App Service (API) |
Database-Project-CS3380-T12/
├─ libraryWebAPI/ # .NET Core backend
│ ├─ Controllers/ # API endpoints
│ ├─ Models/ # Entities & DTOs
│ ├─ Data/ # EF Core context
├─ libraryApp/ # React frontend
│ ├─ src/ # Main source code
│ ├─ public/ # Static assets
└─ ...
Below is a detailed breakdown of every file and folder in the Database-Project-CS3380-T12 repository, organized by project component.
Database-Project-CS3380-T12.sln: Visual Studio solution file, orchestrates the backend (LibraryWebAPI) and frontend (libraryApp) projects..gitignore: Lists files/folders to exclude from Git version control.README.md: This README, with project overview, setup, and documentation.package.json/package-lock.json: Frontend dependency manifests (scripts, dependencies).Database-Project-CS3380-T12.sln,.gitignore,README.md,package.json,package-lock.json
Handles HTTP endpoints for each entity and workflow:
AuthController.cs– Email-based authentication (login, registration, etc.)BookAuthorController.cs,BookGenreController.cs– Manage book‐related lookup tables.BookController.cs,BookCheckoutController.cs– CRUD for books and the checkout process.BorrowerTypeController.cs– Student vs. faculty borrowing limits.CustomerController.cs,UserProfileController.cs– Customer registration, profile edits, deactivation/reactivation.DeviceTypeController.cs,TechnologyController.cs,TechonologyManufacturerController.cs– Tech inventory and metadata.DonationController.cs– Donation submissions.EmployeeController.cs– Employee account management (Admins only).EventController.cs,EventCategoryController.cs– Library event CRUD.FineController.cs– Overdue fine calculation and payment.ItemController.cs– Generic item-level endpoints.MovieController.cs,MovieDirectorController.cs,MovieGenreController.cs– Movie entity and metadata.MusicController.cs,MusicArtistController.cs,MusicGenreController.cs– Music entity and metadata.PublisherController.cs– Publisher lookup.TransactionHistoryController.cs– View and query historical transactions.WaitlistController.cs– Waitlist joining and fulfillment logic.UpdateAvailableCopiesDTO.cs– DTO for availability updates.
LibraryContext.cs– EF CoreDbContext, definesDbSet<>s and relationships for all entities.
- Entity classes (
Book.cs,Movie.cs,Music.cs,Technology.cs,User.cs,Event.cs,Fine.cs,Donation.cs, etc.) define the database schema. - DTOs (in
Models/DTO/) — e.g.,BookDTO.cs,CustomerLoginDto.cs,SearchResultDTO.cs,MasterTransactionReportDto.cs, etc., shape request/responses.
launchSettings.json– Local launch profiles (ports, environment).
ISearchRepository.cs– Defines search abstraction.SearchRepository.cs– Implements full-text and multi-entity search.
BlobStorageService.cs– Azure Blob Storage uploads/downloads for cover images.EmailService.cs/IEmailService.cs– SMTP / EmailJS wrappers for notifications.WaitlistNotificationService.cs– Coordinates waitlist emails & holds.
(Razor pages used for testing or in API Explorer)
Views/Book/,Views/BookCheckout/– Example HTML test pages.
LibraryWebAPI.csproj– .NET project file with NuGet references.appsettings.json&appsettings.Development.json– Connection strings, secrets placeholders.Program.cs– Bootstraps the web host, middleware, and services.LibraryWebAPI.http– VS Code REST client file for manual API testing.
.github/workflows/azure_deploy.yml– GitHub Actions pipeline to build and deploy API & frontend to Azure.
public/book_covers/,device_covers/,movie_covers/,music_covers/– Sample images.vite.svg– Vite logo for default template.
.gitignore,eslint.config.js– Lint rules.index.html– Main HTML template.package.json,package-lock.json– Dependencies & scripts.tsconfig.json,tsconfig.app.json,tsconfig.node.json– TypeScript settings.vite.config.ts– Vite build configuration.vercel.json– Frontend deployment settings.
-
assets/– Static images imported by components. -
components/CheckoutPage/,Return.tsx,InventoryTable.tsx,SearchBar.tsx,ReportsOutlet.tsx,LibraryHistory.tsx,UserProfile.tsx,RegistrationPage.tsx,TermsAndConditionsPage.tsx,ContactPage.tsx, etc. — All UI components and pages for user flows.- Shared utilities:
SharedCard.tsx,Loader.tsx,BackToTopButton.tsx,Layout.tsx,NavBar.tsx,PageTransition.tsx,AnimatedPage.tsx.
-
contexts/CheckoutContext.tsxManages global checkout cart and user session state via React Context. -
types/Book.tsDefines TypeScript interfaces for API data shapes (e.g.,Book,Movie,User). -
utils/transformBookData.tsUtility to normalize API payloads into UI-friendly formats. -
Entry Points
App.tsx,App.css– Root component and global styles.main.tsx– Mounts React into the DOM (#root).vite-env.d.ts– Vite environment typing.types.ts– Shared TypeScript types.
git clone https://github.com/liamlecs/Database-Project-CS3380-T12.git
cd Database-Project-CS3380-T12cd libraryWebAPI
dotnet user-secrets init
dotnet user-secrets set "ConnectionStrings:DefaultConnection" "..."
dotnet user-secrets set "AzureBlobStorage:ConnectionString" "..."
dotnet user-secrets set "Smtp:Password" "..."
dotnet build
dotnet runBy default, the API runs at: http://localhost:5217
When running the backend locally on http://localhost:5217, you can access the full Swagger UI for exploring and testing the API:
This interface provides interactive documentation for all backend endpoints, including request/response formats and status codes.
cd ../libraryApp
npm installCreate a .env file:
VITE_API_BASE_URL=http://localhost:5217
VITE_PUBLIC_ASSET_BASE_URL=http://localhost:5217
VITE_EMAILJS_USER_ID=your_id
VITE_EMAILJS_SERVICE_ID=your_service
VITE_EMAILJS_TEMPLATE_ID=your_templateThen run the app:
npm run devLocal frontend URL: http://localhost:5173
- Publish using Visual Studio or GitHub Actions
- Set your environment variables in Azure Portal > Configuration
- Link your GitHub repo to a new Vercel project
- Set:
VITE_API_BASE_URL→ Azure App URL
- Build command:
npm run build - Output directory:
dist
VITE_API_BASE_URL=http://localhost:5217
VITE_PUBLIC_ASSET_BASE_URL=http://localhost:5217
VITE_EMAILJS_USER_ID=your_id
VITE_EMAILJS_SERVICE_ID=your_service
VITE_EMAILJS_TEMPLATE_ID=your_templatedotnet user-secrets set "ConnectionStrings:DefaultConnection" "..."
dotnet user-secrets set "AzureBlobStorage:ConnectionString" "..."
dotnet user-secrets set "Smtp:Password" "..."Pull requests are welcome! For major changes, open an issue first to discuss what you’d like to change.
- Fork the repo
- Create a new branch
- Make changes and commit
- Open a pull request with a detailed explanation
| Name | GitHub Username | Role |
|---|---|---|
| Liam Le | @liamlecs | Team Lead |
| Trevor Drummond | @trevrd22 | Developer |
| Jacqueline Sanchez | @jupitersnow1 | Developer |
| Nhi Truong | @nhitruong1 | Developer |
| Fernando Mancilla | @FerMan2001 | Developer |
This project is licensed for academic use only under Team 12 (University of Houston, COSC 3380). Redistribution or commercial use is not permitted.
Team 12 – University of Houston
📧 Email: uhelibrary5@gmail.com
👤 Maintainer: Liam Le
Thank you for exploring the E‑Library! We hope this project serves as a strong foundation for future library systems and student-led development.
































