feat: Complete stub services with real implementations and graceful not-configured responses
All checks were successful
Test Asgard Runner / test (push) Successful in 2s

- ChangelogService: inject PlatformChangelog repo, query with findAndCount(skip/take), return actual data
- ChangelogModule: add TypeOrmModule.forFeature([PlatformChangelog])
- MapsService: add uploadMap() — SHA-256 checksum, storage path, full entity save
- MapsController: add POST /maps/upload with FileInterceptor, map.manage permission, @UploadedFile
- AuthService: replace console.log stubs with Logger; forgotPassword returns 200 with clear message; resetPassword throws NotImplementedException
- PluginsService: searchUmod returns { results: [], message: 'not yet configured' } instead of bare []
- SteamService: add Logger.warn on every stub path (checkForceWipe, getPlayerSummary)
- SettingsService: add Logger; both Cloudflare DNS stubs emit Logger.warn before DB save
- MigrationService: add Logger; exportConfig logs warning + returns note field; importConfig throws NotImplementedException
- Install @types/multer dev dependency for Express.Multer.File type support

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Vantz Stockwell
2026-02-21 13:33:08 -05:00
parent e1a3ea3b78
commit a181ed7ded
11 changed files with 164 additions and 60 deletions

View File

@@ -3,6 +3,7 @@ import {
NotFoundException,
BadRequestException,
ConflictException,
Logger,
} from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
@@ -13,6 +14,8 @@ import { UpdateDomainDto } from './dto/update-domain.dto';
@Injectable()
export class SettingsService {
private readonly logger = new Logger(SettingsService.name);
constructor(
@InjectRepository(PublicSiteConfig)
private publicSiteConfigRepository: Repository<PublicSiteConfig>,
@@ -97,12 +100,9 @@ export class SettingsService {
);
}
// TODO: Stub Cloudflare DNS provisioning
// In production, this would:
// 1. Create DNS CNAME record: {subdomain}.corrosionmgmt.com → panel.corrosionmgmt.com
// 2. Wait for DNS propagation
// 3. Verify SSL certificate provisioning
// For now, we just update the database
this.logger.warn(
`Cloudflare DNS integration not configured — subdomain ${dto.subdomain} updated in DB only`,
);
license.subdomain = dto.subdomain;
}
@@ -115,13 +115,9 @@ export class SettingsService {
throw new BadRequestException('Invalid custom domain format');
}
// TODO: Stub Cloudflare DNS verification
// In production, this would:
// 1. Instruct user to create CNAME pointing to panel.corrosionmgmt.com
// 2. Verify DNS record exists
// 3. Provision SSL certificate via Cloudflare
// 4. Mark domain as verified
// For now, we just update the database
this.logger.warn(
`Cloudflare DNS integration not configured — custom domain ${dto.custom_domain} updated in DB only`,
);
license.custom_domain = dto.custom_domain;
} else if (dto.custom_domain === null || dto.custom_domain === '') {
// Allow clearing custom domain