Skip to content

Latest commit

 

History

674 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ActiviGo

ActiviGo är en webbapplikation för att hitta, visa och boka aktiviteter i en kommun. Projektet består av en .NET 8 Web API-backend och en React + Vite-frontend, designad för att erbjuda en sömlös användarupplevelse.


Översikt

ActiviGo är en webbapplikation för att hitta, visa och boka aktiviteter i en kommun. Systemet består av en .NET 8 Web API-backend och en React + Vite-frontend, designad för att erbjuda en sömlös användarupplevelse.

API:et kan användas av olika typer av aktivitetsledare för att skapa och hantera förekomster av aktiviteter. Det har CRUD-funktionalitet för att hantera platser, underplatser (som ett gym och en simhall i samma arena) och bokningar.


📑 Innehållsförteckning


Teknik

Backend

Teknologi Version Användning
.NET 8.0 Runtime & Framework
ASP.NET Core 8.0 Web API
Entity Framework Core 8.0.20 ORM & Databasåtkomst
SQL Server 2022 Databas
FluentValidation 12.0.0 Datavalidering
AutoMapper 13.0.1 DTO-mappning
JWT Bearer 8.0.20 Autentisering
RestSharp 112.1.0 HTTP-klient
Swashbuckle 6.6.2 API-dokumentation (Swagger)

NuGet-paket

  • Microsoft.EntityFrameworkCore (8.0.20)
  • Microsoft.EntityFrameworkCore.Design (8.0.20)
  • Microsoft.EntityFrameworkCore.SqlServer (8.0.20)
  • Microsoft.EntityFrameworkCore.Tools (8.0.20)
  • AutoMapper (13.0.1)
  • FluentValidation (12.0.0)
  • FluentValidation.DependencyInjectionExtensions (12.0.0)
  • Microsoft.AspNetCore.Authentication.JwtBearer (8.0.20)
  • RestSharp (112.1.0)
  • Swashbuckle.AspNetCore (6.6.2)

Frontend

Teknologi Version Användning
React 18.x UI-bibliotek
Vite 5.x Build-tool & Dev Server
React Router 6.x Navigering

🏗️ Arkitekturöversikt

API:et använder en N-tier-struktur med fyra distinkta lager: Infrastruktur hanterar kommunikation med databasen, WebAPI hanterar kommunikation med slutanvändare, Core hanterar kärnmodeller för programmet och Service hanterar affärslogik, mappning och validering.

Backend N-tier arkitektur

┌─────────────────────────────────────────┐
│         WebAPI Layer (Controllers)      │
│  - HTTP endpoints, authentication       │
└─────────────────┬───────────────────────┘
                  │
┌─────────────────▼───────────────────────┐
│         Service Layer                   │
│  - Business logic, validation, mapping  │
└─────────────────┬───────────────────────┘
                  │
┌─────────────────▼───────────────────────┐
│         Infrastructure Layer            │
│  - DbContext, Repositories, Data access │
└─────────────────┬───────────────────────┘
                  │
┌─────────────────▼───────────────────────┐
│         Core Layer                      │
│  - Domain models, interfaces            │
└─────────────────────────────────────────┘

Katalogstruktur

