Files
GiecChallenge/README.md
Maxime Boulay 1f4c0a49af Create README
2026-05-01 14:51:20 +02:00

148 lines
4.9 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# GiecChallenge
A fullstack demo application consisting of an ASP.NETCore backend and a React frontend.
The project is containerbased and can be run locally with DockerCompose or built and deployed through GitLab CI.
## Table of Contents
- [Overview](#overview)
- [Prerequisites](#prerequisites)
- [Environment Variables](#environment-variables)
- [Running Locally](#running-locally)
- [Building & Testing](#building--testing)
- [Deploying with GitLab CI](#deploying-with-gitlab-ci)
- [Project Structure](#project-structure)
- [License](#license)
---
### Overview
- **Backend**: ASP.NETCore 10.0 API (`backend/GiecChallenge`).
Handles authentication, JWT generation, and CRUD operations for products, purchases, etc.
- **Frontend**: React (createreactapp) (`frontend`).
Consumes the API and provides a UI for managing data.
- **Infrastructure**: Docker containers for backend, frontend, and PostgreSQL database, orchestrated with `dockercompose.yml`.
All secrets (DB credentials, JWT secret, passwords, etc.) are externalised to environment variables and **never** committed to source control.
---
### Prerequisites
- Docker Engine (>=20.10) with DockerCompose support
- Git (to clone the repository)
- (Optional) GitLab Runner with DockerinDocker for CI pipelines
- Node14+ (for local frontend development)
- .NET10 SDK (for local backend development)
---
### Environment Variables
Create a `.env` file at the repository root (or supply variables to your CI environment). Example:
```dotenv
# Database
POSTGRES_USER=your_user
POSTGRES_PASSWORD=your_password
# Connection string (used by the backend)
ConnectionStrings__PostgreSQL=Host=giecchallenge_db;Port=14432;Database=GiecChallenge;User ID=${POSTGRES_USER};Password=${POSTGRES_PASSWORD};Pooling=true
# JWT configuration
JWT__ValidAudience=https://giecchallenge-backend.maximeboulay.com
JWT__ValidIssuer=https://giecchallenge-backend.maximeboulay.com
JWT__Secret=super_secret_jwt_key
# UI configuration
REACT_APP_API_URL=http://localhost:17020 # points to the backend container
# Misc
OriginAllowed=http://localhost:3000
PasswordHash=some_hash_value
```
The `appsettings.Development.json` and `appsettings.Docker.json` files reference these variables using the `${VARIABLE_NAME}` syntax.
---
### Running Locally
1. **Start the stack**
```bash
docker compose up --build
```
- Backend API: `http://localhost:17020` (HTTP) & `https://localhost:17021` (HTTPS)
- Frontend UI: `http://localhost:13000`
- PostgreSQL: `localhost:14432`
2. **Access the UI** in a browser at `http://localhost:13000`.
3. **Stop the stack**
```bash
docker compose down
```
---
### Building & Testing
#### Backend
```bash
dotnet restore backend/GiecChallenge/GiecChallenge.csproj
dotnet build backend/GiecChallenge/GiecChallenge.csproj -c Release
dotnet test backend/GiecChallenge.test/GiecChallenge.test.csproj
```
#### Frontend
```bash
cd frontend
npm ci
npm run build # produces ./frontend/build
```
---
### Deploying with GitLab CI
The repository contains a `.gitlab-ci.yml` defining the following stages:
1. **restore** restores NuGet packages and installs Node dependencies.
2. **build** builds the .NET project and the React app.
3. **test** runs backend unit tests.
4. **docker_build** builds Docker images for both services and pushes them to the GitLab Container Registry.
5. **deploy** placeholder stage for your production deployment (e.g., Kubernetes, Docker Swarm, or a VM).
The CI pipeline expects the following CI/CD variables to be defined in GitLab:
- `CI_REGISTRY_USER`, `CI_REGISTRY_PASSWORD`, `CI_REGISTRY`, `CI_REGISTRY_IMAGE` (provided automatically by GitLab).
- All custom variables from the `.env` file (e.g., `POSTGRES_USER`, `POSTGRES_PASSWORD`, `JWT__Secret`, etc.).
Push a branch, and GitLab will automatically run the pipeline. Merge to `main` to trigger the `deploy` stage placeholder.
---
### Project Structure
```
├── backend/
│ └── GiecChallenge/
│ ├── Dockerfile # Backend container image
│ ├── appsettings.*.json # Configuration files (environmentvariable placeholders)
│ ├── Controllers/ ...
│ └── *.csproj
├── frontend/
│ ├── Dockerfile # Frontend container image
│ ├── package.json
│ └── src/ …
├── docker-compose.yml # Local orchestration
├── .gitlab-ci.yml # CI pipeline definition
├── .env # Example env file (do not commit secrets)
└── README.md # You are reading it now
```
---
### License
This project is provided for educational purposes. Feel free to adapt and extend it under the terms of the MIT License.
---
**Enjoy!** If you encounter any issues, verify that all required environment variables are defined and that Docker is running with sufficient resources.