@requ1emz/contracts 1.0.43 → 2.0.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/dist/proto/paths.d.ts +1 -0
- package/dist/proto/paths.js +1 -0
- package/gen/budget.ts +312 -0
- package/gen/user.ts +1 -0
- package/package.json +1 -1
- package/proto/budget.proto +168 -0
- package/proto/user.proto +1 -0
package/dist/proto/paths.d.ts
CHANGED
package/dist/proto/paths.js
CHANGED
|
@@ -7,4 +7,5 @@ exports.PROTO_PATHS = {
|
|
|
7
7
|
USER: (0, path_1.join)(__dirname, "../../proto/user.proto"),
|
|
8
8
|
FAMILY: (0, path_1.join)(__dirname, "../../proto/family.proto"),
|
|
9
9
|
NOTIFICATION: (0, path_1.join)(__dirname, "../../proto/notification.proto"),
|
|
10
|
+
BUDGET: (0, path_1.join)(__dirname, "../../proto/budget.proto"),
|
|
10
11
|
};
|
package/gen/budget.ts
ADDED
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
|
|
2
|
+
// versions:
|
|
3
|
+
// protoc-gen-ts_proto v2.10.1
|
|
4
|
+
// protoc v3.21.12
|
|
5
|
+
// source: budget.proto
|
|
6
|
+
|
|
7
|
+
/* eslint-disable */
|
|
8
|
+
import { GrpcMethod, GrpcStreamMethod } from "@nestjs/microservices";
|
|
9
|
+
import { Observable } from "rxjs";
|
|
10
|
+
|
|
11
|
+
export const protobufPackage = "budget.v1";
|
|
12
|
+
|
|
13
|
+
export interface CreateAccountRequest {
|
|
14
|
+
familyId: string;
|
|
15
|
+
name: string;
|
|
16
|
+
goalId: string;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface GetAccountsRequest {
|
|
20
|
+
familyId: string;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface GetAccountsResponse {
|
|
24
|
+
accounts: AccountResponse[];
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export interface DeleteAccountRequest {
|
|
28
|
+
id: string;
|
|
29
|
+
familyId: string;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export interface DeleteAccountResponse {
|
|
33
|
+
status: boolean;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface AccountResponse {
|
|
37
|
+
id: string;
|
|
38
|
+
familyId: string;
|
|
39
|
+
name: string;
|
|
40
|
+
balance: string;
|
|
41
|
+
goalId: string;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export interface CreateTransactionRequest {
|
|
45
|
+
accountId: string;
|
|
46
|
+
userId: string;
|
|
47
|
+
type: string;
|
|
48
|
+
amount: string;
|
|
49
|
+
categoryId: string;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export interface GetTransactionsRequest {
|
|
53
|
+
accountId: string;
|
|
54
|
+
categoryId: string;
|
|
55
|
+
type: string;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export interface GetTransactionsResponse {
|
|
59
|
+
transactions: TransactionResponse[];
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export interface DeleteTransactionRequest {
|
|
63
|
+
id: string;
|
|
64
|
+
accountId: string;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export interface DeleteTransactionResponse {
|
|
68
|
+
status: boolean;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export interface TransactionResponse {
|
|
72
|
+
id: string;
|
|
73
|
+
accountId: string;
|
|
74
|
+
userId: string;
|
|
75
|
+
type: string;
|
|
76
|
+
amount: string;
|
|
77
|
+
categoryId: string;
|
|
78
|
+
createdAt: string;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export interface CreateCategoryRequest {
|
|
82
|
+
name: string;
|
|
83
|
+
type: string;
|
|
84
|
+
isGlobal: boolean;
|
|
85
|
+
familyId: string;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export interface GetCategoriesRequest {
|
|
89
|
+
familyId: string;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export interface GetCategoriesResponse {
|
|
93
|
+
categories: CategoryResponse[];
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export interface DeleteCategoryRequest {
|
|
97
|
+
id: string;
|
|
98
|
+
familyId: string;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export interface DeleteCategoryResponse {
|
|
102
|
+
status: boolean;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
export interface CategoryResponse {
|
|
106
|
+
id: string;
|
|
107
|
+
name: string;
|
|
108
|
+
type: string;
|
|
109
|
+
isGlobal: boolean;
|
|
110
|
+
familyId: string;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
export interface CreateGoalRequest {
|
|
114
|
+
familyId: string;
|
|
115
|
+
name: string;
|
|
116
|
+
targetAmount: string;
|
|
117
|
+
deadline: string;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export interface GetGoalsRequest {
|
|
121
|
+
familyId: string;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
export interface GetGoalsResponse {
|
|
125
|
+
goals: GoalResponse[];
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
export interface DeleteGoalRequest {
|
|
129
|
+
id: string;
|
|
130
|
+
familyId: string;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
export interface DeleteGoalResponse {
|
|
134
|
+
status: boolean;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
export interface GoalResponse {
|
|
138
|
+
id: string;
|
|
139
|
+
familyId: string;
|
|
140
|
+
name: string;
|
|
141
|
+
targetAmount: string;
|
|
142
|
+
currentAmount: string;
|
|
143
|
+
status: string;
|
|
144
|
+
deadline: string;
|
|
145
|
+
createdAt: string;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
export const BUDGET_V1_PACKAGE_NAME = "budget.v1";
|
|
149
|
+
|
|
150
|
+
/** Account */
|
|
151
|
+
|
|
152
|
+
export interface AccountServiceClient {
|
|
153
|
+
createAccount(request: CreateAccountRequest): Observable<AccountResponse>;
|
|
154
|
+
|
|
155
|
+
getAccounts(request: GetAccountsRequest): Observable<GetAccountsResponse>;
|
|
156
|
+
|
|
157
|
+
deleteAccount(request: DeleteAccountRequest): Observable<DeleteAccountResponse>;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/** Account */
|
|
161
|
+
|
|
162
|
+
export interface AccountServiceController {
|
|
163
|
+
createAccount(
|
|
164
|
+
request: CreateAccountRequest,
|
|
165
|
+
): Promise<AccountResponse> | Observable<AccountResponse> | AccountResponse;
|
|
166
|
+
|
|
167
|
+
getAccounts(
|
|
168
|
+
request: GetAccountsRequest,
|
|
169
|
+
): Promise<GetAccountsResponse> | Observable<GetAccountsResponse> | GetAccountsResponse;
|
|
170
|
+
|
|
171
|
+
deleteAccount(
|
|
172
|
+
request: DeleteAccountRequest,
|
|
173
|
+
): Promise<DeleteAccountResponse> | Observable<DeleteAccountResponse> | DeleteAccountResponse;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
export function AccountServiceControllerMethods() {
|
|
177
|
+
return function (constructor: Function) {
|
|
178
|
+
const grpcMethods: string[] = ["createAccount", "getAccounts", "deleteAccount"];
|
|
179
|
+
for (const method of grpcMethods) {
|
|
180
|
+
const descriptor: any = Reflect.getOwnPropertyDescriptor(constructor.prototype, method);
|
|
181
|
+
GrpcMethod("AccountService", method)(constructor.prototype[method], method, descriptor);
|
|
182
|
+
}
|
|
183
|
+
const grpcStreamMethods: string[] = [];
|
|
184
|
+
for (const method of grpcStreamMethods) {
|
|
185
|
+
const descriptor: any = Reflect.getOwnPropertyDescriptor(constructor.prototype, method);
|
|
186
|
+
GrpcStreamMethod("AccountService", method)(constructor.prototype[method], method, descriptor);
|
|
187
|
+
}
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
export const ACCOUNT_SERVICE_NAME = "AccountService";
|
|
192
|
+
|
|
193
|
+
/** Transaction */
|
|
194
|
+
|
|
195
|
+
export interface TransactionServiceClient {
|
|
196
|
+
createTransaction(request: CreateTransactionRequest): Observable<TransactionResponse>;
|
|
197
|
+
|
|
198
|
+
getTransactions(request: GetTransactionsRequest): Observable<GetTransactionsResponse>;
|
|
199
|
+
|
|
200
|
+
deleteTransaction(request: DeleteTransactionRequest): Observable<DeleteTransactionResponse>;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/** Transaction */
|
|
204
|
+
|
|
205
|
+
export interface TransactionServiceController {
|
|
206
|
+
createTransaction(
|
|
207
|
+
request: CreateTransactionRequest,
|
|
208
|
+
): Promise<TransactionResponse> | Observable<TransactionResponse> | TransactionResponse;
|
|
209
|
+
|
|
210
|
+
getTransactions(
|
|
211
|
+
request: GetTransactionsRequest,
|
|
212
|
+
): Promise<GetTransactionsResponse> | Observable<GetTransactionsResponse> | GetTransactionsResponse;
|
|
213
|
+
|
|
214
|
+
deleteTransaction(
|
|
215
|
+
request: DeleteTransactionRequest,
|
|
216
|
+
): Promise<DeleteTransactionResponse> | Observable<DeleteTransactionResponse> | DeleteTransactionResponse;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
export function TransactionServiceControllerMethods() {
|
|
220
|
+
return function (constructor: Function) {
|
|
221
|
+
const grpcMethods: string[] = ["createTransaction", "getTransactions", "deleteTransaction"];
|
|
222
|
+
for (const method of grpcMethods) {
|
|
223
|
+
const descriptor: any = Reflect.getOwnPropertyDescriptor(constructor.prototype, method);
|
|
224
|
+
GrpcMethod("TransactionService", method)(constructor.prototype[method], method, descriptor);
|
|
225
|
+
}
|
|
226
|
+
const grpcStreamMethods: string[] = [];
|
|
227
|
+
for (const method of grpcStreamMethods) {
|
|
228
|
+
const descriptor: any = Reflect.getOwnPropertyDescriptor(constructor.prototype, method);
|
|
229
|
+
GrpcStreamMethod("TransactionService", method)(constructor.prototype[method], method, descriptor);
|
|
230
|
+
}
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
export const TRANSACTION_SERVICE_NAME = "TransactionService";
|
|
235
|
+
|
|
236
|
+
export interface CategoryServiceClient {
|
|
237
|
+
createCategory(request: CreateCategoryRequest): Observable<CategoryResponse>;
|
|
238
|
+
|
|
239
|
+
getCategories(request: GetCategoriesRequest): Observable<GetCategoriesResponse>;
|
|
240
|
+
|
|
241
|
+
deleteCategory(request: DeleteCategoryRequest): Observable<DeleteCategoryResponse>;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
export interface CategoryServiceController {
|
|
245
|
+
createCategory(
|
|
246
|
+
request: CreateCategoryRequest,
|
|
247
|
+
): Promise<CategoryResponse> | Observable<CategoryResponse> | CategoryResponse;
|
|
248
|
+
|
|
249
|
+
getCategories(
|
|
250
|
+
request: GetCategoriesRequest,
|
|
251
|
+
): Promise<GetCategoriesResponse> | Observable<GetCategoriesResponse> | GetCategoriesResponse;
|
|
252
|
+
|
|
253
|
+
deleteCategory(
|
|
254
|
+
request: DeleteCategoryRequest,
|
|
255
|
+
): Promise<DeleteCategoryResponse> | Observable<DeleteCategoryResponse> | DeleteCategoryResponse;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
export function CategoryServiceControllerMethods() {
|
|
259
|
+
return function (constructor: Function) {
|
|
260
|
+
const grpcMethods: string[] = ["createCategory", "getCategories", "deleteCategory"];
|
|
261
|
+
for (const method of grpcMethods) {
|
|
262
|
+
const descriptor: any = Reflect.getOwnPropertyDescriptor(constructor.prototype, method);
|
|
263
|
+
GrpcMethod("CategoryService", method)(constructor.prototype[method], method, descriptor);
|
|
264
|
+
}
|
|
265
|
+
const grpcStreamMethods: string[] = [];
|
|
266
|
+
for (const method of grpcStreamMethods) {
|
|
267
|
+
const descriptor: any = Reflect.getOwnPropertyDescriptor(constructor.prototype, method);
|
|
268
|
+
GrpcStreamMethod("CategoryService", method)(constructor.prototype[method], method, descriptor);
|
|
269
|
+
}
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
export const CATEGORY_SERVICE_NAME = "CategoryService";
|
|
274
|
+
|
|
275
|
+
/** Goal */
|
|
276
|
+
|
|
277
|
+
export interface GoalServiceClient {
|
|
278
|
+
createGoal(request: CreateGoalRequest): Observable<GoalResponse>;
|
|
279
|
+
|
|
280
|
+
getGoals(request: GetGoalsRequest): Observable<GetGoalsResponse>;
|
|
281
|
+
|
|
282
|
+
deleteGoal(request: DeleteGoalRequest): Observable<DeleteGoalResponse>;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
/** Goal */
|
|
286
|
+
|
|
287
|
+
export interface GoalServiceController {
|
|
288
|
+
createGoal(request: CreateGoalRequest): Promise<GoalResponse> | Observable<GoalResponse> | GoalResponse;
|
|
289
|
+
|
|
290
|
+
getGoals(request: GetGoalsRequest): Promise<GetGoalsResponse> | Observable<GetGoalsResponse> | GetGoalsResponse;
|
|
291
|
+
|
|
292
|
+
deleteGoal(
|
|
293
|
+
request: DeleteGoalRequest,
|
|
294
|
+
): Promise<DeleteGoalResponse> | Observable<DeleteGoalResponse> | DeleteGoalResponse;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
export function GoalServiceControllerMethods() {
|
|
298
|
+
return function (constructor: Function) {
|
|
299
|
+
const grpcMethods: string[] = ["createGoal", "getGoals", "deleteGoal"];
|
|
300
|
+
for (const method of grpcMethods) {
|
|
301
|
+
const descriptor: any = Reflect.getOwnPropertyDescriptor(constructor.prototype, method);
|
|
302
|
+
GrpcMethod("GoalService", method)(constructor.prototype[method], method, descriptor);
|
|
303
|
+
}
|
|
304
|
+
const grpcStreamMethods: string[] = [];
|
|
305
|
+
for (const method of grpcStreamMethods) {
|
|
306
|
+
const descriptor: any = Reflect.getOwnPropertyDescriptor(constructor.prototype, method);
|
|
307
|
+
GrpcStreamMethod("GoalService", method)(constructor.prototype[method], method, descriptor);
|
|
308
|
+
}
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
export const GOAL_SERVICE_NAME = "GoalService";
|
package/gen/user.ts
CHANGED
package/package.json
CHANGED
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
syntax = "proto3";
|
|
2
|
+
|
|
3
|
+
package budget.v1;
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
// Account
|
|
7
|
+
service AccountService {
|
|
8
|
+
rpc CreateAccount (CreateAccountRequest) returns (AccountResponse);
|
|
9
|
+
rpc GetAccounts (GetAccountsRequest) returns (GetAccountsResponse);
|
|
10
|
+
rpc DeleteAccount (DeleteAccountRequest) returns (DeleteAccountResponse);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
message CreateAccountRequest {
|
|
14
|
+
string family_id = 1;
|
|
15
|
+
string name = 2;
|
|
16
|
+
string goal_id = 3;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
message GetAccountsRequest {
|
|
20
|
+
string family_id = 1;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
message GetAccountsResponse {
|
|
24
|
+
repeated AccountResponse accounts = 1;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
message DeleteAccountRequest {
|
|
28
|
+
string id = 1;
|
|
29
|
+
string family_id = 2;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
message DeleteAccountResponse {
|
|
33
|
+
bool status = 1;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
message AccountResponse {
|
|
37
|
+
string id = 1;
|
|
38
|
+
string family_id = 2;
|
|
39
|
+
string name = 3;
|
|
40
|
+
string balance = 4;
|
|
41
|
+
string goal_id = 5;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Transaction
|
|
45
|
+
service TransactionService {
|
|
46
|
+
rpc CreateTransaction (CreateTransactionRequest) returns (TransactionResponse);
|
|
47
|
+
rpc GetTransactions (GetTransactionsRequest) returns (GetTransactionsResponse);
|
|
48
|
+
rpc DeleteTransaction (DeleteTransactionRequest) returns (DeleteTransactionResponse);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
message CreateTransactionRequest {
|
|
52
|
+
string account_id = 1;
|
|
53
|
+
string user_id = 2;
|
|
54
|
+
string type = 3;
|
|
55
|
+
string amount = 4;
|
|
56
|
+
string category_id = 5;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
message GetTransactionsRequest {
|
|
60
|
+
string account_id = 1;
|
|
61
|
+
string category_id = 2;
|
|
62
|
+
string type = 3;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
message GetTransactionsResponse {
|
|
66
|
+
repeated TransactionResponse transactions = 1;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
message DeleteTransactionRequest {
|
|
70
|
+
string id = 1;
|
|
71
|
+
string account_id = 2;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
message DeleteTransactionResponse {
|
|
75
|
+
bool status = 1;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
message TransactionResponse {
|
|
79
|
+
string id = 1;
|
|
80
|
+
string account_id = 2;
|
|
81
|
+
string user_id = 3;
|
|
82
|
+
string type = 4;
|
|
83
|
+
string amount = 5;
|
|
84
|
+
string category_id = 6;
|
|
85
|
+
string created_at = 7;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
//Category
|
|
89
|
+
|
|
90
|
+
service CategoryService {
|
|
91
|
+
rpc CreateCategory (CreateCategoryRequest) returns (CategoryResponse);
|
|
92
|
+
rpc GetCategories (GetCategoriesRequest) returns (GetCategoriesResponse);
|
|
93
|
+
rpc DeleteCategory (DeleteCategoryRequest) returns (DeleteCategoryResponse);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
message CreateCategoryRequest {
|
|
97
|
+
string name = 1;
|
|
98
|
+
string type = 2;
|
|
99
|
+
bool is_global = 3;
|
|
100
|
+
string family_id = 4;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
message GetCategoriesRequest {
|
|
104
|
+
string family_id = 1;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
message GetCategoriesResponse {
|
|
108
|
+
repeated CategoryResponse categories = 1;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
message DeleteCategoryRequest {
|
|
112
|
+
string id = 1;
|
|
113
|
+
string family_id = 2;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
message DeleteCategoryResponse {
|
|
117
|
+
bool status = 1;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
message CategoryResponse {
|
|
121
|
+
string id = 1;
|
|
122
|
+
string name = 2;
|
|
123
|
+
string type = 3;
|
|
124
|
+
bool is_global = 4;
|
|
125
|
+
string family_id = 5;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
//Goal
|
|
129
|
+
service GoalService {
|
|
130
|
+
rpc CreateGoal (CreateGoalRequest) returns (GoalResponse);
|
|
131
|
+
rpc GetGoals (GetGoalsRequest) returns (GetGoalsResponse);
|
|
132
|
+
rpc DeleteGoal (DeleteGoalRequest) returns (DeleteGoalResponse);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
message CreateGoalRequest {
|
|
136
|
+
string family_id = 1;
|
|
137
|
+
string name = 2;
|
|
138
|
+
string target_amount = 3;
|
|
139
|
+
string deadline = 4;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
message GetGoalsRequest {
|
|
143
|
+
string family_id = 1;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
message GetGoalsResponse {
|
|
147
|
+
repeated GoalResponse goals = 1;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
message DeleteGoalRequest {
|
|
151
|
+
string id = 1;
|
|
152
|
+
string family_id = 2;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
message DeleteGoalResponse {
|
|
156
|
+
bool status = 1;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
message GoalResponse {
|
|
160
|
+
string id = 1;
|
|
161
|
+
string family_id = 2;
|
|
162
|
+
string name = 3;
|
|
163
|
+
string target_amount = 4;
|
|
164
|
+
string current_amount = 5;
|
|
165
|
+
string status = 6;
|
|
166
|
+
string deadline = 7;
|
|
167
|
+
string created_at = 8;
|
|
168
|
+
}
|