Rename project to RealCV with new logo and font updates
- Rename all TrueCV references to RealCV across the codebase - Add new transparent RealCV logo - Switch from JetBrains Mono to Inter font for better number clarity - Update solution, project files, and namespaces 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
447
DEPLOYMENT-GUIDE.md
Normal file
@@ -0,0 +1,447 @@
|
||||
# TrueCV Production Deployment Guide
|
||||
|
||||
A low-budget guide to launching TrueCV as a professional, secure offering.
|
||||
|
||||
---
|
||||
|
||||
## Budget Summary
|
||||
|
||||
| Component | Monthly Cost | Notes |
|
||||
|-----------|-------------|-------|
|
||||
| Azure App Service (B1) | ~£10 | 1.75GB RAM, custom domain, SSL |
|
||||
| Azure SQL (Basic) | ~£4 | 2GB, 5 DTUs - upgrade as needed |
|
||||
| Azure Blob Storage | ~£1 | Pay per GB stored |
|
||||
| Domain name | ~£10/year | .com or .co.uk |
|
||||
| **Total** | **~£15-20/month** | Scales with usage |
|
||||
|
||||
Alternative: A single £5-10/month VPS (Hetzner, DigitalOcean) can run everything if you're comfortable with Linux administration.
|
||||
|
||||
---
|
||||
|
||||
## Phase 1: Pre-Launch Checklist
|
||||
|
||||
### 1.1 Stripe Setup (Required for Payments)
|
||||
|
||||
1. Create a Stripe account at [stripe.com](https://stripe.com)
|
||||
2. Complete business verification (required for live payments)
|
||||
3. Create two Products in Stripe Dashboard:
|
||||
- **Professional**: £49/month recurring
|
||||
- **Enterprise**: £199/month recurring
|
||||
4. Copy the Price IDs (start with `price_`) to your config
|
||||
5. Configure the Customer Portal:
|
||||
- Dashboard → Settings → Billing → Customer Portal
|
||||
- Enable: Update payment methods, Cancel subscriptions, View invoices
|
||||
6. Set up webhook endpoint (after deployment):
|
||||
- Dashboard → Developers → Webhooks → Add endpoint
|
||||
- URL: `https://yourdomain.com/api/stripe/webhook`
|
||||
- Events: `checkout.session.completed`, `customer.subscription.updated`, `customer.subscription.deleted`, `invoice.payment_failed`
|
||||
7. Copy the webhook signing secret to your config
|
||||
|
||||
### 1.2 External API Keys
|
||||
|
||||
| Service | Purpose | How to Get |
|
||||
|---------|---------|-----------|
|
||||
| Companies House | Company verification | [developer.company-information.service.gov.uk](https://developer.company-information.service.gov.uk) - Free |
|
||||
| Anthropic (Claude) | CV parsing & analysis | [console.anthropic.com](https://console.anthropic.com) - Pay per use |
|
||||
|
||||
### 1.3 Domain & Email
|
||||
|
||||
1. Register a domain (Cloudflare, Namecheap, or similar)
|
||||
2. Set up a professional email:
|
||||
- Budget option: Zoho Mail free tier (5 users)
|
||||
- Better option: Google Workspace (£5/user/month)
|
||||
3. Configure SPF, DKIM, DMARC records for email deliverability
|
||||
|
||||
---
|
||||
|
||||
## Phase 2: Infrastructure Setup
|
||||
|
||||
### Option A: Azure (Recommended for .NET)
|
||||
|
||||
#### App Service + Azure SQL
|
||||
|
||||
```bash
|
||||
# Install Azure CLI, then:
|
||||
az login
|
||||
|
||||
# Create resource group
|
||||
az group create --name truecv-prod --location uksouth
|
||||
|
||||
# Create App Service plan (B1 = ~£10/month)
|
||||
az appservice plan create \
|
||||
--name truecv-plan \
|
||||
--resource-group truecv-prod \
|
||||
--sku B1 \
|
||||
--is-linux
|
||||
|
||||
# Create web app
|
||||
az webapp create \
|
||||
--name truecv-app \
|
||||
--resource-group truecv-prod \
|
||||
--plan truecv-plan \
|
||||
--runtime "DOTNETCORE:8.0"
|
||||
|
||||
# Create SQL Server
|
||||
az sql server create \
|
||||
--name truecv-sql \
|
||||
--resource-group truecv-prod \
|
||||
--location uksouth \
|
||||
--admin-user truecvadmin \
|
||||
--admin-password <STRONG_PASSWORD>
|
||||
|
||||
# Create database (Basic = ~£4/month)
|
||||
az sql db create \
|
||||
--name truecv-db \
|
||||
--server truecv-sql \
|
||||
--resource-group truecv-prod \
|
||||
--service-objective Basic
|
||||
|
||||
# Create storage account for CV files
|
||||
az storage account create \
|
||||
--name truecvstorage \
|
||||
--resource-group truecv-prod \
|
||||
--location uksouth \
|
||||
--sku Standard_LRS
|
||||
```
|
||||
|
||||
#### Environment Variables (App Service Configuration)
|
||||
|
||||
Set these in Azure Portal → App Service → Configuration → Application settings:
|
||||
|
||||
```
|
||||
ConnectionStrings__DefaultConnection=Server=truecv-sql.database.windows.net;Database=truecv-db;User Id=truecvadmin;Password=<PASSWORD>;Encrypt=True;
|
||||
ConnectionStrings__HangfireConnection=<SAME_AS_ABOVE>
|
||||
Stripe__SecretKey=sk_live_xxx
|
||||
Stripe__PublishableKey=pk_live_xxx
|
||||
Stripe__WebhookSecret=whsec_xxx
|
||||
Stripe__PriceIds__Professional=price_xxx
|
||||
Stripe__PriceIds__Enterprise=price_xxx
|
||||
Anthropic__ApiKey=sk-ant-xxx
|
||||
CompaniesHouse__ApiKey=xxx
|
||||
AzureBlob__ConnectionString=<FROM_STORAGE_ACCOUNT>
|
||||
AzureBlob__ContainerName=cvfiles
|
||||
```
|
||||
|
||||
### Option B: VPS (Budget Alternative)
|
||||
|
||||
A £5-10/month VPS from Hetzner, DigitalOcean, or Vultr can run everything:
|
||||
|
||||
1. Ubuntu 22.04 LTS
|
||||
2. Install Docker and Docker Compose
|
||||
3. Use the existing `docker-compose.yml` with modifications:
|
||||
|
||||
```yaml
|
||||
# docker-compose.prod.yml
|
||||
version: '3.8'
|
||||
services:
|
||||
web:
|
||||
build: .
|
||||
ports:
|
||||
- "5000:8080"
|
||||
environment:
|
||||
- ASPNETCORE_ENVIRONMENT=Production
|
||||
- ConnectionStrings__DefaultConnection=Server=db;Database=TrueCV;User Id=sa;Password=${DB_PASSWORD};TrustServerCertificate=True
|
||||
depends_on:
|
||||
- db
|
||||
restart: always
|
||||
|
||||
db:
|
||||
image: mcr.microsoft.com/mssql/server:2022-latest
|
||||
environment:
|
||||
- ACCEPT_EULA=Y
|
||||
- SA_PASSWORD=${DB_PASSWORD}
|
||||
volumes:
|
||||
- sqldata:/var/opt/mssql
|
||||
restart: always
|
||||
|
||||
caddy: # Reverse proxy with automatic HTTPS
|
||||
image: caddy:2
|
||||
ports:
|
||||
- "80:80"
|
||||
- "443:443"
|
||||
volumes:
|
||||
- ./Caddyfile:/etc/caddy/Caddyfile
|
||||
- caddy_data:/data
|
||||
restart: always
|
||||
|
||||
volumes:
|
||||
sqldata:
|
||||
caddy_data:
|
||||
```
|
||||
|
||||
```
|
||||
# Caddyfile
|
||||
yourdomain.com {
|
||||
reverse_proxy web:5000
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Phase 3: Security Hardening
|
||||
|
||||
### 3.1 Application Security (Critical)
|
||||
|
||||
#### Secrets Management
|
||||
- **Never** commit secrets to git
|
||||
- Use Azure Key Vault or environment variables
|
||||
- Rotate API keys quarterly
|
||||
|
||||
#### HTTPS Enforcement
|
||||
Already configured in `Program.cs`:
|
||||
```csharp
|
||||
app.UseHsts();
|
||||
app.UseHttpsRedirection();
|
||||
```
|
||||
|
||||
#### Content Security Policy
|
||||
Add to `Program.cs`:
|
||||
```csharp
|
||||
app.Use(async (context, next) =>
|
||||
{
|
||||
context.Response.Headers.Append("X-Content-Type-Options", "nosniff");
|
||||
context.Response.Headers.Append("X-Frame-Options", "DENY");
|
||||
context.Response.Headers.Append("X-XSS-Protection", "1; mode=block");
|
||||
context.Response.Headers.Append("Referrer-Policy", "strict-origin-when-cross-origin");
|
||||
context.Response.Headers.Append("Permissions-Policy", "camera=(), microphone=(), geolocation=()");
|
||||
await next();
|
||||
});
|
||||
```
|
||||
|
||||
#### Rate Limiting
|
||||
Add to `Program.cs`:
|
||||
```csharp
|
||||
builder.Services.AddRateLimiter(options =>
|
||||
{
|
||||
options.GlobalLimiter = PartitionedRateLimiter.Create<HttpContext, string>(context =>
|
||||
RateLimitPartition.GetFixedWindowLimiter(
|
||||
partitionKey: context.User.Identity?.Name ?? context.Request.Headers.Host.ToString(),
|
||||
factory: _ => new FixedWindowRateLimiterOptions
|
||||
{
|
||||
AutoReplenishment = true,
|
||||
PermitLimit = 100,
|
||||
Window = TimeSpan.FromMinutes(1)
|
||||
}));
|
||||
});
|
||||
|
||||
// In middleware pipeline
|
||||
app.UseRateLimiter();
|
||||
```
|
||||
|
||||
### 3.2 Database Security
|
||||
|
||||
1. **Use strong passwords** (20+ characters, random)
|
||||
2. **Enable Azure SQL firewall** - allow only App Service IP
|
||||
3. **Enable Transparent Data Encryption** (on by default in Azure)
|
||||
4. **Regular backups** - Azure does this automatically (7-day retention on Basic tier)
|
||||
|
||||
### 3.3 File Storage Security
|
||||
|
||||
CV files contain sensitive data:
|
||||
|
||||
1. **Private container** - never allow public blob access
|
||||
2. **SAS tokens** - generate time-limited URLs for downloads
|
||||
3. **Encryption at rest** - enabled by default in Azure Storage
|
||||
4. **Consider encryption at application level** for extra protection
|
||||
|
||||
### 3.4 Authentication Security
|
||||
|
||||
Already using ASP.NET Identity with good defaults. Verify these settings:
|
||||
|
||||
```csharp
|
||||
// In Program.cs - identity configuration
|
||||
builder.Services.Configure<IdentityOptions>(options =>
|
||||
{
|
||||
options.Password.RequiredLength = 12;
|
||||
options.Password.RequireDigit = true;
|
||||
options.Password.RequireLowercase = true;
|
||||
options.Password.RequireUppercase = true;
|
||||
options.Password.RequireNonAlphanumeric = true;
|
||||
options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(15);
|
||||
options.Lockout.MaxFailedAccessAttempts = 5;
|
||||
});
|
||||
```
|
||||
|
||||
### 3.5 Stripe Webhook Security
|
||||
|
||||
Already implemented - verify signature on every webhook:
|
||||
```csharp
|
||||
// In StripeService.cs - this is critical
|
||||
stripeEvent = EventUtility.ConstructEvent(json, signature, _settings.WebhookSecret);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Phase 4: Compliance & Legal
|
||||
|
||||
### 4.1 GDPR Compliance (Required for UK/EU)
|
||||
|
||||
1. **Privacy Policy** - create and link in footer
|
||||
- What data you collect (CVs, email, payment info)
|
||||
- How long you retain it
|
||||
- User rights (access, deletion, portability)
|
||||
- Third parties (Stripe, Anthropic, Companies House)
|
||||
|
||||
2. **Cookie Consent** - add banner for analytics cookies
|
||||
|
||||
3. **Data Retention Policy**:
|
||||
- CVs: Delete after 30 days or on user request
|
||||
- Accounts: Retain while active, delete 90 days after closure
|
||||
- Payment data: Stripe handles this (PCI compliant)
|
||||
|
||||
4. **Right to Deletion** - implement account deletion feature
|
||||
|
||||
5. **Data Processing Agreement** - required if you have business customers
|
||||
|
||||
### 4.2 Terms of Service
|
||||
|
||||
Cover:
|
||||
- Service description and limitations
|
||||
- Acceptable use policy
|
||||
- Payment terms and refund policy
|
||||
- Liability limitations
|
||||
- Dispute resolution
|
||||
|
||||
### 4.3 PCI Compliance
|
||||
|
||||
Stripe Checkout handles card data - you never touch it. This puts you in **PCI SAQ-A** (simplest level):
|
||||
- Use only Stripe Checkout or Elements
|
||||
- Serve pages over HTTPS
|
||||
- Don't store card numbers
|
||||
|
||||
---
|
||||
|
||||
## Phase 5: Monitoring & Operations
|
||||
|
||||
### 5.1 Application Monitoring
|
||||
|
||||
#### Free Option: Application Insights (Azure)
|
||||
```csharp
|
||||
// In Program.cs
|
||||
builder.Services.AddApplicationInsightsTelemetry();
|
||||
```
|
||||
|
||||
#### Budget Option: Seq + Serilog
|
||||
```csharp
|
||||
// Already using Serilog - add Seq sink
|
||||
Log.Logger = new LoggerConfiguration()
|
||||
.WriteTo.Seq("http://localhost:5341") // Self-hosted Seq
|
||||
.CreateLogger();
|
||||
```
|
||||
|
||||
### 5.2 Uptime Monitoring
|
||||
|
||||
Free options:
|
||||
- [UptimeRobot](https://uptimerobot.com) - 50 free monitors
|
||||
- [Freshping](https://freshping.io) - 50 free monitors
|
||||
|
||||
Set up alerts for:
|
||||
- Homepage availability
|
||||
- API health endpoint
|
||||
- Webhook endpoint
|
||||
|
||||
### 5.3 Error Tracking
|
||||
|
||||
Add a health check endpoint:
|
||||
```csharp
|
||||
// In Program.cs
|
||||
app.MapGet("/health", () => Results.Ok(new { status = "healthy", timestamp = DateTime.UtcNow }));
|
||||
```
|
||||
|
||||
### 5.4 Backup Strategy
|
||||
|
||||
| Component | Backup Method | Frequency |
|
||||
|-----------|--------------|-----------|
|
||||
| Database | Azure automated backups | Continuous (7-day retention) |
|
||||
| CV files | Azure Blob redundancy (LRS) | Automatic |
|
||||
| Config | Git repository | On change |
|
||||
|
||||
For VPS: Set up daily database dumps to offsite storage.
|
||||
|
||||
---
|
||||
|
||||
## Phase 6: Launch Checklist
|
||||
|
||||
### Pre-Launch (1 week before)
|
||||
|
||||
- [ ] All environment variables configured
|
||||
- [ ] Database migrations applied
|
||||
- [ ] Stripe products created and tested
|
||||
- [ ] Webhook endpoint configured and tested
|
||||
- [ ] SSL certificate active
|
||||
- [ ] Privacy Policy and Terms published
|
||||
- [ ] Test complete user journey (signup → payment → CV check)
|
||||
- [ ] Test subscription cancellation flow
|
||||
- [ ] Error pages customised (404, 500)
|
||||
|
||||
### Launch Day
|
||||
|
||||
- [ ] Switch Stripe to live mode (change API keys)
|
||||
- [ ] Verify webhook is receiving live events
|
||||
- [ ] Monitor error logs closely
|
||||
- [ ] Test a real payment (refund yourself)
|
||||
|
||||
### Post-Launch (First Week)
|
||||
|
||||
- [ ] Monitor for errors daily
|
||||
- [ ] Check Stripe dashboard for failed payments
|
||||
- [ ] Respond to support queries within 24 hours
|
||||
- [ ] Gather user feedback
|
||||
|
||||
---
|
||||
|
||||
## Phase 7: Scaling (When Needed)
|
||||
|
||||
Start small and scale based on actual usage:
|
||||
|
||||
| Trigger | Action | Cost Impact |
|
||||
|---------|--------|-------------|
|
||||
| Response time > 2s | Upgrade App Service to B2/B3 | +£10-30/month |
|
||||
| Database DTU > 80% | Upgrade to Standard S0 | +£15/month |
|
||||
| Storage > 5GB | Already pay-per-use | Minimal |
|
||||
| > 1000 users | Add Redis for caching | +£15/month |
|
||||
|
||||
---
|
||||
|
||||
## Quick Reference: Configuration Files
|
||||
|
||||
### appsettings.Production.json
|
||||
```json
|
||||
{
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Warning",
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
}
|
||||
},
|
||||
"AllowedHosts": "yourdomain.com;www.yourdomain.com"
|
||||
}
|
||||
```
|
||||
|
||||
Sensitive values should be in environment variables, not this file.
|
||||
|
||||
---
|
||||
|
||||
## Support & Resources
|
||||
|
||||
- [Azure App Service Docs](https://learn.microsoft.com/en-us/azure/app-service/)
|
||||
- [Stripe Documentation](https://stripe.com/docs)
|
||||
- [ASP.NET Core Security](https://learn.microsoft.com/en-us/aspnet/core/security/)
|
||||
- [OWASP Top 10](https://owasp.org/www-project-top-ten/)
|
||||
|
||||
---
|
||||
|
||||
## Estimated Time to Launch
|
||||
|
||||
| Phase | Effort |
|
||||
|-------|--------|
|
||||
| Stripe setup | 1-2 hours |
|
||||
| Infrastructure | 2-4 hours |
|
||||
| Security hardening | 2-3 hours |
|
||||
| Legal pages | 2-4 hours (use templates) |
|
||||
| Testing | 2-4 hours |
|
||||
| **Total** | **1-2 days** |
|
||||
|
||||
---
|
||||
|
||||
*Document version: 1.0 | Last updated: January 2026*
|
||||
14
Dockerfile
@@ -3,11 +3,11 @@ FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
|
||||
WORKDIR /src
|
||||
|
||||
# Copy solution and project files first for better layer caching
|
||||
COPY TrueCV.sln ./
|
||||
COPY src/TrueCV.Domain/TrueCV.Domain.csproj src/TrueCV.Domain/
|
||||
COPY src/TrueCV.Application/TrueCV.Application.csproj src/TrueCV.Application/
|
||||
COPY src/TrueCV.Infrastructure/TrueCV.Infrastructure.csproj src/TrueCV.Infrastructure/
|
||||
COPY src/TrueCV.Web/TrueCV.Web.csproj src/TrueCV.Web/
|
||||
COPY RealCV.sln ./
|
||||
COPY src/RealCV.Domain/RealCV.Domain.csproj src/RealCV.Domain/
|
||||
COPY src/RealCV.Application/RealCV.Application.csproj src/RealCV.Application/
|
||||
COPY src/RealCV.Infrastructure/RealCV.Infrastructure.csproj src/RealCV.Infrastructure/
|
||||
COPY src/RealCV.Web/RealCV.Web.csproj src/RealCV.Web/
|
||||
|
||||
# Restore dependencies
|
||||
RUN dotnet restore
|
||||
@@ -16,7 +16,7 @@ RUN dotnet restore
|
||||
COPY src/ src/
|
||||
|
||||
# Build and publish
|
||||
WORKDIR /src/src/TrueCV.Web
|
||||
WORKDIR /src/src/RealCV.Web
|
||||
RUN dotnet publish -c Release -o /app/publish --no-restore
|
||||
|
||||
# Runtime stage
|
||||
@@ -51,4 +51,4 @@ HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
|
||||
CMD curl -f http://localhost:8080/health || exit 1
|
||||
|
||||
# Start the app
|
||||
ENTRYPOINT ["dotnet", "TrueCV.Web.dll"]
|
||||
ENTRYPOINT ["dotnet", "RealCV.Web.dll"]
|
||||
|
||||
@@ -7,11 +7,11 @@ RUN dotnet tool install --global dotnet-ef
|
||||
ENV PATH="$PATH:/root/.dotnet/tools"
|
||||
|
||||
# Copy solution and project files
|
||||
COPY TrueCV.sln ./
|
||||
COPY src/TrueCV.Domain/TrueCV.Domain.csproj src/TrueCV.Domain/
|
||||
COPY src/TrueCV.Application/TrueCV.Application.csproj src/TrueCV.Application/
|
||||
COPY src/TrueCV.Infrastructure/TrueCV.Infrastructure.csproj src/TrueCV.Infrastructure/
|
||||
COPY src/TrueCV.Web/TrueCV.Web.csproj src/TrueCV.Web/
|
||||
COPY RealCV.sln ./
|
||||
COPY src/RealCV.Domain/RealCV.Domain.csproj src/RealCV.Domain/
|
||||
COPY src/RealCV.Application/RealCV.Application.csproj src/RealCV.Application/
|
||||
COPY src/RealCV.Infrastructure/RealCV.Infrastructure.csproj src/RealCV.Infrastructure/
|
||||
COPY src/RealCV.Web/RealCV.Web.csproj src/RealCV.Web/
|
||||
|
||||
# Restore dependencies
|
||||
RUN dotnet restore
|
||||
@@ -20,7 +20,7 @@ RUN dotnet restore
|
||||
COPY src/ src/
|
||||
|
||||
# Build the project
|
||||
RUN dotnet build src/TrueCV.Web/TrueCV.Web.csproj -c Release
|
||||
RUN dotnet build src/RealCV.Web/RealCV.Web.csproj -c Release
|
||||
|
||||
# Run migrations on startup
|
||||
ENTRYPOINT ["dotnet", "ef", "database", "update", "--project", "src/TrueCV.Infrastructure", "--startup-project", "src/TrueCV.Web", "--no-build", "-c", "Release"]
|
||||
ENTRYPOINT ["dotnet", "ef", "database", "update", "--project", "src/RealCV.Infrastructure", "--startup-project", "src/RealCV.Web", "--no-build", "-c", "Release"]
|
||||
|
||||
BIN
Gemini_Generated_Image_go8drzgo8drzgo8d.png
Executable file
|
After Width: | Height: | Size: 6.3 MiB |
@@ -5,17 +5,17 @@ VisualStudioVersion = 17.0.31903.59
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{F25C3740-9240-46DF-BC34-985BC577216B}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TrueCV.Domain", "src\TrueCV.Domain\TrueCV.Domain.csproj", "{41AC48AF-09BC-48D1-9CA4-1B05D3B693F0}"
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RealCV.Domain", "src\RealCV.Domain\RealCV.Domain.csproj", "{41AC48AF-09BC-48D1-9CA4-1B05D3B693F0}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TrueCV.Application", "src\TrueCV.Application\TrueCV.Application.csproj", "{A8A1BA81-3B2F-4F95-BB15-ACA40DF2A70E}"
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RealCV.Application", "src\RealCV.Application\RealCV.Application.csproj", "{A8A1BA81-3B2F-4F95-BB15-ACA40DF2A70E}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TrueCV.Infrastructure", "src\TrueCV.Infrastructure\TrueCV.Infrastructure.csproj", "{03DB607C-9592-4930-8C89-3E257A319278}"
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RealCV.Infrastructure", "src\RealCV.Infrastructure\RealCV.Infrastructure.csproj", "{03DB607C-9592-4930-8C89-3E257A319278}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TrueCV.Web", "src\TrueCV.Web\TrueCV.Web.csproj", "{D69F57DB-3092-48AF-81BB-868E3749C638}"
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RealCV.Web", "src\RealCV.Web\RealCV.Web.csproj", "{D69F57DB-3092-48AF-81BB-868E3749C638}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{80890010-EDA6-418B-AD6C-5A9D875594C4}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TrueCV.Tests", "tests\TrueCV.Tests\TrueCV.Tests.csproj", "{4450D4F1-4EB9-445E-904B-1C57701493D8}"
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RealCV.Tests", "tests\RealCV.Tests\RealCV.Tests.csproj", "{4450D4F1-4EB9-445E-904B-1C57701493D8}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
31
deploy-local.sh
Executable file
@@ -0,0 +1,31 @@
|
||||
#!/bin/bash
|
||||
# Deploy RealCV from local git repo to website
|
||||
set -e
|
||||
|
||||
cd /git/RealCV
|
||||
|
||||
echo "Building application..."
|
||||
dotnet publish src/RealCV.Web -c Release -o ./publish --nologo
|
||||
|
||||
echo "Stopping service..."
|
||||
sudo systemctl stop realcv
|
||||
|
||||
echo "Backing up config..."
|
||||
cp /var/www/realcv/appsettings.Production.json /tmp/appsettings.Production.json 2>/dev/null || true
|
||||
|
||||
echo "Deploying files..."
|
||||
sudo rm -rf /var/www/realcv/*
|
||||
sudo cp -r ./publish/* /var/www/realcv/
|
||||
|
||||
echo "Restoring config..."
|
||||
sudo cp /tmp/appsettings.Production.json /var/www/realcv/ 2>/dev/null || true
|
||||
|
||||
echo "Setting permissions..."
|
||||
sudo chown -R www-data:www-data /var/www/realcv
|
||||
|
||||
echo "Starting service..."
|
||||
sudo systemctl start realcv
|
||||
|
||||
echo "Done! Checking status..."
|
||||
sleep 2
|
||||
sudo systemctl is-active realcv && echo "Service is running."
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/bin/bash
|
||||
# TrueCV Deployment Script
|
||||
# RealCV Deployment Script
|
||||
# Run this from your development machine to deploy to a Linux server
|
||||
|
||||
set -e
|
||||
@@ -7,8 +7,8 @@ set -e
|
||||
# Configuration - UPDATE THESE VALUES
|
||||
SERVER_USER="deploy"
|
||||
SERVER_HOST="your-server.com"
|
||||
SERVER_PATH="/var/www/truecv"
|
||||
DOMAIN="truecv.yourdomain.com"
|
||||
SERVER_PATH="/var/www/realcv"
|
||||
DOMAIN="realcv.yourdomain.com"
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
@@ -16,7 +16,7 @@ GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
echo -e "${GREEN}=== TrueCV Deployment Script ===${NC}"
|
||||
echo -e "${GREEN}=== RealCV Deployment Script ===${NC}"
|
||||
|
||||
# Check if configuration is set
|
||||
if [[ "$SERVER_HOST" == "your-server.com" ]]; then
|
||||
@@ -27,15 +27,15 @@ fi
|
||||
# Step 1: Build and publish
|
||||
echo -e "${YELLOW}Step 1: Publishing application...${NC}"
|
||||
cd "$(dirname "$0")/.."
|
||||
dotnet publish src/TrueCV.Web -c Release -o ./publish --nologo
|
||||
dotnet publish src/RealCV.Web -c Release -o ./publish --nologo
|
||||
|
||||
# Step 2: Create deployment package
|
||||
echo -e "${YELLOW}Step 2: Creating deployment package...${NC}"
|
||||
tar -czf deploy/truecv-release.tar.gz -C publish .
|
||||
tar -czf deploy/realcv-release.tar.gz -C publish .
|
||||
|
||||
# Step 3: Transfer to server
|
||||
echo -e "${YELLOW}Step 3: Transferring to server...${NC}"
|
||||
scp deploy/truecv-release.tar.gz ${SERVER_USER}@${SERVER_HOST}:/tmp/
|
||||
scp deploy/realcv-release.tar.gz ${SERVER_USER}@${SERVER_HOST}:/tmp/
|
||||
|
||||
# Step 4: Deploy on server
|
||||
echo -e "${YELLOW}Step 4: Deploying on server...${NC}"
|
||||
@@ -43,23 +43,23 @@ ssh ${SERVER_USER}@${SERVER_HOST} << 'ENDSSH'
|
||||
set -e
|
||||
|
||||
# Stop the service if running
|
||||
sudo systemctl stop truecv 2>/dev/null || true
|
||||
sudo systemctl stop realcv 2>/dev/null || true
|
||||
|
||||
# Backup current deployment
|
||||
if [ -d "/var/www/truecv" ]; then
|
||||
sudo mv /var/www/truecv /var/www/truecv.backup.$(date +%Y%m%d_%H%M%S)
|
||||
if [ -d "/var/www/realcv" ]; then
|
||||
sudo mv /var/www/realcv /var/www/realcv.backup.$(date +%Y%m%d_%H%M%S)
|
||||
fi
|
||||
|
||||
# Create directory and extract
|
||||
sudo mkdir -p /var/www/truecv
|
||||
sudo tar -xzf /tmp/truecv-release.tar.gz -C /var/www/truecv
|
||||
sudo chown -R www-data:www-data /var/www/truecv
|
||||
sudo mkdir -p /var/www/realcv
|
||||
sudo tar -xzf /tmp/realcv-release.tar.gz -C /var/www/realcv
|
||||
sudo chown -R www-data:www-data /var/www/realcv
|
||||
|
||||
# Start the service
|
||||
sudo systemctl start truecv
|
||||
sudo systemctl start realcv
|
||||
|
||||
# Clean up
|
||||
rm /tmp/truecv-release.tar.gz
|
||||
rm /tmp/realcv-release.tar.gz
|
||||
|
||||
echo "Deployment complete on server"
|
||||
ENDSSH
|
||||
@@ -67,14 +67,14 @@ ENDSSH
|
||||
# Step 5: Verify deployment
|
||||
echo -e "${YELLOW}Step 5: Verifying deployment...${NC}"
|
||||
sleep 3
|
||||
if ssh ${SERVER_USER}@${SERVER_HOST} "sudo systemctl is-active truecv" | grep -q "active"; then
|
||||
if ssh ${SERVER_USER}@${SERVER_HOST} "sudo systemctl is-active realcv" | grep -q "active"; then
|
||||
echo -e "${GREEN}=== Deployment successful! ===${NC}"
|
||||
echo -e "Site should be available at: https://${DOMAIN}"
|
||||
else
|
||||
echo -e "${RED}Warning: Service may not be running. Check with: sudo systemctl status truecv${NC}"
|
||||
echo -e "${RED}Warning: Service may not be running. Check with: sudo systemctl status realcv${NC}"
|
||||
fi
|
||||
|
||||
# Cleanup local files
|
||||
rm -f deploy/truecv-release.tar.gz
|
||||
rm -f deploy/realcv-release.tar.gz
|
||||
|
||||
echo -e "${GREEN}Done!${NC}"
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
#!/bin/bash
|
||||
# TrueCV Server Setup Script
|
||||
# RealCV Server Setup Script
|
||||
# Run this ONCE on a fresh Linux server (Ubuntu 22.04/24.04)
|
||||
|
||||
set -e
|
||||
|
||||
# Configuration - UPDATE THESE VALUES
|
||||
DOMAIN="truecv.yourdomain.com"
|
||||
DOMAIN="realcv.yourdomain.com"
|
||||
DB_PASSWORD="YourStrong!Password123"
|
||||
ADMIN_EMAIL="admin@yourdomain.com"
|
||||
|
||||
@@ -15,7 +15,7 @@ GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m'
|
||||
|
||||
echo -e "${GREEN}=== TrueCV Server Setup ===${NC}"
|
||||
echo -e "${GREEN}=== RealCV Server Setup ===${NC}"
|
||||
|
||||
# Check if running as root
|
||||
if [[ $EUID -ne 0 ]]; then
|
||||
@@ -52,54 +52,54 @@ echo -e "${YELLOW}Step 5: Setting up SQL Server...${NC}"
|
||||
docker run -e 'ACCEPT_EULA=Y' \
|
||||
-e "SA_PASSWORD=${DB_PASSWORD}" \
|
||||
-p 127.0.0.1:1433:1433 \
|
||||
--name truecv-sql \
|
||||
--name realcv-sql \
|
||||
--restart unless-stopped \
|
||||
-v truecv-sqldata:/var/opt/mssql \
|
||||
-v realcv-sqldata:/var/opt/mssql \
|
||||
-d mcr.microsoft.com/mssql/server:2022-latest
|
||||
|
||||
echo "Waiting for SQL Server to start..."
|
||||
sleep 30
|
||||
|
||||
# Create the database
|
||||
docker exec truecv-sql /opt/mssql-tools18/bin/sqlcmd \
|
||||
docker exec realcv-sql /opt/mssql-tools18/bin/sqlcmd \
|
||||
-S localhost -U SA -P "${DB_PASSWORD}" -C \
|
||||
-Q "CREATE DATABASE TrueCV"
|
||||
-Q "CREATE DATABASE RealCV"
|
||||
|
||||
# Step 6: Create application directory
|
||||
echo -e "${YELLOW}Step 6: Creating application directory...${NC}"
|
||||
mkdir -p /var/www/truecv
|
||||
chown -R www-data:www-data /var/www/truecv
|
||||
mkdir -p /var/www/realcv
|
||||
chown -R www-data:www-data /var/www/realcv
|
||||
|
||||
# Step 7: Create systemd service
|
||||
echo -e "${YELLOW}Step 7: Creating systemd service...${NC}"
|
||||
cat > /etc/systemd/system/truecv.service << EOF
|
||||
cat > /etc/systemd/system/realcv.service << EOF
|
||||
[Unit]
|
||||
Description=TrueCV Web Application
|
||||
Description=RealCV Web Application
|
||||
After=network.target docker.service
|
||||
Requires=docker.service
|
||||
|
||||
[Service]
|
||||
WorkingDirectory=/var/www/truecv
|
||||
ExecStart=/usr/bin/dotnet /var/www/truecv/TrueCV.Web.dll
|
||||
WorkingDirectory=/var/www/realcv
|
||||
ExecStart=/usr/bin/dotnet /var/www/realcv/RealCV.Web.dll
|
||||
Restart=always
|
||||
RestartSec=10
|
||||
KillSignal=SIGINT
|
||||
SyslogIdentifier=truecv
|
||||
SyslogIdentifier=realcv
|
||||
User=www-data
|
||||
Environment=ASPNETCORE_ENVIRONMENT=Production
|
||||
Environment=ASPNETCORE_URLS=http://localhost:5000
|
||||
Environment=ConnectionStrings__DefaultConnection=Server=127.0.0.1;Database=TrueCV;User Id=SA;Password=${DB_PASSWORD};TrustServerCertificate=True
|
||||
Environment=ConnectionStrings__DefaultConnection=Server=127.0.0.1;Database=RealCV;User Id=SA;Password=${DB_PASSWORD};TrustServerCertificate=True
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
systemctl daemon-reload
|
||||
systemctl enable truecv
|
||||
systemctl enable realcv
|
||||
|
||||
# Step 8: Configure Nginx
|
||||
echo -e "${YELLOW}Step 8: Configuring Nginx...${NC}"
|
||||
cat > /etc/nginx/sites-available/truecv << EOF
|
||||
cat > /etc/nginx/sites-available/realcv << EOF
|
||||
server {
|
||||
listen 80;
|
||||
server_name ${DOMAIN};
|
||||
@@ -122,7 +122,7 @@ server {
|
||||
}
|
||||
EOF
|
||||
|
||||
ln -sf /etc/nginx/sites-available/truecv /etc/nginx/sites-enabled/
|
||||
ln -sf /etc/nginx/sites-available/realcv /etc/nginx/sites-enabled/
|
||||
rm -f /etc/nginx/sites-enabled/default
|
||||
nginx -t
|
||||
systemctl reload nginx
|
||||
@@ -151,9 +151,9 @@ echo "2. Deploy the application using deploy.sh from your dev machine"
|
||||
echo "3. Run SSL setup: certbot --nginx -d ${DOMAIN}"
|
||||
echo ""
|
||||
echo "Useful commands:"
|
||||
echo " sudo systemctl status truecv - Check app status"
|
||||
echo " sudo journalctl -u truecv -f - View app logs"
|
||||
echo " docker logs truecv-sql - View SQL Server logs"
|
||||
echo " sudo systemctl status realcv - Check app status"
|
||||
echo " sudo journalctl -u realcv -f - View app logs"
|
||||
echo " docker logs realcv-sql - View SQL Server logs"
|
||||
echo ""
|
||||
echo -e "${YELLOW}Database connection string:${NC}"
|
||||
echo " Server=127.0.0.1;Database=TrueCV;User Id=SA;Password=${DB_PASSWORD};TrustServerCertificate=True"
|
||||
echo " Server=127.0.0.1;Database=RealCV;User Id=SA;Password=${DB_PASSWORD};TrustServerCertificate=True"
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
# TrueCV Web Application
|
||||
truecv-web:
|
||||
# RealCV Web Application
|
||||
realcv-web:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
container_name: truecv-web
|
||||
container_name: realcv-web
|
||||
ports:
|
||||
- "5000:8080"
|
||||
environment:
|
||||
- ASPNETCORE_ENVIRONMENT=Development
|
||||
- ConnectionStrings__DefaultConnection=Server=sqlserver;Database=TrueCV;User Id=sa;Password=TrueCV_P@ssw0rd!;TrustServerCertificate=True;
|
||||
- ConnectionStrings__HangfireConnection=Server=sqlserver;Database=TrueCV_Hangfire;User Id=sa;Password=TrueCV_P@ssw0rd!;TrustServerCertificate=True;
|
||||
- ConnectionStrings__DefaultConnection=Server=sqlserver;Database=RealCV;User Id=sa;Password=RealCV_P@ssw0rd!;TrustServerCertificate=True;
|
||||
- ConnectionStrings__HangfireConnection=Server=sqlserver;Database=RealCV_Hangfire;User Id=sa;Password=RealCV_P@ssw0rd!;TrustServerCertificate=True;
|
||||
- AzureBlob__ConnectionString=DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://azurite:10000/devstoreaccount1;
|
||||
- AzureBlob__ContainerName=cv-uploads
|
||||
- CompaniesHouse__BaseUrl=https://api.company-information.service.gov.uk
|
||||
@@ -24,25 +24,25 @@ services:
|
||||
azurite:
|
||||
condition: service_started
|
||||
networks:
|
||||
- truecv-network
|
||||
- realcv-network
|
||||
restart: unless-stopped
|
||||
|
||||
# SQL Server Database
|
||||
sqlserver:
|
||||
image: mcr.microsoft.com/mssql/server:2022-latest
|
||||
container_name: truecv-sqlserver
|
||||
container_name: realcv-sqlserver
|
||||
ports:
|
||||
- "1433:1433"
|
||||
environment:
|
||||
- ACCEPT_EULA=Y
|
||||
- MSSQL_SA_PASSWORD=TrueCV_P@ssw0rd!
|
||||
- MSSQL_SA_PASSWORD=RealCV_P@ssw0rd!
|
||||
- MSSQL_PID=Developer
|
||||
volumes:
|
||||
- sqlserver-data:/var/opt/mssql
|
||||
networks:
|
||||
- truecv-network
|
||||
- realcv-network
|
||||
healthcheck:
|
||||
test: /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P "TrueCV_P@ssw0rd!" -C -Q "SELECT 1" || exit 1
|
||||
test: /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P "RealCV_P@ssw0rd!" -C -Q "SELECT 1" || exit 1
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
@@ -52,7 +52,7 @@ services:
|
||||
# Azure Storage Emulator (Azurite)
|
||||
azurite:
|
||||
image: mcr.microsoft.com/azure-storage/azurite:latest
|
||||
container_name: truecv-azurite
|
||||
container_name: realcv-azurite
|
||||
ports:
|
||||
- "10000:10000" # Blob service
|
||||
- "10001:10001" # Queue service
|
||||
@@ -61,7 +61,7 @@ services:
|
||||
- azurite-data:/data
|
||||
command: "azurite --blobHost 0.0.0.0 --queueHost 0.0.0.0 --tableHost 0.0.0.0 --location /data --debug /data/debug.log"
|
||||
networks:
|
||||
- truecv-network
|
||||
- realcv-network
|
||||
restart: unless-stopped
|
||||
|
||||
# Database initialization (runs migrations)
|
||||
@@ -69,18 +69,18 @@ services:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile.migrations
|
||||
container_name: truecv-db-init
|
||||
container_name: realcv-db-init
|
||||
environment:
|
||||
- ConnectionStrings__DefaultConnection=Server=sqlserver;Database=TrueCV;User Id=sa;Password=TrueCV_P@ssw0rd!;TrustServerCertificate=True;
|
||||
- ConnectionStrings__DefaultConnection=Server=sqlserver;Database=RealCV;User Id=sa;Password=RealCV_P@ssw0rd!;TrustServerCertificate=True;
|
||||
depends_on:
|
||||
sqlserver:
|
||||
condition: service_healthy
|
||||
networks:
|
||||
- truecv-network
|
||||
- realcv-network
|
||||
restart: "no"
|
||||
|
||||
networks:
|
||||
truecv-network:
|
||||
realcv-network:
|
||||
driver: bridge
|
||||
|
||||
volumes:
|
||||
|
||||
BIN
realcv.png
Executable file
|
After Width: | Height: | Size: 6.3 MiB |
BIN
screenshots/check.png
Normal file
|
After Width: | Height: | Size: 254 MiB |
BIN
screenshots/dashboard.png
Normal file
|
After Width: | Height: | Size: 254 MiB |
BIN
screenshots/homepage.png
Normal file
|
After Width: | Height: | Size: 7.9 MiB |
BIN
screenshots/login.png
Normal file
|
After Width: | Height: | Size: 254 MiB |
BIN
screenshots/pricing.png
Normal file
|
After Width: | Height: | Size: 7.9 MiB |
BIN
screenshots/register.png
Normal file
|
After Width: | Height: | Size: 254 MiB |
@@ -1,4 +1,4 @@
|
||||
namespace TrueCV.Application.DTOs;
|
||||
namespace RealCV.Application.DTOs;
|
||||
|
||||
public sealed record CVCheckDto
|
||||
{
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace TrueCV.Application.DTOs;
|
||||
namespace RealCV.Application.DTOs;
|
||||
|
||||
public sealed record CompanySearchResult
|
||||
{
|
||||
@@ -1,6 +1,6 @@
|
||||
using TrueCV.Domain.Enums;
|
||||
using RealCV.Domain.Enums;
|
||||
|
||||
namespace TrueCV.Application.DTOs;
|
||||
namespace RealCV.Application.DTOs;
|
||||
|
||||
public class SubscriptionInfoDto
|
||||
{
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace TrueCV.Application.Data;
|
||||
namespace RealCV.Application.Data;
|
||||
|
||||
/// <summary>
|
||||
/// Known diploma mills and fake educational institutions.
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace TrueCV.Application.Data;
|
||||
namespace RealCV.Application.Data;
|
||||
|
||||
/// <summary>
|
||||
/// List of recognised UK higher education institutions.
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace TrueCV.Application.Helpers;
|
||||
namespace RealCV.Application.Helpers;
|
||||
|
||||
public static class DateHelpers
|
||||
{
|
||||
@@ -1,6 +1,6 @@
|
||||
using System.Text.Json;
|
||||
|
||||
namespace TrueCV.Application.Helpers;
|
||||
namespace RealCV.Application.Helpers;
|
||||
|
||||
public static class JsonDefaults
|
||||
{
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace TrueCV.Application.Helpers;
|
||||
namespace RealCV.Application.Helpers;
|
||||
|
||||
public static class ScoreThresholds
|
||||
{
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace TrueCV.Application.Interfaces;
|
||||
namespace RealCV.Application.Interfaces;
|
||||
|
||||
public interface IAuditService
|
||||
{
|
||||
@@ -1,7 +1,7 @@
|
||||
using TrueCV.Application.DTOs;
|
||||
using TrueCV.Application.Models;
|
||||
using RealCV.Application.DTOs;
|
||||
using RealCV.Application.Models;
|
||||
|
||||
namespace TrueCV.Application.Interfaces;
|
||||
namespace RealCV.Application.Interfaces;
|
||||
|
||||
public interface ICVCheckService
|
||||
{
|
||||
@@ -1,6 +1,6 @@
|
||||
using TrueCV.Application.Models;
|
||||
using RealCV.Application.Models;
|
||||
|
||||
namespace TrueCV.Application.Interfaces;
|
||||
namespace RealCV.Application.Interfaces;
|
||||
|
||||
public interface ICVParserService
|
||||
{
|
||||
@@ -1,6 +1,6 @@
|
||||
using TrueCV.Application.Models;
|
||||
using RealCV.Application.Models;
|
||||
|
||||
namespace TrueCV.Application.Interfaces;
|
||||
namespace RealCV.Application.Interfaces;
|
||||
|
||||
public interface ICompanyNameMatcherService
|
||||
{
|
||||
@@ -1,7 +1,7 @@
|
||||
using TrueCV.Application.DTOs;
|
||||
using TrueCV.Application.Models;
|
||||
using RealCV.Application.DTOs;
|
||||
using RealCV.Application.Models;
|
||||
|
||||
namespace TrueCV.Application.Interfaces;
|
||||
namespace RealCV.Application.Interfaces;
|
||||
|
||||
public interface ICompanyVerifierService
|
||||
{
|
||||
@@ -1,6 +1,6 @@
|
||||
using TrueCV.Application.Models;
|
||||
using RealCV.Application.Models;
|
||||
|
||||
namespace TrueCV.Application.Interfaces;
|
||||
namespace RealCV.Application.Interfaces;
|
||||
|
||||
public interface IEducationVerifierService
|
||||
{
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace TrueCV.Application.Interfaces;
|
||||
namespace RealCV.Application.Interfaces;
|
||||
|
||||
public interface IFileStorageService
|
||||
{
|
||||
@@ -1,6 +1,6 @@
|
||||
using TrueCV.Domain.Enums;
|
||||
using RealCV.Domain.Enums;
|
||||
|
||||
namespace TrueCV.Application.Interfaces;
|
||||
namespace RealCV.Application.Interfaces;
|
||||
|
||||
public interface IStripeService
|
||||
{
|
||||
@@ -1,6 +1,6 @@
|
||||
using TrueCV.Application.DTOs;
|
||||
using RealCV.Application.DTOs;
|
||||
|
||||
namespace TrueCV.Application.Interfaces;
|
||||
namespace RealCV.Application.Interfaces;
|
||||
|
||||
public interface ISubscriptionService
|
||||
{
|
||||
@@ -1,6 +1,6 @@
|
||||
using TrueCV.Application.Models;
|
||||
using RealCV.Application.Models;
|
||||
|
||||
namespace TrueCV.Application.Interfaces;
|
||||
namespace RealCV.Application.Interfaces;
|
||||
|
||||
public interface ITimelineAnalyserService
|
||||
{
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace TrueCV.Application.Interfaces;
|
||||
namespace RealCV.Application.Interfaces;
|
||||
|
||||
public interface IUserContextService
|
||||
{
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace TrueCV.Application.Models;
|
||||
namespace RealCV.Application.Models;
|
||||
|
||||
public sealed record CVData
|
||||
{
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace TrueCV.Application.Models;
|
||||
namespace RealCV.Application.Models;
|
||||
|
||||
public sealed record CompanyVerificationResult
|
||||
{
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace TrueCV.Application.Models;
|
||||
namespace RealCV.Application.Models;
|
||||
|
||||
public sealed record EducationEntry
|
||||
{
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace TrueCV.Application.Models;
|
||||
namespace RealCV.Application.Models;
|
||||
|
||||
public sealed record EducationVerificationResult
|
||||
{
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace TrueCV.Application.Models;
|
||||
namespace RealCV.Application.Models;
|
||||
|
||||
public sealed record EmploymentEntry
|
||||
{
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace TrueCV.Application.Models;
|
||||
namespace RealCV.Application.Models;
|
||||
|
||||
public sealed record FlagResult
|
||||
{
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace TrueCV.Application.Models;
|
||||
namespace RealCV.Application.Models;
|
||||
|
||||
public record SemanticMatchResult
|
||||
{
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace TrueCV.Application.Models;
|
||||
namespace RealCV.Application.Models;
|
||||
|
||||
public sealed record TimelineAnalysisResult
|
||||
{
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace TrueCV.Application.Models;
|
||||
namespace RealCV.Application.Models;
|
||||
|
||||
public sealed record TimelineGap
|
||||
{
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace TrueCV.Application.Models;
|
||||
namespace RealCV.Application.Models;
|
||||
|
||||
public sealed record TimelineOverlap
|
||||
{
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace TrueCV.Application.Models;
|
||||
namespace RealCV.Application.Models;
|
||||
|
||||
public sealed record VeracityReport
|
||||
{
|
||||
@@ -1,7 +1,7 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\TrueCV.Domain\TrueCV.Domain.csproj" />
|
||||
<ProjectReference Include="..\RealCV.Domain\RealCV.Domain.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
@@ -1,6 +1,6 @@
|
||||
using TrueCV.Domain.Enums;
|
||||
using RealCV.Domain.Enums;
|
||||
|
||||
namespace TrueCV.Domain.Constants;
|
||||
namespace RealCV.Domain.Constants;
|
||||
|
||||
public static class PlanLimits
|
||||
{
|
||||
@@ -1,6 +1,6 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace TrueCV.Domain.Entities;
|
||||
namespace RealCV.Domain.Entities;
|
||||
|
||||
public class AuditLog
|
||||
{
|
||||
@@ -1,7 +1,7 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using TrueCV.Domain.Enums;
|
||||
using RealCV.Domain.Enums;
|
||||
|
||||
namespace TrueCV.Domain.Entities;
|
||||
namespace RealCV.Domain.Entities;
|
||||
|
||||
public class CVCheck
|
||||
{
|
||||
@@ -1,8 +1,8 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using TrueCV.Domain.Enums;
|
||||
using RealCV.Domain.Enums;
|
||||
|
||||
namespace TrueCV.Domain.Entities;
|
||||
namespace RealCV.Domain.Entities;
|
||||
|
||||
public class CVFlag
|
||||
{
|
||||
@@ -1,6 +1,6 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace TrueCV.Domain.Entities;
|
||||
namespace RealCV.Domain.Entities;
|
||||
|
||||
public class CompanyCache
|
||||
{
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace TrueCV.Domain.Enums;
|
||||
namespace RealCV.Domain.Enums;
|
||||
|
||||
public enum CheckStatus
|
||||
{
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace TrueCV.Domain.Enums;
|
||||
namespace RealCV.Domain.Enums;
|
||||
|
||||
public enum FlagCategory
|
||||
{
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace TrueCV.Domain.Enums;
|
||||
namespace RealCV.Domain.Enums;
|
||||
|
||||
public enum FlagSeverity
|
||||
{
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace TrueCV.Domain.Enums;
|
||||
namespace RealCV.Domain.Enums;
|
||||
|
||||
public enum UserPlan
|
||||
{
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace TrueCV.Domain.Exceptions;
|
||||
namespace RealCV.Domain.Exceptions;
|
||||
|
||||
public class QuotaExceededException : Exception
|
||||
{
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace TrueCV.Infrastructure.Configuration;
|
||||
namespace RealCV.Infrastructure.Configuration;
|
||||
|
||||
public sealed class AnthropicSettings
|
||||
{
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace TrueCV.Infrastructure.Configuration;
|
||||
namespace RealCV.Infrastructure.Configuration;
|
||||
|
||||
public sealed class AzureBlobSettings
|
||||
{
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace TrueCV.Infrastructure.Configuration;
|
||||
namespace RealCV.Infrastructure.Configuration;
|
||||
|
||||
public sealed class CompaniesHouseSettings
|
||||
{
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace TrueCV.Infrastructure.Configuration;
|
||||
namespace RealCV.Infrastructure.Configuration;
|
||||
|
||||
public sealed class LocalStorageSettings
|
||||
{
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace TrueCV.Infrastructure.Configuration;
|
||||
namespace RealCV.Infrastructure.Configuration;
|
||||
|
||||
public class StripeSettings
|
||||
{
|
||||
@@ -1,10 +1,10 @@
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using TrueCV.Domain.Entities;
|
||||
using TrueCV.Infrastructure.Identity;
|
||||
using RealCV.Domain.Entities;
|
||||
using RealCV.Infrastructure.Identity;
|
||||
|
||||
namespace TrueCV.Infrastructure.Data;
|
||||
namespace RealCV.Infrastructure.Data;
|
||||
|
||||
public class ApplicationDbContext : IdentityDbContext<ApplicationUser, IdentityRole<Guid>, Guid>
|
||||
{
|
||||
@@ -5,11 +5,11 @@ using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using Microsoft.EntityFrameworkCore.Metadata;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||
using TrueCV.Infrastructure.Data;
|
||||
using RealCV.Infrastructure.Data;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace TrueCV.Infrastructure.Data.Migrations
|
||||
namespace RealCV.Infrastructure.Data.Migrations
|
||||
{
|
||||
[DbContext(typeof(ApplicationDbContext))]
|
||||
[Migration("20260118182916_InitialCreate")]
|
||||
@@ -156,7 +156,7 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
b.ToTable("AspNetUserTokens", (string)null);
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TrueCV.Domain.Entities.CVCheck", b =>
|
||||
modelBuilder.Entity("RealCV.Domain.Entities.CVCheck", b =>
|
||||
{
|
||||
b.Property<Guid>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
@@ -211,7 +211,7 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
b.ToTable("CVChecks");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TrueCV.Domain.Entities.CVFlag", b =>
|
||||
modelBuilder.Entity("RealCV.Domain.Entities.CVFlag", b =>
|
||||
{
|
||||
b.Property<Guid>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
@@ -251,7 +251,7 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
b.ToTable("CVFlags");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TrueCV.Domain.Entities.CompanyCache", b =>
|
||||
modelBuilder.Entity("RealCV.Domain.Entities.CompanyCache", b =>
|
||||
{
|
||||
b.Property<string>("CompanyNumber")
|
||||
.HasMaxLength(32)
|
||||
@@ -281,7 +281,7 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
b.ToTable("CompanyCache");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TrueCV.Domain.Entities.User", b =>
|
||||
modelBuilder.Entity("RealCV.Domain.Entities.User", b =>
|
||||
{
|
||||
b.Property<Guid>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
@@ -307,7 +307,7 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
b.ToTable("User");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TrueCV.Infrastructure.Identity.ApplicationUser", b =>
|
||||
modelBuilder.Entity("RealCV.Infrastructure.Identity.ApplicationUser", b =>
|
||||
{
|
||||
b.Property<Guid>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
@@ -396,7 +396,7 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
|
||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<System.Guid>", b =>
|
||||
{
|
||||
b.HasOne("TrueCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
b.HasOne("RealCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
.WithMany()
|
||||
.HasForeignKey("UserId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
@@ -405,7 +405,7 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
|
||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<System.Guid>", b =>
|
||||
{
|
||||
b.HasOne("TrueCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
b.HasOne("RealCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
.WithMany()
|
||||
.HasForeignKey("UserId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
@@ -420,7 +420,7 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
|
||||
b.HasOne("TrueCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
b.HasOne("RealCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
.WithMany()
|
||||
.HasForeignKey("UserId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
@@ -429,29 +429,29 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
|
||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<System.Guid>", b =>
|
||||
{
|
||||
b.HasOne("TrueCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
b.HasOne("RealCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
.WithMany()
|
||||
.HasForeignKey("UserId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TrueCV.Domain.Entities.CVCheck", b =>
|
||||
modelBuilder.Entity("RealCV.Domain.Entities.CVCheck", b =>
|
||||
{
|
||||
b.HasOne("TrueCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
b.HasOne("RealCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
.WithMany("CVChecks")
|
||||
.HasForeignKey("UserId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
|
||||
b.HasOne("TrueCV.Domain.Entities.User", null)
|
||||
b.HasOne("RealCV.Domain.Entities.User", null)
|
||||
.WithMany("CVChecks")
|
||||
.HasForeignKey("UserId1");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TrueCV.Domain.Entities.CVFlag", b =>
|
||||
modelBuilder.Entity("RealCV.Domain.Entities.CVFlag", b =>
|
||||
{
|
||||
b.HasOne("TrueCV.Domain.Entities.CVCheck", "CVCheck")
|
||||
b.HasOne("RealCV.Domain.Entities.CVCheck", "CVCheck")
|
||||
.WithMany("Flags")
|
||||
.HasForeignKey("CVCheckId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
@@ -460,17 +460,17 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
b.Navigation("CVCheck");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TrueCV.Domain.Entities.CVCheck", b =>
|
||||
modelBuilder.Entity("RealCV.Domain.Entities.CVCheck", b =>
|
||||
{
|
||||
b.Navigation("Flags");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TrueCV.Domain.Entities.User", b =>
|
||||
modelBuilder.Entity("RealCV.Domain.Entities.User", b =>
|
||||
{
|
||||
b.Navigation("CVChecks");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TrueCV.Infrastructure.Identity.ApplicationUser", b =>
|
||||
modelBuilder.Entity("RealCV.Infrastructure.Identity.ApplicationUser", b =>
|
||||
{
|
||||
b.Navigation("CVChecks");
|
||||
});
|
||||
@@ -3,7 +3,7 @@ using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace TrueCV.Infrastructure.Data.Migrations
|
||||
namespace RealCV.Infrastructure.Data.Migrations
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public partial class InitialCreate : Migration
|
||||
@@ -5,11 +5,11 @@ using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using Microsoft.EntityFrameworkCore.Metadata;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||
using TrueCV.Infrastructure.Data;
|
||||
using RealCV.Infrastructure.Data;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace TrueCV.Infrastructure.Data.Migrations
|
||||
namespace RealCV.Infrastructure.Data.Migrations
|
||||
{
|
||||
[DbContext(typeof(ApplicationDbContext))]
|
||||
[Migration("20260120191035_AddProcessingStageToCV")]
|
||||
@@ -156,7 +156,7 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
b.ToTable("AspNetUserTokens", (string)null);
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TrueCV.Domain.Entities.CVCheck", b =>
|
||||
modelBuilder.Entity("RealCV.Domain.Entities.CVCheck", b =>
|
||||
{
|
||||
b.Property<Guid>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
@@ -210,7 +210,7 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
b.ToTable("CVChecks");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TrueCV.Domain.Entities.CVFlag", b =>
|
||||
modelBuilder.Entity("RealCV.Domain.Entities.CVFlag", b =>
|
||||
{
|
||||
b.Property<Guid>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
@@ -250,7 +250,7 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
b.ToTable("CVFlags");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TrueCV.Domain.Entities.CompanyCache", b =>
|
||||
modelBuilder.Entity("RealCV.Domain.Entities.CompanyCache", b =>
|
||||
{
|
||||
b.Property<string>("CompanyNumber")
|
||||
.HasMaxLength(32)
|
||||
@@ -292,7 +292,7 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
b.ToTable("CompanyCache");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TrueCV.Infrastructure.Identity.ApplicationUser", b =>
|
||||
modelBuilder.Entity("RealCV.Infrastructure.Identity.ApplicationUser", b =>
|
||||
{
|
||||
b.Property<Guid>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
@@ -381,7 +381,7 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
|
||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<System.Guid>", b =>
|
||||
{
|
||||
b.HasOne("TrueCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
b.HasOne("RealCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
.WithMany()
|
||||
.HasForeignKey("UserId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
@@ -390,7 +390,7 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
|
||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<System.Guid>", b =>
|
||||
{
|
||||
b.HasOne("TrueCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
b.HasOne("RealCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
.WithMany()
|
||||
.HasForeignKey("UserId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
@@ -405,7 +405,7 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
|
||||
b.HasOne("TrueCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
b.HasOne("RealCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
.WithMany()
|
||||
.HasForeignKey("UserId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
@@ -414,25 +414,25 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
|
||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<System.Guid>", b =>
|
||||
{
|
||||
b.HasOne("TrueCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
b.HasOne("RealCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
.WithMany()
|
||||
.HasForeignKey("UserId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TrueCV.Domain.Entities.CVCheck", b =>
|
||||
modelBuilder.Entity("RealCV.Domain.Entities.CVCheck", b =>
|
||||
{
|
||||
b.HasOne("TrueCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
b.HasOne("RealCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
.WithMany("CVChecks")
|
||||
.HasForeignKey("UserId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TrueCV.Domain.Entities.CVFlag", b =>
|
||||
modelBuilder.Entity("RealCV.Domain.Entities.CVFlag", b =>
|
||||
{
|
||||
b.HasOne("TrueCV.Domain.Entities.CVCheck", "CVCheck")
|
||||
b.HasOne("RealCV.Domain.Entities.CVCheck", "CVCheck")
|
||||
.WithMany("Flags")
|
||||
.HasForeignKey("CVCheckId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
@@ -441,12 +441,12 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
b.Navigation("CVCheck");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TrueCV.Domain.Entities.CVCheck", b =>
|
||||
modelBuilder.Entity("RealCV.Domain.Entities.CVCheck", b =>
|
||||
{
|
||||
b.Navigation("Flags");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TrueCV.Infrastructure.Identity.ApplicationUser", b =>
|
||||
modelBuilder.Entity("RealCV.Infrastructure.Identity.ApplicationUser", b =>
|
||||
{
|
||||
b.Navigation("CVChecks");
|
||||
});
|
||||
@@ -3,7 +3,7 @@ using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace TrueCV.Infrastructure.Data.Migrations
|
||||
namespace RealCV.Infrastructure.Data.Migrations
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public partial class AddProcessingStageToCV : Migration
|
||||
@@ -5,11 +5,11 @@ using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using Microsoft.EntityFrameworkCore.Metadata;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||
using TrueCV.Infrastructure.Data;
|
||||
using RealCV.Infrastructure.Data;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace TrueCV.Infrastructure.Data.Migrations
|
||||
namespace RealCV.Infrastructure.Data.Migrations
|
||||
{
|
||||
[DbContext(typeof(ApplicationDbContext))]
|
||||
[Migration("20260120194532_AddAuditLogTable")]
|
||||
@@ -156,7 +156,7 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
b.ToTable("AspNetUserTokens", (string)null);
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TrueCV.Domain.Entities.AuditLog", b =>
|
||||
modelBuilder.Entity("RealCV.Domain.Entities.AuditLog", b =>
|
||||
{
|
||||
b.Property<Guid>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
@@ -202,7 +202,7 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
b.ToTable("AuditLogs");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TrueCV.Domain.Entities.CVCheck", b =>
|
||||
modelBuilder.Entity("RealCV.Domain.Entities.CVCheck", b =>
|
||||
{
|
||||
b.Property<Guid>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
@@ -256,7 +256,7 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
b.ToTable("CVChecks");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TrueCV.Domain.Entities.CVFlag", b =>
|
||||
modelBuilder.Entity("RealCV.Domain.Entities.CVFlag", b =>
|
||||
{
|
||||
b.Property<Guid>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
@@ -296,7 +296,7 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
b.ToTable("CVFlags");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TrueCV.Domain.Entities.CompanyCache", b =>
|
||||
modelBuilder.Entity("RealCV.Domain.Entities.CompanyCache", b =>
|
||||
{
|
||||
b.Property<string>("CompanyNumber")
|
||||
.HasMaxLength(32)
|
||||
@@ -338,7 +338,7 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
b.ToTable("CompanyCache");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TrueCV.Infrastructure.Identity.ApplicationUser", b =>
|
||||
modelBuilder.Entity("RealCV.Infrastructure.Identity.ApplicationUser", b =>
|
||||
{
|
||||
b.Property<Guid>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
@@ -427,7 +427,7 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
|
||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<System.Guid>", b =>
|
||||
{
|
||||
b.HasOne("TrueCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
b.HasOne("RealCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
.WithMany()
|
||||
.HasForeignKey("UserId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
@@ -436,7 +436,7 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
|
||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<System.Guid>", b =>
|
||||
{
|
||||
b.HasOne("TrueCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
b.HasOne("RealCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
.WithMany()
|
||||
.HasForeignKey("UserId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
@@ -451,7 +451,7 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
|
||||
b.HasOne("TrueCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
b.HasOne("RealCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
.WithMany()
|
||||
.HasForeignKey("UserId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
@@ -460,25 +460,25 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
|
||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<System.Guid>", b =>
|
||||
{
|
||||
b.HasOne("TrueCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
b.HasOne("RealCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
.WithMany()
|
||||
.HasForeignKey("UserId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TrueCV.Domain.Entities.CVCheck", b =>
|
||||
modelBuilder.Entity("RealCV.Domain.Entities.CVCheck", b =>
|
||||
{
|
||||
b.HasOne("TrueCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
b.HasOne("RealCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
.WithMany("CVChecks")
|
||||
.HasForeignKey("UserId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TrueCV.Domain.Entities.CVFlag", b =>
|
||||
modelBuilder.Entity("RealCV.Domain.Entities.CVFlag", b =>
|
||||
{
|
||||
b.HasOne("TrueCV.Domain.Entities.CVCheck", "CVCheck")
|
||||
b.HasOne("RealCV.Domain.Entities.CVCheck", "CVCheck")
|
||||
.WithMany("Flags")
|
||||
.HasForeignKey("CVCheckId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
@@ -487,12 +487,12 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
b.Navigation("CVCheck");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TrueCV.Domain.Entities.CVCheck", b =>
|
||||
modelBuilder.Entity("RealCV.Domain.Entities.CVCheck", b =>
|
||||
{
|
||||
b.Navigation("Flags");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TrueCV.Infrastructure.Identity.ApplicationUser", b =>
|
||||
modelBuilder.Entity("RealCV.Infrastructure.Identity.ApplicationUser", b =>
|
||||
{
|
||||
b.Navigation("CVChecks");
|
||||
});
|
||||
@@ -3,7 +3,7 @@ using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace TrueCV.Infrastructure.Data.Migrations
|
||||
namespace RealCV.Infrastructure.Data.Migrations
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public partial class AddAuditLogTable : Migration
|
||||
@@ -5,11 +5,11 @@ using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using Microsoft.EntityFrameworkCore.Metadata;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||
using TrueCV.Infrastructure.Data;
|
||||
using RealCV.Infrastructure.Data;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace TrueCV.Infrastructure.Data.Migrations
|
||||
namespace RealCV.Infrastructure.Data.Migrations
|
||||
{
|
||||
[DbContext(typeof(ApplicationDbContext))]
|
||||
[Migration("20260121115517_AddStripeSubscriptionFields")]
|
||||
@@ -156,7 +156,7 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
b.ToTable("AspNetUserTokens", (string)null);
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TrueCV.Domain.Entities.AuditLog", b =>
|
||||
modelBuilder.Entity("RealCV.Domain.Entities.AuditLog", b =>
|
||||
{
|
||||
b.Property<Guid>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
@@ -202,7 +202,7 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
b.ToTable("AuditLogs");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TrueCV.Domain.Entities.CVCheck", b =>
|
||||
modelBuilder.Entity("RealCV.Domain.Entities.CVCheck", b =>
|
||||
{
|
||||
b.Property<Guid>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
@@ -256,7 +256,7 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
b.ToTable("CVChecks");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TrueCV.Domain.Entities.CVFlag", b =>
|
||||
modelBuilder.Entity("RealCV.Domain.Entities.CVFlag", b =>
|
||||
{
|
||||
b.Property<Guid>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
@@ -296,7 +296,7 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
b.ToTable("CVFlags");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TrueCV.Domain.Entities.CompanyCache", b =>
|
||||
modelBuilder.Entity("RealCV.Domain.Entities.CompanyCache", b =>
|
||||
{
|
||||
b.Property<string>("CompanyNumber")
|
||||
.HasMaxLength(32)
|
||||
@@ -338,7 +338,7 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
b.ToTable("CompanyCache");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TrueCV.Infrastructure.Identity.ApplicationUser", b =>
|
||||
modelBuilder.Entity("RealCV.Infrastructure.Identity.ApplicationUser", b =>
|
||||
{
|
||||
b.Property<Guid>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
@@ -444,7 +444,7 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
|
||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<System.Guid>", b =>
|
||||
{
|
||||
b.HasOne("TrueCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
b.HasOne("RealCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
.WithMany()
|
||||
.HasForeignKey("UserId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
@@ -453,7 +453,7 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
|
||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<System.Guid>", b =>
|
||||
{
|
||||
b.HasOne("TrueCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
b.HasOne("RealCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
.WithMany()
|
||||
.HasForeignKey("UserId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
@@ -468,7 +468,7 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
|
||||
b.HasOne("TrueCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
b.HasOne("RealCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
.WithMany()
|
||||
.HasForeignKey("UserId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
@@ -477,25 +477,25 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
|
||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<System.Guid>", b =>
|
||||
{
|
||||
b.HasOne("TrueCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
b.HasOne("RealCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
.WithMany()
|
||||
.HasForeignKey("UserId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TrueCV.Domain.Entities.CVCheck", b =>
|
||||
modelBuilder.Entity("RealCV.Domain.Entities.CVCheck", b =>
|
||||
{
|
||||
b.HasOne("TrueCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
b.HasOne("RealCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
.WithMany("CVChecks")
|
||||
.HasForeignKey("UserId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TrueCV.Domain.Entities.CVFlag", b =>
|
||||
modelBuilder.Entity("RealCV.Domain.Entities.CVFlag", b =>
|
||||
{
|
||||
b.HasOne("TrueCV.Domain.Entities.CVCheck", "CVCheck")
|
||||
b.HasOne("RealCV.Domain.Entities.CVCheck", "CVCheck")
|
||||
.WithMany("Flags")
|
||||
.HasForeignKey("CVCheckId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
@@ -504,12 +504,12 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
b.Navigation("CVCheck");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TrueCV.Domain.Entities.CVCheck", b =>
|
||||
modelBuilder.Entity("RealCV.Domain.Entities.CVCheck", b =>
|
||||
{
|
||||
b.Navigation("Flags");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TrueCV.Infrastructure.Identity.ApplicationUser", b =>
|
||||
modelBuilder.Entity("RealCV.Infrastructure.Identity.ApplicationUser", b =>
|
||||
{
|
||||
b.Navigation("CVChecks");
|
||||
});
|
||||
@@ -3,7 +3,7 @@ using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace TrueCV.Infrastructure.Data.Migrations
|
||||
namespace RealCV.Infrastructure.Data.Migrations
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public partial class AddStripeSubscriptionFields : Migration
|
||||
@@ -4,11 +4,11 @@ using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using Microsoft.EntityFrameworkCore.Metadata;
|
||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||
using TrueCV.Infrastructure.Data;
|
||||
using RealCV.Infrastructure.Data;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace TrueCV.Infrastructure.Data.Migrations
|
||||
namespace RealCV.Infrastructure.Data.Migrations
|
||||
{
|
||||
[DbContext(typeof(ApplicationDbContext))]
|
||||
partial class ApplicationDbContextModelSnapshot : ModelSnapshot
|
||||
@@ -153,7 +153,7 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
b.ToTable("AspNetUserTokens", (string)null);
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TrueCV.Domain.Entities.AuditLog", b =>
|
||||
modelBuilder.Entity("RealCV.Domain.Entities.AuditLog", b =>
|
||||
{
|
||||
b.Property<Guid>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
@@ -199,7 +199,7 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
b.ToTable("AuditLogs");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TrueCV.Domain.Entities.CVCheck", b =>
|
||||
modelBuilder.Entity("RealCV.Domain.Entities.CVCheck", b =>
|
||||
{
|
||||
b.Property<Guid>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
@@ -253,7 +253,7 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
b.ToTable("CVChecks");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TrueCV.Domain.Entities.CVFlag", b =>
|
||||
modelBuilder.Entity("RealCV.Domain.Entities.CVFlag", b =>
|
||||
{
|
||||
b.Property<Guid>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
@@ -293,7 +293,7 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
b.ToTable("CVFlags");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TrueCV.Domain.Entities.CompanyCache", b =>
|
||||
modelBuilder.Entity("RealCV.Domain.Entities.CompanyCache", b =>
|
||||
{
|
||||
b.Property<string>("CompanyNumber")
|
||||
.HasMaxLength(32)
|
||||
@@ -335,7 +335,7 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
b.ToTable("CompanyCache");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TrueCV.Infrastructure.Identity.ApplicationUser", b =>
|
||||
modelBuilder.Entity("RealCV.Infrastructure.Identity.ApplicationUser", b =>
|
||||
{
|
||||
b.Property<Guid>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
@@ -441,7 +441,7 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
|
||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<System.Guid>", b =>
|
||||
{
|
||||
b.HasOne("TrueCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
b.HasOne("RealCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
.WithMany()
|
||||
.HasForeignKey("UserId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
@@ -450,7 +450,7 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
|
||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<System.Guid>", b =>
|
||||
{
|
||||
b.HasOne("TrueCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
b.HasOne("RealCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
.WithMany()
|
||||
.HasForeignKey("UserId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
@@ -465,7 +465,7 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
|
||||
b.HasOne("TrueCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
b.HasOne("RealCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
.WithMany()
|
||||
.HasForeignKey("UserId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
@@ -474,25 +474,25 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
|
||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<System.Guid>", b =>
|
||||
{
|
||||
b.HasOne("TrueCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
b.HasOne("RealCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
.WithMany()
|
||||
.HasForeignKey("UserId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TrueCV.Domain.Entities.CVCheck", b =>
|
||||
modelBuilder.Entity("RealCV.Domain.Entities.CVCheck", b =>
|
||||
{
|
||||
b.HasOne("TrueCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
b.HasOne("RealCV.Infrastructure.Identity.ApplicationUser", null)
|
||||
.WithMany("CVChecks")
|
||||
.HasForeignKey("UserId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TrueCV.Domain.Entities.CVFlag", b =>
|
||||
modelBuilder.Entity("RealCV.Domain.Entities.CVFlag", b =>
|
||||
{
|
||||
b.HasOne("TrueCV.Domain.Entities.CVCheck", "CVCheck")
|
||||
b.HasOne("RealCV.Domain.Entities.CVCheck", "CVCheck")
|
||||
.WithMany("Flags")
|
||||
.HasForeignKey("CVCheckId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
@@ -501,12 +501,12 @@ namespace TrueCV.Infrastructure.Data.Migrations
|
||||
b.Navigation("CVCheck");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TrueCV.Domain.Entities.CVCheck", b =>
|
||||
modelBuilder.Entity("RealCV.Domain.Entities.CVCheck", b =>
|
||||
{
|
||||
b.Navigation("Flags");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("TrueCV.Infrastructure.Identity.ApplicationUser", b =>
|
||||
modelBuilder.Entity("RealCV.Infrastructure.Identity.ApplicationUser", b =>
|
||||
{
|
||||
b.Navigation("CVChecks");
|
||||
});
|
||||
@@ -6,14 +6,14 @@ using Microsoft.Extensions.DependencyInjection;
|
||||
using Polly;
|
||||
using Polly.Extensions.Http;
|
||||
using Stripe;
|
||||
using TrueCV.Application.Interfaces;
|
||||
using TrueCV.Infrastructure.Configuration;
|
||||
using TrueCV.Infrastructure.Data;
|
||||
using TrueCV.Infrastructure.ExternalApis;
|
||||
using TrueCV.Infrastructure.Jobs;
|
||||
using TrueCV.Infrastructure.Services;
|
||||
using RealCV.Application.Interfaces;
|
||||
using RealCV.Infrastructure.Configuration;
|
||||
using RealCV.Infrastructure.Data;
|
||||
using RealCV.Infrastructure.ExternalApis;
|
||||
using RealCV.Infrastructure.Jobs;
|
||||
using RealCV.Infrastructure.Services;
|
||||
|
||||
namespace TrueCV.Infrastructure;
|
||||
namespace RealCV.Infrastructure;
|
||||
|
||||
public static class DependencyInjection
|
||||
{
|
||||
@@ -6,10 +6,10 @@ using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Microsoft.Extensions.Options;
|
||||
using TrueCV.Application.DTOs;
|
||||
using TrueCV.Infrastructure.Configuration;
|
||||
using RealCV.Application.DTOs;
|
||||
using RealCV.Infrastructure.Configuration;
|
||||
|
||||
namespace TrueCV.Infrastructure.ExternalApis;
|
||||
namespace RealCV.Infrastructure.ExternalApis;
|
||||
|
||||
public sealed class CompaniesHouseClient
|
||||
{
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace TrueCV.Infrastructure.Helpers;
|
||||
namespace RealCV.Infrastructure.Helpers;
|
||||
|
||||
/// <summary>
|
||||
/// Helper methods for processing AI/LLM JSON responses.
|
||||
@@ -1,8 +1,8 @@
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
using TrueCV.Domain.Entities;
|
||||
using TrueCV.Domain.Enums;
|
||||
using RealCV.Domain.Entities;
|
||||
using RealCV.Domain.Enums;
|
||||
|
||||
namespace TrueCV.Infrastructure.Identity;
|
||||
namespace RealCV.Infrastructure.Identity;
|
||||
|
||||
public class ApplicationUser : IdentityUser<Guid>
|
||||
{
|
||||
@@ -1,14 +1,14 @@
|
||||
using System.Text.Json;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using TrueCV.Application.Helpers;
|
||||
using TrueCV.Application.Interfaces;
|
||||
using TrueCV.Application.Models;
|
||||
using TrueCV.Domain.Entities;
|
||||
using TrueCV.Domain.Enums;
|
||||
using TrueCV.Infrastructure.Data;
|
||||
using RealCV.Application.Helpers;
|
||||
using RealCV.Application.Interfaces;
|
||||
using RealCV.Application.Models;
|
||||
using RealCV.Domain.Entities;
|
||||
using RealCV.Domain.Enums;
|
||||
using RealCV.Infrastructure.Data;
|
||||
|
||||
namespace TrueCV.Infrastructure.Jobs;
|
||||
namespace RealCV.Infrastructure.Jobs;
|
||||
|
||||
public sealed class ProcessCVCheckJob
|
||||
{
|
||||
@@ -1,9 +1,9 @@
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using TrueCV.Domain.Enums;
|
||||
using TrueCV.Infrastructure.Data;
|
||||
using RealCV.Domain.Enums;
|
||||
using RealCV.Infrastructure.Data;
|
||||
|
||||
namespace TrueCV.Infrastructure.Jobs;
|
||||
namespace RealCV.Infrastructure.Jobs;
|
||||
|
||||
/// <summary>
|
||||
/// Hangfire job that resets monthly CV check usage for users whose billing period has ended.
|
||||
@@ -1,7 +1,7 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\TrueCV.Application\TrueCV.Application.csproj" />
|
||||
<ProjectReference Include="..\RealCV.Application\RealCV.Application.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
@@ -3,13 +3,13 @@ using Anthropic.SDK;
|
||||
using Anthropic.SDK.Messaging;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Microsoft.Extensions.Options;
|
||||
using TrueCV.Application.Helpers;
|
||||
using TrueCV.Application.Interfaces;
|
||||
using TrueCV.Application.Models;
|
||||
using TrueCV.Infrastructure.Configuration;
|
||||
using TrueCV.Infrastructure.Helpers;
|
||||
using RealCV.Application.Helpers;
|
||||
using RealCV.Application.Interfaces;
|
||||
using RealCV.Application.Models;
|
||||
using RealCV.Infrastructure.Configuration;
|
||||
using RealCV.Infrastructure.Helpers;
|
||||
|
||||
namespace TrueCV.Infrastructure.Services;
|
||||
namespace RealCV.Infrastructure.Services;
|
||||
|
||||
public sealed class AICompanyNameMatcherService : ICompanyNameMatcherService
|
||||
{
|
||||
@@ -1,9 +1,9 @@
|
||||
using Microsoft.Extensions.Logging;
|
||||
using TrueCV.Application.Interfaces;
|
||||
using TrueCV.Domain.Entities;
|
||||
using TrueCV.Infrastructure.Data;
|
||||
using RealCV.Application.Interfaces;
|
||||
using RealCV.Domain.Entities;
|
||||
using RealCV.Infrastructure.Data;
|
||||
|
||||
namespace TrueCV.Infrastructure.Services;
|
||||
namespace RealCV.Infrastructure.Services;
|
||||
|
||||
public sealed class AuditService : IAuditService
|
||||
{
|
||||
@@ -2,17 +2,17 @@ using System.Text.Json;
|
||||
using Hangfire;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using TrueCV.Application.DTOs;
|
||||
using TrueCV.Application.Helpers;
|
||||
using TrueCV.Application.Interfaces;
|
||||
using TrueCV.Application.Models;
|
||||
using TrueCV.Domain.Entities;
|
||||
using TrueCV.Domain.Enums;
|
||||
using TrueCV.Domain.Exceptions;
|
||||
using TrueCV.Infrastructure.Data;
|
||||
using TrueCV.Infrastructure.Jobs;
|
||||
using RealCV.Application.DTOs;
|
||||
using RealCV.Application.Helpers;
|
||||
using RealCV.Application.Interfaces;
|
||||
using RealCV.Application.Models;
|
||||
using RealCV.Domain.Entities;
|
||||
using RealCV.Domain.Enums;
|
||||
using RealCV.Domain.Exceptions;
|
||||
using RealCV.Infrastructure.Data;
|
||||
using RealCV.Infrastructure.Jobs;
|
||||
|
||||
namespace TrueCV.Infrastructure.Services;
|
||||
namespace RealCV.Infrastructure.Services;
|
||||
|
||||
public sealed class CVCheckService : ICVCheckService
|
||||
{
|
||||
@@ -6,14 +6,14 @@ using DocumentFormat.OpenXml.Packaging;
|
||||
using DocumentFormat.OpenXml.Wordprocessing;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Microsoft.Extensions.Options;
|
||||
using TrueCV.Application.Helpers;
|
||||
using TrueCV.Application.Interfaces;
|
||||
using TrueCV.Application.Models;
|
||||
using TrueCV.Infrastructure.Configuration;
|
||||
using TrueCV.Infrastructure.Helpers;
|
||||
using RealCV.Application.Helpers;
|
||||
using RealCV.Application.Interfaces;
|
||||
using RealCV.Application.Models;
|
||||
using RealCV.Infrastructure.Configuration;
|
||||
using RealCV.Infrastructure.Helpers;
|
||||
using UglyToad.PdfPig;
|
||||
|
||||
namespace TrueCV.Infrastructure.Services;
|
||||
namespace RealCV.Infrastructure.Services;
|
||||
|
||||
public sealed class CVParserService : ICVParserService
|
||||
{
|
||||
@@ -2,15 +2,15 @@ using System.Text.Json;
|
||||
using FuzzySharp;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using TrueCV.Application.DTOs;
|
||||
using TrueCV.Application.Helpers;
|
||||
using TrueCV.Application.Interfaces;
|
||||
using TrueCV.Application.Models;
|
||||
using TrueCV.Domain.Entities;
|
||||
using TrueCV.Infrastructure.Data;
|
||||
using TrueCV.Infrastructure.ExternalApis;
|
||||
using RealCV.Application.DTOs;
|
||||
using RealCV.Application.Helpers;
|
||||
using RealCV.Application.Interfaces;
|
||||
using RealCV.Application.Models;
|
||||
using RealCV.Domain.Entities;
|
||||
using RealCV.Infrastructure.Data;
|
||||
using RealCV.Infrastructure.ExternalApis;
|
||||
|
||||
namespace TrueCV.Infrastructure.Services;
|
||||
namespace RealCV.Infrastructure.Services;
|
||||
|
||||
public sealed class CompanyVerifierService : ICompanyVerifierService
|
||||
{
|
||||
@@ -1,8 +1,8 @@
|
||||
using TrueCV.Application.Data;
|
||||
using TrueCV.Application.Interfaces;
|
||||
using TrueCV.Application.Models;
|
||||
using RealCV.Application.Data;
|
||||
using RealCV.Application.Interfaces;
|
||||
using RealCV.Application.Models;
|
||||
|
||||
namespace TrueCV.Infrastructure.Services;
|
||||
namespace RealCV.Infrastructure.Services;
|
||||
|
||||
public sealed class EducationVerifierService : IEducationVerifierService
|
||||
{
|
||||
@@ -2,10 +2,10 @@ using Azure.Storage.Blobs;
|
||||
using Azure.Storage.Blobs.Models;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Microsoft.Extensions.Options;
|
||||
using TrueCV.Application.Interfaces;
|
||||
using TrueCV.Infrastructure.Configuration;
|
||||
using RealCV.Application.Interfaces;
|
||||
using RealCV.Infrastructure.Configuration;
|
||||
|
||||
namespace TrueCV.Infrastructure.Services;
|
||||
namespace RealCV.Infrastructure.Services;
|
||||
|
||||
public sealed class FileStorageService : IFileStorageService
|
||||
{
|
||||
@@ -1,9 +1,9 @@
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Microsoft.Extensions.Options;
|
||||
using TrueCV.Application.Interfaces;
|
||||
using TrueCV.Infrastructure.Configuration;
|
||||
using RealCV.Application.Interfaces;
|
||||
using RealCV.Infrastructure.Configuration;
|
||||
|
||||
namespace TrueCV.Infrastructure.Services;
|
||||
namespace RealCV.Infrastructure.Services;
|
||||
|
||||
public sealed class LocalFileStorageService : IFileStorageService
|
||||
{
|
||||
@@ -3,12 +3,12 @@ using Microsoft.Extensions.Logging;
|
||||
using Microsoft.Extensions.Options;
|
||||
using Stripe;
|
||||
using Stripe.Checkout;
|
||||
using TrueCV.Application.Interfaces;
|
||||
using TrueCV.Domain.Enums;
|
||||
using TrueCV.Infrastructure.Configuration;
|
||||
using TrueCV.Infrastructure.Data;
|
||||
using RealCV.Application.Interfaces;
|
||||
using RealCV.Domain.Enums;
|
||||
using RealCV.Infrastructure.Configuration;
|
||||
using RealCV.Infrastructure.Data;
|
||||
|
||||
namespace TrueCV.Infrastructure.Services;
|
||||
namespace RealCV.Infrastructure.Services;
|
||||
|
||||
public sealed class StripeService : IStripeService
|
||||
{
|
||||
@@ -1,12 +1,12 @@
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using TrueCV.Application.DTOs;
|
||||
using TrueCV.Application.Interfaces;
|
||||
using TrueCV.Domain.Constants;
|
||||
using TrueCV.Domain.Enums;
|
||||
using TrueCV.Infrastructure.Data;
|
||||
using RealCV.Application.DTOs;
|
||||
using RealCV.Application.Interfaces;
|
||||
using RealCV.Domain.Constants;
|
||||
using RealCV.Domain.Enums;
|
||||
using RealCV.Infrastructure.Data;
|
||||
|
||||
namespace TrueCV.Infrastructure.Services;
|
||||
namespace RealCV.Infrastructure.Services;
|
||||
|
||||
public sealed class SubscriptionService : ISubscriptionService
|
||||
{
|
||||
@@ -1,8 +1,8 @@
|
||||
using Microsoft.Extensions.Logging;
|
||||
using TrueCV.Application.Interfaces;
|
||||
using TrueCV.Application.Models;
|
||||
using RealCV.Application.Interfaces;
|
||||
using RealCV.Application.Models;
|
||||
|
||||
namespace TrueCV.Infrastructure.Services;
|
||||
namespace RealCV.Infrastructure.Services;
|
||||
|
||||
public sealed class TimelineAnalyserService : ITimelineAnalyserService
|
||||
{
|
||||
@@ -1,8 +1,8 @@
|
||||
using System.Security.Claims;
|
||||
using Microsoft.AspNetCore.Components.Authorization;
|
||||
using TrueCV.Application.Interfaces;
|
||||
using RealCV.Application.Interfaces;
|
||||
|
||||
namespace TrueCV.Infrastructure.Services;
|
||||
namespace RealCV.Infrastructure.Services;
|
||||
|
||||
public sealed class UserContextService : IUserContextService
|
||||
{
|
||||
@@ -7,7 +7,7 @@
|
||||
<base href="/" />
|
||||
<link rel="stylesheet" href="bootstrap/bootstrap.min.css" />
|
||||
<link rel="stylesheet" href="app.css" />
|
||||
<link rel="stylesheet" href="TrueCV.Web.styles.css" />
|
||||
<link rel="stylesheet" href="RealCV.Web.styles.css" />
|
||||
<link rel="icon" type="image/png" href="favicon.png" />
|
||||
<HeadOutlet @rendermode="InteractiveServer" />
|
||||
</head>
|
||||
@@ -1,10 +1,10 @@
|
||||
@inherits LayoutComponentBase
|
||||
|
||||
<div class="d-flex flex-column min-vh-100">
|
||||
<nav class="navbar navbar-expand-lg navbar-light shadow-sm" style="background-color: var(--truecv-bg-surface);">
|
||||
<nav class="navbar navbar-expand-lg navbar-light shadow-sm" style="background-color: var(--realcv-bg-surface);">
|
||||
<div class="container">
|
||||
<a class="navbar-brand fw-bold" href="/">
|
||||
<img src="images/TrueCV_Logo.png" alt="TrueCV" style="height: 95px;" />
|
||||
<img src="images/RealCV_Logo_Transparent.png" alt="RealCV" style="height: 95px;" />
|
||||
</a>
|
||||
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
|
||||
@@ -77,9 +77,9 @@
|
||||
@Body
|
||||
</main>
|
||||
|
||||
<footer class="text-light py-4 mt-auto" style="background-color: var(--truecv-footer-bg);">
|
||||
<footer class="text-light py-4 mt-auto" style="background-color: var(--realcv-footer-bg);">
|
||||
<div class="container text-center">
|
||||
<p class="mb-0">© @DateTime.Now.Year TrueCV. All rights reserved.</p>
|
||||
<p class="mb-0">© @DateTime.Now.Year RealCV. All rights reserved.</p>
|
||||
</div>
|
||||
</footer>
|
||||
</div>
|
||||
@@ -6,7 +6,7 @@
|
||||
@inject AuthenticationStateProvider AuthenticationStateProvider
|
||||
@inject NavigationManager NavigationManager
|
||||
|
||||
<PageTitle>Billing - TrueCV</PageTitle>
|
||||
<PageTitle>Billing - RealCV</PageTitle>
|
||||
|
||||
<div class="container py-5">
|
||||
<div class="row justify-content-center">
|
||||
@@ -49,20 +49,20 @@
|
||||
|
||||
<div class="row g-4">
|
||||
<div class="col-md-6">
|
||||
<div class="p-3 rounded" style="background: var(--truecv-bg-muted);">
|
||||
<div class="p-3 rounded" style="background: var(--realcv-bg-muted);">
|
||||
<div class="small text-muted mb-1">Price</div>
|
||||
<div class="fw-bold fs-4">@_subscription.DisplayPrice</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="p-3 rounded" style="background: var(--truecv-bg-muted);">
|
||||
<div class="p-3 rounded" style="background: var(--realcv-bg-muted);">
|
||||
<div class="small text-muted mb-1">Status</div>
|
||||
<div class="fw-bold fs-4">
|
||||
@if (_subscription.HasActiveSubscription)
|
||||
{
|
||||
<span class="text-success">Active</span>
|
||||
}
|
||||
else if (_subscription.Plan == TrueCV.Domain.Enums.UserPlan.Free)
|
||||
else if (_subscription.Plan == RealCV.Domain.Enums.UserPlan.Free)
|
||||
{
|
||||
<span class="text-muted">Free Tier</span>
|
||||
}
|
||||
@@ -84,7 +84,7 @@
|
||||
|
||||
<div class="d-flex gap-2 mt-4">
|
||||
<a href="/pricing" class="btn btn-primary">
|
||||
@if (_subscription.Plan == TrueCV.Domain.Enums.UserPlan.Free)
|
||||
@if (_subscription.Plan == RealCV.Domain.Enums.UserPlan.Free)
|
||||
{
|
||||
<span>Upgrade Plan</span>
|
||||
}
|
||||
@@ -144,7 +144,7 @@
|
||||
</small>
|
||||
</div>
|
||||
}
|
||||
else if (_subscription.ChecksRemaining <= 3 && _subscription.Plan != TrueCV.Domain.Enums.UserPlan.Free)
|
||||
else if (_subscription.ChecksRemaining <= 3 && _subscription.Plan != RealCV.Domain.Enums.UserPlan.Free)
|
||||
{
|
||||
<div class="alert alert-info mt-3 mb-0 py-2">
|
||||
<small>
|
||||
@@ -1,14 +1,14 @@
|
||||
@page "/account/login"
|
||||
@using TrueCV.Web.Components.Layout
|
||||
@using RealCV.Web.Components.Layout
|
||||
@layout MainLayout
|
||||
|
||||
@using Microsoft.AspNetCore.Identity
|
||||
@using TrueCV.Infrastructure.Identity
|
||||
@using RealCV.Infrastructure.Identity
|
||||
|
||||
@inject SignInManager<ApplicationUser> SignInManager
|
||||
@inject NavigationManager NavigationManager
|
||||
|
||||
<PageTitle>Login - TrueCV</PageTitle>
|
||||
<PageTitle>Login - RealCV</PageTitle>
|
||||
|
||||
<div class="auth-container">
|
||||
<!-- Left side - Form -->
|
||||
@@ -16,7 +16,7 @@
|
||||
<div class="auth-form-wrapper">
|
||||
<div class="text-center mb-4">
|
||||
<a href="/">
|
||||
<img src="images/TrueCV_Logo.png" alt="TrueCV" class="auth-logo" />
|
||||
<img src="images/RealCV_Logo_Transparent.png" alt="RealCV" class="auth-logo" />
|
||||
</a>
|
||||
</div>
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
</form>
|
||||
|
||||
<div class="auth-divider">
|
||||
<span>New to TrueCV?</span>
|
||||
<span>New to RealCV?</span>
|
||||
</div>
|
||||
|
||||
<div class="text-center">
|
||||
@@ -123,7 +123,7 @@
|
||||
|
||||
<div class="auth-testimonial">
|
||||
<blockquote>
|
||||
"TrueCV has transformed our hiring process. We catch discrepancies we would have missed before."
|
||||
"RealCV has transformed our hiring process. We catch discrepancies we would have missed before."
|
||||
</blockquote>
|
||||
<cite>- HR Director, Tech Company</cite>
|
||||
</div>
|
||||
@@ -1,16 +1,16 @@
|
||||
@page "/account/register"
|
||||
@using TrueCV.Web.Components.Layout
|
||||
@using RealCV.Web.Components.Layout
|
||||
@layout MainLayout
|
||||
@rendermode InteractiveServer
|
||||
|
||||
@using Microsoft.AspNetCore.Identity
|
||||
@using TrueCV.Infrastructure.Identity
|
||||
@using RealCV.Infrastructure.Identity
|
||||
|
||||
@inject UserManager<ApplicationUser> UserManager
|
||||
@inject SignInManager<ApplicationUser> SignInManager
|
||||
@inject NavigationManager NavigationManager
|
||||
|
||||
<PageTitle>Register - TrueCV</PageTitle>
|
||||
<PageTitle>Register - RealCV</PageTitle>
|
||||
|
||||
<div class="auth-container">
|
||||
<!-- Left side - Form -->
|
||||
@@ -18,7 +18,7 @@
|
||||
<div class="auth-form-wrapper">
|
||||
<div class="text-center mb-4">
|
||||
<a href="/">
|
||||
<img src="images/TrueCV_Logo.png" alt="TrueCV" class="auth-logo" />
|
||||
<img src="images/RealCV_Logo_Transparent.png" alt="RealCV" class="auth-logo" />
|
||||
</a>
|
||||
</div>
|
||||
|
||||
@@ -157,7 +157,7 @@
|
||||
|
||||
<div class="auth-testimonial">
|
||||
<blockquote>
|
||||
"We reduced bad hires by 40% in the first quarter using TrueCV."
|
||||
"We reduced bad hires by 40% in the first quarter using RealCV."
|
||||
</blockquote>
|
||||
<cite>- Recruitment Manager, Financial Services</cite>
|
||||
</div>
|
||||
@@ -3,7 +3,7 @@
|
||||
@rendermode InteractiveServer
|
||||
|
||||
@using Microsoft.AspNetCore.Identity
|
||||
@using TrueCV.Infrastructure.Identity
|
||||
@using RealCV.Infrastructure.Identity
|
||||
|
||||
@inject UserManager<ApplicationUser> UserManager
|
||||
@inject SignInManager<ApplicationUser> SignInManager
|
||||
@@ -11,7 +11,7 @@
|
||||
@inject NavigationManager NavigationManager
|
||||
@inject ILogger<Settings> Logger
|
||||
|
||||
<PageTitle>Account Settings - TrueCV</PageTitle>
|
||||
<PageTitle>Account Settings - RealCV</PageTitle>
|
||||
|
||||
<div class="container py-5">
|
||||
<div class="row justify-content-center">
|
||||
@@ -8,7 +8,7 @@
|
||||
@inject AuthenticationStateProvider AuthenticationStateProvider
|
||||
@inject ILogger<Check> Logger
|
||||
|
||||
<PageTitle>Upload CVs - TrueCV</PageTitle>
|
||||
<PageTitle>Upload CVs - RealCV</PageTitle>
|
||||
|
||||
<div class="container py-5">
|
||||
<div class="row justify-content-center">
|
||||
@@ -225,21 +225,21 @@
|
||||
|
||||
<style>
|
||||
.upload-area {
|
||||
border: 2px dashed var(--truecv-gray-300);
|
||||
border: 2px dashed var(--realcv-gray-300);
|
||||
border-radius: 16px;
|
||||
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
||||
background: linear-gradient(180deg, var(--truecv-bg-surface) 0%, var(--truecv-bg-muted) 100%);
|
||||
background: linear-gradient(180deg, var(--realcv-bg-surface) 0%, var(--realcv-bg-muted) 100%);
|
||||
}
|
||||
|
||||
.upload-area:hover {
|
||||
border-color: var(--truecv-primary);
|
||||
border-color: var(--realcv-primary);
|
||||
background: linear-gradient(180deg, #e8f1fa 0%, #d4e4f4 100%);
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 10px 25px -5px rgba(59, 111, 212, 0.1);
|
||||
}
|
||||
|
||||
.upload-area.dragging {
|
||||
border-color: var(--truecv-primary);
|
||||
border-color: var(--realcv-primary);
|
||||
background: linear-gradient(180deg, #d4e4f4 0%, #c5d9ef 100%);
|
||||
border-style: solid;
|
||||
transform: scale(1.02);
|
||||
@@ -248,7 +248,7 @@
|
||||
.upload-icon {
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
background: linear-gradient(135deg, var(--truecv-primary) 0%, var(--truecv-primary-dark) 100%);
|
||||
background: linear-gradient(135deg, var(--realcv-primary) 0%, var(--realcv-primary-dark) 100%);
|
||||
border-radius: 20px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
@@ -271,16 +271,16 @@
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
border: 1px solid var(--truecv-gray-200);
|
||||
border: 1px solid var(--realcv-gray-200);
|
||||
border-radius: 12px;
|
||||
padding: 1rem;
|
||||
margin-bottom: 0.75rem;
|
||||
background: var(--truecv-bg-surface);
|
||||
background: var(--realcv-bg-surface);
|
||||
transition: all 0.2s ease;
|
||||
}
|
||||
|
||||
.file-list-item:hover {
|
||||
border-color: var(--truecv-primary);
|
||||
border-color: var(--realcv-primary);
|
||||
box-shadow: 0 4px 12px rgba(59, 111, 212, 0.08);
|
||||
}
|
||||
|
||||
@@ -300,7 +300,7 @@
|
||||
|
||||
.file-type-icon.docx {
|
||||
background: linear-gradient(135deg, #e3ecf7 0%, #d4e4f4 100%);
|
||||
color: var(--truecv-primary);
|
||||
color: var(--realcv-primary);
|
||||
}
|
||||
|
||||
.security-info {
|
||||
@@ -312,14 +312,14 @@
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
padding: 0.625rem 1rem;
|
||||
background: var(--truecv-bg-muted);
|
||||
border-radius: var(--truecv-radius);
|
||||
background: var(--realcv-bg-muted);
|
||||
border-radius: var(--realcv-radius);
|
||||
font-size: 0.875rem;
|
||||
color: var(--truecv-gray-600);
|
||||
color: var(--realcv-gray-600);
|
||||
}
|
||||
|
||||
.security-badge svg {
|
||||
color: var(--truecv-verified);
|
||||
color: var(--realcv-verified);
|
||||
}
|
||||
|
||||
@@media (max-width: 576px) {
|
||||
@@ -526,7 +526,7 @@
|
||||
|
||||
await CVCheckService.CreateCheckAsync(userId, memoryStream, file.Name);
|
||||
}
|
||||
catch (TrueCV.Domain.Exceptions.QuotaExceededException)
|
||||
catch (RealCV.Domain.Exceptions.QuotaExceededException)
|
||||
{
|
||||
_quotaExceeded = true;
|
||||
_errorMessage = null;
|
||||