@aepstore-dev/contracts 1.103.0 → 1.104.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/gen/auth.d.ts +90 -0
- package/gen/auth.js +5 -0
- package/gen/auth.ts +135 -0
- package/package.json +35 -35
- package/proto/activity.proto +200 -200
- package/proto/auth.proto +243 -152
- package/proto/mail.proto +54 -54
- package/proto/payments.proto +496 -496
- package/proto/products.proto +382 -382
- package/proto/support.proto +121 -121
- package/proto/taxonomy.proto +105 -105
- package/proto/upload.proto +171 -171
- package/proto/users.proto +600 -600
package/proto/support.proto
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
syntax = "proto3";
|
|
2
|
-
|
|
3
|
-
package support.v1;
|
|
4
|
-
|
|
1
|
+
syntax = "proto3";
|
|
2
|
+
|
|
3
|
+
package support.v1;
|
|
4
|
+
|
|
5
5
|
// Support ticket system (G1). Enums as strings matching the DB:
|
|
6
6
|
// status OPEN|IN_PROGRESS|RESOLVED|CLOSED; waitingFor SUPPORT|USER.
|
|
7
|
-
service SupportService {
|
|
8
|
-
rpc Ping(PingRequest) returns (PingResponse); // health
|
|
9
|
-
|
|
10
|
-
// user
|
|
11
|
-
rpc CreateTicket(CreateTicketRequest) returns (Ticket);
|
|
7
|
+
service SupportService {
|
|
8
|
+
rpc Ping(PingRequest) returns (PingResponse); // health
|
|
9
|
+
|
|
10
|
+
// user
|
|
11
|
+
rpc CreateTicket(CreateTicketRequest) returns (Ticket);
|
|
12
12
|
rpc GetTicket(GetTicketRequest) returns (Ticket);
|
|
13
13
|
rpc ListTicketMessages(ListTicketMessagesRequest) returns (TicketMessagesListResponse);
|
|
14
14
|
rpc ListMyTickets(ListMyTicketsRequest) returns (TicketsListResponse);
|
|
@@ -18,9 +18,9 @@ service SupportService {
|
|
|
18
18
|
rpc MarkTicketRead(MarkTicketReadRequest) returns (TicketReadState);
|
|
19
19
|
rpc ReportTicket(ReportTicketRequest) returns (SupportTicketComplaint);
|
|
20
20
|
rpc RateTicket(RateTicketRequest) returns (SupportTicketRating);
|
|
21
|
-
|
|
22
|
-
// staff/admin
|
|
23
|
-
rpc ListTickets(ListTicketsRequest) returns (TicketsListResponse);
|
|
21
|
+
|
|
22
|
+
// staff/admin
|
|
23
|
+
rpc ListTickets(ListTicketsRequest) returns (TicketsListResponse);
|
|
24
24
|
rpc AssignTicket(AssignTicketRequest) returns (Ticket);
|
|
25
25
|
rpc SetTicketStatus(SetTicketStatusRequest) returns (Ticket);
|
|
26
26
|
rpc DeleteTicket(DeleteTicketRequest) returns (Ticket);
|
|
@@ -30,28 +30,28 @@ service SupportService {
|
|
|
30
30
|
rpc SetTicketCreationBan(SetTicketCreationBanRequest) returns (SupportTicketBan);
|
|
31
31
|
rpc ClearTicketCreationBan(ClearTicketCreationBanRequest) returns (TicketCreationBanState);
|
|
32
32
|
}
|
|
33
|
-
|
|
34
|
-
message PingRequest { string message = 1; }
|
|
35
|
-
message PingResponse { bool ok = 1; string message = 2; }
|
|
36
|
-
|
|
33
|
+
|
|
34
|
+
message PingRequest { string message = 1; }
|
|
35
|
+
message PingResponse { bool ok = 1; string message = 2; }
|
|
36
|
+
|
|
37
37
|
message Ticket {
|
|
38
|
-
string id = 1;
|
|
39
|
-
string author_id = 2;
|
|
40
|
-
string subject = 3;
|
|
41
|
-
string category = 4; // GENERAL|PAYMENT|WITHDRAWAL|PRODUCT|ACCOUNT|ABUSE|OTHER
|
|
38
|
+
string id = 1;
|
|
39
|
+
string author_id = 2;
|
|
40
|
+
string subject = 3;
|
|
41
|
+
string category = 4; // GENERAL|PAYMENT|WITHDRAWAL|PRODUCT|ACCOUNT|ABUSE|OTHER
|
|
42
42
|
string status = 5; // OPEN|IN_PROGRESS|RESOLVED|CLOSED
|
|
43
|
-
string priority = 6; // LOW|NORMAL|HIGH|URGENT
|
|
44
|
-
string purchase_id = 7;
|
|
45
|
-
string withdrawal_id = 8;
|
|
46
|
-
string assignee_id = 9;
|
|
47
|
-
string last_message_at = 10;
|
|
48
|
-
string created_at = 11;
|
|
49
|
-
string updated_at = 12;
|
|
50
|
-
int32 messages_count = 13;
|
|
51
|
-
string department = 14; // GENERAL|TECHNICAL|SALES
|
|
52
|
-
string product_category_id = 15; // optional
|
|
53
|
-
string related_product_id = 16; // optional
|
|
54
|
-
string related_product_type = 17; // PURCHASED|SELLING
|
|
43
|
+
string priority = 6; // LOW|NORMAL|HIGH|URGENT
|
|
44
|
+
string purchase_id = 7;
|
|
45
|
+
string withdrawal_id = 8;
|
|
46
|
+
string assignee_id = 9;
|
|
47
|
+
string last_message_at = 10;
|
|
48
|
+
string created_at = 11;
|
|
49
|
+
string updated_at = 12;
|
|
50
|
+
int32 messages_count = 13;
|
|
51
|
+
string department = 14; // GENERAL|TECHNICAL|SALES
|
|
52
|
+
string product_category_id = 15; // optional
|
|
53
|
+
string related_product_id = 16; // optional
|
|
54
|
+
string related_product_type = 17; // PURCHASED|SELLING
|
|
55
55
|
bool rules_accepted = 18;
|
|
56
56
|
string rules_accepted_at = 19;
|
|
57
57
|
string deleted_at = 20;
|
|
@@ -75,66 +75,66 @@ message TicketAssignee {
|
|
|
75
75
|
}
|
|
76
76
|
|
|
77
77
|
message TicketMessage {
|
|
78
|
-
string id = 1;
|
|
79
|
-
string ticket_id = 2;
|
|
80
|
-
string author_id = 3;
|
|
81
|
-
string body = 4;
|
|
82
|
-
bool is_staff = 5;
|
|
83
|
-
bool is_internal = 6;
|
|
84
|
-
string created_at = 7;
|
|
85
|
-
bool is_system = 8; // автосообщение платформы
|
|
86
|
-
repeated TicketAttachment attachments = 9;
|
|
87
|
-
string edited_at = 10; // '' если не редактировалось
|
|
88
|
-
// Отображаемое имя автора: агент — «Имя Ф.» из fullName (фолбэк username),
|
|
89
|
-
// клиент — username, системное — ''.
|
|
78
|
+
string id = 1;
|
|
79
|
+
string ticket_id = 2;
|
|
80
|
+
string author_id = 3;
|
|
81
|
+
string body = 4;
|
|
82
|
+
bool is_staff = 5;
|
|
83
|
+
bool is_internal = 6;
|
|
84
|
+
string created_at = 7;
|
|
85
|
+
bool is_system = 8; // автосообщение платформы
|
|
86
|
+
repeated TicketAttachment attachments = 9;
|
|
87
|
+
string edited_at = 10; // '' если не редактировалось
|
|
88
|
+
// Отображаемое имя автора: агент — «Имя Ф.» из fullName (фолбэк username),
|
|
89
|
+
// клиент — username, системное — ''.
|
|
90
90
|
string author_name = 11;
|
|
91
91
|
string deleted_at = 12;
|
|
92
92
|
bool is_read_by_staff = 13; // true for user messages already read by support staff
|
|
93
93
|
string staff_read_at = 14; // first known staff read timestamp for this message, '' if unread
|
|
94
94
|
}
|
|
95
|
-
|
|
96
|
-
message TicketAttachment {
|
|
97
|
-
string file_name = 1;
|
|
98
|
-
int64 file_size = 2;
|
|
99
|
-
string url = 3; // presigned GET, короткоживущая; в запросах пусто
|
|
100
|
-
string storage_key = 4; // только внутрь (reply), наружу не отдаётся
|
|
95
|
+
|
|
96
|
+
message TicketAttachment {
|
|
97
|
+
string file_name = 1;
|
|
98
|
+
int64 file_size = 2;
|
|
99
|
+
string url = 3; // presigned GET, короткоживущая; в запросах пусто
|
|
100
|
+
string storage_key = 4; // только внутрь (reply), наружу не отдаётся
|
|
101
101
|
string mime_type = 5;
|
|
102
102
|
}
|
|
103
103
|
|
|
104
104
|
message UpdateTicketMessageRequest {
|
|
105
|
-
string message_id = 1;
|
|
106
|
-
string requester_id = 2;
|
|
107
|
-
bool is_staff = 3;
|
|
108
|
-
string body = 4;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
message DeleteTicketMessageRequest {
|
|
112
|
-
string message_id = 1;
|
|
113
|
-
string requester_id = 2;
|
|
114
|
-
bool is_staff = 3;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
message TicketWithMessages {
|
|
118
|
-
Ticket ticket = 1;
|
|
119
|
-
repeated TicketMessage messages = 2;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
message CreateTicketRequest {
|
|
123
|
-
string author_id = 1;
|
|
124
|
-
string subject = 2;
|
|
125
|
-
string category = 3;
|
|
126
|
-
string body = 4; // first message
|
|
127
|
-
string purchase_id = 5; // optional
|
|
128
|
-
string withdrawal_id = 6; // optional
|
|
129
|
-
string priority = 7; // LOW|NORMAL|HIGH|URGENT
|
|
130
|
-
string department = 8; // GENERAL|TECHNICAL|SALES
|
|
131
|
-
string product_category_id = 9; // optional
|
|
105
|
+
string message_id = 1;
|
|
106
|
+
string requester_id = 2;
|
|
107
|
+
bool is_staff = 3;
|
|
108
|
+
string body = 4;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
message DeleteTicketMessageRequest {
|
|
112
|
+
string message_id = 1;
|
|
113
|
+
string requester_id = 2;
|
|
114
|
+
bool is_staff = 3;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
message TicketWithMessages {
|
|
118
|
+
Ticket ticket = 1;
|
|
119
|
+
repeated TicketMessage messages = 2;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
message CreateTicketRequest {
|
|
123
|
+
string author_id = 1;
|
|
124
|
+
string subject = 2;
|
|
125
|
+
string category = 3;
|
|
126
|
+
string body = 4; // first message
|
|
127
|
+
string purchase_id = 5; // optional
|
|
128
|
+
string withdrawal_id = 6; // optional
|
|
129
|
+
string priority = 7; // LOW|NORMAL|HIGH|URGENT
|
|
130
|
+
string department = 8; // GENERAL|TECHNICAL|SALES
|
|
131
|
+
string product_category_id = 9; // optional
|
|
132
132
|
string related_product_id = 10; // optional
|
|
133
133
|
string related_product_type = 11; // PURCHASED|SELLING
|
|
134
134
|
bool rules_accepted = 12;
|
|
135
135
|
repeated TicketAttachment attachments = 13; // storage_key+file_name+file_size+mime_type
|
|
136
136
|
}
|
|
137
|
-
|
|
137
|
+
|
|
138
138
|
message GetTicketRequest {
|
|
139
139
|
string id = 1;
|
|
140
140
|
string requester_id = 2;
|
|
@@ -175,26 +175,26 @@ message TicketReadState {
|
|
|
175
175
|
message ListMyTicketsRequest {
|
|
176
176
|
string author_id = 1;
|
|
177
177
|
string status = 2; // single value OR comma-separated (e.g. "OPEN,IN_PROGRESS")
|
|
178
|
-
int32 page = 3;
|
|
179
|
-
int32 limit = 4;
|
|
180
|
-
string department = 5; // GENERAL|TECHNICAL|SALES
|
|
181
|
-
string category = 6; // GENERAL|PAYMENT|...
|
|
178
|
+
int32 page = 3;
|
|
179
|
+
int32 limit = 4;
|
|
180
|
+
string department = 5; // GENERAL|TECHNICAL|SALES
|
|
181
|
+
string category = 6; // GENERAL|PAYMENT|...
|
|
182
182
|
string search = 7; // contains in subject OR in any message body
|
|
183
183
|
string date_from = 8; // ISO; inclusive lower bound on createdAt
|
|
184
184
|
string date_to = 9; // ISO; inclusive upper bound on createdAt
|
|
185
185
|
string waiting_for = 10; // SUPPORT|USER
|
|
186
186
|
string sort = 11; // desc|asc by ticket createdAt; default desc
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
message ReplyTicketRequest {
|
|
190
|
-
string ticket_id = 1;
|
|
191
|
-
string author_id = 2;
|
|
192
|
-
string body = 3;
|
|
193
|
-
bool is_staff = 4;
|
|
194
|
-
bool is_internal = 5; // staff-only note
|
|
195
|
-
repeated TicketAttachment attachments = 6; // storage_key+file_name+file_size
|
|
196
|
-
}
|
|
197
|
-
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
message ReplyTicketRequest {
|
|
190
|
+
string ticket_id = 1;
|
|
191
|
+
string author_id = 2;
|
|
192
|
+
string body = 3;
|
|
193
|
+
bool is_staff = 4;
|
|
194
|
+
bool is_internal = 5; // staff-only note
|
|
195
|
+
repeated TicketAttachment attachments = 6; // storage_key+file_name+file_size
|
|
196
|
+
}
|
|
197
|
+
|
|
198
198
|
message CloseTicketRequest {
|
|
199
199
|
string ticket_id = 1;
|
|
200
200
|
string requester_id = 2;
|
|
@@ -295,12 +295,12 @@ message ClearTicketCreationBanRequest {
|
|
|
295
295
|
}
|
|
296
296
|
|
|
297
297
|
message ListTicketsRequest {
|
|
298
|
-
string status = 1; // single value OR comma-separated
|
|
299
|
-
string category = 2;
|
|
300
|
-
string assignee_id = 3;
|
|
301
|
-
int32 page = 4;
|
|
302
|
-
int32 limit = 5;
|
|
303
|
-
string department = 6;
|
|
298
|
+
string status = 1; // single value OR comma-separated
|
|
299
|
+
string category = 2;
|
|
300
|
+
string assignee_id = 3;
|
|
301
|
+
int32 page = 4;
|
|
302
|
+
int32 limit = 5;
|
|
303
|
+
string department = 6;
|
|
304
304
|
string search = 7; // contains in subject OR in any message body
|
|
305
305
|
string date_from = 8; // ISO; inclusive lower bound on createdAt
|
|
306
306
|
string date_to = 9;
|
|
@@ -309,25 +309,25 @@ message ListTicketsRequest {
|
|
|
309
309
|
string waiting_for = 12; // SUPPORT|USER
|
|
310
310
|
string sort = 13; // desc|asc by ticket createdAt; default desc
|
|
311
311
|
}
|
|
312
|
-
|
|
313
|
-
message AssignTicketRequest {
|
|
314
|
-
string ticket_id = 1;
|
|
315
|
-
string assignee_id = 2; // empty = unassign
|
|
316
|
-
string admin_id = 3;
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
message SetTicketStatusRequest {
|
|
320
|
-
string ticket_id = 1;
|
|
321
|
-
string status = 2;
|
|
322
|
-
string admin_id = 3;
|
|
323
|
-
}
|
|
324
|
-
message DeleteTicketRequest {
|
|
325
|
-
string ticket_id = 1;
|
|
326
|
-
string admin_id = 2;
|
|
327
|
-
}
|
|
328
|
-
message TicketsListResponse {
|
|
329
|
-
repeated Ticket items = 1;
|
|
330
|
-
int32 total = 2;
|
|
331
|
-
int32 page = 3;
|
|
332
|
-
int32 limit = 4;
|
|
333
|
-
}
|
|
312
|
+
|
|
313
|
+
message AssignTicketRequest {
|
|
314
|
+
string ticket_id = 1;
|
|
315
|
+
string assignee_id = 2; // empty = unassign
|
|
316
|
+
string admin_id = 3;
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
message SetTicketStatusRequest {
|
|
320
|
+
string ticket_id = 1;
|
|
321
|
+
string status = 2;
|
|
322
|
+
string admin_id = 3;
|
|
323
|
+
}
|
|
324
|
+
message DeleteTicketRequest {
|
|
325
|
+
string ticket_id = 1;
|
|
326
|
+
string admin_id = 2;
|
|
327
|
+
}
|
|
328
|
+
message TicketsListResponse {
|
|
329
|
+
repeated Ticket items = 1;
|
|
330
|
+
int32 total = 2;
|
|
331
|
+
int32 page = 3;
|
|
332
|
+
int32 limit = 4;
|
|
333
|
+
}
|
package/proto/taxonomy.proto
CHANGED
|
@@ -1,105 +1,105 @@
|
|
|
1
|
-
syntax = "proto3";
|
|
2
|
-
|
|
3
|
-
package taxonomy.v1;
|
|
4
|
-
|
|
5
|
-
service TaxonomyService {
|
|
6
|
-
rpc FindAllCategories(Empty) returns (CategoriesListResponse);
|
|
7
|
-
rpc FindAllApplications(Empty) returns (ApplicationsListResponse);
|
|
8
|
-
rpc FindAllTags(QueryTagsRequest) returns (TagsListResponse);
|
|
9
|
-
|
|
10
|
-
rpc CreateCategory(CreateCategoryRequest) returns (CategoryResponse);
|
|
11
|
-
rpc CreateApplication(CreateApplicationRequest) returns (ApplicationResponse);
|
|
12
|
-
rpc UpdateApplication(UpdateApplicationRequest) returns (ApplicationResponse);
|
|
13
|
-
|
|
14
|
-
// Mint a presigned PUT URL for an application icon SVG (proxies upload-service,
|
|
15
|
-
// kind=ICON → public/icons/). Client PUTs the bytes to upload_url, then passes
|
|
16
|
-
// icon_url to Create/UpdateApplication.
|
|
17
|
-
rpc CreateIconUploadUrl(CreateIconUploadUrlRequest) returns (IconUploadUrlResponse);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
message Category {
|
|
21
|
-
string id = 1;
|
|
22
|
-
string name = 2;
|
|
23
|
-
string description = 3;
|
|
24
|
-
string created_at = 4;
|
|
25
|
-
string updated_at = 5;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
message Application {
|
|
29
|
-
string id = 1;
|
|
30
|
-
string name = 2;
|
|
31
|
-
string description = 3;
|
|
32
|
-
string created_at = 4;
|
|
33
|
-
string updated_at = 5;
|
|
34
|
-
string icon_url = 6; // public S3 URL to brand SVG (admin-set), empty if none
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
message Tag {
|
|
38
|
-
string id = 1;
|
|
39
|
-
string name = 2;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
// =================================================================
|
|
43
|
-
// Requests / responses
|
|
44
|
-
// =================================================================
|
|
45
|
-
|
|
46
|
-
message Empty {}
|
|
47
|
-
|
|
48
|
-
message CategoriesListResponse {
|
|
49
|
-
repeated Category items = 1;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
message ApplicationsListResponse {
|
|
53
|
-
repeated Application items = 1;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
message QueryTagsRequest {
|
|
57
|
-
string search = 1;
|
|
58
|
-
int32 page = 2;
|
|
59
|
-
int32 limit = 3;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
message TagsListResponse {
|
|
63
|
-
repeated Tag items = 1;
|
|
64
|
-
int32 total = 2;
|
|
65
|
-
int32 page = 3;
|
|
66
|
-
int32 limit = 4;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
message CreateCategoryRequest {
|
|
70
|
-
string name = 1;
|
|
71
|
-
string description = 2;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
message CategoryResponse {
|
|
75
|
-
Category category = 1;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
message CreateApplicationRequest {
|
|
79
|
-
string name = 1;
|
|
80
|
-
string description = 2;
|
|
81
|
-
string icon_url = 3;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
message UpdateApplicationRequest {
|
|
85
|
-
string id = 1;
|
|
86
|
-
string name = 2; // optional — empty keeps current
|
|
87
|
-
string description = 3; // optional
|
|
88
|
-
string icon_url = 4; // optional — empty keeps current
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
message ApplicationResponse {
|
|
92
|
-
Application application = 1;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
message CreateIconUploadUrlRequest {
|
|
96
|
-
string file_name = 1;
|
|
97
|
-
string mime_type = 2; // e.g. image/svg+xml
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
message IconUploadUrlResponse {
|
|
101
|
-
string upload_url = 1; // presigned PUT URL — client uploads the SVG bytes here
|
|
102
|
-
string icon_url = 2; // final public URL to store as Application.iconUrl
|
|
103
|
-
string file_key = 3;
|
|
104
|
-
int32 expires_in = 4;
|
|
105
|
-
}
|
|
1
|
+
syntax = "proto3";
|
|
2
|
+
|
|
3
|
+
package taxonomy.v1;
|
|
4
|
+
|
|
5
|
+
service TaxonomyService {
|
|
6
|
+
rpc FindAllCategories(Empty) returns (CategoriesListResponse);
|
|
7
|
+
rpc FindAllApplications(Empty) returns (ApplicationsListResponse);
|
|
8
|
+
rpc FindAllTags(QueryTagsRequest) returns (TagsListResponse);
|
|
9
|
+
|
|
10
|
+
rpc CreateCategory(CreateCategoryRequest) returns (CategoryResponse);
|
|
11
|
+
rpc CreateApplication(CreateApplicationRequest) returns (ApplicationResponse);
|
|
12
|
+
rpc UpdateApplication(UpdateApplicationRequest) returns (ApplicationResponse);
|
|
13
|
+
|
|
14
|
+
// Mint a presigned PUT URL for an application icon SVG (proxies upload-service,
|
|
15
|
+
// kind=ICON → public/icons/). Client PUTs the bytes to upload_url, then passes
|
|
16
|
+
// icon_url to Create/UpdateApplication.
|
|
17
|
+
rpc CreateIconUploadUrl(CreateIconUploadUrlRequest) returns (IconUploadUrlResponse);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
message Category {
|
|
21
|
+
string id = 1;
|
|
22
|
+
string name = 2;
|
|
23
|
+
string description = 3;
|
|
24
|
+
string created_at = 4;
|
|
25
|
+
string updated_at = 5;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
message Application {
|
|
29
|
+
string id = 1;
|
|
30
|
+
string name = 2;
|
|
31
|
+
string description = 3;
|
|
32
|
+
string created_at = 4;
|
|
33
|
+
string updated_at = 5;
|
|
34
|
+
string icon_url = 6; // public S3 URL to brand SVG (admin-set), empty if none
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
message Tag {
|
|
38
|
+
string id = 1;
|
|
39
|
+
string name = 2;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// =================================================================
|
|
43
|
+
// Requests / responses
|
|
44
|
+
// =================================================================
|
|
45
|
+
|
|
46
|
+
message Empty {}
|
|
47
|
+
|
|
48
|
+
message CategoriesListResponse {
|
|
49
|
+
repeated Category items = 1;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
message ApplicationsListResponse {
|
|
53
|
+
repeated Application items = 1;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
message QueryTagsRequest {
|
|
57
|
+
string search = 1;
|
|
58
|
+
int32 page = 2;
|
|
59
|
+
int32 limit = 3;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
message TagsListResponse {
|
|
63
|
+
repeated Tag items = 1;
|
|
64
|
+
int32 total = 2;
|
|
65
|
+
int32 page = 3;
|
|
66
|
+
int32 limit = 4;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
message CreateCategoryRequest {
|
|
70
|
+
string name = 1;
|
|
71
|
+
string description = 2;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
message CategoryResponse {
|
|
75
|
+
Category category = 1;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
message CreateApplicationRequest {
|
|
79
|
+
string name = 1;
|
|
80
|
+
string description = 2;
|
|
81
|
+
string icon_url = 3;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
message UpdateApplicationRequest {
|
|
85
|
+
string id = 1;
|
|
86
|
+
string name = 2; // optional — empty keeps current
|
|
87
|
+
string description = 3; // optional
|
|
88
|
+
string icon_url = 4; // optional — empty keeps current
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
message ApplicationResponse {
|
|
92
|
+
Application application = 1;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
message CreateIconUploadUrlRequest {
|
|
96
|
+
string file_name = 1;
|
|
97
|
+
string mime_type = 2; // e.g. image/svg+xml
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
message IconUploadUrlResponse {
|
|
101
|
+
string upload_url = 1; // presigned PUT URL — client uploads the SVG bytes here
|
|
102
|
+
string icon_url = 2; // final public URL to store as Application.iconUrl
|
|
103
|
+
string file_key = 3;
|
|
104
|
+
int32 expires_in = 4;
|
|
105
|
+
}
|