A social knowledge tool for researchers built on ATProto
at development 1.2 kB view raw
1import { ValueObject } from '../../../../shared/domain/ValueObject'; 2import { Result, ok, err } from '../../../../shared/core/Result'; 3 4export class InvalidCollectionDescriptionError extends Error { 5 constructor(message: string) { 6 super(message); 7 this.name = 'InvalidCollectionDescriptionError'; 8 } 9} 10 11interface CollectionDescriptionProps { 12 value: string; 13} 14 15export class CollectionDescription extends ValueObject<CollectionDescriptionProps> { 16 public static readonly MAX_LENGTH = 500; 17 18 get value(): string { 19 return this.props.value; 20 } 21 22 private constructor(props: CollectionDescriptionProps) { 23 super(props); 24 } 25 26 public static create( 27 description: string, 28 ): Result<CollectionDescription, InvalidCollectionDescriptionError> { 29 const trimmedDescription = description.trim(); 30 31 if (trimmedDescription.length > this.MAX_LENGTH) { 32 return err( 33 new InvalidCollectionDescriptionError( 34 `Collection description cannot exceed ${this.MAX_LENGTH} characters`, 35 ), 36 ); 37 } 38 39 return ok(new CollectionDescription({ value: trimmedDescription })); 40 } 41 42 public toString(): string { 43 return this.value; 44 } 45}