shared/api/endpoints/
circle.rs

1use crate::{
2    api::Method,
3    domain::{
4        circle::{
5            BrowseMembersQuery, BrowseMembersResponse, Circle, CircleBrowseMembersPath,
6            CircleBrowsePath, CircleBrowseQuery, CircleBrowseResponse, CircleCreatePath,
7            CircleCreateRequest, CircleDeletePath, CircleGetPath, CircleId, CircleRemoveMemberPath,
8            CircleSearchPath, CircleSearchQuery, CircleSearchResponse, CircleUpdateRequest,
9            JoinCirclePath, LeaveCirclePath, UpdateCirclePath,
10        },
11        CreateResponse,
12    },
13    error::EmptyError,
14};
15
16use super::ApiEndpoint;
17
18/// Create a Circle.
19///
20/// # Authorization
21/// * TokenUser
22/// * One of `Admin`, `AdminAsset`, or `ManageSelfAsset`
23pub struct Create;
24impl ApiEndpoint for Create {
25    type Req = CircleCreateRequest;
26    type Res = CreateResponse<CircleId>;
27    type Path = CircleCreatePath;
28    type Err = EmptyError;
29    const METHOD: Method = Method::Post;
30}
31
32/// Update the Circle.
33///
34/// # Authorization
35/// * One of `Admin`, `AdminAsset`, or `ManageSelfAsset` for owned Circles
36///
37pub struct Update;
38impl ApiEndpoint for Update {
39    type Req = CircleUpdateRequest;
40    type Res = ();
41    type Path = UpdateCirclePath;
42    type Err = EmptyError;
43    const METHOD: Method = Method::Patch;
44}
45
46/// Browse Circles. Returns the Circles in the response.
47///
48/// # Authorization
49/// * TokenUser of owned Circles
50/// * One of `Admin`, `AdminAsset`, or `ManageSelfAsset` for owned Circles
51///
52pub struct Browse;
53impl ApiEndpoint for Browse {
54    type Req = CircleBrowseQuery;
55    type Res = CircleBrowseResponse;
56    type Path = CircleBrowsePath;
57    type Err = EmptyError;
58    const METHOD: Method = Method::Get;
59}
60
61/// Search for Circles.
62///
63/// # Authorization
64/// * None
65pub struct Search;
66impl ApiEndpoint for Search {
67    type Req = CircleSearchQuery;
68    type Res = CircleSearchResponse;
69    type Path = CircleSearchPath;
70    type Err = EmptyError;
71    const METHOD: Method = Method::Get;
72}
73
74/// Delete a Circle.
75///
76/// # Authorization
77/// * One of `Admin`, `AdminAsset`, or `ManageSelfAsset` for owned Circles
78pub struct Delete;
79impl ApiEndpoint for Delete {
80    type Req = ();
81    type Res = ();
82    type Path = CircleDeletePath;
83    type Err = EmptyError;
84    const METHOD: Method = Method::Delete;
85}
86
87/// Get a Circle's by ID.
88///
89/// # Authorization
90/// * One of `Admin`, `AdminAsset`,, or `ManageSelfAsset` for owned Circles
91///
92/// # Errors
93/// * [`Unauthorized`](http::StatusCode::UNAUTHORIZED) if authorization is not valid.
94/// * [`NotFound`](http::StatusCode::NOT_FOUND) if the circle does not exist
95pub struct Get;
96impl ApiEndpoint for Get {
97    type Req = ();
98    type Res = Circle;
99    type Path = CircleGetPath;
100    type Err = EmptyError;
101    const METHOD: Method = Method::Get;
102}
103
104/// Join a Circle.
105/// # Authorization
106/// * TokenUser
107/// * One of `Admin`, `AdminAsset`,, or `ManageSelfAsset` for owned Circles
108///
109/// # Errors
110/// * [`Unauthorized`](http::StatusCode::UNAUTHORIZED) if authorization is not valid.
111/// * [`NotFound`](http::StatusCode::NOT_FOUND) if the circle does not exist
112pub struct JoinCircle;
113impl ApiEndpoint for JoinCircle {
114    type Req = ();
115    type Res = ();
116    type Path = JoinCirclePath;
117    type Err = EmptyError;
118    const METHOD: Method = Method::Post;
119}
120
121/// Leave a Circle.
122pub struct LeaveCircle;
123impl ApiEndpoint for LeaveCircle {
124    type Req = ();
125    type Res = ();
126    type Path = LeaveCirclePath;
127    type Err = EmptyError;
128    const METHOD: Method = Method::Delete;
129}
130
131/// Remove member from a Circle.
132pub struct RemoveMember;
133impl ApiEndpoint for RemoveMember {
134    type Req = ();
135    type Res = ();
136    type Path = CircleRemoveMemberPath;
137    type Err = EmptyError;
138    const METHOD: Method = Method::Delete;
139}
140
141/// Browse members of a Circle.
142pub struct BrowseMembers;
143impl ApiEndpoint for BrowseMembers {
144    type Req = BrowseMembersQuery;
145    type Res = BrowseMembersResponse;
146    type Path = CircleBrowseMembersPath;
147    type Err = EmptyError;
148    const METHOD: Method = Method::Get;
149}