03 / Internship final project · Backend application

Hotel Booking API

View repository

From finding a room to receiving the invoice.

A .NET 8 booking backend with hotel and room management, guest reservations, discounts, reviews, email notifications, and PDF invoices.

My role
Backend Developer · Internship project
Timeline
Dec 2024 — Jan 2025
Context
Foothill Technology Solutions training
InvoiceGENERATED BY THE APIPDFSEARCHBOOKINVOICE

Booking-to-invoice illustration based on the API code; this is not a frontend screenshot.ENGINEERING CASE STUDY

The project

The Hotel Booking Platform is a REST API developed as the final project of my backend internship at Foothill Technology Solutions. It covers the core hotel booking domain: guests, hotels, rooms, amenities, cities, discounts, reservations, reviews, and administration.

The project connected many of the concepts from training into one implementation: layered architecture, data modeling, validation, authentication, business rules, tests, documentation, and deployment.

50+Documented API
endpoints
9API controllers
in the repository
3OS targets in the
CI build/test matrix

What I implemented

  • Implemented a .NET 8 REST API with EF Core, SQL Server, JWT authentication, and Clean Architecture.
  • Developed booking flows, search and filtering, room and hotel management, reviews, discounts, and guest access.
  • Added email notifications, invoice calculation, and PDF invoice generation.
  • Wrote xUnit tests, documented endpoints with Swagger and Postman, configured GitHub Actions CI, and deployed the API to Azure App Service.

Engineering decisions

01

Validate the booking before persisting it.

The booking service resolves the hotel and current guest, retrieves the requested rooms and active discounts, validates the rooms, and calculates the price before saving the reservation.

Explore the implementation
02

Make invoice calculations testable.

Dedicated tests cover the number of nights, total prices, per-room discount calculations, missing bookings, and guest ownership checks. These are domain outcomes with a direct effect on what a guest receives.

Explore the implementation
03

Protect a guest’s booking data.

Reading a booking or invoice resolves the current guest and verifies that the guest owns the booking. Resource ownership complements authentication at the API boundary.

Explore the implementation
04

Keep delivery steps explicit.

The public GitHub Actions workflow restores, builds, and tests .NET 8 across Ubuntu, Windows, and macOS. Azure App Service and Azure SQL were used in hands-on deployment; this workflow does not contain an Azure deployment step.

Explore the implementation

A closer look at the code

The booking price is calculated from each room’s final nightly price and the length of the stay.

BookingService.cs · source excerpt, reformatted
private decimal CalculateTotalPrice(
    List<BookingRoom> bookingRooms,
    DateOnly checkInDate, DateOnly checkOutDate)
{
    var numberOfNights = checkOutDate.DayNumber
        - checkInDate.DayNumber;

    return bookingRooms.Sum(br =>
        br.FinalPrice * numberOfNights);
}
Read the booking service

What I took forward

This project made the relationship between validation, persistence, and testable business behavior concrete. The invoice tests are particularly useful because they describe expected outcomes.

For a next iteration, I would decouple email delivery from the booking transaction and introduce retriable background processing, while preserving clear booking ownership checks.

Explore the work

The repository, public API documentation, tests, and CI configuration provide different views of the implementation.

The next good thing starts here

Let’s build
something that matters.

I’m open to junior .NET backend and software engineering opportunities. Have a role or a problem in mind? I’d love to hear about it.

Start a conversation
GitHubLinkedInCodeforcesBASED IN PALESTINE · OPEN TO REMOTE WORK