rwadurian/backend/services/admin-service/src/domain/value-objects/download-url.vo.ts

46 lines
991 B
TypeScript

import { DomainException } from '../../shared/exceptions/domain.exception';
/**
* 下载链接值对象
*/
export class DownloadUrl {
private readonly _value: string;
private constructor(value: string) {
this._value = value;
}
get value(): string {
return this._value;
}
static create(value: string): DownloadUrl {
if (!value || value.trim() === '') {
throw new DomainException('DownloadUrl cannot be empty');
}
const trimmed = value.trim();
// 验证 URL 格式
try {
const url = new URL(trimmed);
// 只允许 http/https 协议
if (!['http:', 'https:'].includes(url.protocol)) {
throw new Error('Invalid protocol');
}
} catch (e) {
throw new DomainException('DownloadUrl must be a valid HTTP/HTTPS URL');
}
return new DownloadUrl(trimmed);
}
equals(other: DownloadUrl): boolean {
return this._value === other._value;
}
toString(): string {
return this._value;
}
}