Restaurants
Sample .NET 8 API project including Clean Architecture principles, CQRS, MediatR, and Entity Framework with unit and integration tests using xUnit
Install / Use
/learn @jakubkozera/RestaurantsREADME
Restaurants API
This is a .NET 8.0 web API for managing restaurants, following the principles of Clean Architecture.
Video Course
This solution is part of a video course.
You can find the course at https://linktr.ee/fullstack_developer.
The course covers the development of this .NET 8.0 web API for managing restaurants, following the principles of Clean Architecture, in detail.
Project Structure
src/Restaurants.API: The main API project. This is the entry point of the application.src/Restaurants.Application: Contains the application logic. This layer is responsible for the application's behavior and policies.src/Restaurants.Domain: Contains enterprise logic and types. This is the core layer of the application.src/Restaurants.Infrastructure: Contains infrastructure-related code such as database and file system interactions. This layer supports the higher layers.tests/Restaurants.API.Tests: Contains unit tests for the API.
Packages and Libraries
This project uses several NuGet packages and libraries to achieve its functionality:
-
Serilog: This library is used for logging. It provides a flexible and easy-to-use logging API.
-
MediatR: This library is used to implement the Command Query Responsibility Segregation (CQRS) pattern. In this solution, commands (which change the state of the system) and queries (which read the state) are separated for clarity and ease of development.
-
Entity Framework: This is an open-source ORM framework for .NET. It enables developers to work with data using objects of domain-specific classes without focusing on the underlying database tables and columns where this data is stored.
-
Azure Storage Account: This service is used for handling blobs. Blobs, or Binary Large Objects, are a type of data that can hold large amounts of unstructured data such as text or binary data, including images, documents, streaming media, and archive data.
-
Microsoft Identity Package: This package is used for handling user identity in the web API. It provides features such as authentication, authorization, identity, and user access control.
Please refer to the official documentation of each package for more details and usage examples.
Getting Started
Prerequisites
- .NET 8.0
- Visual Studio 2022 or later
Building
To build the project, open the Restaurants.sln file in Visual Studio and build the solution.
Running
To run the project, set Restaurants.API as the startup project in Visual Studio and start the application.
API Endpoints
-
GET /api/restaurants- Parameters:
searchPhrase,pageSize,pageNumber,sortBy,sortDirection - Authorization Bearer token
- Parameters:
-
GET /api/restaurants/{id}- Parameters:
id - Authorization: Bearer token
- Parameters:
-
GET /api/restaurants/{id}/dishes- Parameters:
id - Authorization: Bearer token
- Parameters:
-
DELETE /api/restaurants/{id}/dishes- Parameters:
id
- Parameters:
-
GET /api/restaurants/{id}/dishes/{dishId}- Parameters:
id,dishId
- Parameters:
-
DELETE /api/restaurants/{id}- Parameters:
id - Authorization: Bearer token
- Parameters:
-
POST /api/restaurants- Body: JSON object with properties
Name,Description,Category,HasDelivery,ContactEmail,ContactNumber,City,Street - Authorization: Bearer token
- Body: JSON object with properties
Testing
The tests are located in the tests/* directory. You can run them using the test runner in Visual Studio.
Related Skills
node-connect
349.7kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
109.7kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
349.7kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
349.7kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