ActiviGo/
├── ActiviGoApi/                    # Backend Solution
│   │
│   ├── ActiviGoApi.sln             # Visual Studio Solution
│   │
│   ├── ActiviGoApi.Core/           # Core Layer - Domänmodeller
│   │   ├── Models/                 # Entiteter
│   │   └── Interfaces/             # Interfaces
│   │
│   ├── ActiviGoApi.Infrastructur/  # Infrastructure Layer - Dataåtkomst
│   │   ├── Data/                   # DbContext & Seed
│   │   ├── Migrations/             # EF migrations
│   │   └── Repositories/           # Repository-implementationer
│   │
│   ├── ActiviGoApi.Services/       # Service Layer - Affärslogik
│   │   ├── DTOs/                   # Data Transfer Objects
│   │   ├── Services/               # Tjänster
│   │   ├── Mapping/                # AutoMapper profiles
│   │   ├── Validation/             # FluentValidation
│   │   └── Interfaces/             # Service interfaces
│   │
│   └── ActiviGoApi.WebApi/         # WebAPI Layer - Controllers
│       ├── Controllers/            # API-controllers
│       ├── Program.cs              # Startup & DI
│       ├── appsettings.json        # Konfiguration
│       └── Properties/             # Launch settings
│
└── Client/                         # Frontend-projekt (React + Vite)
    ├── public/                     # Statiska filer
    ├── src/
    │   ├── api/                    # API-anrop & services
    │   ├── assets/                 # Bilder, ikoner, etc.
    │   ├── Components/             # React-komponenter
    │   │   ├── Cards/              # Card-komponenter
    │   │   ├── Display/            # Display-komponenter
    │   │   ├── Layout/             # Layout-komponenter
    │   │   └── Pages/              # Sidkomponenter
    │   │       └── Admin/          # Admin-sidor
    │   ├── contexts/               # React Context providers
    │   ├── App.jsx                 # Root-komponent & routing
    │   ├── main.jsx                # Entry point
    │   └── responsive.css          # Responsive design styles
    |
    ├── package.json                # NPM dependencies & scripts
    ├── vite.config.js              # Vite konfiguration
    └── .env                        # Miljövariabler (gitignored)

Viktiga filer och kataloger

Backend (API)

Platsen för backend-koden finns i ActiviGoApi/

  • ActiviGoApi.sln - Visual Studio Solution-fil

  • ActiviGoApi.WebApi/

    • Program.cs - Huvudfil för uppstart, konfiguration och Dependency Injection (DI)
    • appsettings.json - Konfigurationsfil (kan vara .gitignored för säkerhet)
    • Controllers/ - API-controllers för alla endpoints
  • ActiviGoApi.Infrastructur/

    • ToadContext.cs - EF Core DbContext för databasåtkomst
    • SeedData.cs - Inkluderar initial data (t.ex. kategorier, aktiviteter, platser)
    • Migrations/ - Entity Framework migrationer
      • Exempel: 20251009092802_moreSeedData.cs
      • Exempel: 20251023112936_activity-fix-and-seedlatlong.cs
    • Repositories/ - Repository-implementationer
  • ActiviGoApi.Core/

    • Models/ - Domänmodeller och entiteter
      • Location.cs och SubLocation.cs - Modeller för platser och underplatser
      • Activity.cs, Booking.cs, Category.cs - Övriga entiteter
    • Interfaces/ - Interfaces för repositories och services
  • ActiviGoApi.Services/

    • DTOs/ - Data Transfer Objects
      • Exempel: GetSubLocationResponse.cs, CreateActivityRequest.cs
    • Services/ - Affärslogik och tjänster
    • Validation/ - FluentValidation validators
    • Mapping/ - AutoMapper profiles

Frontend (Client)

Platsen för frontend-koden finns i Client/

  • package.json - Definierar beroenden och skript
  • vite.config.js - Vite konfiguration
  • Client/src/
    • Components/ - React-komponenter organiserade i underkataloger
    • api/ - API-anrop och services
    • contexts/ - React Context providers
    • App.jsx - Root-komponent med routing
    • main.jsx - Entry point

Snabbstart och lokal körning

Krav

  • Backend: .NET 8 SDK
  • Frontend: Node.js (med npm eller yarn)
  • Databas: SQL Server (LocalDB eller full installation)

Steg-för-steg

1. Klona repositoryt

git clone https://github.com/Darkdusk234/ActiviGo.git
cd ActiviGo

2. Konfigurera databasen

Projektet använder Entity Framework Core (Code-First). I appsettings.json hittar du anslutningssträngen för SQL Server.

Öppna ActiviGoApi/ActiviGoApi.WebApi/appsettings.json och justera anslutningssträngen efter din lokala setup:

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=ActiviGoDB;Trusted_Connection=true;TrustServerCertificate=true;"
  },
  "Jwt": {
    "Key": "din-hemliga-nyckel-minst-32-tecken-lång",
    "Issuer": "ActiviGoAPI",
    "Audience": "ActiviGoClient"
  }
}

Viktigt: Håll känslig data borta från versionering (använd t.ex. UserSecrets eller miljövariabler).

3. Tillämpa migrations och seed-data

Navigera till ActiviGoApi/ActiviGoApi.WebApi/ i en terminal och kör:

