Files
portfolio-app/backend/README.md
João Loureiro 40fd792be1 feat(backend): Replace Node.js API with .NET 8
This commit completes the migration of the backend service from a Node.js/Express application to an ASP.NET Core 8 Minimal API.

- Re-implemented all API endpoints in C# for improved performance and type safety.
- Updated the Gitea Actions workflow to use the `setup-dotnet` action, `dotnet publish` for building, and now caches NuGet packages.
- Modified the deployment to create an `appsettings.Production.json` file from Gitea secrets instead of a `.env` file.
- Updated the PM2 ecosystem configuration to run the application using the `dotnet` interpreter.
2025-10-29 19:14:20 -03:00

75 lines
2.0 KiB
Markdown

# JoaoLoureiro.Portfolio Backend
This is the backend for my portfolio application. It is a simple .NET 8 API that handles sending contact messages from the frontend.
## Technologies
* .NET 8
* ASP.NET Core
* Docker
* Serilog for logging
* FluentValidation for request validation
* AutoMapper for object mapping
## Project Structure
The solution follows a clean architecture pattern:
* `JoaoLoureiro.Portfolio.Api`: The main API project, containing the endpoint for sending emails.
* `JoaoLoureiro.Portfolio.Application`: Contains the core business logic and interfaces.
* `JoaoLoureiro.Portfolio.Domain`: Contains the domain entities.
* `JoaoLoureiro.Portfolio.Infrastructure`: Contains the implementation of services, such as the email sender.
## Getting Started
### Prerequisites
* .NET 8 SDK
* An SMTP server for sending emails.
### Running the application
1. Clone the repository.
2. Navigate to the `backend` directory.
3. Configure the `SmtpSettings` in `JoaoLoureiro.Portfolio.Api/appsettings.json`.
4. Run the application using the following command:
```bash
dotnet run --project JoaoLoureiro.Portfolio.Api
```
## API Endpoints
### POST /api/email/send
This endpoint accepts a contact form submission and sends it as an email.
**Request Body:**
```json
{
"name": "John Doe",
"email": "john.doe@example.com",
"message": "Hello, I would like to get in touch with you."
}
```
**Responses:**
* `200 OK`: If the message was sent successfully.
* `400 Bad Request`: If the request is invalid.
* `500 Internal Server Error`: If an unexpected error occurs.
### GET /health
This endpoint returns the health of the application, including the status of the SMTP connection.
## Configuration
The application is configured using the `appsettings.json` file in the `JoaoLoureiro.Portfolio.Api` project.
* `SmtpSettings`: Configuration for the SMTP server.
* `CorsOrigins`: A comma-separated list of allowed origins for CORS.
* `ProxyIP`: The IP address of a trusted proxy.
* `Serilog`: Configuration for logging.