A social knowledge tool for researchers built on ATProto
1import { ok, Result, err } from 'src/shared/core/Result';
2import { Guard } from 'src/shared/core/Guard';
3import { UniqueEntityID } from 'src/shared/domain/UniqueEntityID';
4import { ValueObject } from 'src/shared/domain/ValueObject';
5
6interface CollectionIdProps {
7 value: UniqueEntityID;
8}
9
10export class CollectionId extends ValueObject<CollectionIdProps> {
11 getStringValue(): string {
12 return this.props.value.toString();
13 }
14
15 getValue(): UniqueEntityID {
16 return this.props.value;
17 }
18
19 private constructor(value: UniqueEntityID) {
20 super({ value });
21 }
22
23 public static create(id: UniqueEntityID): Result<CollectionId> {
24 const guardResult = Guard.againstNullOrUndefined(id, 'id');
25 if (guardResult.isErr()) {
26 return err(new Error(guardResult.error));
27 }
28 return ok(new CollectionId(id));
29 }
30
31 public static createFromString(value: string): Result<CollectionId> {
32 const guardResult = Guard.againstNullOrUndefined(value, 'value');
33 if (guardResult.isErr()) {
34 return err(new Error(guardResult.error));
35 }
36 const uniqueEntityID = new UniqueEntityID(value);
37 return ok(new CollectionId(uniqueEntityID));
38 }
39}