Files
the-biergarten-app/README.md
2026-01-26 19:52:27 -05:00

116 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
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.
# The Biergarten App
## Overview
The Biergarten App is evolving from a standalone fullstack Next.js application into a multiproject monorepo with a dedicated .NET backend and a SQLfirst approach. Backend data access is being refactored to use stored procedures. The Next.js site remains the frontend and will consume the .NET API.
Status note (Jan 26, 2026): Migration is in progress; some parts are still being moved from the website into the .NET layers.
### Current Status
- Refactor is not complete; expect mixed responsibilities and evolving APIs.
- The Next.js app in [Website](Website) currently runs standalone, retaining its serverless API routes, Prisma, and Neon Postgres stack as documented in [Website/README.old.md](Website/README.old.md).
- The .NET API and SQLfirst repository are under active development; endpoint parity with the legacy Next.js backend is in progress.
- Planned outcome: the Website will call the .NET API and deprecate its internal backend once parity is reached.
## Repository Structure
- [API](API)
- [API.Core](API/API.Core): ASP.NET Core Web API with controllers and OpenAPI/Swagger enabled.
- [Database](Database)
- [Database.Core](Database/Database.Core): SQL schema and logic deployment via DbUp (scripts embedded in the assembly). SQLfirst with stored procedures.
- [Database.Seed](Database/Database.Seed): Seeders for initial data (users, locations) driven by `DB_CONNECTION_STRING`.
- [Repository](Repository)
- [Repository.Core](Repository/Repository.Core): Data access layer using stored procedures. Includes `DefaultSqlConnectionFactory` that reads `DB_CONNECTION_STRING` or `ConnectionStrings:Default`.
- [Repository.Tests](Repository/Repository.Tests): Tests for repository functionality.
- [Service](Service)
- [Service.Core](Service/Service.Core): Business/service layer consumed by the API.
- [Website](Website): Next.js frontend. Historically included serverless API routes, Prisma, and Neon Postgres; now focuses on UI and calls the .NET backend.
- [docker-compose.yml](docker-compose.yml): Local SQL Server service for development.
- [LICENSE.md](LICENSE.md): Project license.
## Tech Highlights
- Backend: ASP.NET Core Web API, SQL Server, stored procedures, DbUp for migrations and deployments.
- Data Access: Repository pattern over stored procedures (`Repository.Core`).
- Services: Encapsulated business logic (`Service.Core`).
- Frontend: Next.js with TailwindCSS, Headless UI, DaisyUI, Mapbox, Cloudinary integrations. See [Website/README.old.md](Website/README.old.md) for prior app details and envs.
## Local Development
### Prerequisites
- .NET SDK 10+ (or compatible with the solution)
- Node.js 18+
- Docker Desktop (for local SQL Server)
### 1) Start SQL Server
Create a `.env` in the repo root with at least:
```bash
SA_PASSWORD=YourStrong!Passw0rd
```
Start the container:
```bash
docker compose up -d sqlserver
```
### 2) Configure database connection
Most projects read `DB_CONNECTION_STRING`. On macOS/zsh:
```bash
export DB_CONNECTION_STRING="Server=localhost,1433;Database=biergarten;User Id=sa;Password=$SA_PASSWORD;TrustServerCertificate=True;"
```
Alternatively, add `ConnectionStrings:Default` in `API/API.Core/appsettings.json`.
### 3) Apply schema and stored procedures
Run DbUp to provision the database (scripts embedded in `Database.Core`):
```bash
dotnet run --project Database/Database.Core
```
### 4) Seed initial data
```bash
dotnet run --project Database/Database.Seed
```
### 5) Run the API
```bash
dotnet run --project API/API.Core
```
Swagger/OpenAPI UI is available when running (e.g., https://localhost:5001/swagger or the port shown on startup). The project also maps an OpenAPI document via `MapOpenApi()`.
### 6) Run the Website (frontend)
```bash
cd Website
npm install
npm run dev
```
For environment variables (Cloudinary, Mapbox, Prisma/Neon, etc.), see [Website/README.old.md](Website/README.old.md).
Note: At present, the Website runs standalone and uses its existing serverless backend (Next.js API routes + Prisma/Neon). Integration to the .NET API is planned and will replace those routes once feature parity is achieved.
## Roadmap
- Complete migration of backend logic from Next.js to .NET.
- Expand stored procedure coverage for CRUD and domain operations.
- Introduce microservices for image upload and mapping; evaluate auth as a separate service.
- Harden CI/CD, testing, and observability across API, repository, and services.
## License
See [LICENSE.md](LICENSE.md).