A social knowledge tool for researchers built on ATProto
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}