@aepstore-dev/contracts 1.15.0 → 1.17.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/products.ts +2 -0
- package/gen/support.ts +168 -7
- package/package.json +1 -1
- package/proto/products.proto +1 -0
- package/proto/support.proto +108 -9
package/gen/products.ts
CHANGED
|
@@ -191,6 +191,8 @@ export interface FindOneRequest {
|
|
|
191
191
|
id: string;
|
|
192
192
|
/** optional — to compute is_favorited etc. */
|
|
193
193
|
viewerUserId: string;
|
|
194
|
+
/** dedup key for view counting (userId or hashed ip+ua) */
|
|
195
|
+
viewerKey: string;
|
|
194
196
|
}
|
|
195
197
|
|
|
196
198
|
export interface RemoveProductRequest {
|
package/gen/support.ts
CHANGED
|
@@ -19,31 +19,192 @@ export interface PingResponse {
|
|
|
19
19
|
message: string;
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
+
export interface Ticket {
|
|
23
|
+
id: string;
|
|
24
|
+
authorId: string;
|
|
25
|
+
subject: string;
|
|
26
|
+
/** GENERAL|PAYMENT|WITHDRAWAL|PRODUCT|ACCOUNT|ABUSE|OTHER */
|
|
27
|
+
category: string;
|
|
28
|
+
/** OPEN|PENDING|IN_PROGRESS|RESOLVED|CLOSED */
|
|
29
|
+
status: string;
|
|
30
|
+
/** LOW|NORMAL|HIGH|URGENT */
|
|
31
|
+
priority: string;
|
|
32
|
+
purchaseId: string;
|
|
33
|
+
withdrawalId: string;
|
|
34
|
+
assigneeId: string;
|
|
35
|
+
lastMessageAt: string;
|
|
36
|
+
createdAt: string;
|
|
37
|
+
updatedAt: string;
|
|
38
|
+
messagesCount: number;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export interface TicketMessage {
|
|
42
|
+
id: string;
|
|
43
|
+
ticketId: string;
|
|
44
|
+
authorId: string;
|
|
45
|
+
body: string;
|
|
46
|
+
isStaff: boolean;
|
|
47
|
+
isInternal: boolean;
|
|
48
|
+
createdAt: string;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export interface TicketWithMessages {
|
|
52
|
+
ticket: Ticket | undefined;
|
|
53
|
+
messages: TicketMessage[];
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export interface CreateTicketRequest {
|
|
57
|
+
authorId: string;
|
|
58
|
+
subject: string;
|
|
59
|
+
category: string;
|
|
60
|
+
/** first message */
|
|
61
|
+
body: string;
|
|
62
|
+
/** optional */
|
|
63
|
+
purchaseId: string;
|
|
64
|
+
/** optional */
|
|
65
|
+
withdrawalId: string;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export interface GetTicketRequest {
|
|
69
|
+
id: string;
|
|
70
|
+
requesterId: string;
|
|
71
|
+
/** staff see internal notes + any ticket */
|
|
72
|
+
isStaff: boolean;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export interface ListMyTicketsRequest {
|
|
76
|
+
authorId: string;
|
|
77
|
+
status: string;
|
|
78
|
+
page: number;
|
|
79
|
+
limit: number;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export interface ReplyTicketRequest {
|
|
83
|
+
ticketId: string;
|
|
84
|
+
authorId: string;
|
|
85
|
+
body: string;
|
|
86
|
+
isStaff: boolean;
|
|
87
|
+
/** staff-only note */
|
|
88
|
+
isInternal: boolean;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export interface CloseTicketRequest {
|
|
92
|
+
ticketId: string;
|
|
93
|
+
requesterId: string;
|
|
94
|
+
isStaff: boolean;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export interface ListTicketsRequest {
|
|
98
|
+
status: string;
|
|
99
|
+
category: string;
|
|
100
|
+
assigneeId: string;
|
|
101
|
+
page: number;
|
|
102
|
+
limit: number;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
export interface AssignTicketRequest {
|
|
106
|
+
ticketId: string;
|
|
107
|
+
/** empty = unassign */
|
|
108
|
+
assigneeId: string;
|
|
109
|
+
adminId: string;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
export interface SetTicketStatusRequest {
|
|
113
|
+
ticketId: string;
|
|
114
|
+
status: string;
|
|
115
|
+
adminId: string;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export interface TicketsListResponse {
|
|
119
|
+
items: Ticket[];
|
|
120
|
+
total: number;
|
|
121
|
+
page: number;
|
|
122
|
+
limit: number;
|
|
123
|
+
}
|
|
124
|
+
|
|
22
125
|
export const SUPPORT_V1_PACKAGE_NAME = "support.v1";
|
|
23
126
|
|
|
24
127
|
/**
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
* API later. Replace Ping with real RPCs when support functionality is built.
|
|
128
|
+
* Support ticket system (G1). Enums as strings matching the DB
|
|
129
|
+
* (status OPEN|PENDING|IN_PROGRESS|RESOLVED|CLOSED; category/priority).
|
|
28
130
|
*/
|
|
29
131
|
|
|
30
132
|
export interface SupportServiceClient {
|
|
133
|
+
/** health */
|
|
134
|
+
|
|
31
135
|
ping(request: PingRequest): Observable<PingResponse>;
|
|
136
|
+
|
|
137
|
+
/** user */
|
|
138
|
+
|
|
139
|
+
createTicket(request: CreateTicketRequest): Observable<Ticket>;
|
|
140
|
+
|
|
141
|
+
getTicket(request: GetTicketRequest): Observable<TicketWithMessages>;
|
|
142
|
+
|
|
143
|
+
listMyTickets(request: ListMyTicketsRequest): Observable<TicketsListResponse>;
|
|
144
|
+
|
|
145
|
+
replyTicket(request: ReplyTicketRequest): Observable<TicketMessage>;
|
|
146
|
+
|
|
147
|
+
closeTicket(request: CloseTicketRequest): Observable<Ticket>;
|
|
148
|
+
|
|
149
|
+
/** staff/admin */
|
|
150
|
+
|
|
151
|
+
listTickets(request: ListTicketsRequest): Observable<TicketsListResponse>;
|
|
152
|
+
|
|
153
|
+
assignTicket(request: AssignTicketRequest): Observable<Ticket>;
|
|
154
|
+
|
|
155
|
+
setTicketStatus(request: SetTicketStatusRequest): Observable<Ticket>;
|
|
32
156
|
}
|
|
33
157
|
|
|
34
158
|
/**
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
* API later. Replace Ping with real RPCs when support functionality is built.
|
|
159
|
+
* Support ticket system (G1). Enums as strings matching the DB
|
|
160
|
+
* (status OPEN|PENDING|IN_PROGRESS|RESOLVED|CLOSED; category/priority).
|
|
38
161
|
*/
|
|
39
162
|
|
|
40
163
|
export interface SupportServiceController {
|
|
164
|
+
/** health */
|
|
165
|
+
|
|
41
166
|
ping(request: PingRequest): Promise<PingResponse> | Observable<PingResponse> | PingResponse;
|
|
167
|
+
|
|
168
|
+
/** user */
|
|
169
|
+
|
|
170
|
+
createTicket(request: CreateTicketRequest): Promise<Ticket> | Observable<Ticket> | Ticket;
|
|
171
|
+
|
|
172
|
+
getTicket(
|
|
173
|
+
request: GetTicketRequest,
|
|
174
|
+
): Promise<TicketWithMessages> | Observable<TicketWithMessages> | TicketWithMessages;
|
|
175
|
+
|
|
176
|
+
listMyTickets(
|
|
177
|
+
request: ListMyTicketsRequest,
|
|
178
|
+
): Promise<TicketsListResponse> | Observable<TicketsListResponse> | TicketsListResponse;
|
|
179
|
+
|
|
180
|
+
replyTicket(request: ReplyTicketRequest): Promise<TicketMessage> | Observable<TicketMessage> | TicketMessage;
|
|
181
|
+
|
|
182
|
+
closeTicket(request: CloseTicketRequest): Promise<Ticket> | Observable<Ticket> | Ticket;
|
|
183
|
+
|
|
184
|
+
/** staff/admin */
|
|
185
|
+
|
|
186
|
+
listTickets(
|
|
187
|
+
request: ListTicketsRequest,
|
|
188
|
+
): Promise<TicketsListResponse> | Observable<TicketsListResponse> | TicketsListResponse;
|
|
189
|
+
|
|
190
|
+
assignTicket(request: AssignTicketRequest): Promise<Ticket> | Observable<Ticket> | Ticket;
|
|
191
|
+
|
|
192
|
+
setTicketStatus(request: SetTicketStatusRequest): Promise<Ticket> | Observable<Ticket> | Ticket;
|
|
42
193
|
}
|
|
43
194
|
|
|
44
195
|
export function SupportServiceControllerMethods() {
|
|
45
196
|
return function (constructor: Function) {
|
|
46
|
-
const grpcMethods: string[] = [
|
|
197
|
+
const grpcMethods: string[] = [
|
|
198
|
+
"ping",
|
|
199
|
+
"createTicket",
|
|
200
|
+
"getTicket",
|
|
201
|
+
"listMyTickets",
|
|
202
|
+
"replyTicket",
|
|
203
|
+
"closeTicket",
|
|
204
|
+
"listTickets",
|
|
205
|
+
"assignTicket",
|
|
206
|
+
"setTicketStatus",
|
|
207
|
+
];
|
|
47
208
|
for (const method of grpcMethods) {
|
|
48
209
|
const descriptor: any = Reflect.getOwnPropertyDescriptor(constructor.prototype, method);
|
|
49
210
|
GrpcMethod("SupportService", method)(constructor.prototype[method], method, descriptor);
|
package/package.json
CHANGED
package/proto/products.proto
CHANGED
|
@@ -210,6 +210,7 @@ message FindMyRequest {
|
|
|
210
210
|
message FindOneRequest {
|
|
211
211
|
string id = 1;
|
|
212
212
|
string viewer_user_id = 2; // optional — to compute is_favorited etc.
|
|
213
|
+
string viewer_key = 3; // dedup key for view counting (userId or hashed ip+ua)
|
|
213
214
|
}
|
|
214
215
|
|
|
215
216
|
message RemoveProductRequest {
|
package/proto/support.proto
CHANGED
|
@@ -2,18 +2,117 @@ syntax = "proto3";
|
|
|
2
2
|
|
|
3
3
|
package support.v1;
|
|
4
4
|
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
// API later. Replace Ping with real RPCs when support functionality is built.
|
|
5
|
+
// Support ticket system (G1). Enums as strings matching the DB
|
|
6
|
+
// (status OPEN|PENDING|IN_PROGRESS|RESOLVED|CLOSED; category/priority).
|
|
8
7
|
service SupportService {
|
|
9
|
-
rpc Ping(PingRequest) returns (PingResponse);
|
|
8
|
+
rpc Ping(PingRequest) returns (PingResponse); // health
|
|
9
|
+
|
|
10
|
+
// user
|
|
11
|
+
rpc CreateTicket(CreateTicketRequest) returns (Ticket);
|
|
12
|
+
rpc GetTicket(GetTicketRequest) returns (TicketWithMessages);
|
|
13
|
+
rpc ListMyTickets(ListMyTicketsRequest) returns (TicketsListResponse);
|
|
14
|
+
rpc ReplyTicket(ReplyTicketRequest) returns (TicketMessage);
|
|
15
|
+
rpc CloseTicket(CloseTicketRequest) returns (Ticket);
|
|
16
|
+
|
|
17
|
+
// staff/admin
|
|
18
|
+
rpc ListTickets(ListTicketsRequest) returns (TicketsListResponse);
|
|
19
|
+
rpc AssignTicket(AssignTicketRequest) returns (Ticket);
|
|
20
|
+
rpc SetTicketStatus(SetTicketStatusRequest) returns (Ticket);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
message PingRequest { string message = 1; }
|
|
24
|
+
message PingResponse { bool ok = 1; string message = 2; }
|
|
25
|
+
|
|
26
|
+
message Ticket {
|
|
27
|
+
string id = 1;
|
|
28
|
+
string author_id = 2;
|
|
29
|
+
string subject = 3;
|
|
30
|
+
string category = 4; // GENERAL|PAYMENT|WITHDRAWAL|PRODUCT|ACCOUNT|ABUSE|OTHER
|
|
31
|
+
string status = 5; // OPEN|PENDING|IN_PROGRESS|RESOLVED|CLOSED
|
|
32
|
+
string priority = 6; // LOW|NORMAL|HIGH|URGENT
|
|
33
|
+
string purchase_id = 7;
|
|
34
|
+
string withdrawal_id = 8;
|
|
35
|
+
string assignee_id = 9;
|
|
36
|
+
string last_message_at = 10;
|
|
37
|
+
string created_at = 11;
|
|
38
|
+
string updated_at = 12;
|
|
39
|
+
int32 messages_count = 13;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
message TicketMessage {
|
|
43
|
+
string id = 1;
|
|
44
|
+
string ticket_id = 2;
|
|
45
|
+
string author_id = 3;
|
|
46
|
+
string body = 4;
|
|
47
|
+
bool is_staff = 5;
|
|
48
|
+
bool is_internal = 6;
|
|
49
|
+
string created_at = 7;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
message TicketWithMessages {
|
|
53
|
+
Ticket ticket = 1;
|
|
54
|
+
repeated TicketMessage messages = 2;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
message CreateTicketRequest {
|
|
58
|
+
string author_id = 1;
|
|
59
|
+
string subject = 2;
|
|
60
|
+
string category = 3;
|
|
61
|
+
string body = 4; // first message
|
|
62
|
+
string purchase_id = 5; // optional
|
|
63
|
+
string withdrawal_id = 6; // optional
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
message GetTicketRequest {
|
|
67
|
+
string id = 1;
|
|
68
|
+
string requester_id = 2;
|
|
69
|
+
bool is_staff = 3; // staff see internal notes + any ticket
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
message ListMyTicketsRequest {
|
|
73
|
+
string author_id = 1;
|
|
74
|
+
string status = 2;
|
|
75
|
+
int32 page = 3;
|
|
76
|
+
int32 limit = 4;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
message ReplyTicketRequest {
|
|
80
|
+
string ticket_id = 1;
|
|
81
|
+
string author_id = 2;
|
|
82
|
+
string body = 3;
|
|
83
|
+
bool is_staff = 4;
|
|
84
|
+
bool is_internal = 5; // staff-only note
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
message CloseTicketRequest {
|
|
88
|
+
string ticket_id = 1;
|
|
89
|
+
string requester_id = 2;
|
|
90
|
+
bool is_staff = 3;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
message ListTicketsRequest {
|
|
94
|
+
string status = 1;
|
|
95
|
+
string category = 2;
|
|
96
|
+
string assignee_id = 3;
|
|
97
|
+
int32 page = 4;
|
|
98
|
+
int32 limit = 5;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
message AssignTicketRequest {
|
|
102
|
+
string ticket_id = 1;
|
|
103
|
+
string assignee_id = 2; // empty = unassign
|
|
104
|
+
string admin_id = 3;
|
|
10
105
|
}
|
|
11
106
|
|
|
12
|
-
message
|
|
13
|
-
string
|
|
107
|
+
message SetTicketStatusRequest {
|
|
108
|
+
string ticket_id = 1;
|
|
109
|
+
string status = 2;
|
|
110
|
+
string admin_id = 3;
|
|
14
111
|
}
|
|
15
112
|
|
|
16
|
-
message
|
|
17
|
-
|
|
18
|
-
|
|
113
|
+
message TicketsListResponse {
|
|
114
|
+
repeated Ticket items = 1;
|
|
115
|
+
int32 total = 2;
|
|
116
|
+
int32 page = 3;
|
|
117
|
+
int32 limit = 4;
|
|
19
118
|
}
|