Appearance
Api
- Project:
hvc-api(solution nameHVCWeb.Api)
Overview
hvc-api is the main client-facing API of the HVC platform. It serves the web, mobile, and headset clients with everything they need: authentication, contacts, events and meetings (video calls via Pexip), chat, media/files, notifications, peripherals, and tenant configuration.
It exposes three surfaces at once:
- REST controllers —
api/...endpoints used mainly by the Flutter apps. - GraphQL (HotChocolate) —
/graphql, used by the web portal via Houdini (queries, mutations, and in-memory subscriptions). - SignalR hub —
/hubs/mobile, the realtime channel for calls, chat, presence, device control, and recordings.
Tech Stack
- Target: .NET 7
- GraphQL: HotChocolate 13 (source-generated schema; projections/filtering/sorting, in-memory subscriptions)
- Data: EF Core 7 (SqlServer), multi-tenant via
MultiTenantConnectionInterceptor(connection string swapped per tenant domain), pooledDataContext - Messaging: MediatR + Wolverine message bus, Proto.Actor actors (
TenantActor,UserActor) - HTTP clients: Refit (Pexip, Keycloak, Mailgun, Metabase, OvenMediaEngine), Flurl
- Auth: Keycloak with dual-scheme JWT ("Keycloak" vs "Internal" tokens) + custom permission-based
Authorizer - Misc: Hashids, QRCoder, SkiaSharp (image processing), Ical.Net, Serilog → Seq
Backend services (hosted)
VmrCreationService— creates Pexip conference rooms up tomaxRoomCount.CommandProcessorService— pollsPendingCommands(command pattern).NotificationService— system notifications on startup.- Proto.Actor actors for per-tenant / per-user work.
Key directories
Controllers/ REST endpoints (chat, events, files, media, meetings, admin, upload)
Features/ Feature modules (Accounts, Contacts, Events, Chat, Media, Tenants,
Peripherals, Notification, Security, Dashboards, Data, DeviceId)
Hubs/MobileHub.cs SignalR hub (realtime)
Resolvers/ GraphQL source-generator resolvers (Chat, Event, Media, Meeting, Role, Tenant)
Commands/ MediatR/Wolverine commands
Services/ Pexip, Keycloak, Mailgun, EmailComposer, MessagingService, Metabase...
Data/ EF Core DataContext (all entities)
Extensions/ DI + GraphQL server configurationClient connectivity
- Web (SvelteKit/Houdini): GraphQL endpoint
/graphql, WebSocket subscriptions viagraphql-ws, SignalR/hubs/mobilewith bearer token, multipart uploads. - Mobile/Headset (Flutter): REST
api/*+ SignalR hub; the headset also registers devices and receives summons via GraphQL.