dotnet ef database update --project ../ActiviGoApi.Infrastructur/ActiviGoApi.Infrastructur.csproj

Detta skapar databasen och tillämpar all seed-data från SeedData.cs.

4. Miljövariabler (valfritt för väder-API)

Lägg till en .env-fil i roten av ActiviGoApi/ActiviGoApi.WebApi/ för SMHI eller annan väder-API-integration.
Lägg till .env i .gitignore för att undvika att spara känslig data.

5. Starta Backend

I samma katalog (ActiviGoApi/ActiviGoApi.WebApi/), kör:

dotnet build
dotnet run

API:et startar på https://localhost:7XXX (porten visas i terminalen).

6. Starta Frontend

Öppna en ny terminal, navigera till Client/ och kör:

npm install
npm run dev

Frontend körs med Vite på http://localhost:5173 (se Client/vite.config.js för konfiguration).

Databas och Seed-data

  • DbContext: ToadContext.cs hanterar databasen
  • Seed-data: Definieras i SeedData.cs och inkluderar kategorier, aktiviteter, platser och underplatser
  • Migrations: Finns i ActiviGoApi/ActiviGoApi.Infrastructur/Migrations/

API-endpoints

Activity - Hantera aktiviteter
Metod Endpoint Beskrivning Svar
POST /api/Activity Skapa ny aktivitet
Body: CreateActivityRequest
200 → GetActivityResponse
GET /api/Activity Hämta alla aktiviteter 200 → array av GetActivityResponse
GET /api/Activity/{id} Hämta specifik aktivitet
Path: id (int)
200 → GetActivityResponse
PUT /api/Activity/{id} Uppdatera aktivitet
Path: id (int)
Body: UpdateActivityRequest
200
DELETE /api/Activity/{id} Ta bort aktivitet
Path: id (int)
200
GET /api/Activity/category/{categoryId} Hämta aktiviteter per kategori
Path: categoryId (int)
200 → array av GetActivityResponse
404 → ProblemDetails
ActivityOccurence - Hantera aktivitetsförekomster
Metod Endpoint Beskrivning Svar
GET /api/ActivityOccurence Hämta alla förekomster 200 → array av ActivityOccurenceResponseDTO
POST /api/ActivityOccurence Skapa ny förekomst
Body: CreateActivityOccurrenceDTO
201 → ActivityOccurenceResponseDTO
400 → ProblemDetails
GET /api/ActivityOccurence/admin Hämta alla förekomster (admin) 200 → array av ActivityOccurenceResponseDTO
GET /api/ActivityOccurence/{id} Hämta specifik förekomst
Path: id (int)
200 → ActivityOccurenceResponseDTO
404 → ProblemDetails
PUT /api/ActivityOccurence/{id} Uppdatera förekomst
Path: id (int)
Body: UpdateActivityOccurrenceDTO
200 → ActivityOccurenceResponseDTO
400, 404 → ProblemDetails
DELETE /api/ActivityOccurence/{id} Ta bort förekomst
Path: id (int)
204 (No Content)
404 → ProblemDetails
POST /api/ActivityOccurence/search Sök förekomster med filter
Body: ActivityOccurenceSearchFilterDTO
200 → array av ActivityOccurenceResponseDTO
POST /api/ActivityOccurence/general-search Generell sökning
Body: GeneralSearchDTO
200 → array av ActivityOccurenceResponseDTO
PUT /api/ActivityOccurence/cancel/{id} Avboka förekomst
Path: id (int)
204 (No Content)
400, 404 → ProblemDetails
GET /api/ActivityOccurence/adminstatistics Hämta statistik (admin) 200
Booking - Hantera bokningar
Metod Endpoint Beskrivning Svar
GET /api/Booking Hämta alla bokningar 200 → array av BookingReadDTO
POST /api/Booking Skapa ny bokning
Body: BookingCreateDTO
200 → BookingReadDTO
GET /api/Booking/{id} Hämta specifik bokning
Path: id (int)
200 → BookingReadDTO
PUT /api/Booking/{id} Uppdatera bokning
Path: id (int)
Body: BookingUpdateDTO
200
DELETE /api/Booking/{id} Ta bort bokning
Path: id (int)
200
GET /api/Booking/bookings/user Hämta användarens bokningar 200 → array av BookingReadDTO
404 → ProblemDetails
PUT /api/Booking/cancel/{id} Avboka
Path: id (int)
204 (No Content)
400, 404 → ProblemDetails
Auth - Autentisering
Metod Endpoint Beskrivning Svar
POST /api/Auth Registrera ny användare
Body: RegisterDTO
200
POST /api/Auth/login Logga in
Body: LoginDto
200
PUT /api/Auth/{id} Uppdatera användare
Path: id (string)
200
PUT /api/Auth/reinstate/{id} Återställ användare
Path: id (string)
200
GET /api/Auth/AuthCheck Kontrollera autentisering 200 → boolean
Category - Hantera kategorier
Metod Endpoint Beskrivning Svar
GET /api/Category Hämta alla kategorier 200
POST /api/Category Skapa ny kategori
Body: CategoryCreateDto
201
400 → ProblemDetails
GET /api/Category/{id} Hämta specifik kategori
Path: id (int)
200
404 → ProblemDetails
PUT /api/Category/{id} Uppdatera kategori
Path: id (int)
Body: CategoryUpdateDto
200
400, 404 → ProblemDetails
DELETE /api/Category/{id} Ta bort kategori
Path: id (int)
204 (No Content)
404 → ProblemDetails
Location - Hantera platser
Metod Endpoint Beskrivning Svar
GET /api/Location Hämta alla platser 200 → array av LocationRequestDTO
POST /api/Location Skapa ny plats
Body: CreateLocationDTO
201 → LocationRequestDTO
400, 404 → ProblemDetails
GET /api/Location/{id} Hämta specifik plats
Path: id (int)
200 → LocationRequestDTO
404 → ProblemDetails
PUT /api/Location/{id} Uppdatera plats
Path: id (int)
Body: UpdateLocationDTO
200 → LocationRequestDTO
400, 404 → ProblemDetails
DELETE /api/Location/{id} Ta bort plats
Path: id (int)
204 (No Content)
404 → ProblemDetails
SubLocation - Hantera underplatser
Metod Endpoint Beskrivning Svar
POST /api/SubLocation Skapa ny underplats
Body: CreateSubLocationRequest
200
GET /api/SubLocation Hämta alla underplatser 200 → array av GetSubLocationResponse
GET /api/SubLocation/{id} Hämta specifik underplats
Path: id (int)
200 → GetSubLocationResponse
PUT /api/SubLocation/{id} Uppdatera underplats
Path: id (int)
Body: UpdateSubLocationRequest
200
DELETE /api/SubLocation/{id} Ta bort underplats
Path: id (int)
200
Weather - Väderprognos
Metod Endpoint Beskrivning Svar
POST /api/Weather/LocationForecast Hämta väderprognos för plats
Body: WeatherLocationForecastRequestDTO
200 → array av WeatherResponseDTO
POST /api/Weather/weather-at-time Hämta väder för specifik tid
Body: WeatherAtTimeRequestDTO
200 → WeatherResponseDTO

Felsökning

Viktiga filer att granska

Konfiguration/Secrets:

  • appsettings.json
  • .gitignore (kontrollera att appsettings.json är ignorerad om det är avsett)

Databas/Seed:

  • SeedData.cs
  • ToadContext.cs

Start/DI/Autentisering:

  • Program.cs

Vanliga problem

  • Databasanslutning misslyckas: Kontrollera ConnectionStrings i appsettings.json.
  • JWT-fel: Se till att Jwt:Key är korrekt och unik.
  • CORS-fel: Lägg till rätt ursprung i backend-konfigurationen om frontend körs på en annan port.

Gruppens arbetsprocess

Branch-strategi:
Använd main för produktionskod, develop för integration, och feature/namn för nya funktioner.

PR-rutiner:
Öppna pull requests mot develop, minst en granskning krävs innan sammanslagning.
Inkludera beskrivning och testresultat.

Kodstandard:
Följ .NET och React best practices, inklusive konsistent namngivning
(PascalCase för klasser, camelCase för variabler)
och kommentarer för komplex logik.


👥 Team

Utvecklare i ActiviGo Team Toad


About

An api and frontend for a activity booking system

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages