aboutsummaryrefslogtreecommitdiff
path: root/packages/sdk/src/project-store.ts
blob: 2a16d7a498d7d18d44f5132d7acbfcc885106848 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import type { Result } from "./result.js";
import type { Folder, Project } from "./types.js";

export type ProjectNotFoundError = {
	type: "PROJECT_NOT_FOUND";
	projectId: string;
};

export type FolderNotFoundError = {
	type: "FOLDER_NOT_FOUND";
	folderId: string;
};

export type ProjectStoreError = ProjectNotFoundError | FolderNotFoundError;

export type ProjectCreateInput = {
	name: string;
	description?: string;
	isGlobal?: boolean;
};

export type ProjectUpdateInput = {
	name?: string;
	description?: string | null;
	isGlobal?: boolean;
};

export type FolderCreateInput = {
	name: string;
	description?: string;
};

export type FolderUpdateInput = {
	name?: string;
	description?: string | null;
};

export interface ProjectStore {
	create(input: ProjectCreateInput): Promise<Result<Project, never>>;

	get(id: string): Promise<Result<Project, ProjectNotFoundError>>;

	update(
		id: string,
		input: ProjectUpdateInput,
	): Promise<Result<Project, ProjectNotFoundError>>;

	delete(id: string): Promise<Result<void, ProjectNotFoundError>>;

	list(): Promise<Result<Project[], never>>;

	addFolder(
		projectId: string,
		input: FolderCreateInput,
	): Promise<Result<Folder, ProjectNotFoundError>>;

	updateFolder(
		projectId: string,
		folderId: string,
		input: FolderUpdateInput,
	): Promise<Result<Folder, ProjectNotFoundError | FolderNotFoundError>>;

	removeFolder(
		projectId: string,
		folderId: string,
	): Promise<Result<void, ProjectNotFoundError | FolderNotFoundError>>;

	listFolders(
		projectId: string,
	): Promise<Result<Folder[], ProjectNotFoundError>>;
}